From 1bea03dfb1d8887c3e170735b4e78c68e7a0ff60 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sat, 28 Feb 2004 00:48:57 +0000 Subject: [PATCH] And more airplane work! - merged STL patch from Nicolas Tardieu. This patch permits to create an real elementary surface for each STL face. Until we have some code to directly remesh the STL data (which would be much nicer and cheaper), this is very useful. We can finally use STL representations to create meshable volume models. Thanks Nicolas ! - new option to color the mesh by physical entities (if an element belongs to multiple physicals, we use the first one) - additional cleanup of the mesh drawing code - big cleanup of the geometry creation section in the parser: * removed horrible Geo/DataBase.cpp * fixed all List-related memory leaks (a lot!) * added tests to check if we don't try to recreate existing entities (this should prevent many weird bugs due to incorrect input files) - fixed LineLoop/EdgeLoop memory leaks - many small fixes all over the place --- Common/Context.h | 1 + Common/DefaultOptions.h | 6 +- Common/GmshUI.h | 6 - Common/Makefile | 5 +- Common/Options.cpp | 17 +- Common/Options.h | 2 + Common/Visibility.cpp | 3 +- DataStr/Tools.cpp | 17 +- DataStr/Tools.h | 17 +- Fltk/Callbacks.cpp | 8 +- Fltk/GUI.cpp | 15 +- Fltk/GUI.h | 2 +- Fltk/Main.cpp | 3 +- Fltk/Makefile | 24 +- Geo/CAD.cpp | 37 +- Geo/CAD.h | 1 + Geo/DataBase.cpp | 631 -- Geo/DataBase.h | 54 - Geo/{Verif.cpp => ExtractContour.cpp} | 3 +- Geo/{Verif.h => ExtractContour.h} | 8 +- Geo/Geo.cpp | 3 +- Geo/GeoUtils.cpp | 143 + Geo/GeoUtils.h | 30 + Geo/Makefile | 32 +- Geo/StepGeomDatabase.cpp | 81 +- Graphics/Geom.cpp | 12 +- Graphics/Makefile | 6 +- Graphics/Mesh.cpp | 163 +- Graphics/PostElement.cpp | 21 +- Makefile | 6 +- Mesh/2D_Mesh.cpp | 7 +- Mesh/Create.cpp | 145 +- Mesh/Create.h | 77 +- Mesh/Generator.cpp | 6 +- Mesh/Interpolation.cpp | 22 +- Mesh/Interpolation.h | 8 - Mesh/Makefile | 22 +- Mesh/Mesh.h | 5 +- Mesh/Nurbs.cpp | 220 +- Mesh/Nurbs.h | 37 + Mesh/Read_Mesh.cpp | 55 +- Mesh/STL.cpp | 236 +- Mesh/STL.h | 30 +- Mesh/Vertex.cpp | 3 +- Parser/Gmsh.l | 3 +- Parser/Gmsh.tab.cpp | 9794 +++++++++++++------------ Parser/Gmsh.y | 1654 +++-- Parser/Gmsh.yy.cpp | 431 +- Parser/Makefile | 13 +- TODO | 19 +- benchmarks/2d/machine/Rotor.geo | 4 +- benchmarks/2d/machine/Rotor3kW.geo | 3 +- benchmarks/2d/machine/Stator.geo | 4 +- benchmarks/2d/machine2/Stator1.geo | 2 +- benchmarks/3d/p19.geo | 4 +- benchmarks/3d/solid1.geo | 88 +- benchmarks/3d/solid2.geo | 10 +- benchmarks/3d/surface3113.geo | 2 - benchmarks/misc/500views.geo | 5 +- benchmarks/stl/Coupe.stl.gz | Bin 0 -> 23465 bytes benchmarks/stl/TwoObjects.stl.gz | Bin 0 -> 44937 bytes doc/CREDITS | 9 +- doc/VERSIONS | 9 +- doc/texinfo/gmsh.texi | 12 +- doc/texinfo/opt_geometry.texi | 10 + doc/texinfo/opt_mesh.texi | 2 +- 66 files changed, 7635 insertions(+), 6673 deletions(-) delete mode 100644 Geo/DataBase.cpp delete mode 100644 Geo/DataBase.h rename Geo/{Verif.cpp => ExtractContour.cpp} (98%) rename Geo/{Verif.h => ExtractContour.h} (83%) create mode 100644 Geo/GeoUtils.cpp create mode 100644 Geo/GeoUtils.h create mode 100644 Mesh/Nurbs.h create mode 100644 benchmarks/stl/Coupe.stl.gz create mode 100644 benchmarks/stl/TwoObjects.stl.gz diff --git a/Common/Context.h b/Common/Context.h index 1815a994ba..721763b476 100644 --- a/Common/Context.h +++ b/Common/Context.h @@ -153,6 +153,7 @@ public : double scaling_factor; int color_scheme ; int auto_coherence; + int stl_create_elementary, stl_create_physical; } geom; // mesh options diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index c504776755..c739c49a17 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -682,6 +682,10 @@ StringXNumber GeometryOptions_Number[] = { { F|O, "ScalingFactor" , opt_geometry_scaling_factor , 1.0 , "Global geometry scaling factor" }, + { F|O, "StlCreateElementary" , opt_geometry_stl_create_elementary , 1. , + "Treat each STL input face as a new geometrical surface" }, + { F|O, "StlCreatePhysical" , opt_geometry_stl_create_physical , 1. , + "Automatically create physical entities when importing STL faces as geometrical surfaces" }, { F|O, "Surfaces" , opt_geometry_surfaces , 0. , "Display geometry surfaces?" }, { F|O, "SurfacesNumbers" , opt_geometry_surfaces_num , 0. , @@ -707,7 +711,7 @@ StringXNumber MeshOptions_Number[] = { { F|O, "CharacteristicLengthFactor" , opt_mesh_lc_factor , 1.0 , "Factor applied to all characteristic lengths (and background meshes)" }, { F|O, "ColorCarousel" , opt_mesh_color_carousel , 1. , - "Use a `color by region' coloring scheme (0=no, 1=by geometrical entity, 2=by partition)" }, + "Color mesh by region? (0=no, 1=by elementary entity, 2=by physical entity, 3=by partition)" }, { F|O, "ColorScheme" , opt_mesh_color_scheme , 0. , "Default mesh color scheme (0, 1 or 2)" }, { F|O, "ConstrainedBackgroundMesh" , opt_mesh_constrained_bgmesh, 0. , diff --git a/Common/GmshUI.h b/Common/GmshUI.h index f81225abd0..0e501fc37f 100644 --- a/Common/GmshUI.h +++ b/Common/GmshUI.h @@ -20,12 +20,6 @@ // // Please report all bugs and problems to <gmsh@geuz.org>. -#if defined(WIN32) -# include <windows.h> -# include <GL/gl.h> -# include <GL/glu.h> -#endif - #if defined(HAVE_FLTK) # include <FL/Fl.H> # include <FL/gl.h> diff --git a/Common/Makefile b/Common/Makefile index ec6dabe09c..479bec04e0 100644 --- a/Common/Makefile +++ b/Common/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.48 2004-02-07 01:40:17 geuzaine Exp $ +# $Id: Makefile,v 1.49 2004-02-28 00:48:47 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -90,8 +90,7 @@ Visibility.o: Visibility.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h ../Geo/DataBase.h ../Parser/Parser.h \ - Visibility.h + ../Mesh/Metric.h ../Mesh/Matrix.h ../Parser/Parser.h Visibility.h Trackball.o: Trackball.cpp Trackball.h License.o: License.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h diff --git a/Common/Options.cpp b/Common/Options.cpp index 7d9f69554c..7d77277f0a 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1,4 +1,4 @@ -// $Id: Options.cpp,v 1.135 2004-02-20 17:57:59 geuzaine Exp $ +// $Id: Options.cpp,v 1.136 2004-02-28 00:48:47 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -2989,6 +2989,19 @@ double opt_geometry_color_scheme(OPT_ARGS_NUM) return CTX.geom.color_scheme; } +double opt_geometry_stl_create_elementary(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) + CTX.geom.stl_create_elementary = (int)val; + return CTX.geom.stl_create_elementary; +} + +double opt_geometry_stl_create_physical(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) + CTX.geom.stl_create_physical = (int)val; + return CTX.geom.stl_create_physical; +} double opt_mesh_quality(OPT_ARGS_NUM) { @@ -3490,6 +3503,7 @@ double opt_mesh_color_carousel(OPT_ARGS_NUM) WID->mesh_butt[17]->value(CTX.mesh.color_carousel==0); WID->mesh_butt[18]->value(CTX.mesh.color_carousel==1); WID->mesh_butt[19]->value(CTX.mesh.color_carousel==2); + WID->mesh_butt[20]->value(CTX.mesh.color_carousel==3); } #endif return CTX.mesh.color_carousel; @@ -3564,7 +3578,6 @@ double opt_mesh_display_lists(OPT_ARGS_NUM) return CTX.mesh.display_lists; } - double opt_solver_client_server(OPT_ARGS_NUM) { #if defined(HAVE_FLTK) diff --git a/Common/Options.h b/Common/Options.h index f5941bd458..4b730fd307 100644 --- a/Common/Options.h +++ b/Common/Options.h @@ -336,6 +336,8 @@ double opt_geometry_circle_warning(OPT_ARGS_NUM); double opt_geometry_extrude_spline_points(OPT_ARGS_NUM); double opt_geometry_scaling_factor(OPT_ARGS_NUM); double opt_geometry_color_scheme(OPT_ARGS_NUM); +double opt_geometry_stl_create_elementary(OPT_ARGS_NUM); +double opt_geometry_stl_create_physical(OPT_ARGS_NUM); double opt_mesh_quality(OPT_ARGS_NUM); double opt_mesh_normals(OPT_ARGS_NUM); double opt_mesh_tangents(OPT_ARGS_NUM); diff --git a/Common/Visibility.cpp b/Common/Visibility.cpp index f68bbd2c6f..13668d6de1 100644 --- a/Common/Visibility.cpp +++ b/Common/Visibility.cpp @@ -1,4 +1,4 @@ -// $Id: Visibility.cpp,v 1.6 2004-02-20 19:28:25 geuzaine Exp $ +// $Id: Visibility.cpp,v 1.7 2004-02-28 00:48:48 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -23,7 +23,6 @@ #include "Geo.h" #include "CAD.h" #include "Mesh.h" -#include "DataBase.h" #include "Parser.h" #include "Visibility.h" diff --git a/DataStr/Tools.cpp b/DataStr/Tools.cpp index 1930aad3b6..6e7fbe74d0 100644 --- a/DataStr/Tools.cpp +++ b/DataStr/Tools.cpp @@ -1,4 +1,4 @@ -// $Id: Tools.cpp,v 1.11 2004-02-07 01:40:17 geuzaine Exp $ +// $Id: Tools.cpp,v 1.12 2004-02-28 00:48:48 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -48,6 +48,21 @@ int fcmp_double(const void *a, const void *b) return 0; } +// List utilities + +List_T *ListOfDouble2ListOfInt(List_T *dList) +{ + int n = List_Nbr(dList); + List_T *iList = List_Create(n, n, sizeof(int)); + for(int i = 0; i < n; i++){ + double d; + List_Read(dList, i, &d); + int j = (int)d; + List_Add(iList, &j); + } + return iList; +} + // Tree -> List transfer List_T *pListeTransfert; diff --git a/DataStr/Tools.h b/DataStr/Tools.h index 4af70add57..8cfe053c83 100644 --- a/DataStr/Tools.h +++ b/DataStr/Tools.h @@ -27,15 +27,16 @@ int fcmp_int(const void *a, const void *b); int fcmp_absint(const void *a, const void *b); int fcmp_double(const void *a, const void *b); -List_T *Tree2List(Tree_T *pTree) ; +List_T *ListOfDouble2ListOfInt(List_T *dList); +List_T *Tree2List(Tree_T *pTree); -Tree_T *Tree_Duplique(Tree_T *pTree) ; -Tree_T *Tree_Union (Tree_T *pTreeA, Tree_T *pTreeB) ; -Tree_T *Tree_Soustraction(Tree_T *pTreeA, Tree_T *pTreeB) ; -Tree_T *Tree_Intersection(Tree_T *pTreeA, Tree_T *pTreeB) ; +Tree_T *Tree_Duplique(Tree_T *pTree); +Tree_T *Tree_Union(Tree_T *pTreeA, Tree_T *pTreeB); +Tree_T *Tree_Soustraction(Tree_T *pTreeA, Tree_T *pTreeB); +Tree_T *Tree_Intersection(Tree_T *pTreeA, Tree_T *pTreeB); -void Tree_Unit (Tree_T *pTreeA, Tree_T *pTreeB) ; -void Tree_Soustrait (Tree_T *pTreeA, Tree_T *pTreeB) ; -void Tree_Intersecte(Tree_T *pTreeA, Tree_T *pTreeB) ; +void Tree_Unit(Tree_T *pTreeA, Tree_T *pTreeB); +void Tree_Soustrait(Tree_T *pTreeA, Tree_T *pTreeB); +void Tree_Intersecte(Tree_T *pTreeA, Tree_T *pTreeB); #endif diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index b166fc927f..e6dc9a1069 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.205 2004-02-20 23:22:36 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.206 2004-02-28 00:48:48 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -29,7 +29,7 @@ #include "GmshUI.h" #include "Geo.h" #include "CAD.h" -#include "Verif.h" +#include "ExtractContour.h" #include "Mesh.h" #include "Draw.h" #include "Views.h" @@ -1073,7 +1073,9 @@ void mesh_options_ok_cb(CALLBACK_ARGS) opt_mesh_light(0, GMSH_SET, WID->mesh_butt[15]->value()); opt_mesh_color_carousel(0, GMSH_SET, WID->mesh_butt[17]->value()? 0 : - WID->mesh_butt[18]->value()? 1 : 2); + WID->mesh_butt[18]->value()? 1 : + WID->mesh_butt[19]->value()? 2 : + 3); opt_mesh_nb_smoothing(0, GMSH_SET, WID->mesh_value[0]->value()); opt_mesh_scaling_factor(0, GMSH_SET, WID->mesh_value[1]->value()); diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index 68f3d06a88..569df52fbf 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.273 2004-02-22 20:13:36 geuzaine Exp $ +// $Id: GUI.cpp,v 1.274 2004-02-28 00:48:48 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -1880,25 +1880,26 @@ void GUI::create_option_window() Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Colors"); o->hide(); mesh_butt[17] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Color by element type"); - mesh_butt[18] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Color by geometrical entity"); - mesh_butt[19] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Color by partition"); - for(i = 17; i < 20; i++) { + mesh_butt[18] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Color by elementary entity"); + mesh_butt[19] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Color by physical entity"); + mesh_butt[20] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH, "Color by partition"); + for(i = 17; i < 21; i++) { mesh_butt[i]->type(FL_RADIO_BUTTON); mesh_butt[i]->down_box(RADIO_BOX); mesh_butt[i]->selection_color(RADIO_COLOR); } - mesh_value[12] = new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Predefined color scheme"); + mesh_value[12] = new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Predefined color scheme"); mesh_value[12]->minimum(0); mesh_value[12]->maximum(2); mesh_value[12]->step(1); mesh_value[12]->align(FL_ALIGN_RIGHT); mesh_value[12]->callback(mesh_options_color_scheme_cb); - Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 5 * BH, IW + 20, height - 5 * WB - 5 * BH); + Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 6 * BH, IW + 20, height - 6 * WB - 6 * BH); i = 0; while(MeshOptions_Color[i].str) { - mesh_col[i] = new Fl_Button(2 * WB, 3 * WB + (5 + i) * BH, IW, BH, MeshOptions_Color[i].str); + mesh_col[i] = new Fl_Button(2 * WB, 3 * WB + (6 + i) * BH, IW, BH, MeshOptions_Color[i].str); mesh_col[i]->callback(color_cb, (void *)MeshOptions_Color[i].function); i++; } diff --git a/Fltk/GUI.h b/Fltk/GUI.h index 09ea9f3a9f..ee97367956 100644 --- a/Fltk/GUI.h +++ b/Fltk/GUI.h @@ -171,7 +171,7 @@ public: // mesh options Fl_Window *mesh_window ; - Fl_Check_Button *mesh_butt[20] ; + Fl_Check_Button *mesh_butt[50] ; Fl_Input *mesh_input[20] ; Fl_Value_Input *mesh_value[20] ; Fl_Button *mesh_col[50] ; diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp index 1fe165d419..8aa5f5c8f0 100644 --- a/Fltk/Main.cpp +++ b/Fltk/Main.cpp @@ -1,4 +1,4 @@ -// $Id: Main.cpp,v 1.56 2004-02-07 01:40:17 geuzaine Exp $ +// $Id: Main.cpp,v 1.57 2004-02-28 00:48:48 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -28,7 +28,6 @@ #include "GmshVersion.h" #include "Geo.h" -#include "Verif.h" #include "Mesh.h" #include "Draw.h" #include "Context.h" diff --git a/Fltk/Makefile b/Fltk/Makefile index 703cedfc34..b5751e9191 100644 --- a/Fltk/Makefile +++ b/Fltk/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.49 2004-02-07 01:40:17 geuzaine Exp $ +# $Id: Makefile,v 1.50 2004-02-28 00:48:48 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -68,12 +68,11 @@ Main.o: Main.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \ ../Common/ColorTable.h ../DataStr/List.h ../Common/Gmsh.h \ ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \ ../DataStr/Tools.h ../Common/GmshUI.h ../Common/GmshVersion.h \ - ../Geo/Geo.h ../Geo/Verif.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ - ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h ../Graphics/Draw.h \ - ../Common/Context.h ../Parser/Parser.h GUI.h Opengl_Window.h \ - Colorbar_Window.h ../Parser/OpenFile.h ../Common/CommandLine.h \ - ../Numeric/Numeric.h + ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ + ../Mesh/Matrix.h ../Graphics/Draw.h ../Common/Context.h \ + ../Parser/Parser.h GUI.h Opengl_Window.h Colorbar_Window.h \ + ../Parser/OpenFile.h ../Common/CommandLine.h ../Numeric/Numeric.h Message.o: Message.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ @@ -95,11 +94,12 @@ Callbacks.o: Callbacks.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h ../Geo/Verif.h ../Graphics/Draw.h ../Common/Views.h \ - ../Common/ColorTable.h ../Common/Timer.h ../Graphics/CreateFile.h \ - ../Parser/OpenFile.h ../Common/CommandLine.h ../Common/Context.h \ - ../Common/Options.h GUI.h Opengl_Window.h Colorbar_Window.h Callbacks.h \ - ../Plugin/Plugin.h ../Common/Visibility.h Solvers.h + ../Mesh/Matrix.h ../Geo/ExtractContour.h ../Graphics/Draw.h \ + ../Common/Views.h ../Common/ColorTable.h ../Common/Timer.h \ + ../Graphics/CreateFile.h ../Parser/OpenFile.h ../Common/CommandLine.h \ + ../Common/Context.h ../Common/Options.h GUI.h Opengl_Window.h \ + Colorbar_Window.h Callbacks.h ../Plugin/Plugin.h ../Common/Visibility.h \ + Solvers.h Opengl.o: Opengl.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ diff --git a/Geo/CAD.cpp b/Geo/CAD.cpp index f8b6a20630..901d20afde 100644 --- a/Geo/CAD.cpp +++ b/Geo/CAD.cpp @@ -1,4 +1,4 @@ -// $Id: CAD.cpp,v 1.70 2004-02-07 01:40:18 geuzaine Exp $ +// $Id: CAD.cpp,v 1.71 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -23,7 +23,6 @@ #include "Numeric.h" #include "Geo.h" #include "Mesh.h" -#include "DataBase.h" #include "Interpolation.h" #include "Create.h" #include "CAD.h" @@ -157,7 +156,6 @@ void dist_ddg(double x1, double y1, double z1, *z = d * z4 + z3 * (1. - d); } - Vertex *FindPoint(int inum, Mesh * M) { Vertex C, *pc; @@ -235,6 +233,19 @@ SurfaceLoop *FindSurfaceLoop(int inum, Mesh * M) return NULL; } +PhysicalGroup *FindPhysicalGroup(int num, int type, Mesh * M) +{ + PhysicalGroup P, *pp, **ppp; + pp = &P; + pp->Num = num; + pp->Typ = type; + if((ppp = (PhysicalGroup **) List_PQuery(M->PhysicalGroups, &pp, + comparePhysicalGroup))) { + return *ppp; + } + return NULL; +} + void CopyVertex(Vertex * v, Vertex * vv) { vv->lc = v->lc; @@ -279,6 +290,11 @@ void CopyCurve(Curve * c, Curve * cc) cc->Control_Points = List_Create(List_Nbr(c->Control_Points), 1, sizeof(Vertex *)); List_Copy(c->Control_Points, cc->Control_Points); + if(c->Typ == MSH_SEGM_PARAMETRIC){ + strcpy(cc->functu, c->functu); + strcpy(cc->functv, c->functv); + strcpy(cc->functw, c->functw); + } End_Curve(cc); Tree_Insert(THEM->Curves, &cc); } @@ -383,6 +399,7 @@ void CopyShape(int Type, int Num, int *New) case MSH_SEGM_CIRC: case MSH_SEGM_ELLI: case MSH_SEGM_NURBS: + case MSH_SEGM_PARAMETRIC: if(!(c = FindCurve(Num, THEM))) { Msg(GERROR, "Unknown Curve %d", Num); return; @@ -482,6 +499,7 @@ void DeleteShape(int Type, int Num) case MSH_SEGM_CIRC: case MSH_SEGM_ELLI: case MSH_SEGM_NURBS: + case MSH_SEGM_PARAMETRIC: DeleteCurve(Num); break; case MSH_SURF_NURBS: @@ -535,6 +553,7 @@ void ColorShape(int Type, int Num, unsigned int Color) case MSH_SEGM_CIRC: case MSH_SEGM_ELLI: case MSH_SEGM_NURBS: + case MSH_SEGM_PARAMETRIC: ColorCurve(Num, Color); break; case MSH_SURF_NURBS: @@ -564,6 +583,7 @@ void VisibilityShape(int Type, int Num, int Mode) case MSH_SEGM_CIRC: case MSH_SEGM_ELLI: case MSH_SEGM_NURBS: + case MSH_SEGM_PARAMETRIC: SetVisibilityByNumber(Num, 3, Mode); break; case MSH_SURF_NURBS: @@ -629,13 +649,13 @@ Curve *CreateReversedCurve(Mesh * M, Curve * c) Curve **pc; if((pc = (Curve **) Tree_PQuery(M->Curves, &newc))) { - Free_Curve(&newc, 0); + Free_Curve(&newc, NULL); return *pc; } - else - Tree_Insert(M->Curves, &newc); - - return newc; + else{ + Tree_Add(M->Curves, &newc); + return newc; + } } void ModifyLcPoint(int ip, double lc) @@ -961,6 +981,7 @@ void ApplicationOnShapes(double matrix[4][4], List_T * ListShapes) case MSH_SEGM_CIRC: case MSH_SEGM_ELLI: case MSH_SEGM_NURBS: + case MSH_SEGM_PARAMETRIC: c = FindCurve(O.Num, THEM); if(c) ApplyTransformationToCurve(matrix, c); diff --git a/Geo/CAD.h b/Geo/CAD.h index 338d343d5a..a2f66f7af0 100644 --- a/Geo/CAD.h +++ b/Geo/CAD.h @@ -42,6 +42,7 @@ Surface *FindSurface(int inum, Mesh *M); Volume *FindVolume(int inum, Mesh *M); EdgeLoop *FindEdgeLoop(int inum, Mesh *M); SurfaceLoop *FindSurfaceLoop(int inum, Mesh *M); +PhysicalGroup *FindPhysicalGroup(int inum, int type, Mesh * M); Curve * CreateReversedCurve (Mesh *M,Curve *c); diff --git a/Geo/DataBase.cpp b/Geo/DataBase.cpp deleted file mode 100644 index c6ffc7eded..0000000000 --- a/Geo/DataBase.cpp +++ /dev/null @@ -1,631 +0,0 @@ -// $Id: DataBase.cpp,v 1.27 2004-02-07 01:40:18 geuzaine Exp $ -// -// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA. -// -// Please report all bugs and problems to <gmsh@geuz.org>. - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "CAD.h" -#include "STL.h" -#include "Create.h" -#include "Verif.h" -#include "Context.h" - -extern Context_T CTX; -extern Mesh *THEM; - -// Points - -void Cdbpts101(int ip, double x, double y, double z, double l, double w) -{ - Vertex *v; - v = Create_Vertex(ip, - CTX.geom.scaling_factor * x, - CTX.geom.scaling_factor * y, - CTX.geom.scaling_factor * z, - CTX.geom.scaling_factor * l, 0.0); - v->w = w; - Tree_Insert(THEM->Points, &v); -} - -// Curves - -void AddCurveInDataBase(int NumCurve, int TypCurve, int Order, - List_T * ControlPoints, List_T * Knots, - int VertexBeg, int VertexEnd, - double uBeg, double uEnd) -{ - Curve *c; - - if(NumCurve < 0) - return; /* Negative Curves are reversed from positive ones */ - - c = Create_Curve(NumCurve, TypCurve, Order, ControlPoints, Knots, - VertexBeg, VertexEnd, uBeg, uEnd); - - // curve in reverse direction - - Curve *rc = CreateReversedCurve(THEM, c); - Tree_Insert(THEM->Curves, &c); - Tree_Insert(THEM->Curves, &rc); -} - -void AddCircleInDataBase(int NumCurve, int TypCurve, List_T * ControlPoints, - double n[3]) -{ - Curve *c; - - if(NumCurve < 0) - return; /* Negative Curves are reversed from positive ones */ - - c = - Create_Curve(NumCurve, TypCurve, 2, ControlPoints, NULL, -1, -1, 0., 1.); - - c->Circle.n[0] = n[0]; - c->Circle.n[1] = n[1]; - c->Circle.n[2] = n[2]; - - End_Curve(c); - - // curve in reverse direction - - Curve *rc = CreateReversedCurve(THEM, c); - - rc->Circle.n[0] = n[0]; - rc->Circle.n[1] = n[1]; - rc->Circle.n[2] = n[2]; - End_Curve(rc); - - Tree_Insert(THEM->Curves, &c); - Tree_Insert(THEM->Curves, &rc); -} - -void Cdbseg101(int iseg, int typseg, int degre, List_T * liste, - List_T * listint, int i1, int i2, double u1, double u2, - char *c1, char *c2, char *c3) -{ - int i, j; - double d; - List_T *Temp; - if(listint) { - AddCurveInDataBase(iseg, typseg, degre, listint, NULL, i1, i2, u1, u2); - } - else { - Temp = List_Create(List_Nbr(liste), 1, sizeof(int)); - for(i = 0; i < List_Nbr(liste); i++) { - List_Read(liste, i, &d); - j = (int)d; - List_Add(Temp, &j); - } - AddCurveInDataBase(iseg, typseg, degre, Temp, NULL, i1, i2, u1, u2); - List_Delete(Temp); - } - -} - - -// Surfaces and volumes - -void AddQuadricSurfaceInDataBase(int Typ, int NumQuadric, double zaxis[3], - double xaxis[3], double center[3], - double radius1, double radius2, - List_T * loops) -{ - int ic, i, j, NbLoop, iLoop; - Surface *s; - Curve *c; - EdgeLoop *el; - - s = Create_Surface(NumQuadric, Typ); - s->Method = LIBRE; - for(i = 0; i < 3; i++) - s->Cyl.xaxis[i] = xaxis[i]; - for(i = 0; i < 3; i++) - s->Cyl.zaxis[i] = zaxis[i]; - for(i = 0; i < 3; i++) - s->Cyl.center[i] = center[i]; - s->Cyl.radius1 = radius1; - s->Cyl.radius2 = radius2; - s->Generatrices = List_Create(4, 1, sizeof(Curve *)); - - NbLoop = List_Nbr(loops); - s->Generatrices = List_Create(4, 1, sizeof(Curve *)); - for(i = 0; i < NbLoop; i++) { - List_Read(loops, i, &iLoop); - if(!(el = FindEdgeLoop(iLoop, THEM))) { - Msg(GERROR, "Unknown Line Loop %d", iLoop); - List_Delete(s->Generatrices); - Free(s); - return; - } - else { - for(j = 0; j < List_Nbr(el->Curves); j++) { - List_Read(el->Curves, j, &ic); - if(!(c = FindCurve(ic, THEM))) { - Msg(GERROR, "Unknown Curve %d", ic); - List_Delete(s->Generatrices); - Free(s); - return; - } - else - List_Add(s->Generatrices, &c); - } - } - } - s->Support = s; - End_Surface(s); - Tree_Insert(THEM->Surfaces, &s); -} - -void CreateSurfaceFromOldCrappyDatabase(int izon, int typzon, int o1, int o2, - int nbu, int nbv, int sup, - List_T * liste, List_T * loops, - Mesh * M) -{ - int ic, i, j, l, NbLoop, iLoop; - Surface *s, *pS; - Curve *c; - Vertex V, *v; - EdgeLoop *el; - - s = Create_Surface(izon, typzon); - s->Method = LIBRE; - - NbLoop = List_Nbr(loops); - s->Generatrices = List_Create(4, 1, sizeof(Curve *)); - for(i = 0; i < NbLoop; i++) { - List_Read(loops, i, &iLoop); - if(!(el = FindEdgeLoop(iLoop, THEM))) { - Msg(GERROR, "Unknown Line Loop %d", iLoop); - List_Delete(s->Generatrices); - Free(s); - return; - } - else { - for(j = 0; j < List_Nbr(el->Curves); j++) { - List_Read(el->Curves, j, &ic); - if(!(c = FindCurve(ic, THEM))) { - Msg(GERROR, "Unknown Curve %d", ic); - List_Delete(s->Generatrices); - Free(s); - return; - } - else - List_Add(s->Generatrices, &c); - } - } - } - - if((pS = FindSurface(sup, THEM))) { - s->Support = pS; - } - else { - s->Support = s; - } - - if(typzon == MSH_SURF_NURBS && !pS) { - s->Control_Points = List_Create(4, 1, sizeof(Vertex *)); - s->OrderU = o1; - s->OrderV = o2; - s->Nu = nbu; - s->Nv = nbv; - for(l = 0; l < List_Nbr(liste); l++) { - List_Read(liste, l, &iLoop); - v = &V; - v->Num = iLoop; - List_Add(s->Control_Points, Tree_PQuery(M->Points, &v)); - } - } - - End_Surface(s); - Tree_Insert(M->Surfaces, &s); -} - -void CreateVolumeFromOldCrappyDatabase(int izon, List_T * loops, Mesh * M) -{ - SurfaceLoop *sl; - int i, j, iLoop, is; - Surface *s; - Volume *v; - - v = Create_Volume(izon, MSH_VOLUME); - v->Surfaces = List_Create(4, 1, sizeof(Surface *)); - for(i = 0; i < List_Nbr(loops); i++) { - List_Read(loops, i, &iLoop); - if(!(sl = FindSurfaceLoop(iLoop, THEM))) { - Msg(GERROR, "Unknown Surface Loop %d", iLoop); - List_Delete(v->Surfaces); - Free(v); - return; - } - else { - for(j = 0; j < List_Nbr(sl->Surfaces); j++) { - List_Read(sl->Surfaces, j, &is); - if(!(s = FindSurface(abs(is), THEM))) { - Msg(GERROR, "Unknown Surface %d", is); - List_Delete(v->Surfaces); - Free(v); - return; - } - else - List_Add(v->Surfaces, &s); - } - } - } - Tree_Add(M->Volumes, &v); -} - - -void Cdbz101(int izon, int typzon, int o1, int o2, int nbu, int nbv, - int support, List_T * ListCP, List_T * liste, List_T * intlist) -{ - - int i, j; - double f; - List_T *templist = NULL; - Curve *c, *c0, *c1, *c2; - - if(liste) { - templist = List_Create(List_Nbr(liste), 1, sizeof(int)); - for(i = 0; i < List_Nbr(liste); i++) { - List_Read(liste, i, &f); - j = (int)f; - List_Add(templist, &j); - } - } - else if(intlist) { - templist = intlist; - } - - if(typzon == MSH_SURF_REGL || typzon == MSH_SURF_TRIC || - typzon == MSH_SURF_PLAN || typzon == MSH_SURF_TRIMMED || - typzon == MSH_SURF_NURBS) { - CreateSurfaceFromOldCrappyDatabase(izon, typzon, o1, o2, nbu, nbv, - support, ListCP, templist, THEM); - } - else if(typzon == MSH_SURF_LOOP) { - Add_SurfaceLoop(izon, templist, THEM); - } - else if(typzon == MSH_SEGM_LOOP) { - - // We sort the lines in the line loops. Without this sort, it very - // difficult to write general scriptable surface generation in - // complex cases. - - int NbCurves = List_Nbr(templist); - List_T *curves = List_Create(NbCurves, 1, sizeof(Curve *)); - for(i = 0; i < NbCurves; i++) { - if((c = FindCurve(*(int *)List_Pointer(templist, i), THEM))) - List_Add(curves, &c); - else - Msg(GERROR, "Unknown Curve %d in Line Loop %d", - *(int *)List_Pointer(templist, i), izon); - } - List_Reset(templist); - - int j = 0, k = 0; - c0 = c1 = *(Curve **) List_Pointer(curves, 0); - List_Add(templist, &c1->Num); - List_PSuppress(curves, 0); - while(List_Nbr(templist) < NbCurves) { - for(i = 0; i < List_Nbr(curves); i++) { - c2 = *(Curve **) List_Pointer(curves, i); - if(c1->end == c2->beg) { - List_Add(templist, &c2->Num); - List_PSuppress(curves, i); - c1 = c2; - if(c2->end == c0->beg) { - if(List_Nbr(curves)) { - Msg(INFO, - "Starting subloop %d in Line Loop %d (are you sure about this?)", - ++k, izon); - c0 = c1 = *(Curve **) List_Pointer(curves, 0); - List_Add(templist, &c1->Num); - List_PSuppress(curves, 0); - } - } - break; - } - } - if(j++ > NbCurves) { - Msg(GERROR, "Line Loop %d is wrong", izon); - break; - } - } - List_Delete(curves); - - /* - printf("Line Loop %d = {", izon); - for(i=0 ; i<List_Nbr(templist); i++){ - printf(" %d", *(int*)List_Pointer(templist, i)); - } - printf("}\n"); - */ - Add_EdgeLoop(izon, templist, THEM); - } - else if(typzon == MSH_VOLUME) { - CreateVolumeFromOldCrappyDatabase(izon, templist, THEM); - } - else { - Add_PhysicalGroup(izon, typzon, templist, THEM); - } - - if(liste) - List_Delete(templist); - - -} - -void CreateNurbsSurfaceSupport(int Num, int Order1, int Order2, - List_T * List, List_T * ku, List_T * kv) -{ - List_T *ListOfDouble_L; - List_T *ListCP; - int i, j, Nv, Nu, N; - Surface *s; - double d; - float f; - ListCP = List_Create(2, 2, sizeof(int)); - - for(j = 0; j < List_Nbr(List); j++) { - List_Read(List, j, &ListOfDouble_L); - for(i = 0; i < List_Nbr(ListOfDouble_L); i++) { - List_Read(ListOfDouble_L, i, &d); - N = (int)d; - List_Add(ListCP, &N); - } - } - List_Read(List, 0, &ListOfDouble_L); - Nu = List_Nbr(List); - Nv = List_Nbr(ListOfDouble_L); - Cdbz101(Num, MSH_SURF_NURBS, Order1, Order2, Nv, Nu, 0, ListCP, NULL, NULL); - - if(!(s = FindSurface(Num, THEM))) { - Msg(GERROR, "Unknown Surface Loop %d", Num); - return; - } - else { - s->ku = (float *)malloc(List_Nbr(ku) * sizeof(float)); - s->kv = (float *)malloc(List_Nbr(kv) * sizeof(float)); - s->Support = NULL; - - double kumin = 0., kumax = 1.; - double kvmin = 0., kvmax = 1.; - /* - List_Read(ku,0,&kumin); - List_Read(ku,List_Nbr(ku)-1,&kumax); - List_Read(kv,0,&kvmin); - List_Read(kv,List_Nbr(kv)-1,&kvmax); - */ - - for(i = 0; i < List_Nbr(ku); i++) { - List_Read(ku, i, &d); - f = (float)((d - kumin) / (kumax - kumin)); - s->ku[i] = f; - } - for(i = 0; i < List_Nbr(kv); i++) { - List_Read(kv, i, &d); - f = (float)((d - kvmin) / (kvmax - kvmin)); - s->kv[i] = f; - } - } - - List_Delete(ListCP); -} - -void CreateNurbsSurface(int Num, int Order1, int Order2, List_T * List, - List_T * ku, List_T * kv) -{ - List_T *ListOfDouble_L; - List_T *Listint, *ListCP; - int i, j, Loop[4], N, Nu, Nv; - double d; - int TypLine = MSH_SEGM_NURBS; - Curve *cc; - - Listint = List_Create(2, 2, sizeof(int)); - ListCP = List_Create(2, 2, sizeof(int)); - - double kumin, kumax; - List_Read(ku, 0, &kumin); - List_Read(ku, List_Nbr(ku) - 1, &kumax); - double kvmin, kvmax; - List_Read(kv, 0, &kvmin); - List_Read(kv, List_Nbr(kv) - 1, &kvmax); - for(j = 0; j < List_Nbr(List); j++) { - List_Read(List, j, &ListOfDouble_L); - for(i = 0; i < List_Nbr(ListOfDouble_L); i++) { - List_Read(ListOfDouble_L, i, &d); - N = (int)d; - List_Add(ListCP, &N); - } - } - - List_Read(List, 0, &ListOfDouble_L); - Nu = List_Nbr(List); - Nv = List_Nbr(ListOfDouble_L); - - for(i = 0; i < List_Nbr(ListOfDouble_L); i++) { - List_Read(ListOfDouble_L, i, &d); - j = (int)d; - List_Add(Listint, &j); - } - if(recognize_seg(TypLine, Listint, &Loop[0])) { - } - else { - Loop[0] = NEWREG(); - Cdbseg101(Loop[0], TypLine, Order1, ListOfDouble_L, NULL, -1, -1, kumin, - kumax, NULL, NULL, NULL); - if(!(cc = FindCurve(Loop[0], THEM))) { - Msg(GERROR, "Unknown Curve %d", Loop[0]); - List_Delete(Listint); - List_Delete(ListCP); - return; - } - else { - cc->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float)); - for(i = 0; i < List_Nbr(ku); i++) { - List_Read(ku, i, &d); - cc->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ; - } - } - } - List_Reset(Listint); - - List_Read(List, List_Nbr(List) - 1, &ListOfDouble_L); - for(i = 0; i < List_Nbr(ListOfDouble_L); i++) { - List_Read(ListOfDouble_L, i, &d); - j = (int)d; - List_Add(Listint, &j); - } - if(recognize_seg(TypLine, Listint, &Loop[2])) { - } - else { - Loop[2] = NEWREG(); - Cdbseg101(Loop[2], TypLine, Order1, ListOfDouble_L, NULL, -1, -1, kumin, - kumax, NULL, NULL, NULL); - if(!(cc = FindCurve(Loop[2], THEM))) { - Msg(GERROR, "Unknown Curve %d", Loop[2]); - List_Delete(Listint); - List_Delete(ListCP); - return; - } - else { - cc->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float)); - for(i = 0; i < List_Nbr(ku); i++) { - List_Read(ku, i, &d); - cc->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ; - } - } - } - List_Reset(Listint); - - List_T *List1 = List_Create(List_Nbr(List), 1, sizeof(double)); - List_T *List2 = List_Create(List_Nbr(List), 1, sizeof(double)); - - for(i = 0; i < List_Nbr(List); i++) { - List_Read(List, i, &ListOfDouble_L); - List_Add(List1, List_Pointer(ListOfDouble_L, 0)); - List_Add(List2, - List_Pointer(ListOfDouble_L, List_Nbr(ListOfDouble_L) - 1)); - } - - for(i = 0; i < List_Nbr(List1); i++) { - List_Read(List1, i, &d); - j = (int)d; - List_Add(Listint, &j); - } - if(recognize_seg(TypLine, Listint, &Loop[1])) { - } - else { - Loop[1] = NEWREG(); - Cdbseg101(Loop[1], TypLine, Order2, List1, NULL, -1, -1, kvmin, kvmax, - NULL, NULL, NULL); - if(!(cc = FindCurve(Loop[1], THEM))) { - Msg(GERROR, "Unknown Curve %d", Loop[1]); - List_Delete(List1); - List_Delete(List2); - List_Delete(Listint); - List_Delete(ListCP); - return; - } - else { - cc->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float)); - for(i = 0; i < List_Nbr(kv); i++) { - List_Read(kv, i, &d); - cc->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ; - } - } - } - List_Reset(Listint); - - for(i = 0; i < List_Nbr(List2); i++) { - List_Read(List2, i, &d); - j = (int)d; - List_Add(Listint, &j); - } - if(recognize_seg(TypLine, Listint, &Loop[3])) { - } - else { - Loop[3] = NEWREG(); - Cdbseg101(Loop[3], TypLine, Order2, List2, NULL, -1, -1, kvmin, kvmax, - NULL, NULL, NULL); - if(!(cc = FindCurve(Loop[3], THEM))) - Msg(GERROR, "Unknown Curve %d", Loop[3]); - else { - cc->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float)); - for(i = 0; i < List_Nbr(kv); i++) { - List_Read(kv, i, &d); - cc->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ; - } - } - } - - List_Reset(Listint); - List_Delete(List1); - List_Reset(List2); - double f = (double)-Loop[0]; - List_Add(List2, &f); - f = (double)Loop[1]; - List_Add(List2, &f); - f = (double)Loop[2]; - List_Add(List2, &f); - f = (double)-Loop[3]; - List_Add(List2, &f); - - int topnew = NEWREG(); - CreateNurbsSurfaceSupport(topnew, Order1, Order2, List, ku, kv); - j = NEWREG(); - Cdbz101(j, MSH_SEGM_LOOP, 0, 0, 0, 0, 0, NULL, List2, NULL); - List_Delete(List2); - List_Add(Listint, &j); - j = NEWREG(); - Cdbz101(j, MSH_SURF_TRIMMED, Order1, Order2, Nv, Nu, topnew, ListCP, NULL, - Listint); - List_Delete(Listint); - List_Delete(ListCP); -} - - -// This function takes a surfaces defined by edge loops that may -// be initially planar or anything else and adds a triangulation -// to in in order to represent the shape of the surface. This -// triangulation may be a STL triangulation (polygons are triangle) -// but anything else is okay. Solid modelers like parasolid or proE -// are able to provide such representations. I have written a translator -// from ideas to gmsh that does that. -void AddTriangulationToSurface (int iSurface, int iNbPnt, int iNbrPolygons, - List_T *points, List_T *polygons) -{ - Surface * s = FindSurface(iSurface, THEM); - - POLY_rep *rep = new POLY_rep (points,polygons); - - if (!s) - { - Msg(GERROR, "Unknown Surface %d", iSurface); - delete rep; - return; - } - - s->thePolyRep = rep; - -} diff --git a/Geo/DataBase.h b/Geo/DataBase.h deleted file mode 100644 index 8aeeceed16..0000000000 --- a/Geo/DataBase.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef _DATABASE_H_ -#define _DATABASE_H_ - -// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA. -// -// Please report all bugs and problems to <gmsh@geuz.org>. - -void Cdbpts101 (int ip, double x, double y, double z, double l, double w); -void Cdbpts105 (int ip, double x, double y, double z, double l, double w); -void Cdbseg102 (int iseg, int ip, int newp); -void Cdbz102 (int izon, int ip, int newp, int oldp); -void Cdbseg101 (int iseg, int typseg, int degre, List_T * liste, List_T * listint, - int, int, double, double, char *, char *, char *); -void Cdbpts201 (int ip); -void Cdbseg201 (int ip); -void Cdbz201 (int ip); -void Cdbz101 (int izon, int typzon, int o1, int o2, int nbu, int nbv, - int support, List_T * ListCP, List_T * liste, List_T * intlist); -void CreateNurbsSurface (int Num, int Order1, int Order2, List_T *, List_T *, List_T *); -void CreateNurbsSurfaceSupport (int Num, int Order2, int Order1, - List_T * List, List_T *, List_T *); -void Cdbseg301 (int ip); -void Cdbz301 (int ip); -void Cdbn101 (int in, double X, double Y, double Z); -void Cdbe101 (int nElm, int iEnt, int nnoe[4]); - -void AddCurveInDataBase (int NumCurve, int TypCurve, int Order, List_T * ControlPoints, - List_T * Knots, int VertexBeg, int VertexEnd, double uBeg, - double uEnd); -void AddCircleInDataBase (int NumCurve, int TypCurve, List_T * ControlPoints, - double n[3]); -void AddQuadricSurfaceInDataBase (int Typ, int NumCyl, double zaxis[3], - double xaxis[3], double center[3], - double radius1, double radius2, - List_T * loops); -void AddTriangulationToSurface (int iSurface, int iNbPnt, int iNbrPolygons, - List_T *points, List_T *polygons); - -#endif diff --git a/Geo/Verif.cpp b/Geo/ExtractContour.cpp similarity index 98% rename from Geo/Verif.cpp rename to Geo/ExtractContour.cpp index cde7eb02d0..2465ffa7b5 100644 --- a/Geo/Verif.cpp +++ b/Geo/ExtractContour.cpp @@ -1,4 +1,4 @@ -// $Id: Verif.cpp,v 1.16 2004-02-07 01:40:19 geuzaine Exp $ +// $Id: ExtractContour.cpp,v 1.1 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -23,7 +23,6 @@ #include "Geo.h" #include "CAD.h" #include "Mesh.h" -#include "DataBase.h" extern Mesh *THEM; diff --git a/Geo/Verif.h b/Geo/ExtractContour.h similarity index 83% rename from Geo/Verif.h rename to Geo/ExtractContour.h index beb6f74815..c226ee74aa 100644 --- a/Geo/Verif.h +++ b/Geo/ExtractContour.h @@ -1,5 +1,5 @@ -#ifndef _VERIF_H_ -#define _VERIF_H_ +#ifndef _EXTRACT_CONTOUR_H_ +#define _EXTRACT_CONTOUR_H_ // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -22,7 +22,7 @@ #include "List.h" -int alledgeslinked (int ed, List_T * Liste, List_T * old); -int allfaceslinked (int iz, List_T * Liste, List_T * old); +int alledgeslinked(int ed, List_T * Liste, List_T * old); +int allfaceslinked(int iz, List_T * Liste, List_T * old); #endif diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp index 5e6799ed2f..2dc0c61ff8 100644 --- a/Geo/Geo.cpp +++ b/Geo/Geo.cpp @@ -1,4 +1,4 @@ -// $Id: Geo.cpp,v 1.38 2004-02-07 01:40:19 geuzaine Exp $ +// $Id: Geo.cpp,v 1.39 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -23,7 +23,6 @@ #include "Numeric.h" #include "Geo.h" #include "CAD.h" -#include "DataBase.h" #include "Parser.h" #include "Context.h" diff --git a/Geo/GeoUtils.cpp b/Geo/GeoUtils.cpp new file mode 100644 index 0000000000..a065a41fff --- /dev/null +++ b/Geo/GeoUtils.cpp @@ -0,0 +1,143 @@ +// $Id: GeoUtils.cpp,v 1.1 2004-02-28 00:48:49 geuzaine Exp $ +// +// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to <gmsh@geuz.org>. + +#include "Gmsh.h" +#include "Geo.h" +#include "CAD.h" +#include "Mesh.h" + +extern Mesh *THEM; + +// A small function to sort the edges in an EdgeLoop. Without this +// sort, it is very difficult to write general scriptable surface +// generation in complex cases + +void sortEdgesInLoop(int num, List_T *edges) +{ + Curve *c, *c0, *c1, *c2; + int nbEdges = List_Nbr(edges); + List_T *temp = List_Create(nbEdges, 1, sizeof(Curve *)); + + for(int i = 0; i < nbEdges; i++) { + int j; + List_Read(edges, i, &j); + if((c = FindCurve(j, THEM))) + List_Add(temp, &c); + else + Msg(GERROR, "Unknown Curve %d in Line Loop %d", j, num); + } + List_Reset(edges); + + int j = 0, k = 0; + c0 = c1 = *(Curve **) List_Pointer(temp, 0); + List_Add(edges, &c1->Num); + List_PSuppress(temp, 0); + while(List_Nbr(edges) < nbEdges) { + for(int i = 0; i < List_Nbr(temp); i++) { + c2 = *(Curve **) List_Pointer(temp, i); + if(c1->end == c2->beg) { + List_Add(edges, &c2->Num); + List_PSuppress(temp, i); + c1 = c2; + if(c2->end == c0->beg) { + if(List_Nbr(temp)) { + Msg(INFO, "Starting subloop %d in Line Loop %d (are you sure about this?)", + ++k, num); + c0 = c1 = *(Curve **) List_Pointer(temp, 0); + List_Add(edges, &c1->Num); + List_PSuppress(temp, 0); + } + } + break; + } + } + if(j++ > nbEdges) { + Msg(GERROR, "Line Loop %d is wrong", num); + break; + } + } + List_Delete(temp); +} + +// Fills in the generatrices for a given surface, given the indices of +// edge loops + +void setSurfaceGeneratrices(Surface *s, List_T *loops) +{ + int nbLoop = List_Nbr(loops); + s->Generatrices = List_Create(4, 4, sizeof(Curve *)); + for(int i = 0; i < nbLoop; i++) { + int iLoop; + List_Read(loops, i, &iLoop); + EdgeLoop *el; + if(!(el = FindEdgeLoop(iLoop, THEM))) { + Msg(GERROR, "Unknown Line Loop %d", iLoop); + List_Delete(s->Generatrices); + return; + } + else { + for(int j = 0; j < List_Nbr(el->Curves); j++) { + int ic; + List_Read(el->Curves, j, &ic); + Curve *c; + if(!(c = FindCurve(ic, THEM))) { + Msg(GERROR, "Unknown Curve %d", ic); + List_Delete(s->Generatrices); + return; + } + else + List_Add(s->Generatrices, &c); + } + } + } +} + +// Fills in the boundary of a volume, given the indices of surface +// loops + +void setVolumeSurfaces(Volume *v, List_T * loops) +{ + v->Surfaces = List_Create(4, 1, sizeof(Surface *)); + for(int i = 0; i < List_Nbr(loops); i++) { + int il; + List_Read(loops, i, &il); + SurfaceLoop *sl; + if(!(sl = FindSurfaceLoop(il, THEM))) { + Msg(GERROR, "Unknown Surface Loop %d", il); + List_Delete(v->Surfaces); + return; + } + else { + for(int j = 0; j < List_Nbr(sl->Surfaces); j++) { + int is; + List_Read(sl->Surfaces, j, &is); + Surface *s; + if(!(s = FindSurface(abs(is), THEM))) { + Msg(GERROR, "Unknown Surface %d", is); + List_Delete(v->Surfaces); + return; + } + else + List_Add(v->Surfaces, &s); + } + } + } +} diff --git a/Geo/GeoUtils.h b/Geo/GeoUtils.h new file mode 100644 index 0000000000..351a79ca57 --- /dev/null +++ b/Geo/GeoUtils.h @@ -0,0 +1,30 @@ +#ifndef _GEO_UTILS_H_ +#define _GEO_UTILS_H_ + +// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to <gmsh@geuz.org>. + +#include "Mesh.h" +#include "List.h" + +void sortEdgesInLoop(int num, List_T *edges); +void setSurfaceGeneratrices(Surface *s, List_T *loops); +void setVolumeSurfaces(Volume *v, List_T * loops); + +#endif diff --git a/Geo/Makefile b/Geo/Makefile index ad962cd671..ef503ce456 100644 --- a/Geo/Makefile +++ b/Geo/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.42 2004-02-07 01:40:19 geuzaine Exp $ +# $Id: Makefile,v 1.43 2004-02-28 00:48:49 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -27,12 +27,12 @@ INCLUDE = -I../Common -I../DataStr -I../Geo -I../Mesh -I../Numeric -I../NR\ CFLAGS = ${OPTIM} ${FLAGS} ${INCLUDE} SRC = CAD.cpp \ - DataBase.cpp \ MinMax.cpp \ ExtrudeParams.cpp \ Geo.cpp \ + GeoUtils.cpp \ StepGeomDatabase.cpp \ - Verif.cpp \ + ExtractContour.cpp \ Print_Geo.cpp OBJ = ${SRC:.cpp=.o} @@ -62,14 +62,8 @@ CAD.o: CAD.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Numeric/Numeric.h Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h DataBase.h ../Mesh/Interpolation.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Interpolation.h \ ../Mesh/Create.h CAD.h ../Common/Visibility.h ../Common/Context.h -DataBase.o: DataBase.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - CAD.h ../Mesh/Create.h Verif.h ../Common/Context.h MinMax.o: MinMax.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h \ @@ -83,19 +77,25 @@ Geo.o: Geo.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Numeric/Numeric.h Geo.h CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h DataBase.h ../Parser/Parser.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Parser/Parser.h \ ../Common/Context.h +GeoUtils.o: GeoUtils.cpp ../Common/Gmsh.h ../Common/Message.h \ + ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ + ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \ + ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h StepGeomDatabase.o: StepGeomDatabase.cpp ../Common/Gmsh.h \ ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Numeric/Numeric.h Geo.h StepGeomDatabase.h DataBase.h \ - ../Common/Context.h -Verif.o: Verif.cpp ../Common/Gmsh.h ../Common/Message.h \ + ../Numeric/Numeric.h Geo.h GeoUtils.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ + ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Nurbs.h CAD.h \ + StepGeomDatabase.h ../Mesh/Create.h ../Common/Context.h +ExtractContour.o: ExtractContour.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - DataBase.h + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Print_Geo.o: Print_Geo.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Geo.h ../Mesh/Mesh.h \ diff --git a/Geo/StepGeomDatabase.cpp b/Geo/StepGeomDatabase.cpp index 768491da51..b6138977e7 100644 --- a/Geo/StepGeomDatabase.cpp +++ b/Geo/StepGeomDatabase.cpp @@ -1,4 +1,4 @@ -// $Id: StepGeomDatabase.cpp,v 1.15 2004-02-07 01:40:19 geuzaine Exp $ +// $Id: StepGeomDatabase.cpp,v 1.16 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -22,15 +22,21 @@ #include "Gmsh.h" #include "Numeric.h" #include "Geo.h" +#include "GeoUtils.h" +#include "Nurbs.h" +#include "CAD.h" #include "StepGeomDatabase.h" -#include "DataBase.h" +#include "Create.h" #include "Context.h" +// WARNING: NOT FUNCTIONAL AT THE MOMENT -- NEEDS TO BE PORTED TO THE NEW +// GEO CREATION INTERFACES (SEE "TODO"s) + extern Context_T CTX; +extern Mesh *THEM; static Step_Solid_BRep_t *BREP = NULL; - Step_Solid_BRep_t *Create_Step_Solid_BRep(void) { Step_Solid_BRep_t *NEWBREP; @@ -632,14 +638,14 @@ void Resolve_BREP(void) // resolving cartesian_points for(i = 0; i < List_Nbr(BREP->AllCartesian_Points); i++) { List_Read(BREP->AllCartesian_Points, i, &cp); - Cdbpts101(cp.Num, cp.Pos.X, cp.Pos.Y, cp.Pos.Z, L * .01, 1); + //TODO Cdbpts101(cp.Num, cp.Pos.X, cp.Pos.Y, cp.Pos.Z, L * .01, 1); } // resolving vertex_points for(i = 0; i < List_Nbr(BREP->AllVertex_Points); i++) { List_Read(BREP->AllVertex_Points, i, &vp); if((pcp = Get_Cartesian_Point(vp.Cartesian_Point))) { - Cdbpts101(vp.Num, pcp->Pos.X, pcp->Pos.Y, pcp->Pos.Z, L * .01, 1); + //TODO Cdbpts101(vp.Num, pcp->Pos.X, pcp->Pos.Y, pcp->Pos.Z, L * .01, 1); } } @@ -650,21 +656,22 @@ void Resolve_BREP(void) if(pc->Typ == STEP_LINE) { List_Add(ListInt, &ec.Step_Vertex_Point_Begin); List_Add(ListInt, &ec.Step_Vertex_Point_End); - Cdbseg101(ec.Num, MSH_SEGM_LINE, 1, NULL, ListInt, -1, -1, 0., 1., - NULL, NULL, NULL); + //TODO Cdbseg101(ec.Num, MSH_SEGM_LINE, 1, NULL, ListInt, -1, -1, 0., 1., + // NULL, NULL, NULL); List_Reset(ListInt); } else if(pc->Typ == STEP_BSPL) { List_Read(pc->Curve.BSpline.ListOf_Knots, 0, &ubeg); List_Read(pc->Curve.BSpline.ListOf_Knots, List_Nbr(pc->Curve.BSpline.ListOf_Knots) - 1, &uend); - AddCurveInDataBase(ec.Num, - MSH_SEGM_NURBS, - pc->Curve.BSpline.Order, - pc->Curve.BSpline.ListOf_Cartesian_Points, - pc->Curve.BSpline.ListOf_Knots, - ec.Step_Vertex_Point_Begin, - ec.Step_Vertex_Point_End, ubeg, uend); + // TODO + //AddCurveInDataBase(ec.Num, + // MSH_SEGM_NURBS, + // pc->Curve.BSpline.Order, + // pc->Curve.BSpline.ListOf_Cartesian_Points, + // pc->Curve.BSpline.ListOf_Knots, + // ec.Step_Vertex_Point_Begin, + // ec.Step_Vertex_Point_End, ubeg, uend); } else if(pc->Typ == STEP_CIRC || pc->Typ == STEP_ELLP) { axs = Get_Axis2_Placement3D(pc->Curve.Circle.Step_Axis2_Placement3D); @@ -678,9 +685,7 @@ void Resolve_BREP(void) List_Add(ListInt, &ec.Step_Vertex_Point_Begin); List_Add(ListInt, &pcp->Num); List_Add(ListInt, &ec.Step_Vertex_Point_End); - AddCircleInDataBase(ec.Num, MSH_SEGM_CIRC, ListInt, n); - // Cdbseg101(ec.Num,MSH_SEGM_CIRC,1,NULL, - // ListInt,-1,-1,0.,1.,NULL,NULL,NULL); + //AddCircleInDataBase(ec.Num, MSH_SEGM_CIRC, ListInt, n); List_Reset(ListInt); } } @@ -727,8 +732,7 @@ void Resolve_BREP(void) else err = 1; if(!err) { - Cdbz101(pfab->Num, MSH_SEGM_LOOP, 0, 0, 0, 0, 0, NULL, NULL, - ListInt); + //TODO Cdbz101(pfab->Num, MSH_SEGM_LOOP, 0, 0, 0, 0, 0, NULL, NULL, ListInt); List_Add(ListIntBis, &pfab->Num); } List_Reset(ListInt); @@ -738,7 +742,7 @@ void Resolve_BREP(void) } if(!err && (ps = Get_Surface(af.Step_Surface))) { if(ps->Typ == STEP_PLAN) { - Cdbz101(af.Num, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, NULL, ListIntBis); + //TODO Cdbz101(af.Num, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, NULL, ListIntBis); } else if(ps->Typ == STEP_CYLD || ps->Typ == STEP_CONE /*|| ps->Typ == STEP_TORD || ps->Typ == STEP_CONE */ ) { @@ -768,18 +772,28 @@ void Resolve_BREP(void) typ = MSH_SURF_CONE; break; } - AddQuadricSurfaceInDataBase(typ, - af.Num, - n, t, p, - ps->Surface.Quadric.Radius1, - ps->Surface.Quadric.Radius2, ListIntBis); - - //Cdbz101(af.Num,MSH_SURF_REGL,0,0,0,0,0,NULL,NULL,ListIntBis); + if(FindSurface(af.Num, THEM)){ + Msg(GERROR, "Surface %d already exists", af.Num); + } + else{ + Surface *s = Create_Surface(af.Num, typ); + for(int i = 0; i < 3; i++) + s->Cyl.xaxis[i] = t[i]; + for(int i = 0; i < 3; i++) + s->Cyl.zaxis[i] = n[i]; + for(int i = 0; i < 3; i++) + s->Cyl.center[i] = p[i]; + s->Cyl.radius1 = ps->Surface.Quadric.Radius1; + s->Cyl.radius2 = ps->Surface.Quadric.Radius2; + setSurfaceGeneratrices(s, ListIntBis); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + } } - else if(ps->Typ == STEP_BSPL) { - Cdbz101(af.Num, MSH_SURF_TRIMMED, 0, 0, 0, 0, af.Step_Surface, NULL, - NULL, ListIntBis); + //TODO Cdbz101(af.Num, MSH_SURF_TRIMMED, 0, 0, 0, 0, af.Step_Surface, NULL, + // NULL, ListIntBis); } } List_Reset(ListIntBis); @@ -796,11 +810,12 @@ void Resolve_BREP(void) List_Add(ListInt, &paf->Num); } } - Cdbz101(cs.Num + 1000000, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, NULL, - ListInt); + //TODO Cdbz101(cs.Num + 1000000, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, NULL, ListInt); List_Reset(ListInt); j = cs.Num + 1000000; List_Add(ListInt, &j); - Cdbz101(cs.Num, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, NULL, ListInt); + //TODO Cdbz101(cs.Num, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, NULL, ListInt); } } + + diff --git a/Graphics/Geom.cpp b/Graphics/Geom.cpp index 6a153e15f0..ab1ccd0522 100644 --- a/Graphics/Geom.cpp +++ b/Graphics/Geom.cpp @@ -1,4 +1,4 @@ -// $Id: Geom.cpp,v 1.49 2004-02-20 17:58:00 geuzaine Exp $ +// $Id: Geom.cpp,v 1.50 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -27,7 +27,6 @@ #include "Utils.h" #include "Draw.h" #include "Context.h" -#include "Verif.h" #include "Interpolation.h" #include "STL.h" #include "gl2ps.h" @@ -282,13 +281,12 @@ void Draw_Triangulated_Surface(Surface * s) if(CTX.geom.light) glEnable(GL_LIGHTING); glBegin(GL_TRIANGLES); while (k < List_Nbr(s->thePolyRep->polygons)){ - points = (double*)List_Pointer (s->thePolyRep->polygons,k); + points = (double*)List_Pointer(s->thePolyRep->polygons,k); k+= ((int)points[0] + 1); - if (points[0] == 3){ - p1 = (double*)List_Pointer (s->thePolyRep->points_and_normals,6*(int)points[1]); - p2 = (double*)List_Pointer (s->thePolyRep->points_and_normals,6*(int)points[2]); - p3 = (double*)List_Pointer (s->thePolyRep->points_and_normals,6*(int)points[3]); + p1 = (double*)List_Pointer(s->thePolyRep->points_and_normals, 6*(int)points[1]); + p2 = (double*)List_Pointer(s->thePolyRep->points_and_normals, 6*(int)points[2]); + p3 = (double*)List_Pointer(s->thePolyRep->points_and_normals, 6*(int)points[3]); glNormal3dv(&p1[3]); glVertex3d(p1[0],p1[1],p1[2]); glNormal3dv(&p2[3]); diff --git a/Graphics/Makefile b/Graphics/Makefile index 14b5e1c843..daf96f7270 100644 --- a/Graphics/Makefile +++ b/Graphics/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.54 2004-02-07 01:40:19 geuzaine Exp $ +# $Id: Makefile,v 1.55 2004-02-28 00:48:49 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -82,14 +82,14 @@ Mesh.o: Mesh.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - ../Geo/MinMax.h gl2ps.h ../Geo/Verif.h ../Numeric/Numeric.h + ../Geo/MinMax.h gl2ps.h ../Numeric/Numeric.h Geom.o: Geom.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Common/GmshUI.h ../Numeric/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ ../Mesh/Utils.h Draw.h ../Common/Views.h ../Common/ColorTable.h \ - ../Common/Context.h ../Geo/Verif.h ../Mesh/Interpolation.h gl2ps.h + ../Common/Context.h ../Mesh/Interpolation.h gl2ps.h Post.o: Post.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Common/GmshUI.h ../Numeric/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h \ diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp index 45d4ccf265..a1b6e0da59 100644 --- a/Graphics/Mesh.cpp +++ b/Graphics/Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: Mesh.cpp,v 1.65 2004-02-20 17:58:00 geuzaine Exp $ +// $Id: Mesh.cpp,v 1.66 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -28,12 +28,14 @@ #include "Context.h" #include "MinMax.h" #include "gl2ps.h" -#include "Verif.h" #include "Numeric.h" extern Mesh *THEM; extern Context_T CTX; +static DrawingColor theColor; +static int thePhysical = 0; + void draw_polygon_2d(double r, double g, double b, int n, double *x, double *y, double *z) { @@ -58,13 +60,21 @@ void draw_polygon_2d(double r, double g, double b, int n, glEnable(GL_DEPTH_TEST); } -static DrawingColor theColor; - void ColorSwitch(int i) { glColor4ubv((GLubyte *) & CTX.color.mesh.carousel[abs(i % 10)]); } +int getFirstPhysical(int type, int num) +{ + for(int i = 0; i < List_Nbr(THEM->PhysicalGroups); i++){ + PhysicalGroup *p = *(PhysicalGroup**)List_Pointer(THEM->PhysicalGroups, i); + if(p->Typ == type && List_Query(p->Entities, &num, fcmp_int)) + return p->Num; + } + return 0; +} + void Draw_Mesh(Mesh * M) { int i; @@ -135,7 +145,7 @@ void Draw_Mesh(Mesh * M) //printf("normal mesh drawing\n"); if(M->status >= 3 && (CTX.mesh.volumes || CTX.mesh.volumes_num)) { - Tree_Action(M->Volumes, Draw_Mesh_Volumes); + Tree_Action(M->Volumes, Draw_Mesh_Volumes); } if(M->status >= 2 && (CTX.mesh.surfaces || CTX.mesh.surfaces_num)) { @@ -184,12 +194,7 @@ void Draw_Mesh(Mesh * M) void Draw_Mesh_Volumes(void *a, void *b) { - Volume *v; - v = *(Volume **) a; - theColor = v->Color; - // FIXME: this is the correct method, but will only work when a - // coherent datastruct exists for volumes - // if(!(v->Visible & VIS_MESH)) return; + Volume *v = *(Volume **) a; Tree_Action(v->Simplexes, Draw_Simplex_Volume); Tree_Action(v->Hexahedra, Draw_Hexahedron_Volume); Tree_Action(v->Prisms, Draw_Prism_Volume); @@ -208,9 +213,9 @@ int Test_Simple_Surface_Draw() void Draw_Mesh_Surfaces(void *a, void *b) { - Surface *s; - s = *(Surface **) a; + Surface *s = *(Surface **) a; theColor = s->Color; + thePhysical = getFirstPhysical(MSH_PHYSICAL_SURFACE, s->Num); if(!(s->Visible & VIS_MESH)) return; if(!Test_Simple_Surface_Draw()) @@ -233,11 +238,11 @@ void Draw_Mesh_Extruded_Surfaces(void *a, void *b) void Draw_Mesh_Curves(void *a, void *b) { - Curve *c; - c = *(Curve **) a; + Curve *c = *(Curve **) a; if(c->Num < 0) return; theColor = c->Color; + thePhysical = getFirstPhysical(MSH_PHYSICAL_LINE, c->Num); if(!(c->Visible & VIS_MESH)) return; Tree_Action(c->Simplexes, Draw_Simplex_Curves); @@ -308,10 +313,13 @@ void Draw_Simplex_Volume(void *a, void *b) if(part && !(*part)->Visible) return; - // FIXME: remove as soon as a coherent structure exists for volumes + // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent + // structure exists for volumes Volume *V; if((V = FindVolume(s->iEnt, THEM)) && !(V->Visible & VIS_MESH)) return; + if(CTX.mesh.color_carousel == 2) + thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, s->iEnt); if(CTX.mesh.gamma_sup) { tmp = s->GammaShapeMeasure(); @@ -326,7 +334,6 @@ void Draw_Simplex_Volume(void *a, void *b) fulldraw = 1; } - double Xc = .25 * (s->V[0]->Pos.X + s->V[1]->Pos.X + s->V[2]->Pos.X + s->V[3]->Pos.X); double Yc = .25 * (s->V[0]->Pos.Y + s->V[1]->Pos.Y + @@ -340,13 +347,20 @@ void Draw_Simplex_Volume(void *a, void *b) fulldraw = 1; } - if(CTX.mesh.color_carousel && !fulldraw){ - ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt); + if(!fulldraw){ + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(s->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(s->iPart); + else + glColor4ubv((GLubyte *) & CTX.color.mesh.tetrahedron); } - else if(fulldraw) - glColor4ubv((GLubyte *) & CTX.color.mesh.line); else - glColor4ubv((GLubyte *) & CTX.color.mesh.tetrahedron); + glColor4ubv((GLubyte *) & CTX.color.mesh.line); // this is killing us!!! for(int i = 0; i < 4; i++) { @@ -414,8 +428,14 @@ void Draw_Simplex_Volume(void *a, void *b) double n[4], x1x0, y1y0, z1z0, x2x0, y2y0, z2z0; - if(CTX.mesh.color_carousel) - ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt); + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(s->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(s->iPart); else glColor4ubv((GLubyte *) & CTX.color.mesh.tetrahedron); @@ -527,11 +547,17 @@ void Draw_Simplex_Surface_Common(Simplex * s, double *pX, double *pY, if(CTX.mesh.surfaces && CTX.mesh.lines) { - if(CTX.mesh.color_carousel && !CTX.mesh.solid) { + if(!CTX.mesh.solid) { if(theColor.type) - glColor4ubv((GLubyte *) & theColor.mesh); + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(s->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(s->iPart); else - ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt); + glColor4ubv((GLubyte *) & CTX.color.mesh.line); } else { glColor4ubv((GLubyte *) & CTX.color.mesh.line); @@ -564,18 +590,18 @@ void Draw_Simplex_Surface_Common(Simplex * s, double *pX, double *pY, } - if(CTX.mesh.color_carousel) { - if(theColor.type) - glColor4ubv((GLubyte *) & theColor.mesh); - else - ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt); - } - else { - if(K == 3) - glColor4ubv((GLubyte *) & CTX.color.mesh.triangle); - else - glColor4ubv((GLubyte *) & CTX.color.mesh.quadrangle); - } + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(s->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(s->iPart); + else if(K == 3) + glColor4ubv((GLubyte *) & CTX.color.mesh.triangle); + else + glColor4ubv((GLubyte *) & CTX.color.mesh.quadrangle); if(CTX.mesh.surfaces && CTX.mesh.solid) { @@ -783,12 +809,14 @@ void Draw_Simplex_Curves(void *a, void *b) Z[1] = Zc + CTX.mesh.explode * (s->VSUP[0]->Pos.Z - Zc); } - if(CTX.mesh.color_carousel) { - if(theColor.type) - glColor4ubv((GLubyte *) & theColor.mesh); - else - ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt); - } + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(s->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(s->iPart); else glColor4ubv((GLubyte *) & CTX.color.mesh.line); @@ -839,10 +867,13 @@ void Draw_Hexahedron_Volume(void *a, void *b) if(part && !(*part)->Visible) return; - // FIXME: remove as soon as a coherent structure exists for volumes + // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent + // structure exists for volumes Volume *V; if((V = FindVolume(h->iEnt, THEM)) && !(V->Visible & VIS_MESH)) return; + if(CTX.mesh.color_carousel == 2) + thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, h->iEnt); for(i = 0; i < 8; i++) { Xc += h->V[i]->Pos.X; @@ -858,8 +889,14 @@ void Draw_Hexahedron_Volume(void *a, void *b) return; } - if(CTX.mesh.color_carousel) - ColorSwitch((CTX.mesh.color_carousel == 2) ? h->iPart : h->iEnt); + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(h->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(h->iPart); else glColor4ubv((GLubyte *) & CTX.color.mesh.hexahedron); @@ -977,10 +1014,13 @@ void Draw_Prism_Volume(void *a, void *b) if(part && !(*part)->Visible) return; - // FIXME: remove as soon as a coherent structure exists for volumes + // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent + // structure exists for volumes Volume *V; if((V = FindVolume(p->iEnt, THEM)) && !(V->Visible & VIS_MESH)) return; + if(CTX.mesh.color_carousel == 2) + thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, p->iEnt); for(i = 0; i < 6; i++) { Xc += p->V[i]->Pos.X; @@ -996,8 +1036,14 @@ void Draw_Prism_Volume(void *a, void *b) return; } - if(CTX.mesh.color_carousel) - ColorSwitch((CTX.mesh.color_carousel == 2) ? p->iPart : p->iEnt); + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(p->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(p->iPart); else glColor4ubv((GLubyte *) & CTX.color.mesh.prism); @@ -1096,10 +1142,13 @@ void Draw_Pyramid_Volume(void *a, void *b) if(part && !(*part)->Visible) return; - // FIXME: remove as soon as a coherent structure exists for volumes + // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent + // structure exists for volumes Volume *V; if((V = FindVolume(p->iEnt, THEM)) && !(V->Visible & VIS_MESH)) return; + if(CTX.mesh.color_carousel == 2) + thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, p->iEnt); for(i = 0; i < 5; i++) { Xc += p->V[i]->Pos.X; @@ -1115,8 +1164,14 @@ void Draw_Pyramid_Volume(void *a, void *b) return; } - if(CTX.mesh.color_carousel) - ColorSwitch((CTX.mesh.color_carousel == 2) ? p->iPart : p->iEnt); + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(p->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(p->iPart); else glColor4ubv((GLubyte *) & CTX.color.mesh.pyramid); diff --git a/Graphics/PostElement.cpp b/Graphics/PostElement.cpp index 51e266b14f..abfc9eaaa9 100644 --- a/Graphics/PostElement.cpp +++ b/Graphics/PostElement.cpp @@ -1,4 +1,4 @@ -// $Id: PostElement.cpp,v 1.22 2004-02-20 17:58:00 geuzaine Exp $ +// $Id: PostElement.cpp,v 1.23 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -21,7 +21,7 @@ // // Contributor(s): // Laurent Stainier -// +// Jean-Luc Flejou // OK, I understand why the Cut2D stuff does not work correctly with a // TWO_FACE light: the normal has too be coherent with the vertex @@ -818,6 +818,10 @@ void Draw_VectorElement(int type, Post_View * View, if(ts) { //draw trajectory if(View->LineType) { double dx2, dy2, dz2, XX[2], YY[2], ZZ[2]; + // warning, warning... + Raise[0][1] = Raise[0][0]; + Raise[1][1] = Raise[1][0]; + Raise[2][1] = Raise[2][0]; for(j = 0; j < ts; j++) { dx = V[3 * (ts - j)]; dy = V[3 * (ts - j) + 1]; @@ -829,11 +833,11 @@ void Draw_VectorElement(int type, Post_View * View, // not perfect... Palette2(View, ValMin, ValMax, dd); XX[0] = X[0] + fact * dx; - XX[1] = X[1] + fact * dx2; + XX[1] = X[0] + fact * dx2; YY[0] = Y[0] + fact * dy; - YY[1] = Y[1] + fact * dy2; + YY[1] = Y[0] + fact * dy2; ZZ[0] = Z[0] + fact * dz; - ZZ[1] = Z[1] + fact * dz2; + ZZ[1] = Z[0] + fact * dz2; Draw_Line(View->LineType, View->LineWidth, XX, YY, ZZ, Raise, View->Light); } } @@ -1041,10 +1045,12 @@ void Draw_TensorElement(int type, Post_View * View, /// the scalar function... // View->TensorType == DRAW_POST_VONMISES + int ts = View->TimeStep; + View->TimeStep = 0; double V_VonMises[8]; for(int i = 0; i < nbnod; i++){ - V_VonMises[i] = ComputeVonMises(V + 9*i); + V_VonMises[i] = ComputeVonMises(V + 9*(i + nbnod * ts)); } switch (type) { @@ -1073,6 +1079,8 @@ void Draw_TensorElement(int type, Post_View * View, Draw_ScalarPyramid(View, 0, ValMin, ValMax, Raise, X, Y, Z, V_VonMises); break; } + + View->TimeStep = ts; } #define ARGS Post_View *View, \ @@ -1120,4 +1128,3 @@ void Draw_TensorPyramid(ARGS) } #undef ARGS - diff --git a/Makefile b/Makefile index fedb43cc0d..043c09530f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.321 2004-02-20 17:57:58 geuzaine Exp $ +# $Id: Makefile,v 1.322 2004-02-28 00:48:47 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -145,6 +145,10 @@ tags: gtags htags +etags: + etags `find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h"\ + -o -name "*.y" -o -name "*.l" \)` + tgz: if (test -f ${GMSH_ARCHIVE}.tar.gz); then \ mv -f ${GMSH_ARCHIVE}.tar.gz ${GMSH_ARCHIVE}.tar.gz~; \ diff --git a/Mesh/2D_Mesh.cpp b/Mesh/2D_Mesh.cpp index aff00fc265..c4e3cc73ba 100644 --- a/Mesh/2D_Mesh.cpp +++ b/Mesh/2D_Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: 2D_Mesh.cpp,v 1.51 2004-02-07 01:40:20 geuzaine Exp $ +// $Id: 2D_Mesh.cpp,v 1.52 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -925,6 +925,11 @@ void Maillage_Surface(void *data, void *dum) return; } + if(s->Typ == MSH_SURF_STL) { + Msg(GERROR, "Remeshing of STL surfaces is not implemented (yet)"); + return; + } + THESUPPORT = s->Support; THESURFACE = s; diff --git a/Mesh/Create.cpp b/Mesh/Create.cpp index f2130dcae6..312c0e99ac 100644 --- a/Mesh/Create.cpp +++ b/Mesh/Create.cpp @@ -1,4 +1,4 @@ -// $Id: Create.cpp,v 1.47 2004-02-07 01:40:21 geuzaine Exp $ +// $Id: Create.cpp,v 1.48 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -28,6 +28,10 @@ #include "Context.h" #include "Create.h" +// This file contains the C-style interface for creation/deletion of +// objects. All this could be easily rewritten in C++ (and split into +// separate classes: Line, Surface, Volume, etc.). + extern Mesh *THEM; extern Context_T CTX; @@ -155,6 +159,37 @@ int compareSxF(const void *a, const void *b) return compareFace(&q->F, &w->F); } +int comparePhysicalGroup(const void *a, const void *b) +{ + PhysicalGroup *q, *w; + int cmp; + + q = *(PhysicalGroup **) a; + w = *(PhysicalGroup **) b; + cmp = q->Typ - w->Typ; + + if(cmp) + return cmp; + else + return (q->Num - w->Num); +} + +int compareMeshPartitionNum(const void *a, const void *b) +{ + MeshPartition *q, *w; + q = *(MeshPartition **) a; + w = *(MeshPartition **) b; + return (q->Num - w->Num); +} + +int compareMeshPartitionIndex(const void *a, const void *b) +{ + MeshPartition *q, *w; + q = *(MeshPartition **) a; + w = *(MeshPartition **) b; + return (q->Index - w->Index); +} + Attractor *Create_Attractor(int Num, double lc1, double lc2, double Radius, Vertex * v, Curve * c, Surface * s) { @@ -170,36 +205,20 @@ Attractor *Create_Attractor(int Num, double lc1, double lc2, double Radius, return pA; } -void Add_SurfaceLoop(int Num, List_T * intlist, Mesh * M) -{ - SurfaceLoop *pSL; - int i, j; - pSL = (SurfaceLoop *) Malloc(sizeof(SurfaceLoop)); - pSL->Surfaces = List_Create(List_Nbr(intlist), 1, sizeof(int)); - pSL->Num = Num; - THEM->MaxSurfaceLoopNum = IMAX(THEM->MaxSurfaceLoopNum, Num); - for(i = 0; i < List_Nbr(intlist); i++) { - List_Read(intlist, i, &j); - List_Add(pSL->Surfaces, &j); - } - Tree_Add(M->SurfaceLoops, &pSL); -} - -void Add_PhysicalGroup(int Num, int typ, List_T * intlist, Mesh * M) +PhysicalGroup *Create_PhysicalGroup(int Num, int typ, List_T * intlist) { - PhysicalGroup *p; - int i, j; - p = (PhysicalGroup *) Malloc(sizeof(PhysicalGroup)); + PhysicalGroup *p = (PhysicalGroup *) Malloc(sizeof(PhysicalGroup)); p->Entities = List_Create(List_Nbr(intlist), 1, sizeof(int)); p->Num = Num; THEM->MaxPhysicalNum = IMAX(THEM->MaxPhysicalNum, Num); p->Typ = typ; p->Visible = VIS_GEOM | VIS_MESH; - for(i = 0; i < List_Nbr(intlist); i++) { + for(int i = 0; i < List_Nbr(intlist); i++) { + int j; List_Read(intlist, i, &j); List_Add(p->Entities, &j); } - List_Add(M->PhysicalGroups, &p); + return p; } void Free_PhysicalGroup(void *a, void *b) @@ -239,35 +258,52 @@ void Free_MeshPartition(void *a, void *b) } } -int compareMeshPartitionNum(const void *a, const void *b) +EdgeLoop *Create_EdgeLoop(int Num, List_T * intlist) { - MeshPartition *q, *w; - q = *(MeshPartition **) a; - w = *(MeshPartition **) b; - return (q->Num - w->Num); + EdgeLoop *l = (EdgeLoop *) Malloc(sizeof(EdgeLoop)); + l->Curves = List_Create(List_Nbr(intlist), 1, sizeof(int)); + l->Num = Num; + THEM->MaxLineLoopNum = IMAX(THEM->MaxLineLoopNum, Num); + for(int i = 0; i < List_Nbr(intlist); i++) { + int j; + List_Read(intlist, i, &j); + List_Add(l->Curves, &j); + } + return l; } -int compareMeshPartitionIndex(const void *a, const void *b) +void Free_EdgeLoop(void *a, void *b) { - MeshPartition *q, *w; - q = *(MeshPartition **) a; - w = *(MeshPartition **) b; - return (q->Index - w->Index); + EdgeLoop *l = *(EdgeLoop **) a; + if(l) { + List_Delete(l->Curves); + Free(l); + l = NULL; + } } -void Add_EdgeLoop(int Num, List_T * intlist, Mesh * M) +SurfaceLoop *Create_SurfaceLoop(int Num, List_T * intlist) { - EdgeLoop *pEL; - int i, j; - pEL = (EdgeLoop *) Malloc(sizeof(EdgeLoop)); - pEL->Curves = List_Create(List_Nbr(intlist), 1, sizeof(int)); - pEL->Num = Num; - THEM->MaxLineLoopNum = IMAX(THEM->MaxLineLoopNum, Num); - for(i = 0; i < List_Nbr(intlist); i++) { + SurfaceLoop *l = (SurfaceLoop *) Malloc(sizeof(SurfaceLoop)); + l->Surfaces = List_Create(List_Nbr(intlist), 1, sizeof(int)); + l->Num = Num; + THEM->MaxSurfaceLoopNum = IMAX(THEM->MaxSurfaceLoopNum, Num); + for(int i = 0; i < List_Nbr(intlist); i++) { + int j; List_Read(intlist, i, &j); - List_Add(pEL->Curves, &j); + List_Add(l->Surfaces, &j); + } + return l; +} + +void Free_SurfaceLoop(void *a, void *b) +{ + SurfaceLoop *l = *(SurfaceLoop **) a; + if(l) { + List_Delete(l->Surfaces); + Free(l); + l = NULL; } - Tree_Add(M->EdgeLoops, &pEL); } void End_Curve(Curve * c) @@ -279,8 +315,7 @@ void End_Curve(Curve * c) int i; Curve *Curve; - if(c->Typ == MSH_SEGM_CIRC || - c->Typ == MSH_SEGM_CIRC_INV || + if(c->Typ == MSH_SEGM_CIRC || c->Typ == MSH_SEGM_CIRC_INV || c->Typ == MSH_SEGM_ELLI || c->Typ == MSH_SEGM_ELLI_INV) { Curve = c; @@ -492,7 +527,6 @@ void End_Surface(Surface * s) } - Curve *Create_Curve(int Num, int Typ, int Order, List_T * Liste, List_T * Knots, int p1, int p2, double u1, double u2) { @@ -501,20 +535,17 @@ Curve *Create_Curve(int Num, int Typ, int Order, List_T * Liste, int i, j, iPnt; double d; double matcr[4][4] = { {-0.5, 1.5, -1.5, 0.5}, - {1.0, -2.5, 2.0, -0.5}, - {-0.5, 0.0, 0.5, 0.0}, - {0.0, 1.0, 0.0, 0.0} - }; + {1.0, -2.5, 2.0, -0.5}, + {-0.5, 0.0, 0.5, 0.0}, + {0.0, 1.0, 0.0, 0.0} }; double matbs[4][4] = { {-1.0, 3, -3, 1}, - {3, -6, 3.0, 0}, - {-3, 0.0, 3, 0.0}, - {1, 4, 1, 0.0} - }; + {3, -6, 3.0, 0}, + {-3, 0.0, 3, 0.0}, + {1, 4, 1, 0.0} }; double matbez[4][4] = { {-1.0, 3, -3, 1}, - {3, -6, 3.0, 0}, - {-3, 3.0, 0, 0.0}, - {1, 0, 0, 0.0} - }; + {3, -6, 3.0, 0}, + {-3, 3.0, 0, 0.0}, + {1, 0, 0, 0.0} }; pC = (Curve *) Malloc(sizeof(Curve)); pC->Dirty = 0; diff --git a/Mesh/Create.h b/Mesh/Create.h index db00214d56..885f900afc 100644 --- a/Mesh/Create.h +++ b/Mesh/Create.h @@ -24,56 +24,53 @@ #include "Vertex.h" #include "Mesh.h" -int compareNXE (const void *a, const void *b); -int compareFxE (const void *a, const void *b); -int compareSurfaceLoop (const void *a, const void *b); -int compareEdgeLoop (const void *a, const void *b); -int compareHexahedron (const void *a, const void *b); -int comparePrism (const void *a, const void *b); -int comparePyramid (const void *a, const void *b); -int compareQuality (const void *a, const void *b); -int compareCurve (const void *a, const void *b); -int compareAttractor (const void *a, const void *b); -int compareSurface (const void *a, const void *b); -int compareVolume (const void *a, const void *b); -int compareSxF (const void *a, const void *b); +int compareNXE(const void *a, const void *b); +int compareFxE(const void *a, const void *b); +int compareSurfaceLoop(const void *a, const void *b); +int compareEdgeLoop(const void *a, const void *b); +int compareHexahedron(const void *a, const void *b); +int comparePrism(const void *a, const void *b); +int comparePyramid(const void *a, const void *b); +int compareQuality(const void *a, const void *b); +int compareCurve(const void *a, const void *b); +int compareAttractor(const void *a, const void *b); +int compareSurface(const void *a, const void *b); +int compareVolume(const void *a, const void *b); +int compareSxF(const void *a, const void *b); int compareMeshPartitionNum(const void *a, const void *b); int compareMeshPartitionIndex(const void *a, const void *b); +int comparePhysicalGroup(const void *a, const void *b); -Attractor * Create_Attractor (int Num, double lc1, double lc2, double Radius, - Vertex * v, Curve * c, Surface * s); +Attractor *Create_Attractor(int Num, double lc1, double lc2, double Radius, + Vertex * v, Curve * c, Surface * s); +PhysicalGroup *Create_PhysicalGroup(int Num, int typ, List_T * intlist); +Curve *Create_Curve(int Num, int Typ, int Order, List_T * Liste, + List_T * Knots, int p1, int p2, double u1, double u2); +Surface *Create_Surface(int Num, int Typ); +Volume *Create_Volume(int Num, int Typ); +Hexahedron *Create_Hexahedron(Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4, + Vertex * v5, Vertex * v6, Vertex * v7, Vertex * v8); +Prism *Create_Prism(Vertex * v1, Vertex * v2, Vertex * v3, + Vertex * v4, Vertex * v5, Vertex * v6); +Pyramid *Create_Pyramid(Vertex * v1, Vertex * v2, Vertex * v3, + Vertex * v4, Vertex * v5); +EdgeLoop *Create_EdgeLoop(int Num, List_T * intlist); +SurfaceLoop *Create_SurfaceLoop(int Num, List_T * intlist); -void Add_EdgeLoop (int Num, List_T * intlist, Mesh * M); -void Add_SurfaceLoop (int Num, List_T * intlist, Mesh * M); - -void Add_PhysicalGroup (int Num, int typ, List_T * intlist, Mesh * M); void Free_PhysicalGroup(void *a, void *b); - -int Add_MeshPartition(int Num, Mesh * M); void Free_MeshPartition(void *a, void *b); - -Curve *Create_Curve (int Num, int Typ, int Order, List_T * Liste, - List_T * Knots, int p1, int p2, double u1, double u2); -void End_Curve (Curve * c); -void Free_Curve(void *a, void *b); - -Surface * Create_Surface (int Num, int Typ); -void End_Surface (Surface * s); void Free_Surface(void *a, void *b); - -Volume * Create_Volume (int Num, int Typ); void Free_Volume(void *a, void *b); - -Hexahedron * Create_Hexahedron (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4, - Vertex * v5, Vertex * v6, Vertex * v7, Vertex * v8); void Free_Hexahedron(void *a, void *b); - -Prism * Create_Prism (Vertex * v1, Vertex * v2, Vertex * v3, - Vertex * v4, Vertex * v5, Vertex * v6); void Free_Prism(void *a, void *b); - -Pyramid * Create_Pyramid (Vertex * v1, Vertex * v2, Vertex * v3, - Vertex * v4, Vertex * v5); void Free_Pyramid(void *a, void *b); +void Free_Curve(void *a, void *b); +void Free_EdgeLoop(void *a, void *b); +void Free_SurfaceLoop(void *a, void *b); + +void End_Curve(Curve * c); +void End_Surface(Surface * s); + +int Add_MeshPartition(int Num, Mesh * M); #endif diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp index 8dc8b911cc..170ccba75a 100644 --- a/Mesh/Generator.cpp +++ b/Mesh/Generator.cpp @@ -1,4 +1,4 @@ -// $Id: Generator.cpp,v 1.48 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: Generator.cpp,v 1.49 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -200,10 +200,10 @@ void Init_Mesh(Mesh * M) Tree_Action(M->Curves, Free_Curve); Tree_Delete(M->Curves); - //Tree_Action (M->SurfaceLoops, Free_SurfaceLoop); // todo + Tree_Action (M->SurfaceLoops, Free_SurfaceLoop); Tree_Delete(M->SurfaceLoops); - //Tree_Action (M->EdgeLoops, Free_EdgeLoop); // todo + Tree_Action (M->EdgeLoops, Free_EdgeLoop); Tree_Delete(M->EdgeLoops); Tree_Action(M->Surfaces, Free_Surface); diff --git a/Mesh/Interpolation.cpp b/Mesh/Interpolation.cpp index e30dbcebbb..24e81f1cd3 100644 --- a/Mesh/Interpolation.cpp +++ b/Mesh/Interpolation.cpp @@ -1,4 +1,4 @@ -// $Id: Interpolation.cpp,v 1.23 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: Interpolation.cpp,v 1.24 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -22,6 +22,7 @@ #include "Gmsh.h" #include "Numeric.h" #include "Geo.h" +#include "Nurbs.h" #include "CAD.h" #include "Mesh.h" #include "Utils.h" @@ -420,20 +421,11 @@ Vertex InterpolateSurface(Surface * s, double u, double v, S[1] = C[1]->beg; S[2] = C[2]->beg; S[3] = C[3]->beg; - V[0] = - InterpolateCurve(C[0], C[0]->ubeg + (C[0]->uend - C[0]->ubeg) * u, 0); - V[1] = - InterpolateCurve(C[1], C[1]->ubeg + (C[1]->uend - C[1]->ubeg) * v, 0); - V[2] = - InterpolateCurve(C[2], - C[2]->ubeg + (C[2]->uend - C[2]->ubeg) * (1. - u), 0); - V[3] = - InterpolateCurve(C[3], - C[3]->ubeg + (C[3]->uend - C[3]->ubeg) * (1. - v), 0); - - T = - TransfiniteQua(V[0], V[1], V[2], V[3], *S[0], *S[1], *S[2], *S[3], u, - v); + V[0] = InterpolateCurve(C[0], C[0]->ubeg + (C[0]->uend - C[0]->ubeg) * u, 0); + V[1] = InterpolateCurve(C[1], C[1]->ubeg + (C[1]->uend - C[1]->ubeg) * v, 0); + V[2] = InterpolateCurve(C[2], C[2]->ubeg + (C[2]->uend - C[2]->ubeg) * (1. - u), 0); + V[3] = InterpolateCurve(C[3], C[3]->ubeg + (C[3]->uend - C[3]->ubeg) * (1. - v), 0); + T = TransfiniteQua(V[0], V[1], V[2], V[3], *S[0], *S[1], *S[2], *S[3], u, v); if(issphere) TransfiniteSph(*S[0], *c1, &T); diff --git a/Mesh/Interpolation.h b/Mesh/Interpolation.h index e4fc22b09e..55e49952a7 100644 --- a/Mesh/Interpolation.h +++ b/Mesh/Interpolation.h @@ -48,14 +48,6 @@ void TransfiniteSph (Vertex S, Vertex center, Vertex * T); void Normal2Surface (Surface * s, double u, double v, double n[3]); -Vertex InterpolateCubicSpline (Vertex * v[4], double t, double mat[4][4], - int derivee, double t1, double t2); -Vertex InterpolateUBS (Curve * Curve, double u, int derivee); - -Vertex InterpolateNurbs (Curve * Curve, double u, int derivee); - -Vertex InterpolateNurbsSurface (Surface * s, double u, double v); - #endif diff --git a/Mesh/Makefile b/Mesh/Makefile index f6137d55b4..7818243d46 100644 --- a/Mesh/Makefile +++ b/Mesh/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.54 2004-02-07 01:40:22 geuzaine Exp $ +# $Id: Makefile,v 1.55 2004-02-28 00:48:50 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -251,13 +251,15 @@ Print_Mesh.o: Print_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../Mesh/Matrix.h Create.h ../Common/Context.h Read_Mesh.o: Read_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \ - Simplex.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h \ + ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h ../Geo/CAD.h \ + ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ 3D_Mesh.h Create.h ../Geo/MinMax.h ../Common/Context.h STL.o: STL.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - Mesh.h Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h \ - Matrix.h + ../Numeric/Numeric.h Mesh.h Vertex.h Simplex.h Edge.h \ + ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h ../Geo/CAD.h \ + ../Geo/Geo.h Create.h Interpolation.h ../Common/Context.h SMS.o: SMS.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Geo/Geo.h Mesh.h Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h \ @@ -282,14 +284,14 @@ Metric.o: Metric.cpp ../Common/Gmsh.h ../Common/Message.h \ ../Mesh/Matrix.h Interpolation.h Nurbs.o: Nurbs.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Simplex.h Edge.h \ - ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h + ../DataStr/avl.h ../DataStr/Tools.h Nurbs.h Vertex.h Mesh.h Simplex.h \ + Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h ../Geo/Geo.h \ + ../Geo/GeoUtils.h Create.h ../Geo/CAD.h Interpolation.o: Interpolation.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ - ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h Utils.h Interpolation.h + Nurbs.h Vertex.h Mesh.h Simplex.h Edge.h ../Geo/ExtrudeParams.h STL.h \ + Metric.h Matrix.h ../Geo/CAD.h Utils.h Interpolation.h SecondOrder.o: SecondOrder.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \ diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h index 77d14351b9..664b7c6a62 100644 --- a/Mesh/Mesh.h +++ b/Mesh/Mesh.h @@ -243,10 +243,11 @@ typedef struct{ double center[3]; }CylParam; -typedef struct{ +class DrawingColor{ + public: int type; unsigned int geom, mesh; -}DrawingColor; +}; struct _Surf{ int Num; diff --git a/Mesh/Nurbs.cpp b/Mesh/Nurbs.cpp index 8f6e9adb17..fc503fcee0 100644 --- a/Mesh/Nurbs.cpp +++ b/Mesh/Nurbs.cpp @@ -1,4 +1,4 @@ -// $Id: Nurbs.cpp,v 1.14 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: Nurbs.cpp,v 1.15 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -20,7 +20,14 @@ // Please report all bugs and problems to <gmsh@geuz.org>. #include "Gmsh.h" +#include "Nurbs.h" #include "Mesh.h" +#include "Geo.h" +#include "GeoUtils.h" +#include "Create.h" +#include "CAD.h" + +extern Mesh *THEM; // Cubic spline @@ -227,3 +234,214 @@ Vertex InterpolateNurbsSurface(Surface * s, double u, double v) } return sp; } + + +// Surface creation helpers + +void CreateNurbsSurfaceSupport(int Num, int Order1, int Order2, + List_T * List, List_T * ku, List_T * kv) +{ + // This routine has been heavily modified to fit the new interfaces, + // but has not been tested since then. It's probably full of bugs + // now. + List_T *ListOfDouble_L; + List_T *ListCP = List_Create(2, 2, sizeof(int)); + + for(int j = 0; j < List_Nbr(List); j++) { + List_Read(List, j, &ListOfDouble_L); + for(int i = 0; i < List_Nbr(ListOfDouble_L); i++) { + double d; + List_Read(ListOfDouble_L, i, &d); + int N = (int)d; + List_Add(ListCP, &N); + } + } + List_Read(List, 0, &ListOfDouble_L); + int Nu = List_Nbr(List); + int Nv = List_Nbr(ListOfDouble_L); + + Surface *s = Create_Surface(Num, MSH_SURF_NURBS); + s->Support = NULL; + s->Control_Points = List_Create(4, 1, sizeof(Vertex *)); + s->OrderU = Order1; + s->OrderV = Order2; + s->Nu = Nu; + s->Nv = Nv; + for(int i = 0; i < List_Nbr(ListCP); i++) { + int j; + List_Read(ListCP, i, &j); + Vertex *v = FindPoint(j, THEM); + if(v){ + List_Add(s->Control_Points, &v); + } + else{ + Msg(GERROR, "Unknown control point %d in nurbs surface", j); + } + } + + s->ku = (float *)malloc(List_Nbr(ku) * sizeof(float)); + s->kv = (float *)malloc(List_Nbr(kv) * sizeof(float)); + + double kumin = 0., kumax = 1.; + double kvmin = 0., kvmax = 1.; + + for(int i = 0; i < List_Nbr(ku); i++) { + double d; + List_Read(ku, i, &d); + float f = (float)((d - kumin) / (kumax - kumin)); + s->ku[i] = f; + } + for(int i = 0; i < List_Nbr(kv); i++) { + double d; + List_Read(kv, i, &d); + float f = (float)((d - kvmin) / (kvmax - kvmin)); + s->kv[i] = f; + } + + List_Delete(ListCP); + + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); +} + +void CreateNurbsSurface(int Num, int Order1, int Order2, List_T * List, + List_T * ku, List_T * kv) +{ + // This routine has been heavily modified to fit the new interfaces, + // but has not been tested since then. It's probably full of bugs + // now. + + List_T *ListOfDouble_L, *Listint, *ListCP; + int Loop[4]; + + ListCP = List_Create(2, 2, sizeof(int)); + + double kumin, kumax; + List_Read(ku, 0, &kumin); + List_Read(ku, List_Nbr(ku) - 1, &kumax); + double kvmin, kvmax; + List_Read(kv, 0, &kvmin); + List_Read(kv, List_Nbr(kv) - 1, &kvmax); + for(int j = 0; j < List_Nbr(List); j++) { + List_Read(List, j, &ListOfDouble_L); + for(int i = 0; i < List_Nbr(ListOfDouble_L); i++) { + double d; + List_Read(ListOfDouble_L, i, &d); + int N = (int)d; + List_Add(ListCP, &N); + } + } + + // 1st and 3rd gen + List_Read(List, 0, &ListOfDouble_L); + Listint = ListOfDouble2ListOfInt(ListOfDouble_L); + if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[0])) { + } + else { + Loop[0] = NEWREG(); + Curve *c = Create_Curve(Loop[0], MSH_SEGM_NURBS, Order1, Listint, NULL, + -1, -1, kumin, kumax); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + c->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float)); + for(int i = 0; i < List_Nbr(ku); i++) { + double d; + List_Read(ku, i, &d); + c->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ; + } + } + List_Delete(Listint); + + List_Read(List, List_Nbr(List) - 1, &ListOfDouble_L); + Listint = ListOfDouble2ListOfInt(ListOfDouble_L); + if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[2])) { + } + else { + Loop[2] = NEWREG(); + Curve *c = Create_Curve(Loop[2], MSH_SEGM_NURBS, Order1, Listint, NULL, + -1, -1, kumin, kumax); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + c->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float)); + for(int i = 0; i < List_Nbr(ku); i++) { + double d; + List_Read(ku, i, &d); + c->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ; + } + } + List_Delete(Listint); + + // 2nd and 4th gen + List_T *List1 = List_Create(List_Nbr(List), 1, sizeof(double)); + List_T *List2 = List_Create(List_Nbr(List), 1, sizeof(double)); + for(int i = 0; i < List_Nbr(List); i++) { + List_Read(List, i, &ListOfDouble_L); + List_Add(List1, List_Pointer(ListOfDouble_L, 0)); + List_Add(List2, List_Pointer(ListOfDouble_L, List_Nbr(ListOfDouble_L) - 1)); + } + + Listint = ListOfDouble2ListOfInt(List1); + if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[1])) { + } + else { + Loop[1] = NEWREG(); + Curve *c = Create_Curve(Loop[1], MSH_SEGM_NURBS, Order2, Listint, NULL, + -1, -1, kumin, kumax); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + c->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float)); + for(int i = 0; i < List_Nbr(kv); i++) { + double d; + List_Read(kv, i, &d); + c->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ; + } + } + List_Delete(Listint); + + Listint = ListOfDouble2ListOfInt(List2); + if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[3])) { + } + else { + Loop[3] = NEWREG(); + Curve *c = Create_Curve(Loop[3], MSH_SEGM_NURBS, Order2, Listint, NULL, + -1, -1, kumin, kumax); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + c->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float)); + for(int i = 0; i < List_Nbr(kv); i++) { + double d; + List_Read(kv, i, &d); + c->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ; + } + } + List_Delete(Listint); + List_Delete(List1); + List_Delete(List2); + + Listint = List_Create(10, 10, sizeof(int)); + int l0 = -Loop[0]; + List_Add(Listint, &l0); + List_Add(Listint, &Loop[1]); + List_Add(Listint, &Loop[2]); + int l3 = -Loop[3]; + List_Add(Listint, &l3); + + int topnew = NEWREG(); + CreateNurbsSurfaceSupport(topnew, Order1, Order2, List, ku, kv); + + int il = NEWREG(); + SurfaceLoop *l = Create_SurfaceLoop(il, Listint); + Tree_Add(THEM->SurfaceLoops, &l); + List_Reset(Listint); + List_Add(Listint, &il); + + Surface *s = Create_Surface(NEWREG(), MSH_SURF_TRIMMED); + setSurfaceGeneratrices(s, Listint); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + + List_Delete(Listint); + List_Delete(ListCP); +} + diff --git a/Mesh/Nurbs.h b/Mesh/Nurbs.h new file mode 100644 index 0000000000..2ec9fa7fec --- /dev/null +++ b/Mesh/Nurbs.h @@ -0,0 +1,37 @@ +#ifndef _NURBS_H_ +#define _NURBS_H_ + +// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to <gmsh@geuz.org>. + +#include "Vertex.h" +#include "Mesh.h" +#include "List.h" + +Vertex InterpolateCubicSpline (Vertex * v[4], double t, double mat[4][4], + int derivee, double t1, double t2); +Vertex InterpolateUBS (Curve * Curve, double u, int derivee); +Vertex InterpolateNurbs (Curve * Curve, double u, int derivee); +Vertex InterpolateNurbsSurface (Surface * s, double u, double v); + +void CreateNurbsSurface (int Num, int Order1, int Order2, List_T *, List_T *, List_T *); +void CreateNurbsSurfaceSupport (int Num, int Order2, int Order1, + List_T * List, List_T *, List_T *); + +#endif diff --git a/Mesh/Read_Mesh.cpp b/Mesh/Read_Mesh.cpp index 92d641ac96..4362c5c0f8 100644 --- a/Mesh/Read_Mesh.cpp +++ b/Mesh/Read_Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: Read_Mesh.cpp,v 1.69 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: Read_Mesh.cpp,v 1.70 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -21,6 +21,7 @@ #include "Gmsh.h" #include "Geo.h" +#include "CAD.h" #include "Mesh.h" #include "3D_Mesh.h" #include "Create.h" @@ -49,35 +50,17 @@ extern Context_T CTX; #define NB_NOD_MAX_ELM 30 -int comparePhysicalGroup(const void *a, const void *b) -{ - PhysicalGroup *q, *w; - int cmp; - - q = *(PhysicalGroup **) a; - w = *(PhysicalGroup **) b; - cmp = q->Typ - w->Typ; - - if(cmp) - return cmp; - else - return (q->Num - w->Num); -} - void addPhysicalGroup(Mesh * M, int Type, int Physical, int Elementary) { - PhysicalGroup PG, *pg, **ppg; - pg = &PG; - pg->Typ = Type; - pg->Num = Physical; - if((ppg = (PhysicalGroup **) List_PQuery(M->PhysicalGroups, &pg, - comparePhysicalGroup))) { - List_Insert((*ppg)->Entities, &Elementary, fcmp_int); + PhysicalGroup *pg; + if((pg = FindPhysicalGroup(Physical, Type, M))) { + List_Insert(pg->Entities, &Elementary, fcmp_int); } else { List_T *tmp = List_Create(1, 1, sizeof(int)); List_Add(tmp, &Elementary); - Add_PhysicalGroup(Physical, Type, tmp, M); + pg = Create_PhysicalGroup(Physical, Type, tmp); + List_Add(M->PhysicalGroups, &pg); List_Delete(tmp); } } @@ -88,46 +71,34 @@ void addPhysicalGroup(Mesh * M, int Type, int Physical, int Elementary) Curve *addElementaryCurve(Mesh * M, int Num) { - Curve C, *c, **cc; - c = &C; - c->Num = Num; - if(!(cc = (Curve **) Tree_PQuery(M->Curves, &c))) { + Curve *c; + if(!(c = FindCurve(Num, M))) { c = Create_Curve(Num, MSH_SEGM_LINE, 0, NULL, NULL, -1, -1, 0., 1.); c->Dirty = 1; Tree_Add(M->Curves, &c); } - else - c = *cc; return c; } Surface *addElementarySurface(Mesh * M, int Num) { - Surface S, *s, **ss; - s = &S; - s->Num = Num; - if(!(ss = (Surface **) Tree_PQuery(M->Surfaces, &s))) { + Surface *s; + if(!(s = FindSurface(Num, M))) { s = Create_Surface(Num, MSH_SURF_PLAN); s->Dirty = 1; Tree_Add(M->Surfaces, &s); } - else - s = *ss; return s; } Volume *addElementaryVolume(Mesh * M, int Num) { - Volume V, *v, **vv; - v = &V; - v->Num = Num; - if(!(vv = (Volume **) Tree_PQuery(M->Volumes, &v))) { + Volume *v; + if(!(v = FindVolume(Num, M))) { v = Create_Volume(Num, MSH_VOLUME); v->Dirty = 1; Tree_Add(M->Volumes, &v); } - else - v = *vv; return v; } diff --git a/Mesh/STL.cpp b/Mesh/STL.cpp index 52ae119e11..851cc43e9d 100644 --- a/Mesh/STL.cpp +++ b/Mesh/STL.cpp @@ -1,6 +1,6 @@ -// $Id: STL.cpp,v 1.11 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: STL.cpp,v 1.12 2004-02-28 00:48:50 geuzaine Exp $ // -// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -16,14 +16,134 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. -// -// Please report all bugs and problems to <gmsh@geuz.org>. +// +// Please report all bugs and problems to "gmsh@geuz.org". +// +// Contributor(s): +// Nicolas Tardieu +// #include "Gmsh.h" +#include "Numeric.h" #include "Mesh.h" #include "STL.h" +#include "CAD.h" +#include "Geo.h" +#include "Create.h" +#include "Interpolation.h" +#include "Context.h" extern Mesh *THEM; +extern Context_T CTX; + +bool BelongToPhysicalEntity(int SurfaceNumber, + PhysicalGroup * CurrentPhysicalGroup) +{ + PhysicalGroup *PhysicalGroup; + int NbPhysicalGroup = List_Nbr(THEM->PhysicalGroups); + bool Belong = false; + + // Search if the current Surface belongs to the current PhysicalGroup + if(CurrentPhysicalGroup != NULL) { + if(List_Search(CurrentPhysicalGroup->Entities, &SurfaceNumber, fcmp_int)) { + Belong = true; + } + } + + // Search if the current Surface belongs to another PhysicalGroup + if(!Belong) { + for(int i = 0; i < NbPhysicalGroup; i++) { + List_Read(THEM->PhysicalGroups, i, &PhysicalGroup); + if((PhysicalGroup->Typ == MSH_PHYSICAL_SURFACE) && (!Belong)) { + if(List_Search(PhysicalGroup->Entities, &SurfaceNumber, fcmp_int)) { + Belong = true; + break; + } + } + } + } + return Belong; +} + + +void ComputeNormal(Surface * Surface, double Normal[3]) +{ + Curve *Curve1; + Curve *Curve2; + Vertex *Point11; + Vertex *Point12; + Vertex *Point21; + Vertex *Point22; + + double vec1[3]; + double vec2[3]; + + List_Read(Surface->Generatrices, 0, &Curve1); + List_Read(Surface->Generatrices, 1, &Curve2); + + Point11 = Curve1->beg; + Point12 = Curve1->end; + + Point21 = Curve2->beg; + Point22 = Curve2->end; + + vec1[0] = (Point12->Pos.X) - (Point11->Pos.X); + vec1[1] = (Point12->Pos.Y) - (Point11->Pos.Y); + vec1[2] = (Point12->Pos.Z) - (Point11->Pos.Z); + + vec2[0] = (Point22->Pos.X) - (Point21->Pos.X); + vec2[1] = (Point22->Pos.Y) - (Point21->Pos.Y); + vec2[2] = (Point22->Pos.Z) - (Point21->Pos.Z); + + prodve(vec1, vec2, Normal); + norme(Normal); +} + +void AddCorrectNeighborToPhysical(Surface * Surf1, PhysicalGroup * CurrentPhysicalGroup) +{ + + double Normal1[3], Normal2[3]; + int elem2; + List_T *pSurfaceList = Tree2List(THEM->Surfaces); + Surface *Surf2; + int NbSimplex = Tree_Nbr(THEM->Surfaces); + Curve *Curve1; + Curve *Curve2; + + ComputeNormal(Surf1, Normal1); + + // Scan all the elements to find a Surface not belonging to an existing PhysicalGroup + for(elem2 = 1; elem2 < NbSimplex; elem2++) { + List_Read(pSurfaceList, elem2, &Surf2); + if(BelongToPhysicalEntity(Surf2->Num, CurrentPhysicalGroup)) { + continue; + } + + ComputeNormal(Surf2, Normal2); + double Scal = + Normal1[0] * Normal2[0] + Normal1[1] * Normal2[1] + + Normal1[2] * Normal2[2]; + // If the normals are OK, determine if the surfaces are neighbors + if((fabs(Scal) > 0.90) && ((Surf1->Num) != (Surf2->Num))) { + bool Exit = false; + for(int i = 0; i < 3; i++) { + if(!Exit) { + for(int j = 0; j < 3; j++) { + List_Read(Surf1->Generatrices, i, &Curve1); + List_Read(Surf2->Generatrices, j, &Curve2); + // The Surface have a common Edge + if(fabs(Curve1->Num) == fabs(Curve2->Num)) { + List_Add(CurrentPhysicalGroup->Entities, &(Surf2->Num)); + AddCorrectNeighborToPhysical(Surf2, CurrentPhysicalGroup); + Exit = true; + break; + } + } + } + } + } + } +} STL_Data::STL_Data() { @@ -39,11 +159,26 @@ STL_Data::~STL_Data() void STL_Data::Add_Facet(double x1, double y1, double z1, double x2, double y2, double z2, - double x3, double y3, double z3) + double x3, double y3, double z3, + int in_geometry) { Vertex **ppv; - Vertex *v1 = Create_Vertex(Tree_Nbr(Vertices) + 1, x1, y1, z1, 1, 0); + // Calculation Of Characterisctic Length + double lc1 = + sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + + (z1 - z2) * (z1 - z2)); + double lc2 = + sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3) + + (z1 - z3) * (z1 - z3)); + double lc3 = + sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3) + + (z2 - z3) * (z2 - z3)); + double lc = DMAX(lc1, DMAX(lc2, lc3)); + + + // Importation Of Nodes + Vertex *v1 = Create_Vertex(Tree_Nbr(Vertices) + 1, x1, y1, z1, lc, 0); if((ppv = (Vertex **) Tree_PQuery(Vertices, &v1))) { delete v1; v1 = *ppv; @@ -53,7 +188,7 @@ void STL_Data::Add_Facet(double x1, double y1, double z1, Tree_Add(THEM->Points, &v1); } - Vertex *v2 = Create_Vertex(Tree_Nbr(Vertices) + 1, x2, y2, z2, 1, 0); + Vertex *v2 = Create_Vertex(Tree_Nbr(Vertices) + 1, x2, y2, z2, lc, 0); if((ppv = (Vertex **) Tree_PQuery(Vertices, &v2))) { delete v2; v2 = *ppv; @@ -63,7 +198,7 @@ void STL_Data::Add_Facet(double x1, double y1, double z1, Tree_Add(THEM->Points, &v2); } - Vertex *v3 = Create_Vertex(Tree_Nbr(Vertices) + 1, x3, y3, z3, 1, 0); + Vertex *v3 = Create_Vertex(Tree_Nbr(Vertices) + 1, x3, y3, z3, lc, 0); if((ppv = (Vertex **) Tree_PQuery(Vertices, &v3))) { delete v3; v3 = *ppv; @@ -72,8 +207,89 @@ void STL_Data::Add_Facet(double x1, double y1, double z1, Tree_Add(Vertices, &v3); Tree_Add(THEM->Points, &v3); } - Simplex *s = Create_Simplex(v1, v2, v3, NULL); - Tree_Add(Simplexes, &s); + + if(in_geometry){ + // Creation Of Each Curve + Curve *c1; + c1 = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.); + c1->Control_Points = List_Create(2, 1, sizeof(Vertex *)); + List_Add(c1->Control_Points, &v1); + List_Add(c1->Control_Points, &v2); + c1->beg = v1; + c1->end = v2; + End_Curve(c1); + Tree_Add(THEM->Curves, &c1); + CreateReversedCurve(THEM, c1); + + Curve *c2; + c2 = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.); + c2->Control_Points = List_Create(2, 1, sizeof(Vertex *)); + List_Add(c2->Control_Points, &v2); + List_Add(c2->Control_Points, &v3); + c2->beg = v2; + c2->end = v3; + End_Curve(c2); + Tree_Add(THEM->Curves, &c2); + CreateReversedCurve(THEM, c2); + + Curve *c3; + c3 = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.); + c3->Control_Points = List_Create(2, 1, sizeof(Vertex *)); + List_Add(c3->Control_Points, &v3); + List_Add(c3->Control_Points, &v1); + c3->beg = v3; + c3->end = v1; + End_Curve(c3); + Tree_Add(THEM->Curves, &c3); + CreateReversedCurve(THEM, c3); + + // Creation Of Each Surface + Surface *s; + s = Create_Surface(NEWSURFACE(), MSH_SURF_PLAN); + s->Method = LIBRE; + s->Generatrices = List_Create(4, 1, sizeof(Curve *)); + List_Add(s->Generatrices, &c1); + List_Add(s->Generatrices, &c2); + List_Add(s->Generatrices, &c3); + s->Support = s; + End_Surface(s); + Tree_Insert(THEM->Surfaces, &s); + } + else{ + Simplex *s = Create_Simplex(v1, v2, v3, NULL); + Tree_Add(Simplexes, &s); + } +} + +void STL_Data::ReplaceDuplicate() +{ + ReplaceAllDuplicates(THEM); +} + +void STL_Data::CreatePhysicalSurface() +{ + Surface *Surf1; + PhysicalGroup *CurrentPhysicalGroup; + int NbSimplex = Tree_Nbr(THEM->Surfaces); + List_T *pSurfaceList = Tree2List(THEM->Surfaces); + + // Scan all Simplexes to find correct Neighbors and add them to a PhysicalGroup + for(int elem1 = 0; elem1 < NbSimplex; elem1++) { + List_Read(pSurfaceList, elem1, &Surf1); + if(BelongToPhysicalEntity((Surf1->Num), NULL)) + continue; + CurrentPhysicalGroup = (PhysicalGroup *) Malloc(sizeof(PhysicalGroup)); + CurrentPhysicalGroup->Num = List_Nbr(THEM->PhysicalGroups)+1; + CurrentPhysicalGroup->Entities = List_Create(1, 1, sizeof(int)); + CurrentPhysicalGroup->Typ = MSH_PHYSICAL_SURFACE; + CurrentPhysicalGroup->Visible = VIS_GEOM | VIS_MESH; + List_Add(CurrentPhysicalGroup->Entities, &(Surf1->Num)); + AddCorrectNeighborToPhysical(Surf1, CurrentPhysicalGroup); + if(List_Nbr(CurrentPhysicalGroup->Entities) > 0) + List_Add(THEM->PhysicalGroups, &CurrentPhysicalGroup); + else + Free(CurrentPhysicalGroup); + } } void STL_Data::GetFacet(int ifac, int &v1, int &v2, int &v3) diff --git a/Mesh/STL.h b/Mesh/STL.h index 5a51a5105a..a21133d8c7 100644 --- a/Mesh/STL.h +++ b/Mesh/STL.h @@ -1,7 +1,7 @@ #ifndef _STL_H_ #define _STL_H_ -// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -18,7 +18,7 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // -// Please report all bugs and problems to <gmsh@geuz.org>. +// Please report all bugs and problems to "gmsh@geuz.org". #include "List.h" #include "Tree.h" @@ -32,28 +32,44 @@ class STL_Data List_T *LSimplexes; void Add_Facet (double x1, double y1, double z1, double x2, double y2, double z2, - double x3, double y3, double z3); + double x3, double y3, double z3, + int in_geometry=0); int GetNbFacets (){ - return Tree_Nbr (Simplexes); + return Tree_Nbr(Simplexes); } int GetNbVertices (){ return Tree_Nbr (Vertices); } void GetFacet (int iFac, int &v1, int &v2, int &v3); void GetVertex (int iVertex, double &x, double &y, double &z); + void ReplaceDuplicate (); + void CreatePhysicalSurface (); STL_Data (); ~STL_Data (); }; -// more convenient representation + +// This is a more convinient surface representation, that can be used +// as a triangulation for any given surface. See the "Triangulation +// Surface" command, which takes a surface defined by edge loops (that +// may be initially planar or anything else) and adds a triangulation +// to it in order to represent the shape of the surface. This +// triangulation may be a STL triangulation (polygons are triangle) +// but anything else is okay. Solid modelers like parasolid or proE +// are able to provide such representations. I have written a +// translator from ideas to gmsh that does that. + class POLY_rep { public : List_T *points_and_normals; // 6 * nbrPoints List_T *polygons; // first integer gives the number of point of the polygon - // then next ones are the points id's of the polygon + // then next ones are the points id's of the polygon POLY_rep (List_T *_p, List_T *_pol) : points_and_normals (_p),polygons(_pol){} - ~POLY_rep(){if(polygons)List_Delete(polygons);if(points_and_normals)List_Delete(points_and_normals);} + ~POLY_rep(){ + if(polygons)List_Delete(polygons); + if(points_and_normals)List_Delete(points_and_normals); + } }; #endif diff --git a/Mesh/Vertex.cpp b/Mesh/Vertex.cpp index 01c33af490..839fbfcd39 100644 --- a/Mesh/Vertex.cpp +++ b/Mesh/Vertex.cpp @@ -1,4 +1,4 @@ -// $Id: Vertex.cpp,v 1.23 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: Vertex.cpp,v 1.24 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -35,6 +35,7 @@ Vertex::Vertex() Pos.X = 0.0; Pos.Y = 0.0; Pos.Z = 0.0; + w = 1.0; lc = 1.0; Mov = NULL; ListSurf = NULL; diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l index 4dd319db05..2ed10db681 100644 --- a/Parser/Gmsh.l +++ b/Parser/Gmsh.l @@ -1,6 +1,5 @@ %{ - -// $Id: Gmsh.l,v 1.53 2004-02-07 01:40:23 geuzaine Exp $ +// $Id: Gmsh.l,v 1.54 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp index 86c71f9d9a..02eaadcd53 100644 --- a/Parser/Gmsh.tab.cpp +++ b/Parser/Gmsh.tab.cpp @@ -190,8 +190,8 @@ #define UNARYPREC 440 #line 1 "Gmsh.y" - -// $Id: Gmsh.tab.cpp,v 1.181 2004-02-07 01:40:23 geuzaine Exp $ + +// $Id: Gmsh.tab.cpp,v 1.182 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -219,8 +219,9 @@ #include "Numeric.h" #include "Context.h" #include "Geo.h" +#include "GeoUtils.h" +#include "Nurbs.h" #include "CAD.h" -#include "DataBase.h" #include "Mesh.h" #include "Draw.h" #include "Create.h" @@ -238,39 +239,32 @@ #include "STL.h" #include "Visibility.h" +// FIXME: most tSTRING and tBIGSTRING are leaked: Free() them! + Tree_T *Symbol_T = NULL; extern Context_T CTX; extern Mesh *THEM; -static fpos_t yyposImbricatedLoopsTab[MAX_OPEN_FILES]; -static int yylinenoImbricatedLoopsTab[MAX_OPEN_FILES]; -static double LoopControlVariablesTab[MAX_OPEN_FILES][3]; -static char *LoopControlVariablesNameTab[MAX_OPEN_FILES]; -static char tmpstring[1024]; -static Symbol TheSymbol, *pSymbol; -static Surface *STL_Surf; -static Shape TheShape; -static int i, j, k, flag, ImbricatedLoop = 0; static int Last_NumberOfPoints = 0; -static double d, *pd; +static Surface *STL_Surf; static ExtrudeParams extr; -static char *str; -static StringXString *pStrCat; -static StringXNumber *pNumCat; -static StringXColor *pColCat; -static double (*pNumOpt)(int num, int action, double value); -static char* (*pStrOpt)(int num, int action, char *value); -static unsigned int (*pColOpt)(int num, int action, unsigned int value); static Post_View *View; +#define MAX_RECUR_LOOPS 100 +static int ImbricatedLoop = 0; +static fpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS]; +static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS]; +static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3]; +static char *LoopControlVariablesNameTab[MAX_RECUR_LOOPS]; + char *strsave (char *ptr); void yyerror (char *s); void yymsg (int type, char *fmt, ...); void skip_until (char *skip, char *until); int PrintListOfDouble (char *format, List_T *list, char *buffer); -#line 82 "Gmsh.y" +#line 76 "Gmsh.y" typedef union { char *c; int i; @@ -290,11 +284,11 @@ typedef union { -#define YYFINAL 2323 +#define YYFINAL 2336 #define YYFLAG -32768 #define YYNTBASE 206 -#define YYTRANSLATE(x) ((unsigned)(x) <= 440 ? yytranslate[x] : 340) +#define YYTRANSLATE(x) ((unsigned)(x) <= 440 ? yytranslate[x] : 341) static const short yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -345,436 +339,440 @@ static const short yytranslate[] = { 0, #if YYDEBUG != 0 static const short yyprhs[] = { 0, - 0, 2, 4, 6, 9, 11, 14, 16, 38, 40, - 41, 44, 46, 48, 50, 53, 56, 59, 62, 65, - 73, 79, 97, 107, 131, 163, 179, 191, 203, 219, - 229, 243, 253, 265, 279, 289, 299, 311, 321, 333, - 343, 355, 369, 383, 395, 409, 427, 437, 449, 461, - 475, 487, 497, 498, 501, 503, 505, 507, 509, 511, - 513, 515, 517, 519, 521, 523, 525, 527, 529, 535, - 543, 550, 559, 560, 563, 566, 569, 572, 575, 578, - 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, - 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, - 640, 644, 645, 659, 661, 665, 666, 680, 682, 686, - 687, 701, 703, 707, 708, 728, 730, 734, 735, 755, - 757, 761, 762, 782, 784, 788, 789, 815, 817, 821, - 822, 848, 850, 854, 855, 881, 883, 887, 888, 920, - 922, 926, 927, 959, 961, 965, 966, 998, 1000, 1004, - 1005, 1037, 1039, 1043, 1044, 1076, 1078, 1082, 1083, 1115, - 1117, 1121, 1122, 1178, 1180, 1184, 1185, 1241, 1243, 1247, - 1248, 1304, 1306, 1310, 1311, 1355, 1357, 1361, 1362, 1406, - 1408, 1412, 1413, 1457, 1459, 1463, 1464, 1502, 1504, 1508, - 1509, 1547, 1549, 1553, 1554, 1592, 1594, 1598, 1599, 1613, - 1615, 1619, 1620, 1636, 1638, 1640, 1642, 1644, 1646, 1648, - 1650, 1655, 1663, 1673, 1680, 1684, 1691, 1698, 1708, 1715, - 1725, 1731, 1740, 1749, 1761, 1768, 1778, 1788, 1798, 1806, - 1815, 1828, 1835, 1843, 1851, 1864, 1872, 1880, 1890, 1908, - 1917, 1926, 1934, 1942, 1954, 1963, 1976, 1985, 2000, 2023, - 2044, 2053, 2062, 2071, 2079, 2088, 2094, 2106, 2112, 2122, - 2124, 2126, 2128, 2129, 2132, 2139, 2146, 2153, 2160, 2165, - 2172, 2177, 2184, 2188, 2194, 2198, 2202, 2207, 2212, 2216, - 2224, 2228, 2236, 2240, 2243, 2246, 2253, 2262, 2271, 2282, - 2284, 2287, 2289, 2293, 2298, 2300, 2309, 2322, 2337, 2338, - 2351, 2352, 2369, 2370, 2389, 2398, 2411, 2426, 2427, 2440, - 2441, 2458, 2459, 2478, 2487, 2500, 2515, 2516, 2529, 2530, - 2547, 2548, 2567, 2569, 2572, 2582, 2590, 2593, 2600, 2610, - 2620, 2629, 2638, 2647, 2654, 2659, 2662, 2665, 2667, 2669, - 2671, 2673, 2675, 2677, 2681, 2684, 2687, 2690, 2694, 2698, - 2702, 2706, 2710, 2714, 2718, 2722, 2726, 2730, 2734, 2738, - 2742, 2746, 2752, 2757, 2762, 2767, 2772, 2777, 2782, 2787, - 2792, 2797, 2802, 2809, 2814, 2819, 2824, 2829, 2834, 2839, - 2846, 2853, 2860, 2865, 2870, 2875, 2880, 2885, 2890, 2895, - 2900, 2905, 2910, 2915, 2922, 2927, 2932, 2937, 2942, 2947, - 2952, 2959, 2966, 2973, 2978, 2980, 2982, 2984, 2986, 2988, - 2993, 2998, 3001, 3007, 3011, 3018, 3023, 3031, 3033, 3036, - 3039, 3043, 3047, 3059, 3069, 3077, 3085, 3086, 3090, 3092, - 3096, 3097, 3101, 3105, 3107, 3111, 3113, 3115, 3119, 3124, - 3128, 3134, 3139, 3141, 3143, 3145, 3149, 3154, 3161, 3169, - 3171, 3173, 3177, 3181, 3191, 3199, 3201, 3207, 3211, 3218, - 3220, 3224, 3226, 3233, 3238, 3243, 3250, 3257 + 0, 2, 4, 6, 9, 11, 14, 15, 18, 20, + 42, 44, 45, 48, 50, 52, 54, 57, 60, 63, + 66, 69, 77, 83, 101, 111, 135, 167, 183, 195, + 207, 223, 233, 247, 257, 269, 283, 293, 303, 315, + 325, 337, 347, 359, 373, 387, 399, 413, 431, 441, + 453, 465, 479, 491, 501, 502, 505, 507, 509, 511, + 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, + 533, 539, 547, 554, 563, 564, 567, 570, 573, 576, + 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, + 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, + 639, 642, 644, 648, 649, 663, 665, 669, 670, 684, + 686, 690, 691, 705, 707, 711, 712, 732, 734, 738, + 739, 759, 761, 765, 766, 786, 788, 792, 793, 819, + 821, 825, 826, 852, 854, 858, 859, 885, 887, 891, + 892, 924, 926, 930, 931, 963, 965, 969, 970, 1002, + 1004, 1008, 1009, 1041, 1043, 1047, 1048, 1080, 1082, 1086, + 1087, 1119, 1121, 1125, 1126, 1182, 1184, 1188, 1189, 1245, + 1247, 1251, 1252, 1308, 1310, 1314, 1315, 1359, 1361, 1365, + 1366, 1410, 1412, 1416, 1417, 1461, 1463, 1467, 1468, 1506, + 1508, 1512, 1513, 1551, 1553, 1557, 1558, 1596, 1598, 1602, + 1603, 1617, 1619, 1623, 1624, 1640, 1642, 1644, 1646, 1648, + 1650, 1652, 1654, 1659, 1667, 1677, 1684, 1688, 1695, 1702, + 1712, 1719, 1729, 1735, 1744, 1753, 1765, 1772, 1782, 1792, + 1802, 1810, 1819, 1832, 1839, 1847, 1855, 1863, 1873, 1881, + 1899, 1907, 1915, 1927, 1936, 1949, 1958, 1967, 1976, 1989, + 2004, 2019, 2042, 2063, 2072, 2081, 2090, 2098, 2107, 2113, + 2125, 2131, 2141, 2143, 2145, 2147, 2148, 2151, 2158, 2165, + 2172, 2179, 2184, 2191, 2196, 2203, 2207, 2213, 2217, 2221, + 2226, 2231, 2235, 2243, 2247, 2255, 2259, 2262, 2265, 2272, + 2281, 2290, 2301, 2303, 2306, 2308, 2312, 2317, 2319, 2328, + 2341, 2356, 2357, 2370, 2371, 2388, 2389, 2408, 2417, 2430, + 2445, 2446, 2459, 2460, 2477, 2478, 2497, 2506, 2519, 2534, + 2535, 2548, 2549, 2566, 2567, 2586, 2588, 2591, 2601, 2609, + 2612, 2619, 2629, 2639, 2648, 2657, 2666, 2673, 2678, 2681, + 2684, 2686, 2688, 2690, 2692, 2694, 2696, 2700, 2703, 2706, + 2709, 2713, 2717, 2721, 2725, 2729, 2733, 2737, 2741, 2745, + 2749, 2753, 2757, 2761, 2765, 2771, 2776, 2781, 2786, 2791, + 2796, 2801, 2806, 2811, 2816, 2821, 2828, 2833, 2838, 2843, + 2848, 2853, 2858, 2865, 2872, 2879, 2884, 2889, 2894, 2899, + 2904, 2909, 2914, 2919, 2924, 2929, 2934, 2941, 2946, 2951, + 2956, 2961, 2966, 2971, 2978, 2985, 2992, 2997, 2999, 3001, + 3003, 3005, 3007, 3012, 3017, 3020, 3026, 3030, 3037, 3042, + 3050, 3052, 3055, 3058, 3062, 3066, 3078, 3088, 3096, 3104, + 3105, 3109, 3111, 3115, 3116, 3120, 3124, 3126, 3130, 3132, + 3134, 3138, 3143, 3147, 3153, 3158, 3160, 3162, 3164, 3168, + 3173, 3180, 3188, 3190, 3192, 3196, 3200, 3210, 3218, 3220, + 3226, 3230, 3237, 3239, 3243, 3245, 3252, 3257, 3262, 3269, + 3276 }; -static const short yyrhs[] = { 209, - 0, 208, 0, 214, 0, 1, 6, 0, 3, 0, - 187, 3, 0, 163, 0, 166, 167, 207, 207, 207, - 168, 169, 165, 207, 207, 207, 165, 207, 207, 207, - 165, 207, 207, 207, 170, 171, 0, 164, 0, 0, - 209, 210, 0, 211, 0, 213, 0, 212, 0, 138, - 6, 0, 139, 6, 0, 141, 6, 0, 140, 6, - 0, 142, 6, 0, 143, 197, 329, 203, 5, 198, - 6, 0, 144, 197, 329, 198, 6, 0, 145, 197, - 5, 203, 5, 203, 329, 203, 329, 203, 5, 203, - 5, 203, 5, 198, 6, 0, 3, 7, 122, 197, - 5, 203, 327, 198, 6, 0, 3, 7, 121, 197, - 5, 203, 325, 203, 333, 203, 324, 203, 324, 203, - 324, 203, 333, 203, 333, 203, 324, 198, 6, 0, - 3, 7, 120, 197, 5, 203, 325, 203, 325, 203, - 331, 203, 324, 203, 324, 203, 324, 203, 324, 203, - 333, 203, 333, 203, 333, 203, 333, 203, 324, 198, - 6, 0, 3, 7, 128, 197, 5, 203, 3, 203, - 3, 203, 3, 203, 324, 198, 6, 0, 3, 7, - 132, 197, 5, 203, 3, 203, 324, 198, 6, 0, - 3, 7, 149, 197, 5, 203, 3, 203, 324, 198, - 6, 0, 3, 7, 130, 197, 5, 203, 188, 203, - 188, 203, 325, 203, 324, 198, 6, 0, 3, 7, - 133, 197, 5, 203, 333, 198, 6, 0, 3, 7, - 134, 197, 5, 203, 333, 203, 3, 203, 324, 198, - 6, 0, 3, 7, 129, 197, 5, 203, 3, 198, - 6, 0, 3, 7, 135, 197, 5, 203, 3, 203, - 325, 198, 6, 0, 3, 7, 137, 197, 5, 203, - 3, 203, 3, 203, 3, 198, 6, 0, 3, 7, - 136, 197, 5, 203, 327, 198, 6, 0, 3, 7, - 131, 197, 5, 203, 3, 198, 6, 0, 3, 7, - 41, 197, 5, 203, 3, 203, 3, 198, 6, 0, - 3, 7, 147, 197, 5, 203, 333, 198, 6, 0, - 3, 7, 148, 197, 5, 203, 333, 203, 3, 198, - 6, 0, 3, 7, 146, 197, 5, 203, 3, 198, - 6, 0, 3, 7, 150, 197, 5, 203, 3, 203, - 325, 198, 6, 0, 3, 7, 151, 197, 5, 203, - 3, 203, 325, 203, 325, 198, 6, 0, 3, 7, - 158, 197, 5, 203, 3, 203, 325, 203, 325, 198, - 6, 0, 3, 7, 152, 197, 5, 203, 3, 203, - 325, 198, 6, 0, 3, 7, 162, 197, 5, 203, - 3, 203, 325, 203, 325, 198, 6, 0, 3, 7, - 153, 197, 5, 203, 3, 203, 333, 203, 333, 203, - 324, 203, 324, 198, 6, 0, 3, 7, 154, 197, - 5, 203, 333, 198, 6, 0, 3, 7, 155, 197, - 156, 203, 324, 203, 3, 198, 6, 0, 3, 7, - 157, 197, 5, 203, 333, 203, 324, 198, 6, 0, - 3, 7, 159, 197, 5, 203, 5, 203, 3, 203, - 3, 198, 6, 0, 3, 7, 160, 197, 5, 203, - 5, 203, 3, 198, 6, 0, 3, 7, 161, 197, - 3, 203, 3, 198, 6, 0, 0, 214, 215, 0, - 217, 0, 216, 0, 299, 0, 300, 0, 301, 0, - 304, 0, 305, 0, 306, 0, 307, 0, 310, 0, - 322, 0, 323, 0, 309, 0, 308, 0, 33, 197, - 5, 198, 6, 0, 33, 197, 5, 203, 335, 198, - 6, 0, 4, 5, 204, 218, 205, 6, 0, 4, - 5, 4, 327, 204, 218, 205, 6, 0, 0, 218, - 220, 0, 218, 223, 0, 218, 226, 0, 218, 229, - 0, 218, 232, 0, 218, 235, 0, 218, 238, 0, - 218, 241, 0, 218, 244, 0, 218, 247, 0, 218, - 250, 0, 218, 253, 0, 218, 256, 0, 218, 259, - 0, 218, 262, 0, 218, 265, 0, 218, 268, 0, - 218, 271, 0, 218, 274, 0, 218, 277, 0, 218, - 280, 0, 218, 283, 0, 218, 286, 0, 218, 289, - 0, 218, 292, 0, 218, 295, 0, 325, 0, 219, - 203, 325, 0, 0, 72, 197, 325, 203, 325, 203, - 325, 198, 221, 204, 219, 205, 6, 0, 325, 0, - 222, 203, 325, 0, 0, 73, 197, 325, 203, 325, - 203, 325, 198, 224, 204, 222, 205, 6, 0, 325, - 0, 225, 203, 325, 0, 0, 74, 197, 325, 203, - 325, 203, 325, 198, 227, 204, 225, 205, 6, 0, - 325, 0, 228, 203, 325, 0, 0, 75, 197, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 198, 230, 204, 228, 205, 6, 0, 325, 0, 231, - 203, 325, 0, 0, 76, 197, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 198, 233, 204, - 231, 205, 6, 0, 325, 0, 234, 203, 325, 0, - 0, 77, 197, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 198, 236, 204, 234, 205, 6, - 0, 325, 0, 237, 203, 325, 0, 0, 78, 197, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 198, 239, 204, - 237, 205, 6, 0, 325, 0, 240, 203, 325, 0, - 0, 79, 197, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 198, 242, 204, 240, 205, 6, 0, 325, 0, 243, - 203, 325, 0, 0, 80, 197, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 198, 245, 204, 243, 205, 6, 0, - 325, 0, 246, 203, 325, 0, 0, 81, 197, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 198, 248, 204, 246, 205, 6, 0, 325, - 0, 249, 203, 325, 0, 0, 82, 197, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 198, 251, 204, 249, 205, 6, 0, 325, 0, - 252, 203, 325, 0, 0, 83, 197, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 198, 254, 204, 252, 205, 6, 0, 325, 0, 255, - 203, 325, 0, 0, 84, 197, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 198, - 257, 204, 255, 205, 6, 0, 325, 0, 258, 203, - 325, 0, 0, 85, 197, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 198, 260, - 204, 258, 205, 6, 0, 325, 0, 261, 203, 325, - 0, 0, 86, 197, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 198, 263, 204, - 261, 205, 6, 0, 325, 0, 264, 203, 325, 0, - 0, 87, 197, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 198, 266, 204, 264, 205, 6, 0, 325, 0, 267, - 203, 325, 0, 0, 88, 197, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 198, 269, 204, 267, 205, 6, 0, - 325, 0, 270, 203, 325, 0, 0, 89, 197, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 198, 272, 204, 270, - 205, 6, 0, 325, 0, 273, 203, 325, 0, 0, - 90, 197, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 198, 275, 204, - 273, 205, 6, 0, 325, 0, 276, 203, 325, 0, - 0, 91, 197, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 198, 278, - 204, 276, 205, 6, 0, 325, 0, 279, 203, 325, - 0, 0, 92, 197, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 198, - 281, 204, 279, 205, 6, 0, 325, 0, 282, 203, - 325, 0, 0, 93, 197, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 198, 284, 204, 282, 205, 6, - 0, 325, 0, 285, 203, 325, 0, 0, 94, 197, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 198, - 287, 204, 285, 205, 6, 0, 325, 0, 288, 203, - 325, 0, 0, 95, 197, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 198, 290, 204, 288, 205, 6, - 0, 339, 0, 291, 203, 339, 0, 0, 96, 197, - 325, 203, 325, 203, 325, 198, 293, 204, 291, 205, - 6, 0, 339, 0, 294, 203, 339, 0, 0, 97, - 197, 325, 203, 325, 203, 325, 203, 325, 198, 296, - 204, 294, 205, 6, 0, 7, 0, 172, 0, 173, - 0, 174, 0, 175, 0, 193, 0, 194, 0, 4, - 297, 325, 6, 0, 4, 199, 325, 200, 297, 325, - 6, 0, 4, 199, 204, 335, 205, 200, 297, 333, - 6, 0, 4, 199, 200, 7, 333, 6, 0, 4, - 298, 6, 0, 4, 199, 325, 200, 298, 6, 0, - 4, 201, 4, 7, 339, 6, 0, 4, 199, 325, - 200, 201, 4, 7, 339, 6, 0, 4, 201, 4, - 297, 325, 6, 0, 4, 199, 325, 200, 201, 4, - 297, 325, 6, 0, 4, 201, 4, 298, 6, 0, - 4, 199, 325, 200, 201, 4, 298, 6, 0, 4, - 201, 106, 201, 4, 7, 336, 6, 0, 4, 199, - 325, 200, 201, 106, 201, 4, 7, 336, 6, 0, - 4, 201, 107, 7, 337, 6, 0, 4, 199, 325, - 200, 201, 107, 7, 337, 6, 0, 58, 197, 4, - 198, 201, 4, 7, 325, 6, 0, 58, 197, 4, - 198, 201, 4, 7, 339, 6, 0, 38, 197, 325, - 198, 7, 327, 6, 0, 54, 38, 197, 325, 198, - 7, 333, 6, 0, 70, 38, 333, 7, 204, 325, - 203, 325, 203, 325, 205, 6, 0, 45, 46, 333, - 7, 325, 6, 0, 41, 197, 325, 198, 7, 333, - 6, 0, 43, 197, 325, 198, 7, 333, 6, 0, - 70, 41, 333, 7, 204, 325, 203, 325, 203, 325, - 205, 6, 0, 39, 197, 325, 198, 7, 333, 6, - 0, 40, 197, 325, 198, 7, 333, 6, 0, 39, - 197, 325, 198, 7, 333, 49, 327, 6, 0, 47, - 197, 325, 198, 7, 204, 325, 203, 325, 203, 5, - 203, 5, 203, 5, 205, 6, 0, 54, 41, 197, - 325, 198, 7, 333, 6, 0, 41, 65, 197, 325, - 198, 7, 333, 6, 0, 99, 197, 325, 198, 7, - 333, 6, 0, 100, 197, 325, 198, 7, 333, 6, - 0, 101, 197, 325, 198, 7, 333, 105, 333, 102, - 325, 6, 0, 49, 42, 197, 325, 198, 7, 333, - 6, 0, 117, 42, 197, 325, 198, 7, 204, 325, - 203, 333, 205, 6, 0, 50, 42, 197, 325, 198, - 7, 333, 6, 0, 51, 42, 197, 325, 198, 7, - 197, 325, 203, 325, 198, 333, 333, 6, 0, 101, - 42, 103, 104, 197, 325, 198, 7, 331, 105, 204, - 333, 203, 333, 205, 102, 204, 325, 203, 325, 205, - 6, 0, 101, 42, 197, 325, 198, 7, 331, 105, - 204, 333, 203, 333, 205, 102, 204, 325, 203, 325, - 205, 6, 0, 54, 42, 197, 325, 198, 7, 333, - 6, 0, 42, 65, 197, 325, 198, 7, 333, 6, - 0, 53, 44, 197, 325, 198, 7, 333, 6, 0, - 44, 197, 325, 198, 7, 333, 6, 0, 54, 44, - 197, 325, 198, 7, 333, 6, 0, 60, 327, 204, - 302, 205, 0, 59, 204, 327, 203, 327, 203, 325, - 205, 204, 302, 205, 0, 61, 327, 204, 302, 205, - 0, 62, 204, 327, 203, 325, 205, 204, 302, 205, - 0, 304, 0, 303, 0, 301, 0, 0, 303, 300, - 0, 303, 38, 204, 335, 205, 6, 0, 303, 41, - 204, 335, 205, 6, 0, 303, 42, 204, 335, 205, - 6, 0, 303, 44, 204, 335, 205, 6, 0, 64, - 204, 303, 205, 0, 64, 4, 199, 325, 200, 6, - 0, 67, 204, 303, 205, 0, 67, 4, 199, 325, - 200, 6, 0, 67, 4, 6, 0, 106, 336, 204, - 303, 205, 0, 118, 339, 6, 0, 119, 339, 6, - 0, 118, 204, 303, 205, 0, 119, 204, 303, 205, - 0, 4, 339, 6, 0, 4, 4, 199, 325, 200, - 339, 6, 0, 4, 325, 6, 0, 58, 197, 4, - 198, 201, 4, 6, 0, 98, 4, 6, 0, 113, - 6, 0, 37, 6, 0, 108, 197, 325, 8, 325, - 198, 0, 108, 197, 325, 8, 325, 8, 325, 198, - 0, 108, 4, 109, 204, 325, 8, 325, 205, 0, - 108, 4, 109, 204, 325, 8, 325, 8, 325, 205, - 0, 110, 0, 116, 4, 0, 114, 0, 115, 4, - 6, 0, 111, 197, 325, 198, 0, 112, 0, 63, - 38, 204, 325, 203, 327, 205, 6, 0, 63, 38, - 204, 325, 203, 327, 203, 327, 203, 325, 205, 6, - 0, 63, 38, 204, 325, 203, 327, 203, 327, 203, - 327, 203, 325, 205, 6, 0, 0, 63, 38, 204, - 325, 203, 327, 205, 311, 204, 320, 205, 6, 0, - 0, 63, 38, 204, 325, 203, 327, 203, 327, 203, - 325, 205, 312, 204, 320, 205, 6, 0, 0, 63, - 38, 204, 325, 203, 327, 203, 327, 203, 327, 203, - 325, 205, 313, 204, 320, 205, 6, 0, 63, 41, - 204, 325, 203, 327, 205, 6, 0, 63, 41, 204, - 325, 203, 327, 203, 327, 203, 325, 205, 6, 0, - 63, 41, 204, 325, 203, 327, 203, 327, 203, 327, - 203, 325, 205, 6, 0, 0, 63, 41, 204, 325, - 203, 327, 205, 314, 204, 320, 205, 6, 0, 0, - 63, 41, 204, 325, 203, 327, 203, 327, 203, 325, - 205, 315, 204, 320, 205, 6, 0, 0, 63, 41, - 204, 325, 203, 327, 203, 327, 203, 327, 203, 325, - 205, 316, 204, 320, 205, 6, 0, 63, 42, 204, - 325, 203, 327, 205, 6, 0, 63, 42, 204, 325, - 203, 327, 203, 327, 203, 325, 205, 6, 0, 63, - 42, 204, 325, 203, 327, 203, 327, 203, 327, 203, - 325, 205, 6, 0, 0, 63, 42, 204, 325, 203, - 327, 205, 317, 204, 320, 205, 6, 0, 0, 63, - 42, 204, 325, 203, 327, 203, 327, 203, 325, 205, - 318, 204, 320, 205, 6, 0, 0, 63, 42, 204, - 325, 203, 327, 203, 327, 203, 327, 203, 325, 205, - 319, 204, 320, 205, 6, 0, 321, 0, 320, 321, - 0, 71, 204, 333, 203, 333, 203, 333, 205, 6, - 0, 71, 204, 333, 203, 333, 205, 6, 0, 66, - 6, 0, 52, 41, 333, 7, 325, 6, 0, 52, - 41, 333, 7, 325, 55, 57, 325, 6, 0, 52, - 41, 333, 7, 325, 55, 56, 325, 6, 0, 52, - 42, 204, 325, 205, 7, 333, 6, 0, 48, 42, - 204, 325, 205, 7, 333, 6, 0, 52, 44, 204, - 325, 205, 7, 333, 6, 0, 66, 42, 333, 7, - 325, 6, 0, 66, 42, 333, 6, 0, 68, 6, - 0, 69, 6, 0, 123, 0, 124, 0, 125, 0, - 126, 0, 127, 0, 326, 0, 197, 325, 198, 0, - 187, 325, 0, 186, 325, 0, 192, 325, 0, 325, - 187, 325, 0, 325, 186, 325, 0, 325, 188, 325, - 0, 325, 189, 325, 0, 325, 190, 325, 0, 325, - 196, 325, 0, 325, 182, 325, 0, 325, 184, 325, - 0, 325, 183, 325, 0, 325, 185, 325, 0, 325, - 179, 325, 0, 325, 180, 325, 0, 325, 178, 325, - 0, 325, 177, 325, 0, 325, 176, 325, 8, 325, - 0, 12, 197, 325, 198, 0, 13, 197, 325, 198, - 0, 14, 197, 325, 198, 0, 15, 197, 325, 198, - 0, 16, 197, 325, 198, 0, 17, 197, 325, 198, - 0, 18, 197, 325, 198, 0, 19, 197, 325, 198, - 0, 20, 197, 325, 198, 0, 22, 197, 325, 198, - 0, 23, 197, 325, 203, 325, 198, 0, 24, 197, - 325, 198, 0, 25, 197, 325, 198, 0, 26, 197, - 325, 198, 0, 27, 197, 325, 198, 0, 28, 197, - 325, 198, 0, 29, 197, 325, 198, 0, 30, 197, - 325, 203, 325, 198, 0, 31, 197, 325, 203, 325, - 198, 0, 32, 197, 325, 203, 325, 198, 0, 21, - 197, 325, 198, 0, 12, 199, 325, 200, 0, 13, - 199, 325, 200, 0, 14, 199, 325, 200, 0, 15, - 199, 325, 200, 0, 16, 199, 325, 200, 0, 17, - 199, 325, 200, 0, 18, 199, 325, 200, 0, 19, - 199, 325, 200, 0, 20, 199, 325, 200, 0, 22, - 199, 325, 200, 0, 23, 199, 325, 203, 325, 200, - 0, 24, 199, 325, 200, 0, 25, 199, 325, 200, - 0, 26, 199, 325, 200, 0, 27, 199, 325, 200, - 0, 28, 199, 325, 200, 0, 29, 199, 325, 200, - 0, 30, 199, 325, 203, 325, 200, 0, 31, 199, - 325, 203, 325, 200, 0, 32, 199, 325, 203, 325, - 200, 0, 21, 199, 325, 200, 0, 3, 0, 9, - 0, 10, 0, 11, 0, 4, 0, 4, 199, 325, - 200, 0, 202, 4, 199, 200, 0, 4, 298, 0, - 4, 199, 325, 200, 298, 0, 4, 201, 4, 0, - 4, 199, 325, 200, 201, 4, 0, 4, 201, 4, - 298, 0, 4, 199, 325, 200, 201, 4, 298, 0, - 328, 0, 187, 327, 0, 186, 327, 0, 327, 187, - 327, 0, 327, 186, 327, 0, 204, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 205, 0, 204, 325, - 203, 325, 203, 325, 203, 325, 205, 0, 204, 325, - 203, 325, 203, 325, 205, 0, 197, 325, 203, 325, - 203, 325, 198, 0, 0, 197, 330, 198, 0, 5, - 0, 330, 203, 5, 0, 0, 204, 332, 205, 0, - 197, 332, 198, 0, 333, 0, 332, 203, 333, 0, - 325, 0, 334, 0, 204, 335, 205, 0, 187, 204, - 335, 205, 0, 325, 8, 325, 0, 325, 8, 325, - 8, 325, 0, 38, 204, 325, 205, 0, 301, 0, - 304, 0, 310, 0, 4, 199, 200, 0, 187, 4, - 199, 200, 0, 4, 199, 204, 335, 205, 200, 0, - 187, 4, 199, 204, 335, 205, 200, 0, 325, 0, - 334, 0, 335, 203, 325, 0, 335, 203, 334, 0, - 204, 325, 203, 325, 203, 325, 203, 325, 205, 0, - 204, 325, 203, 325, 203, 325, 205, 0, 4, 0, - 4, 201, 106, 201, 4, 0, 204, 338, 205, 0, - 4, 199, 325, 200, 201, 107, 0, 336, 0, 338, - 203, 336, 0, 5, 0, 35, 197, 339, 203, 339, - 198, 0, 36, 197, 339, 198, 0, 34, 197, 339, - 198, 0, 34, 197, 339, 203, 335, 198, 0, 34, - 197, 4, 201, 4, 198, 0, 34, 197, 4, 199, - 325, 200, 201, 4, 198, 0 +static const short yyrhs[] = { 210, + 0, 208, 0, 215, 0, 1, 6, 0, 3, 0, + 187, 3, 0, 0, 208, 209, 0, 163, 0, 166, + 167, 207, 207, 207, 168, 169, 165, 207, 207, 207, + 165, 207, 207, 207, 165, 207, 207, 207, 170, 171, + 0, 164, 0, 0, 210, 211, 0, 212, 0, 214, + 0, 213, 0, 138, 6, 0, 139, 6, 0, 141, + 6, 0, 140, 6, 0, 142, 6, 0, 143, 197, + 330, 203, 5, 198, 6, 0, 144, 197, 330, 198, + 6, 0, 145, 197, 5, 203, 5, 203, 330, 203, + 330, 203, 5, 203, 5, 203, 5, 198, 6, 0, + 3, 7, 122, 197, 5, 203, 328, 198, 6, 0, + 3, 7, 121, 197, 5, 203, 326, 203, 334, 203, + 325, 203, 325, 203, 325, 203, 334, 203, 334, 203, + 325, 198, 6, 0, 3, 7, 120, 197, 5, 203, + 326, 203, 326, 203, 332, 203, 325, 203, 325, 203, + 325, 203, 325, 203, 334, 203, 334, 203, 334, 203, + 334, 203, 325, 198, 6, 0, 3, 7, 128, 197, + 5, 203, 3, 203, 3, 203, 3, 203, 325, 198, + 6, 0, 3, 7, 132, 197, 5, 203, 3, 203, + 325, 198, 6, 0, 3, 7, 149, 197, 5, 203, + 3, 203, 325, 198, 6, 0, 3, 7, 130, 197, + 5, 203, 188, 203, 188, 203, 326, 203, 325, 198, + 6, 0, 3, 7, 133, 197, 5, 203, 334, 198, + 6, 0, 3, 7, 134, 197, 5, 203, 334, 203, + 3, 203, 325, 198, 6, 0, 3, 7, 129, 197, + 5, 203, 3, 198, 6, 0, 3, 7, 135, 197, + 5, 203, 3, 203, 326, 198, 6, 0, 3, 7, + 137, 197, 5, 203, 3, 203, 3, 203, 3, 198, + 6, 0, 3, 7, 136, 197, 5, 203, 328, 198, + 6, 0, 3, 7, 131, 197, 5, 203, 3, 198, + 6, 0, 3, 7, 41, 197, 5, 203, 3, 203, + 3, 198, 6, 0, 3, 7, 147, 197, 5, 203, + 334, 198, 6, 0, 3, 7, 148, 197, 5, 203, + 334, 203, 3, 198, 6, 0, 3, 7, 146, 197, + 5, 203, 3, 198, 6, 0, 3, 7, 150, 197, + 5, 203, 3, 203, 326, 198, 6, 0, 3, 7, + 151, 197, 5, 203, 3, 203, 326, 203, 326, 198, + 6, 0, 3, 7, 158, 197, 5, 203, 3, 203, + 326, 203, 326, 198, 6, 0, 3, 7, 152, 197, + 5, 203, 3, 203, 326, 198, 6, 0, 3, 7, + 162, 197, 5, 203, 3, 203, 326, 203, 326, 198, + 6, 0, 3, 7, 153, 197, 5, 203, 3, 203, + 334, 203, 334, 203, 325, 203, 325, 198, 6, 0, + 3, 7, 154, 197, 5, 203, 334, 198, 6, 0, + 3, 7, 155, 197, 156, 203, 325, 203, 3, 198, + 6, 0, 3, 7, 157, 197, 5, 203, 334, 203, + 325, 198, 6, 0, 3, 7, 159, 197, 5, 203, + 5, 203, 3, 203, 3, 198, 6, 0, 3, 7, + 160, 197, 5, 203, 5, 203, 3, 198, 6, 0, + 3, 7, 161, 197, 3, 203, 3, 198, 6, 0, + 0, 215, 216, 0, 218, 0, 217, 0, 300, 0, + 301, 0, 302, 0, 305, 0, 306, 0, 307, 0, + 308, 0, 311, 0, 323, 0, 324, 0, 310, 0, + 309, 0, 33, 197, 5, 198, 6, 0, 33, 197, + 5, 203, 336, 198, 6, 0, 4, 5, 204, 219, + 205, 6, 0, 4, 5, 4, 328, 204, 219, 205, + 6, 0, 0, 219, 221, 0, 219, 224, 0, 219, + 227, 0, 219, 230, 0, 219, 233, 0, 219, 236, + 0, 219, 239, 0, 219, 242, 0, 219, 245, 0, + 219, 248, 0, 219, 251, 0, 219, 254, 0, 219, + 257, 0, 219, 260, 0, 219, 263, 0, 219, 266, + 0, 219, 269, 0, 219, 272, 0, 219, 275, 0, + 219, 278, 0, 219, 281, 0, 219, 284, 0, 219, + 287, 0, 219, 290, 0, 219, 293, 0, 219, 296, + 0, 326, 0, 220, 203, 326, 0, 0, 72, 197, + 326, 203, 326, 203, 326, 198, 222, 204, 220, 205, + 6, 0, 326, 0, 223, 203, 326, 0, 0, 73, + 197, 326, 203, 326, 203, 326, 198, 225, 204, 223, + 205, 6, 0, 326, 0, 226, 203, 326, 0, 0, + 74, 197, 326, 203, 326, 203, 326, 198, 228, 204, + 226, 205, 6, 0, 326, 0, 229, 203, 326, 0, + 0, 75, 197, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 198, 231, 204, 229, 205, 6, + 0, 326, 0, 232, 203, 326, 0, 0, 76, 197, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 198, 234, 204, 232, 205, 6, 0, 326, 0, + 235, 203, 326, 0, 0, 77, 197, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 198, 237, + 204, 235, 205, 6, 0, 326, 0, 238, 203, 326, + 0, 0, 78, 197, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 198, 240, 204, 238, 205, 6, 0, 326, 0, + 241, 203, 326, 0, 0, 79, 197, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 198, 243, 204, 241, 205, 6, + 0, 326, 0, 244, 203, 326, 0, 0, 80, 197, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 198, 246, 204, + 244, 205, 6, 0, 326, 0, 247, 203, 326, 0, + 0, 81, 197, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 198, 249, 204, 247, + 205, 6, 0, 326, 0, 250, 203, 326, 0, 0, + 82, 197, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 198, 252, 204, 250, 205, + 6, 0, 326, 0, 253, 203, 326, 0, 0, 83, + 197, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 198, 255, 204, 253, 205, 6, + 0, 326, 0, 256, 203, 326, 0, 0, 84, 197, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 198, 258, 204, 256, 205, 6, 0, + 326, 0, 259, 203, 326, 0, 0, 85, 197, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 198, 261, 204, 259, 205, 6, 0, 326, + 0, 262, 203, 326, 0, 0, 86, 197, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 198, 264, 204, 262, 205, 6, 0, 326, 0, + 265, 203, 326, 0, 0, 87, 197, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 198, 267, 204, 265, 205, 6, + 0, 326, 0, 268, 203, 326, 0, 0, 88, 197, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 198, 270, 204, + 268, 205, 6, 0, 326, 0, 271, 203, 326, 0, + 0, 89, 197, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 198, 273, 204, 271, 205, 6, 0, 326, 0, 274, + 203, 326, 0, 0, 90, 197, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 198, 276, 204, 274, 205, 6, 0, 326, 0, + 277, 203, 326, 0, 0, 91, 197, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 198, 279, 204, 277, 205, 6, 0, 326, + 0, 280, 203, 326, 0, 0, 92, 197, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 198, 282, 204, 280, 205, 6, 0, + 326, 0, 283, 203, 326, 0, 0, 93, 197, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 198, 285, + 204, 283, 205, 6, 0, 326, 0, 286, 203, 326, + 0, 0, 94, 197, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 198, 288, 204, 286, 205, 6, 0, + 326, 0, 289, 203, 326, 0, 0, 95, 197, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 198, 291, + 204, 289, 205, 6, 0, 340, 0, 292, 203, 340, + 0, 0, 96, 197, 326, 203, 326, 203, 326, 198, + 294, 204, 292, 205, 6, 0, 340, 0, 295, 203, + 340, 0, 0, 97, 197, 326, 203, 326, 203, 326, + 203, 326, 198, 297, 204, 295, 205, 6, 0, 7, + 0, 172, 0, 173, 0, 174, 0, 175, 0, 193, + 0, 194, 0, 4, 298, 326, 6, 0, 4, 199, + 326, 200, 298, 326, 6, 0, 4, 199, 204, 336, + 205, 200, 298, 334, 6, 0, 4, 199, 200, 7, + 334, 6, 0, 4, 299, 6, 0, 4, 199, 326, + 200, 299, 6, 0, 4, 201, 4, 7, 340, 6, + 0, 4, 199, 326, 200, 201, 4, 7, 340, 6, + 0, 4, 201, 4, 298, 326, 6, 0, 4, 199, + 326, 200, 201, 4, 298, 326, 6, 0, 4, 201, + 4, 299, 6, 0, 4, 199, 326, 200, 201, 4, + 299, 6, 0, 4, 201, 106, 201, 4, 7, 337, + 6, 0, 4, 199, 326, 200, 201, 106, 201, 4, + 7, 337, 6, 0, 4, 201, 107, 7, 338, 6, + 0, 4, 199, 326, 200, 201, 107, 7, 338, 6, + 0, 58, 197, 4, 198, 201, 4, 7, 326, 6, + 0, 58, 197, 4, 198, 201, 4, 7, 340, 6, + 0, 38, 197, 326, 198, 7, 328, 6, 0, 54, + 38, 197, 326, 198, 7, 334, 6, 0, 70, 38, + 334, 7, 204, 326, 203, 326, 203, 326, 205, 6, + 0, 45, 46, 334, 7, 326, 6, 0, 41, 197, + 326, 198, 7, 334, 6, 0, 43, 197, 326, 198, + 7, 334, 6, 0, 39, 197, 326, 198, 7, 334, + 6, 0, 39, 197, 326, 198, 7, 334, 49, 328, + 6, 0, 40, 197, 326, 198, 7, 334, 6, 0, + 47, 197, 326, 198, 7, 204, 326, 203, 326, 203, + 5, 203, 5, 203, 5, 205, 6, 0, 99, 197, + 326, 198, 7, 334, 6, 0, 100, 197, 326, 198, + 7, 334, 6, 0, 101, 197, 326, 198, 7, 334, + 105, 334, 102, 326, 6, 0, 41, 65, 197, 326, + 198, 7, 334, 6, 0, 70, 41, 334, 7, 204, + 326, 203, 326, 203, 326, 205, 6, 0, 54, 41, + 197, 326, 198, 7, 334, 6, 0, 49, 42, 197, + 326, 198, 7, 334, 6, 0, 50, 42, 197, 326, + 198, 7, 334, 6, 0, 117, 42, 197, 326, 198, + 7, 204, 326, 203, 334, 205, 6, 0, 51, 42, + 204, 326, 205, 7, 197, 326, 203, 326, 198, 334, + 334, 6, 0, 51, 42, 197, 326, 198, 7, 197, + 326, 203, 326, 198, 334, 334, 6, 0, 101, 42, + 103, 104, 197, 326, 198, 7, 332, 105, 204, 334, + 203, 334, 205, 102, 204, 326, 203, 326, 205, 6, + 0, 101, 42, 197, 326, 198, 7, 332, 105, 204, + 334, 203, 334, 205, 102, 204, 326, 203, 326, 205, + 6, 0, 42, 65, 197, 326, 198, 7, 334, 6, + 0, 54, 42, 197, 326, 198, 7, 334, 6, 0, + 53, 44, 197, 326, 198, 7, 334, 6, 0, 44, + 197, 326, 198, 7, 334, 6, 0, 54, 44, 197, + 326, 198, 7, 334, 6, 0, 60, 328, 204, 303, + 205, 0, 59, 204, 328, 203, 328, 203, 326, 205, + 204, 303, 205, 0, 61, 328, 204, 303, 205, 0, + 62, 204, 328, 203, 326, 205, 204, 303, 205, 0, + 305, 0, 304, 0, 302, 0, 0, 304, 301, 0, + 304, 38, 204, 336, 205, 6, 0, 304, 41, 204, + 336, 205, 6, 0, 304, 42, 204, 336, 205, 6, + 0, 304, 44, 204, 336, 205, 6, 0, 64, 204, + 304, 205, 0, 64, 4, 199, 326, 200, 6, 0, + 67, 204, 304, 205, 0, 67, 4, 199, 326, 200, + 6, 0, 67, 4, 6, 0, 106, 337, 204, 304, + 205, 0, 118, 340, 6, 0, 119, 340, 6, 0, + 118, 204, 304, 205, 0, 119, 204, 304, 205, 0, + 4, 340, 6, 0, 4, 4, 199, 326, 200, 340, + 6, 0, 4, 326, 6, 0, 58, 197, 4, 198, + 201, 4, 6, 0, 98, 4, 6, 0, 113, 6, + 0, 37, 6, 0, 108, 197, 326, 8, 326, 198, + 0, 108, 197, 326, 8, 326, 8, 326, 198, 0, + 108, 4, 109, 204, 326, 8, 326, 205, 0, 108, + 4, 109, 204, 326, 8, 326, 8, 326, 205, 0, + 110, 0, 116, 4, 0, 114, 0, 115, 4, 6, + 0, 111, 197, 326, 198, 0, 112, 0, 63, 38, + 204, 326, 203, 328, 205, 6, 0, 63, 38, 204, + 326, 203, 328, 203, 328, 203, 326, 205, 6, 0, + 63, 38, 204, 326, 203, 328, 203, 328, 203, 328, + 203, 326, 205, 6, 0, 0, 63, 38, 204, 326, + 203, 328, 205, 312, 204, 321, 205, 6, 0, 0, + 63, 38, 204, 326, 203, 328, 203, 328, 203, 326, + 205, 313, 204, 321, 205, 6, 0, 0, 63, 38, + 204, 326, 203, 328, 203, 328, 203, 328, 203, 326, + 205, 314, 204, 321, 205, 6, 0, 63, 41, 204, + 326, 203, 328, 205, 6, 0, 63, 41, 204, 326, + 203, 328, 203, 328, 203, 326, 205, 6, 0, 63, + 41, 204, 326, 203, 328, 203, 328, 203, 328, 203, + 326, 205, 6, 0, 0, 63, 41, 204, 326, 203, + 328, 205, 315, 204, 321, 205, 6, 0, 0, 63, + 41, 204, 326, 203, 328, 203, 328, 203, 326, 205, + 316, 204, 321, 205, 6, 0, 0, 63, 41, 204, + 326, 203, 328, 203, 328, 203, 328, 203, 326, 205, + 317, 204, 321, 205, 6, 0, 63, 42, 204, 326, + 203, 328, 205, 6, 0, 63, 42, 204, 326, 203, + 328, 203, 328, 203, 326, 205, 6, 0, 63, 42, + 204, 326, 203, 328, 203, 328, 203, 328, 203, 326, + 205, 6, 0, 0, 63, 42, 204, 326, 203, 328, + 205, 318, 204, 321, 205, 6, 0, 0, 63, 42, + 204, 326, 203, 328, 203, 328, 203, 326, 205, 319, + 204, 321, 205, 6, 0, 0, 63, 42, 204, 326, + 203, 328, 203, 328, 203, 328, 203, 326, 205, 320, + 204, 321, 205, 6, 0, 322, 0, 321, 322, 0, + 71, 204, 334, 203, 334, 203, 334, 205, 6, 0, + 71, 204, 334, 203, 334, 205, 6, 0, 66, 6, + 0, 52, 41, 334, 7, 326, 6, 0, 52, 41, + 334, 7, 326, 55, 57, 326, 6, 0, 52, 41, + 334, 7, 326, 55, 56, 326, 6, 0, 52, 42, + 204, 326, 205, 7, 334, 6, 0, 48, 42, 204, + 326, 205, 7, 334, 6, 0, 52, 44, 204, 326, + 205, 7, 334, 6, 0, 66, 42, 334, 7, 326, + 6, 0, 66, 42, 334, 6, 0, 68, 6, 0, + 69, 6, 0, 123, 0, 124, 0, 125, 0, 126, + 0, 127, 0, 327, 0, 197, 326, 198, 0, 187, + 326, 0, 186, 326, 0, 192, 326, 0, 326, 187, + 326, 0, 326, 186, 326, 0, 326, 188, 326, 0, + 326, 189, 326, 0, 326, 190, 326, 0, 326, 196, + 326, 0, 326, 182, 326, 0, 326, 184, 326, 0, + 326, 183, 326, 0, 326, 185, 326, 0, 326, 179, + 326, 0, 326, 180, 326, 0, 326, 178, 326, 0, + 326, 177, 326, 0, 326, 176, 326, 8, 326, 0, + 12, 197, 326, 198, 0, 13, 197, 326, 198, 0, + 14, 197, 326, 198, 0, 15, 197, 326, 198, 0, + 16, 197, 326, 198, 0, 17, 197, 326, 198, 0, + 18, 197, 326, 198, 0, 19, 197, 326, 198, 0, + 20, 197, 326, 198, 0, 22, 197, 326, 198, 0, + 23, 197, 326, 203, 326, 198, 0, 24, 197, 326, + 198, 0, 25, 197, 326, 198, 0, 26, 197, 326, + 198, 0, 27, 197, 326, 198, 0, 28, 197, 326, + 198, 0, 29, 197, 326, 198, 0, 30, 197, 326, + 203, 326, 198, 0, 31, 197, 326, 203, 326, 198, + 0, 32, 197, 326, 203, 326, 198, 0, 21, 197, + 326, 198, 0, 12, 199, 326, 200, 0, 13, 199, + 326, 200, 0, 14, 199, 326, 200, 0, 15, 199, + 326, 200, 0, 16, 199, 326, 200, 0, 17, 199, + 326, 200, 0, 18, 199, 326, 200, 0, 19, 199, + 326, 200, 0, 20, 199, 326, 200, 0, 22, 199, + 326, 200, 0, 23, 199, 326, 203, 326, 200, 0, + 24, 199, 326, 200, 0, 25, 199, 326, 200, 0, + 26, 199, 326, 200, 0, 27, 199, 326, 200, 0, + 28, 199, 326, 200, 0, 29, 199, 326, 200, 0, + 30, 199, 326, 203, 326, 200, 0, 31, 199, 326, + 203, 326, 200, 0, 32, 199, 326, 203, 326, 200, + 0, 21, 199, 326, 200, 0, 3, 0, 9, 0, + 10, 0, 11, 0, 4, 0, 4, 199, 326, 200, + 0, 202, 4, 199, 200, 0, 4, 299, 0, 4, + 199, 326, 200, 299, 0, 4, 201, 4, 0, 4, + 199, 326, 200, 201, 4, 0, 4, 201, 4, 299, + 0, 4, 199, 326, 200, 201, 4, 299, 0, 329, + 0, 187, 328, 0, 186, 328, 0, 328, 187, 328, + 0, 328, 186, 328, 0, 204, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 205, 0, 204, 326, 203, + 326, 203, 326, 203, 326, 205, 0, 204, 326, 203, + 326, 203, 326, 205, 0, 197, 326, 203, 326, 203, + 326, 198, 0, 0, 197, 331, 198, 0, 5, 0, + 331, 203, 5, 0, 0, 204, 333, 205, 0, 197, + 333, 198, 0, 334, 0, 333, 203, 334, 0, 326, + 0, 335, 0, 204, 336, 205, 0, 187, 204, 336, + 205, 0, 326, 8, 326, 0, 326, 8, 326, 8, + 326, 0, 38, 204, 326, 205, 0, 302, 0, 305, + 0, 311, 0, 4, 199, 200, 0, 187, 4, 199, + 200, 0, 4, 199, 204, 336, 205, 200, 0, 187, + 4, 199, 204, 336, 205, 200, 0, 326, 0, 335, + 0, 336, 203, 326, 0, 336, 203, 335, 0, 204, + 326, 203, 326, 203, 326, 203, 326, 205, 0, 204, + 326, 203, 326, 203, 326, 205, 0, 4, 0, 4, + 201, 106, 201, 4, 0, 204, 339, 205, 0, 4, + 199, 326, 200, 201, 107, 0, 337, 0, 339, 203, + 337, 0, 5, 0, 35, 197, 340, 203, 340, 198, + 0, 36, 197, 340, 198, 0, 34, 197, 340, 198, + 0, 34, 197, 340, 203, 336, 198, 0, 34, 197, + 4, 201, 4, 198, 0, 34, 197, 4, 199, 326, + 200, 201, 4, 198, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 167, 169, 170, 171, 176, 178, 181, 189, 203, 213, - 215, 218, 220, 221, 224, 230, 235, 236, 237, 240, - 244, 247, 253, 258, 264, 272, 277, 281, 287, 292, - 296, 301, 305, 308, 313, 317, 321, 325, 330, 334, - 337, 341, 345, 349, 353, 357, 361, 364, 368, 371, - 375, 378, 385, 389, 395, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 412, 417, - 432, 437, 443, 448, 449, 450, 451, 452, 453, 454, + 161, 163, 164, 165, 170, 172, 175, 177, 180, 188, + 202, 219, 221, 224, 226, 227, 230, 236, 241, 242, + 243, 246, 250, 253, 259, 264, 270, 278, 283, 287, + 293, 298, 302, 307, 311, 314, 319, 323, 327, 331, + 336, 340, 343, 347, 351, 355, 359, 363, 367, 370, + 374, 377, 381, 384, 391, 393, 396, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 413, 418, 434, 439, 445, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 476, - 479, 483, 489, 495, 498, 502, 508, 514, 517, 521, - 527, 533, 536, 540, 548, 554, 557, 561, 569, 575, - 578, 582, 590, 596, 599, 603, 615, 621, 624, 628, - 640, 646, 649, 653, 665, 671, 674, 678, 691, 697, - 700, 704, 717, 723, 726, 730, 743, 749, 752, 756, - 769, 775, 778, 782, 795, 801, 804, 808, 821, 827, - 830, 834, 857, 863, 866, 870, 893, 899, 902, 906, - 929, 935, 938, 942, 960, 966, 969, 973, 991, 997, - 1000, 1004, 1022, 1028, 1031, 1035, 1052, 1058, 1061, 1065, - 1082, 1088, 1091, 1095, 1112, 1118, 1124, 1131, 1139, 1145, - 1151, 1158, 1166, 1175, 1177, 1178, 1179, 1180, 1183, 1185, - 1188, 1219, 1253, 1300, 1315, 1324, 1339, 1351, 1365, 1388, - 1412, 1424, 1438, 1450, 1464, 1484, 1506, 1516, 1530, 1541, - 1547, 1566, 1580, 1586, 1592, 1611, 1617, 1623, 1639, 1646, - 1652, 1658, 1669, 1680, 1705, 1711, 1730, 1752, 1758, 1766, - 1772, 1778, 1787, 1793, 1799, 1809, 1815, 1820, 1825, 1832, - 1834, 1835, 1838, 1843, 1847, 1861, 1875, 1889, 1907, 1918, - 1928, 1936, 1940, 1949, 1961, 1969, 1974, 1983, 1994, 2030, - 2043, 2060, 2069, 2078, 2082, 2102, 2114, 2124, 2145, 2166, - 2187, 2193, 2198, 2203, 2207, 2215, 2228, 2238, 2248, 2253, - 2263, 2268, 2278, 2283, 2295, 2312, 2329, 2346, 2351, 2368, - 2373, 2390, 2395, 2415, 2431, 2447, 2463, 2468, 2485, 2491, - 2508, 2514, 2533, 2537, 2542, 2569, 2593, 2601, 2620, 2638, - 2656, 2678, 2699, 2720, 2734, 2753, 2758, 2767, 2769, 2770, - 2771, 2772, 2775, 2777, 2778, 2779, 2780, 2781, 2782, 2783, - 2784, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, - 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, - 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, - 2820, 2821, 2822, 2824, 2825, 2826, 2827, 2828, 2829, 2830, - 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, - 2841, 2842, 2843, 2844, 2849, 2854, 2855, 2856, 2860, 2871, - 2888, 2900, 2911, 2930, 2946, 2962, 2978, 2995, 3000, 3004, - 3008, 3012, 3018, 3023, 3027, 3031, 3037, 3041, 3046, 3050, - 3055, 3059, 3063, 3069, 3075, 3082, 3088, 3092, 3096, 3106, - 3113, 3124, 3144, 3153, 3162, 3173, 3187, 3203, 3223, 3247, - 3253, 3257, 3261, 3272, 3277, 3288, 3293, 3311, 3316, 3329, - 3335, 3341, 3346, 3354, 3367, 3371, 3389, 3403 + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 478, 481, 485, 491, 497, 500, 504, 510, 516, + 519, 523, 529, 535, 538, 542, 550, 556, 559, 563, + 571, 577, 580, 584, 592, 598, 601, 605, 617, 623, + 626, 630, 642, 648, 651, 655, 667, 673, 676, 680, + 693, 699, 702, 706, 719, 725, 728, 732, 745, 751, + 754, 758, 771, 777, 780, 784, 797, 803, 806, 810, + 823, 829, 832, 836, 859, 865, 868, 872, 895, 901, + 904, 908, 931, 937, 940, 944, 962, 968, 971, 975, + 993, 999, 1002, 1006, 1024, 1030, 1033, 1037, 1054, 1060, + 1063, 1067, 1084, 1090, 1093, 1097, 1114, 1120, 1126, 1133, + 1141, 1147, 1153, 1160, 1168, 1177, 1179, 1180, 1181, 1182, + 1185, 1187, 1190, 1222, 1258, 1307, 1323, 1333, 1351, 1364, + 1380, 1405, 1431, 1444, 1460, 1473, 1489, 1508, 1530, 1539, + 1553, 1573, 1589, 1608, 1627, 1645, 1663, 1681, 1707, 1725, + 1744, 1768, 1792, 1818, 1835, 1853, 1872, 1891, 1930, 1955, + 1977, 1993, 2012, 2031, 2047, 2066, 2083, 2100, 2120, 2126, + 2131, 2136, 2143, 2145, 2146, 2149, 2154, 2158, 2174, 2190, + 2206, 2226, 2240, 2250, 2260, 2264, 2273, 2287, 2295, 2300, + 2311, 2324, 2369, 2383, 2398, 2407, 2416, 2420, 2440, 2456, + 2470, 2495, 2520, 2547, 2553, 2558, 2563, 2567, 2575, 2589, + 2600, 2611, 2616, 2627, 2632, 2643, 2648, 2661, 2679, 2697, + 2715, 2720, 2738, 2743, 2761, 2766, 2787, 2804, 2821, 2838, + 2843, 2860, 2866, 2883, 2889, 2908, 2912, 2917, 2944, 2968, + 2976, 2995, 3013, 3031, 3054, 3076, 3098, 3112, 3131, 3136, + 3145, 3147, 3148, 3149, 3150, 3153, 3155, 3156, 3157, 3158, + 3159, 3160, 3161, 3162, 3169, 3170, 3171, 3172, 3173, 3174, + 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, + 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, + 3195, 3196, 3197, 3198, 3199, 3200, 3202, 3203, 3204, 3205, + 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, + 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3227, 3232, 3233, + 3234, 3238, 3250, 3269, 3282, 3294, 3316, 3333, 3350, 3367, + 3386, 3391, 3395, 3399, 3403, 3409, 3414, 3418, 3422, 3428, + 3432, 3437, 3441, 3446, 3450, 3454, 3460, 3466, 3473, 3479, + 3483, 3487, 3498, 3505, 3516, 3536, 3546, 3556, 3568, 3584, + 3602, 3625, 3652, 3658, 3662, 3666, 3678, 3683, 3695, 3701, + 3721, 3726, 3739, 3745, 3751, 3756, 3764, 3778, 3782, 3801, + 3817 }; #endif @@ -811,12 +809,12 @@ static const char * const yytname[] = { "$","error","$undefined.","tDOUBLE", "tAFFECTMINUS","tAFFECTTIMES","tAFFECTDIVIDE","'?'","tOR","tAND","tEQUAL","tNOTEQUAL", "tAPPROXEQUAL","'<'","tLESSOREQUAL","'>'","tGREATEROREQUAL","'+'","'-'","'*'", "'/'","'%'","tCROSSPRODUCT","'!'","tPLUSPLUS","tMINUSMINUS","UNARYPREC","'^'", -"'('","')'","'['","']'","'.'","'#'","','","'{'","'}'","All","SignedDouble","STLFormatItem", -"StepFormatItems","StepFormatItem","StepSpecial","StepHeaderItem","StepDataItem", -"GeomFormatList","GeomFormat","Printf","View","Views","ScalarPointValues","ScalarPoint", -"@1","VectorPointValues","VectorPoint","@2","TensorPointValues","TensorPoint", -"@3","ScalarLineValues","ScalarLine","@4","VectorLineValues","VectorLine","@5", -"TensorLineValues","TensorLine","@6","ScalarTriangleValues","ScalarTriangle", +"'('","')'","'['","']'","'.'","'#'","','","'{'","'}'","All","SignedDouble","StlFormatItems", +"StlFormatItem","StepFormatItems","StepFormatItem","StepSpecial","StepHeaderItem", +"StepDataItem","GeoFormatItems","GeoFormatItem","Printf","View","Views","ScalarPointValues", +"ScalarPoint","@1","VectorPointValues","VectorPoint","@2","TensorPointValues", +"TensorPoint","@3","ScalarLineValues","ScalarLine","@4","VectorLineValues","VectorLine", +"@5","TensorLineValues","TensorLine","@6","ScalarTriangleValues","ScalarTriangle", "@7","VectorTriangleValues","VectorTriangle","@8","TensorTriangleValues","TensorTriangle", "@9","ScalarQuadrangleValues","ScalarQuadrangle","@10","VectorQuadrangleValues", "VectorQuadrangle","@11","TensorQuadrangleValues","TensorQuadrangle","@12","ScalarTetrahedronValues", @@ -830,605 +828,609 @@ static const char * const yytname[] = { "$","error","$undefined.","tDOUBLE", "@26","NumericAffectation","NumericIncrement","Affectation","Shape","Transform", "MultipleShape","ListOfShapes","Duplicata","Delete","Colorify","Visibility", "Command","Loop","Extrude","@27","@28","@29","@30","@31","@32","@33","@34","@35", -"ExtrudeParameters","ExtrudeParameter","Transfini","Coherence","BoolExpr","FExpr", -"FExpr_Single","VExpr","VExpr_Single","ListOfStrings","RecursiveListOfStrings", +"ExtrudeParameters","ExtrudeParameter","Transfinite","Coherence","BoolExpr", +"FExpr","FExpr_Single","VExpr","VExpr_Single","ListOfStrings","RecursiveListOfStrings", "ListOfListOfDouble","RecursiveListOfListOfDouble","ListOfDouble","FExpr_Multi", "RecursiveListOfDouble","ColorExpr","ListOfColor","RecursiveListOfColor","StringExpr", NULL }; #endif static const short yyr1[] = { 0, - 206, 206, 206, 206, 207, 207, 208, 208, 208, 209, - 209, 210, 210, 210, 211, 211, 211, 211, 211, 212, - 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 214, 214, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 215, 215, 215, 215, 215, 216, 216, - 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, - 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 218, 218, 218, 218, 218, 218, 218, 218, 218, 219, - 219, 221, 220, 222, 222, 224, 223, 225, 225, 227, - 226, 228, 228, 230, 229, 231, 231, 233, 232, 234, - 234, 236, 235, 237, 237, 239, 238, 240, 240, 242, - 241, 243, 243, 245, 244, 246, 246, 248, 247, 249, - 249, 251, 250, 252, 252, 254, 253, 255, 255, 257, - 256, 258, 258, 260, 259, 261, 261, 263, 262, 264, - 264, 266, 265, 267, 267, 269, 268, 270, 270, 272, - 271, 273, 273, 275, 274, 276, 276, 278, 277, 279, - 279, 281, 280, 282, 282, 284, 283, 285, 285, 287, - 286, 288, 288, 290, 289, 291, 291, 293, 292, 294, - 294, 296, 295, 297, 297, 297, 297, 297, 298, 298, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 206, 206, 206, 206, 207, 207, 208, 208, 209, 209, + 209, 210, 210, 211, 211, 211, 212, 212, 212, 212, + 212, 213, 213, 213, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 215, 215, 216, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 217, 217, 218, 218, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 220, 220, 222, 221, 223, 223, 225, 224, 226, + 226, 228, 227, 229, 229, 231, 230, 232, 232, 234, + 233, 235, 235, 237, 236, 238, 238, 240, 239, 241, + 241, 243, 242, 244, 244, 246, 245, 247, 247, 249, + 248, 250, 250, 252, 251, 253, 253, 255, 254, 256, + 256, 258, 257, 259, 259, 261, 260, 262, 262, 264, + 263, 265, 265, 267, 266, 268, 268, 270, 269, 271, + 271, 273, 272, 274, 274, 276, 275, 277, 277, 279, + 278, 280, 280, 282, 281, 283, 283, 285, 284, 286, + 286, 288, 287, 289, 289, 291, 290, 292, 292, 294, + 293, 295, 295, 297, 296, 298, 298, 298, 298, 298, + 299, 299, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 301, 301, 301, 301, 302, - 302, 302, 303, 303, 303, 303, 303, 303, 304, 304, - 305, 305, 305, 306, 307, 307, 307, 307, 308, 308, - 308, 308, 308, 308, 308, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 310, 310, 310, 311, 310, - 312, 310, 313, 310, 310, 310, 310, 314, 310, 315, - 310, 316, 310, 310, 310, 310, 317, 310, 318, 310, - 319, 310, 320, 320, 321, 321, 321, 322, 322, 322, - 322, 322, 322, 322, 322, 323, 323, 324, 324, 324, - 324, 324, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 326, 326, 326, 326, 326, 326, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 302, 302, + 302, 302, 303, 303, 303, 304, 304, 304, 304, 304, + 304, 305, 305, 306, 306, 306, 307, 308, 308, 308, + 308, 309, 309, 309, 309, 309, 309, 309, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 311, 311, + 311, 312, 311, 313, 311, 314, 311, 311, 311, 311, + 315, 311, 316, 311, 317, 311, 311, 311, 311, 318, + 311, 319, 311, 320, 311, 321, 321, 322, 322, 322, + 323, 323, 323, 323, 323, 323, 323, 323, 324, 324, + 325, 325, 325, 325, 325, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 327, 327, 327, - 327, 327, 328, 328, 328, 328, 329, 329, 330, 330, - 331, 331, 331, 332, 332, 333, 333, 333, 333, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 335, - 335, 335, 335, 336, 336, 336, 336, 337, 337, 338, - 338, 339, 339, 339, 339, 339, 339, 339 + 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, + 328, 328, 328, 328, 328, 329, 329, 329, 329, 330, + 330, 331, 331, 332, 332, 332, 333, 333, 334, 334, + 334, 334, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 336, 336, 336, 336, 337, 337, 337, 337, + 338, 338, 339, 339, 340, 340, 340, 340, 340, 340, + 340 }; static const short yyr2[] = { 0, - 1, 1, 1, 2, 1, 2, 1, 21, 1, 0, - 2, 1, 1, 1, 2, 2, 2, 2, 2, 7, - 5, 17, 9, 23, 31, 15, 11, 11, 15, 9, - 13, 9, 11, 13, 9, 9, 11, 9, 11, 9, - 11, 13, 13, 11, 13, 17, 9, 11, 11, 13, - 11, 9, 0, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 5, 7, - 6, 8, 0, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 2, 1, 2, 0, 2, 1, 21, + 1, 0, 2, 1, 1, 1, 2, 2, 2, 2, + 2, 7, 5, 17, 9, 23, 31, 15, 11, 11, + 15, 9, 13, 9, 11, 13, 9, 9, 11, 9, + 11, 9, 11, 13, 13, 11, 13, 17, 9, 11, + 11, 13, 11, 9, 0, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 5, 7, 6, 8, 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, 1, - 3, 0, 13, 1, 3, 0, 13, 1, 3, 0, - 13, 1, 3, 0, 19, 1, 3, 0, 19, 1, - 3, 0, 19, 1, 3, 0, 25, 1, 3, 0, - 25, 1, 3, 0, 25, 1, 3, 0, 31, 1, - 3, 0, 31, 1, 3, 0, 31, 1, 3, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 3, 0, 13, 1, 3, 0, 13, 1, + 3, 0, 13, 1, 3, 0, 19, 1, 3, 0, + 19, 1, 3, 0, 19, 1, 3, 0, 25, 1, + 3, 0, 25, 1, 3, 0, 25, 1, 3, 0, 31, 1, 3, 0, 31, 1, 3, 0, 31, 1, - 3, 0, 55, 1, 3, 0, 55, 1, 3, 0, - 55, 1, 3, 0, 43, 1, 3, 0, 43, 1, - 3, 0, 43, 1, 3, 0, 37, 1, 3, 0, - 37, 1, 3, 0, 37, 1, 3, 0, 13, 1, - 3, 0, 15, 1, 1, 1, 1, 1, 1, 1, - 4, 7, 9, 6, 3, 6, 6, 9, 6, 9, - 5, 8, 8, 11, 6, 9, 9, 9, 7, 8, - 12, 6, 7, 7, 12, 7, 7, 9, 17, 8, - 8, 7, 7, 11, 8, 12, 8, 14, 22, 20, - 8, 8, 8, 7, 8, 5, 11, 5, 9, 1, - 1, 1, 0, 2, 6, 6, 6, 6, 4, 6, - 4, 6, 3, 5, 3, 3, 4, 4, 3, 7, - 3, 7, 3, 2, 2, 6, 8, 8, 10, 1, - 2, 1, 3, 4, 1, 8, 12, 14, 0, 12, - 0, 16, 0, 18, 8, 12, 14, 0, 12, 0, - 16, 0, 18, 8, 12, 14, 0, 12, 0, 16, - 0, 18, 1, 2, 9, 7, 2, 6, 9, 9, - 8, 8, 8, 6, 4, 2, 2, 1, 1, 1, - 1, 1, 1, 3, 2, 2, 2, 3, 3, 3, + 3, 0, 31, 1, 3, 0, 31, 1, 3, 0, + 31, 1, 3, 0, 55, 1, 3, 0, 55, 1, + 3, 0, 55, 1, 3, 0, 43, 1, 3, 0, + 43, 1, 3, 0, 43, 1, 3, 0, 37, 1, + 3, 0, 37, 1, 3, 0, 37, 1, 3, 0, + 13, 1, 3, 0, 15, 1, 1, 1, 1, 1, + 1, 1, 4, 7, 9, 6, 3, 6, 6, 9, + 6, 9, 5, 8, 8, 11, 6, 9, 9, 9, + 7, 8, 12, 6, 7, 7, 7, 9, 7, 17, + 7, 7, 11, 8, 12, 8, 8, 8, 12, 14, + 14, 22, 20, 8, 8, 8, 7, 8, 5, 11, + 5, 9, 1, 1, 1, 0, 2, 6, 6, 6, + 6, 4, 6, 4, 6, 3, 5, 3, 3, 4, + 4, 3, 7, 3, 7, 3, 2, 2, 6, 8, + 8, 10, 1, 2, 1, 3, 4, 1, 8, 12, + 14, 0, 12, 0, 16, 0, 18, 8, 12, 14, + 0, 12, 0, 16, 0, 18, 8, 12, 14, 0, + 12, 0, 16, 0, 18, 1, 2, 9, 7, 2, + 6, 9, 9, 8, 8, 8, 6, 4, 2, 2, + 1, 1, 1, 1, 1, 1, 3, 2, 2, 2, 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, 6, - 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, - 6, 6, 6, 4, 1, 1, 1, 1, 1, 4, - 4, 2, 5, 3, 6, 4, 7, 1, 2, 2, - 3, 3, 11, 9, 7, 7, 0, 3, 1, 3, - 0, 3, 3, 1, 3, 1, 1, 3, 4, 3, - 5, 4, 1, 1, 1, 3, 4, 6, 7, 1, - 1, 3, 3, 9, 7, 1, 5, 3, 6, 1, - 3, 1, 6, 4, 4, 6, 6, 9 + 3, 3, 3, 3, 5, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, + 4, 4, 6, 6, 6, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, + 4, 4, 4, 6, 6, 6, 4, 1, 1, 1, + 1, 1, 4, 4, 2, 5, 3, 6, 4, 7, + 1, 2, 2, 3, 3, 11, 9, 7, 7, 0, + 3, 1, 3, 0, 3, 3, 1, 3, 1, 1, + 3, 4, 3, 5, 4, 1, 1, 1, 3, 4, + 6, 7, 1, 1, 3, 3, 9, 7, 1, 5, + 3, 6, 1, 3, 1, 6, 4, 4, 6, 6, + 9 }; static const short yydefact[] = { 0, - 0, 7, 9, 0, 2, 1, 3, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, - 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 1, 3, 4, 9, 11, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, + 16, 15, 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, 0, 0, 0, 0, 290, - 0, 295, 0, 292, 0, 0, 0, 0, 0, 54, - 56, 55, 57, 58, 59, 60, 61, 62, 63, 68, - 67, 64, 65, 66, 5, 0, 0, 0, 15, 16, - 18, 17, 19, 427, 427, 0, 405, 409, 462, 204, - 406, 407, 408, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, + 0, 298, 0, 295, 0, 0, 0, 0, 0, 56, + 58, 57, 59, 60, 61, 62, 63, 64, 65, 70, + 69, 66, 67, 68, 0, 0, 17, 18, 20, 19, + 21, 430, 430, 0, 408, 412, 465, 206, 409, 410, + 411, 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, 205, 206, 207, - 208, 0, 0, 0, 209, 210, 0, 0, 0, 0, - 0, 0, 0, 343, 0, 0, 285, 0, 0, 0, + 0, 0, 0, 0, 0, 207, 208, 209, 210, 0, + 0, 0, 211, 212, 0, 0, 0, 0, 0, 0, + 0, 346, 0, 0, 288, 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, 418, 0, 0, 0, - 0, 0, 0, 263, 0, 0, 263, 336, 337, 0, - 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, - 0, 0, 284, 0, 291, 0, 462, 263, 0, 263, - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, + 0, 266, 0, 0, 266, 339, 340, 0, 0, 0, + 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, + 287, 0, 294, 0, 465, 266, 0, 266, 0, 5, 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, 412, - 0, 73, 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, 415, 0, + 75, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 346, 345, - 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 215, 281, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 443, 444, 445, 436, 0, 437, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 412, 349, 348, 350, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, + 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, + 446, 447, 448, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 420, 419, 0, 0, 0, 0, 263, 263, - 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, - 263, 0, 0, 0, 293, 0, 0, 275, 0, 276, + 0, 0, 423, 422, 0, 0, 0, 0, 266, 266, + 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, + 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, + 266, 0, 0, 0, 296, 0, 0, 278, 0, 279, + 6, 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, 432, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 429, 0, 0, 0, 0, 0, 414, 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, 0, 0, 0, 0, 0, 0, 0, 347, 0, + 0, 453, 454, 0, 0, 206, 0, 0, 0, 0, + 0, 213, 0, 364, 363, 361, 362, 357, 359, 358, + 360, 352, 351, 353, 354, 355, 356, 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, 0, 0, 0, 0, 344, 0, 0, - 450, 451, 0, 0, 204, 0, 0, 0, 0, 0, - 211, 0, 361, 360, 358, 359, 354, 356, 355, 357, - 349, 348, 350, 351, 352, 353, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 425, 424, 265, 0, 264, 263, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 272, 267, + 338, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 297, 0, 280, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 422, 421, 262, 0, 261, 260, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 264, 335, 0, - 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 277, 278, 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, 428, - 0, 0, 21, 0, 410, 416, 73, 0, 0, 0, + 0, 431, 0, 0, 23, 0, 413, 419, 75, 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, 74, 75, 76, 77, 78, 79, + 0, 0, 0, 0, 0, 0, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 363, 384, 364, 385, 365, 386, 366, 387, 367, 388, - 368, 389, 369, 390, 370, 391, 371, 392, 383, 404, - 372, 393, 0, 0, 374, 395, 375, 396, 376, 397, - 377, 398, 378, 399, 379, 400, 0, 0, 0, 0, - 0, 0, 0, 0, 465, 0, 0, 464, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, - 0, 0, 411, 0, 69, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 0, 0, 0, 0, 438, - 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, - 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 100, 101, 366, 387, 367, 388, 368, 389, 369, 390, + 370, 391, 371, 392, 372, 393, 373, 394, 374, 395, + 386, 407, 375, 396, 0, 0, 377, 398, 378, 399, + 379, 400, 380, 401, 381, 402, 382, 403, 0, 0, + 0, 0, 0, 0, 0, 0, 468, 0, 0, 467, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, + 0, 0, 0, 0, 414, 0, 71, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, + 0, 441, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 259, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 430, 0, 427, 0, - 413, 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, 71, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, + 0, 430, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 410, 214, 452, 453, 0, 0, 0, 0, - 0, 216, 217, 219, 0, 0, 460, 0, 225, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 442, 447, 0, 439, 0, 232, 0, 0, 0, 0, - 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, - 0, 0, 0, 334, 272, 0, 0, 0, 0, 0, - 431, 0, 457, 0, 0, 0, 286, 0, 0, 0, + 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 413, 216, 455, 456, 0, + 0, 0, 0, 0, 218, 219, 221, 0, 0, 463, + 0, 227, 365, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 445, 450, 0, 442, 0, 234, 0, + 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 337, 275, 0, + 0, 0, 0, 0, 434, 0, 460, 0, 0, 0, + 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 338, 339, 340, 341, 342, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 415, 280, 0, 0, + 0, 0, 0, 0, 0, 0, 341, 342, 343, 344, + 345, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 418, 283, 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, 376, + 397, 383, 404, 384, 405, 385, 406, 0, 470, 469, + 466, 0, 206, 0, 0, 0, 0, 214, 0, 0, + 0, 461, 72, 231, 237, 0, 239, 0, 235, 0, + 236, 257, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 373, 394, 380, 401, 381, - 402, 382, 403, 0, 467, 466, 463, 0, 204, 0, - 0, 0, 0, 212, 0, 0, 0, 458, 70, 229, - 236, 0, 237, 0, 233, 0, 234, 254, 0, 0, - 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, - 263, 0, 299, 0, 308, 0, 317, 0, 0, 0, - 0, 0, 0, 242, 243, 0, 0, 0, 0, 0, + 285, 0, 0, 0, 0, 266, 0, 302, 0, 311, + 0, 320, 0, 0, 0, 0, 0, 0, 241, 242, 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, 0, 0, 427, 417, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 420, 74, 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, 222, 0, - 0, 223, 0, 461, 0, 241, 252, 448, 0, 0, - 332, 245, 247, 0, 0, 0, 331, 333, 253, 230, - 240, 251, 255, 0, 0, 0, 426, 0, 425, 0, - 0, 296, 0, 0, 305, 0, 0, 314, 0, 265, - 266, 267, 268, 0, 0, 431, 0, 434, 0, 0, - 0, 0, 455, 0, 288, 287, 0, 0, 0, 0, - 0, 23, 0, 32, 0, 36, 0, 30, 0, 0, - 35, 0, 40, 38, 0, 0, 0, 0, 0, 0, - 47, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 224, 0, 0, 225, 0, 464, 0, + 244, 254, 451, 0, 0, 335, 247, 248, 0, 0, + 0, 0, 334, 336, 256, 232, 246, 255, 258, 0, + 0, 0, 429, 0, 428, 0, 0, 299, 0, 0, + 308, 0, 0, 317, 0, 268, 269, 270, 271, 0, + 0, 434, 0, 437, 0, 0, 0, 0, 458, 0, + 291, 290, 0, 0, 0, 0, 0, 25, 0, 34, + 0, 38, 0, 32, 0, 0, 37, 0, 42, 40, + 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, + 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 213, 218, 220, 0, - 226, 0, 238, 449, 0, 0, 330, 329, 227, 228, - 263, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 433, 0, 432, 0, 0, 0, 0, 0, - 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 215, 220, 222, 0, 228, 0, 238, 452, + 0, 0, 0, 333, 332, 229, 230, 266, 0, 262, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, + 0, 435, 0, 0, 0, 0, 0, 0, 0, 434, 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, 468, - 0, 459, 0, 0, 0, 0, 424, 0, 0, 0, - 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 435, 0, 0, 454, 289, - 0, 0, 37, 0, 0, 0, 0, 27, 0, 33, - 0, 39, 28, 41, 0, 44, 0, 48, 49, 0, - 0, 51, 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, - 224, 0, 0, 257, 0, 0, 301, 0, 327, 0, - 0, 324, 310, 0, 0, 319, 0, 0, 0, 0, - 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 102, 106, 110, + 0, 0, 0, 0, 0, 0, 471, 0, 462, 0, + 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, + 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 438, 0, 0, 457, 292, 0, 0, + 39, 0, 0, 0, 0, 29, 0, 35, 0, 41, + 30, 43, 0, 46, 0, 50, 51, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 0, 0, 0, 423, 297, 0, 0, 0, - 300, 306, 0, 0, 309, 315, 0, 0, 318, 231, - 235, 0, 0, 246, 0, 0, 0, 0, 0, 31, - 34, 42, 0, 43, 50, 45, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, + 0, 0, 260, 0, 0, 304, 0, 330, 0, 0, + 327, 313, 0, 0, 322, 0, 0, 0, 0, 0, + 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 104, 108, 112, 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, 303, 0, 0, 312, - 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 0, 0, 0, 0, 426, 300, 0, 0, 0, + 303, 309, 0, 0, 312, 318, 0, 0, 321, 233, + 245, 0, 0, 249, 0, 0, 0, 0, 0, 33, + 36, 44, 0, 45, 52, 47, 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, 202, 0, 248, 0, - 298, 0, 0, 0, 307, 0, 0, 316, 0, 0, - 0, 0, 0, 0, 26, 29, 0, 0, 0, 100, - 0, 104, 0, 108, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, + 315, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 204, 0, 251, + 250, 0, 301, 0, 0, 0, 310, 0, 0, 319, + 0, 0, 0, 0, 0, 0, 28, 31, 0, 0, + 0, 102, 0, 106, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 198, 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, 302, 0, 0, 326, 311, - 0, 320, 0, 0, 0, 0, 0, 0, 46, 22, - 101, 103, 105, 107, 109, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 197, 199, 0, - 200, 239, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 118, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 304, 325, 313, 322, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, + 329, 314, 0, 323, 0, 0, 0, 0, 0, 0, + 48, 24, 103, 105, 107, 109, 111, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, + 201, 0, 202, 240, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 116, 120, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 201, 203, 0, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 307, 328, 316, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 250, 0, 0, 0, 112, 0, 116, - 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 205, 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, 253, 10, 0, 0, 0, + 114, 0, 118, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 249, 0, 24, - 113, 115, 117, 119, 121, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 126, 130, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 252, 0, 26, 115, 117, 119, 121, 123, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 128, 132, + 136, 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, 124, 0, 128, 0, 132, 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, 126, 0, 130, 0, + 134, 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, 125, 127, 129, 131, - 133, 135, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 138, 142, - 146, 150, 154, 158, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 25, 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, 127, + 129, 131, 133, 135, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 136, 0, 140, 0, 144, - 0, 148, 0, 152, 0, 156, 0, 0, 0, 0, + 0, 140, 144, 148, 152, 156, 160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 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, 137, 139, 141, 143, - 145, 147, 149, 151, 153, 155, 157, 159, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, + 142, 0, 146, 0, 150, 0, 154, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 186, 190, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, + 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, + 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 192, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 184, 0, 188, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 187, 189, 191, 193, 195, - 0, 0, 0, 174, 178, 182, 0, 0, 0, 0, + 0, 0, 0, 0, 186, 0, 190, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 172, 0, 176, 0, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, - 175, 177, 179, 181, 183, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 187, 189, 191, + 193, 195, 197, 0, 0, 0, 176, 180, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 166, 170, 0, 0, 0, 0, - 0, 0, 0, 160, 0, 164, 0, 168, 0, 0, - 0, 0, 0, 0, 161, 163, 165, 167, 169, 171, - 0, 0, 0 + 0, 0, 0, 0, 0, 174, 0, 178, 0, 182, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 175, 177, 179, 181, 183, 185, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 164, 168, 172, 0, + 0, 0, 0, 0, 0, 0, 162, 0, 166, 0, + 170, 0, 0, 0, 0, 0, 0, 163, 165, 167, + 169, 171, 173, 0, 0, 0 }; -static const short yydefgoto[] = { 2321, - 87, 5, 6, 19, 20, 21, 22, 7, 70, 71, - 72, 440, 1639, 655, 1548, 1641, 656, 1549, 1643, 657, - 1550, 1857, 658, 1804, 1859, 659, 1805, 1861, 660, 1806, - 1993, 661, 1955, 1995, 662, 1956, 1997, 663, 1957, 2105, - 664, 2075, 2107, 665, 2076, 2109, 666, 2077, 2111, 667, - 2078, 2113, 668, 2079, 2115, 669, 2080, 2303, 670, 2297, - 2305, 671, 2298, 2307, 672, 2299, 2252, 673, 2240, 2254, - 674, 2241, 2256, 675, 2242, 2201, 676, 2183, 2203, 677, - 2184, 2205, 678, 2185, 1666, 679, 1572, 1760, 680, 1668, - 141, 250, 73, 568, 342, 554, 555, 343, 77, 78, - 79, 80, 81, 344, 1203, 1518, 1622, 1206, 1523, 1626, - 1209, 1527, 1629, 1385, 1386, 83, 84, 988, 345, 144, - 363, 177, 245, 433, 1099, 1217, 1218, 347, 493, 199, - 742, 898, 145 +static const short yydefgoto[] = { 2334, + 212, 2, 9, 3, 19, 20, 21, 22, 4, 70, + 71, 72, 441, 1651, 657, 1558, 1653, 658, 1559, 1655, + 659, 1560, 1870, 660, 1816, 1872, 661, 1817, 1874, 662, + 1818, 2006, 663, 1968, 2008, 664, 1969, 2010, 665, 1970, + 2118, 666, 2088, 2120, 667, 2089, 2122, 668, 2090, 2124, + 669, 2091, 2126, 670, 2092, 2128, 671, 2093, 2316, 672, + 2310, 2318, 673, 2311, 2320, 674, 2312, 2265, 675, 2253, + 2267, 676, 2254, 2269, 677, 2255, 2214, 678, 2196, 2216, + 679, 2197, 2218, 680, 2198, 1678, 681, 1582, 1772, 682, + 1680, 139, 249, 73, 570, 341, 556, 557, 342, 77, + 78, 79, 80, 81, 343, 1209, 1528, 1634, 1212, 1533, + 1638, 1215, 1537, 1641, 1393, 1394, 83, 84, 992, 344, + 142, 363, 175, 244, 434, 1104, 1223, 1224, 346, 494, + 197, 744, 901, 143 }; -static const short yypact[] = { 2832, - 65,-32768,-32768, -123,-32768, 424, 3114,-32768, 21, 47, - 82, 110, 139, 156, 168, -49, 32, 76,-32768,-32768, --32768,-32768, 2290, 88, 205, 108, 118, 149, -44, 103, - 172, 175, 262, 184, 282, 351, 357, 417, 575, 352, - 470, 296, 302, -80, -80, 309, 384, 6, 475, 8, - 512, 518, 63, 521, 331, 362, -14, 10, 19,-32768, - 373,-32768, 565,-32768, 545, 571, 532, 15, 22,-32768, +static const short yypact[] = { 2959, + 66, 388, 459, 3225,-32768,-32768,-32768, -91,-32768, 99, + 135, 147, 173, 181, 198, -71, 31, 90,-32768,-32768, +-32768,-32768, 2301, 107, 214, 151, 171, 209, -11, 100, + 213, 234, 298, 263, 353, 428, 439, 449, 514, 463, + 241, 320, 326, -76, -76, 349, 478, 3, 546, 5, + 559, 565, 240, 592, 421, 424, -13, 8, 17,-32768, + 466,-32768, 606,-32768, 652, 653, 633, 15, 23,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 579, 21, 2942,-32768,-32768, --32768,-32768,-32768, 393, 393, 608,-32768, -132, 13,-32768, --32768,-32768,-32768, -99, -60, -8, 162, 221, 300, 349, - 358, 403, 404, 469, 479, 490, 491, 494, 510, 513, - 516, 517, 523, 526, 462, 482, 495,-32768,-32768,-32768, --32768, 2324, 2324, 2324,-32768,-32768, 2324, 972, 60, 697, - 2324, 661, 671,-32768, 698, 714,-32768, 2324, 2324, 2324, - 531, 2324, 534, 2324, 2324, 611, 2324, 553, 566, 572, - 587, 611, 558, 568, 591, 598, 599, 609, 617, 748, - -80, -80, -80, 2324, 2324, -64,-32768, 167, -80, 600, - 616, 648, 672,-32768, 611, 25,-32768,-32768,-32768, 611, - 611, 856, 2324, 2324, -84, 2324, 673, 2324, 676, 790, - 2324, 2324,-32768, 906,-32768, 732,-32768,-32768, 929,-32768, - 937,-32768, 21, 783, 812, 814, 815, 816, 817, 818, - 819, 822, 823, 824, 825, 827, 828, 834, 844, 851, - 852, 854, 855, 861, 862, 863, 864, 865, 866, 867, - 868, 869, 870, 969, 871, 849, 872, 2324, 1064,-32768, - -80,-32768, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 38, 48, 48, 209, 875, 875, - 875, 11052, 1065, 1828, 850, 307, 877, 1069, 881, 699, --32768,-32768, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324,-32768, -135, 11075, - 11098, 11121, 2324, 11144, 2324, 11167, 11190, 222, 878, 1503, - 1828,-32768,-32768,-32768, 17, 1076,-32768, 11213, 2324, 2324, - 2324, 2324, 1078, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 888, -95,-32768,-32768, 3538, 3560, -80, -80, 601, 601, - -91, 2324, 2324, 2324, 2324, 2545, 405,-32768, 2324, 2579, - 1080, 1083,-32768, 11236, 11259, 985, 2324, 11282, 986, 3582, --32768, 887, 468, 11305,-32768, 2324, 2614,-32768, 2648,-32768, - 925, 1090, 1091, 1092, 1093, 1094, 1095, 1099, 1100, 1101, - 1102, 1104, 1105, 1106, 1108, 1109, 1110, 1142, 1155, 1156, - 1158, 1160, 1161, 1162, 1012, 1165, 1166, 1168, 1172, 1175, - 1174,-32768, -70, 1180, 1196, 1225, 1906, 272, 193, 2927, - 11328, 10402, 11351, 10427, 11374, 10452, 11397, 10477, 11420, 10502, - 11443, 10527, 11466, 10552, 11489, 10577, 11512, 10602, 11535, 10627, - 11558, 10652, 3604, 3626, 11581, 10677, 11604, 10702, 11627, 10727, - 11650, 10752, 11673, 10777, 11696, 10802, 3648, 3670, 3692, 3714, - 3736, 3758, 525, 86, 1026, 1033, 2324,-32768, 611, 2414, - 17,-32768, 524, 169, 48, 2324, 1226, 1253, 14, 1063, --32768, 1718, 718, 249, 554, 554, 422, 422, 422, 422, - 333, 333, 875, 875, 875, 875, 1268, 1828, 1273, 1275, - 1277, 11719, 1279, 11742, 1282, 1283, 1194, 2324, 297, 1828, - 529, 2324, 2324, 1284, 2731, 11765, 11788, 11811, 2324, 3073, - 3107, 11834, 11857, 11880, 11903, 11926, 1097, -80, 2324, 2324, --32768,-32768,-32768, 1087, 3147,-32768, 1088, 2324, 3780, 3802, - 3824, 10827, -40, -39, -20, -12,-32768,-32768,-32768, 2324, - 10852,-32768, 1096, 1098, 1288, 1289, 1107, 11949, 1294, 1111, - 2324, 2751, 2324, 2324,-32768, 11972,-32768,-32768, 1136, 1103, - 1112, 1114, 1115, 1117, 1144, 1145, 1146, 1148, 1149, 1151, - 1157, 1159, 1179, 1181, 1184, 1185, 1186, 1187, 1190, 1192, - 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205,-32768, - 1302, 1116,-32768, 1206, 85,-32768,-32768, 1113, 1164, 1167, - 1195, 1215, 1216, 1217, 1218, 1220, 1221, 1222, 1223, 1228, - 1230, 1232, 1233, 1234, 1235, 1236, 1237, 1239, 1240, 1241, - 1243, 1245, 1248, 1303,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, 21, 3089,-32768,-32768,-32768,-32768, +-32768, 484, 484, 684,-32768, -103, 9,-32768,-32768,-32768, +-32768, -144, -77, 124, 175, 185, 231, 280, 362, 384, + 408, 414, 417, 420, 427, 455, 456, 477, 480, 487, + 488, 491, 494, 506, 520,-32768,-32768,-32768,-32768, 1720, + 1720, 1720,-32768,-32768, 1720, 619, 52, 707, 1720, 710, + 1008,-32768, 730, 736,-32768, 1720, 1720, 1720, 568, 1720, + 574, 1720, 1720, 423, 1720, 550, 575, 589, -152, 423, + 551, 583, 594, 617, 620, 625, 658, 799, -76, -76, + -76, 1720, 1720, -52,-32768, 120, -76, 600, 661, 673, + 675,-32768, 423, 16,-32768,-32768,-32768, 423, 423, 877, + 1720, 1720, -61, 1720, 711, 1720, 699, 807, 1720, 1720, +-32768, 922,-32768, 732,-32768,-32768, 924,-32768, 925,-32768, + 929, 21, 737, 741, 742, 744, 745, 751, 761, 762, + 763, 764, 765, 769, 770, 771, 772, 773, 774, 775, + 776, 777, 778, 779, 782, 783, 784, 810, 811, 812, + 813, 814, 959, 809, 815, 816, 1720, 1011,-32768, -76, +-32768, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 69, 58, 58, 121, 820, 820, 820, + 1324, 1010, 1841, 856, 340, 817, 1013, 824, 1087,-32768, +-32768, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720,-32768, -47, 11121, 11144, + 11167, 1720, 11190, 1720, 11213, 11236, 270, 821, 1229, 1841, +-32768,-32768,-32768, 482, 1017,-32768, 11259, 1720, 1720, 1720, + 1720, 1720, 1019, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 830, -102,-32768,-32768, 1476, 3607, -76, -76, 486, 486, + -49, 1720, 1720, 1720, 1720, 2628, 460,-32768, 1720, 2650, + 1022, 1023,-32768, 11282, 11305, 927, 1720, 11328, 931, 3629, +-32768, 849, 1380, 11351,-32768, 1720, 2693,-32768, 2773,-32768, +-32768, 21, 1049, 1050, 1058, 1059, 1060, 1061, 1062, 1063, + 1064, 1065, 1066, 1067, 1068, 1071, 1072, 1073, 1074, 1075, + 1076, 1077, 1079, 1080, 1083, 934, 1086, 1089, 1090, 1091, + 1094, 1093,-32768, -15, 1095, 1096, 1098, 2955, 119, 159, + 3085, 11374, 10471, 11397, 10496, 11420, 10521, 11443, 10546, 11466, + 10571, 11489, 10596, 11512, 10621, 11535, 10646, 11558, 10671, 11581, + 10696, 11604, 10721, 3651, 3673, 11627, 10746, 11650, 10771, 11673, + 10796, 11696, 10821, 11719, 10846, 11742, 10871, 3695, 3717, 3739, + 3761, 3783, 3805, 386, 157, 889, 903, 1720,-32768, 423, + 2335, 482,-32768, 489, 168, 58, 1720, 1099, 1100, 14, + 909,-32768, 2423, 560, 229, 612, 612, 203, 203, 203, + 203, 233, 233, 820, 820, 820, 820, 1104, 1841, 1105, + 1107, 1108, 11765, 1109, 11788, 1111, 1112, 974, 1720, 279, + 1841, 490, 1720, 1720, 1113, 2592, 11811, 11834, 11857, 2717, + 1720, 2768, 3123, 11880, 11903, 11926, 11949, 11972, 910, -76, + 1720, 1720,-32768,-32768,-32768, 942, 2992,-32768, 943, 1720, + 3827, 3849, 3871, 10896, -129, -42, -32, -30,-32768,-32768, +-32768, 1720, 10921,-32768, 945, 946, 1145, 1146, 957, 11995, + 1148, 955, 1720, 2809, 1720, 1720,-32768, 12018,-32768,-32768, + 989, 956, 960, 961, 962, 964, 965, 966, 967, 969, + 970, 972, 976, 977, 979, 980, 986, 997, 998, 1003, + 1031, 1032, 1033, 1034, 1078, 1084, 1088, 1097, 1101, 1103, + 1110,-32768, 1153, 1070,-32768, 1114, 83,-32768,-32768, 1081, + 1092, 1102, 1106, 1115, 1117, 1118, 1119, 1122, 1123, 1124, + 1125, 1127, 1128, 1130, 1157, 1158, 1159, 1160, 1162, 1163, + 1165, 1169, 1170, 1177, 1187, 1171,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 2324, 2324,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 1304,-32768, 1828, 48,-32768, 10877, 1307, - 1828, 1163, 81, 2324, 1352, 1353, 762,-32768, 1376, 1252, - 10, 1391,-32768, 2324,-32768, 127, -80, 611, 611, 1392, - 611, 1415, 611, 611,-32768, 1828, 3131, 1224, 543,-32768, - 1793, 777, 1219, 1454, 1455, 1456, 1457, 354, 1458, 1460, - 1482, 1484, 1485, 1486, 1487, 1491, 171, 3846, 3868,-32768, --32768, 3161, -80, -80, -80, 1490, 1828, 1828, 1828, 1828, - 966, 1492, 2324, 2324, 611, 611, 2324, 1493, 611, 1495, - 3890,-32768, 2352, 409, 1494, 1332, 1499, 2324, 2324, -80, - 1501, 1502, 1320, 1506, 1507, 611, 611, 1508, -80, 1535, - 1536, 611, 611, 1537, 1538, 1563, 1564, 1565, 611, 559, - 611, 1590, 1589, 1591, 1594, 1595,-32768, 1593, 393, 1598, --32768, 1599, 2964, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,-32768, - 11995, 10902, 12018, 10927, 12041, 10952, 12064, 10977, 11002, 1403, - 142, 1406, 154,-32768, 17,-32768, 148, 379, 1405, 1600, - 1004,-32768,-32768,-32768, 10, 2324,-32768, 544,-32768, 12915, - 1618, 34, 30, 1619, 611, 1620, 611, 1621, 1622, 548, --32768,-32768, 1828,-32768, 2324,-32768, 2324, 611, 611, 611, - 1434,-32768, 427, 611, 611, 611, 611, 611, 611, 611, - 496, 2324, 2324, 2324, 1426, -127, -106, -100,-32768, 555, - 556, 570, 573,-32768,-32768, 3912, 3934, 1626, 1627, 12087, - 188, 1529,-32768, 2324, 2324, 2324,-32768, 1431, 21, 1435, - 3956, 3978, -121, 1436, 1438, 1437, 1443, 1441, 1447, 1444, - 1446, -51, 1448, 1459, 1461, 1449, 1450, 1451, 1462, 1464, - 1489, 1463,-32768,-32768,-32768,-32768,-32768, 1496, 1498, 1500, - 1505, 1509, 1465, 1510,-32768, 1511, 272,-32768, 1640, 4000, - 4022, 4044, 4066, 4088, 4110, 4132, 4154, 4176, 4198, 4220, - 4242, 4264, 4286, 4308, 4330, 4352, 4374, 4396, 4418, 4440, - 4462, 4484, 4506, 4528, 4550,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 1497,-32768,-32768,-32768, 611, 48, 2324, - 1644, 1651, 14,-32768, 1652, 11027, 10,-32768,-32768,-32768, --32768, -80,-32768, 1654,-32768, 1690,-32768,-32768, 1504, 574, - 12915, 4572, 1691, 1696, 1700, 2324, 2324, 2324, 1703, 1704, - 1705, 1709, 1710, 1711, 1712,-32768, 2380, 3185, 12110, 1948, - 601, -80, 1715, -80, 1716, -80, 1717, 1721, 1722, 1723, - 1725, 2324, 2324,-32768,-32768, 1726, 611, 611, 1629, 611, - 2317, 264, 12133, 2324, 21, 1729, 2324, 611, 1730, 1735, - 1733, 1552, 1736, 559, 1737, 1738, 2324, 1740, 1744, 1742, - 1743, 1747, 559, 2324, 2324, 2324, 611, 1745, 1767, 559, - 2324, 1768, 1775, 1782, 2324, 393,-32768,-32768, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 1720, 1783, 1784, 1082,-32768, 1785, - 1788,-32768, 1596,-32768, 96,-32768,-32768,-32768, 1602, 2324, --32768,-32768,-32768, 4594, 1189, 1270,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 1433, 1789, 1587,-32768, 2324,-32768, 1601, - 197,-32768, 1592, 201,-32768, 1603, 203,-32768, 1604,-32768, --32768,-32768,-32768, 4616, 4638, 188, 265,-32768, 577, 1630, - 1697, 2324,-32768, 2324,-32768,-32768, 4660, 21, 1605, 4682, - 1632,-32768, 1633,-32768, 1659,-32768, 1607,-32768, 1661, 12156, --32768, 1682,-32768,-32768, 1635, 1688, 12179, 4704, 12202, 1706, --32768, 1695, 1701, 4726, 1707, 1713,-32768, 4748, 1728, 4770, - 4792, 4814, 4836, 4858, 4880, 4902, 4924, 4946, 4968, 4990, - 5012, 5034, 5056, 5078, 5100, 5122, 5144, 5166, 5188, 5210, - 5232, 5254, 5276, 5298, 5320, 1714,-32768,-32768,-32768, 10, --32768, 1693,-32768,-32768, 5342, 2324,-32768,-32768,-32768,-32768, - 601, 2550,-32768, 1533, 406, 1533, 406, 1533, 406, 2324, - 2324, 1808,-32768, 611,-32768, 611, 2324, 3215, 3250, 611, - 1665, 1792, 188, 559, 1912, 2324, 1926, 559, 1927, 1931, - 1929, 1930, 1932, 2324, 1933, 611, 1934, 1936, 2324, 1940, - 1938, 2324, 1941, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,-32768, - 1939,-32768, 1942, 12225, 1732, 2324,-32768, 1533, 1533, 2324, - 3274, 227, 1943, 1746, -36,-32768, 3298, 275, -33, 3322, - 284, -25, 3346, 3370, 1770,-32768, 1781, 1597,-32768,-32768, - 1780, 21,-32768, 1787, 1790, 1794, 5364,-32768, 1750,-32768, - 1797,-32768,-32768,-32768, 12248,-32768, 1810,-32768,-32768, 12271, - 1818,-32768, 12294, 1814, 12317, 12340, 12363, 5386, 5408, 5430, - 5452, 5474, 5496, 5518, 5540, 5562, 5584, 5606, 5628, 5650, - 5672, 5694, 5716, 5738, 5760, 5782, 5804, 5826, 12386, 5848, --32768, 1815, 611,-32768, 3394, 2271, 1980, 2324,-32768, 611, - 1981,-32768, 1982, 2324, 1985, 2013, 2324, 2015, 2016, 2017, - 611, 611,-32768, 2018, 21, 559, 559, 559, 559, 2020, - 2021, 2022, 559, 2023, 2025, 2026, 2028,-32768,-32768,-32768, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324,-32768, 2324, 2029, 611,-32768,-32768, 1831, 3418, 1833, --32768,-32768, 1834, 3442,-32768,-32768, 1835, 3466,-32768,-32768, --32768, 1837, 1832,-32768, 21, 1838, 1848, 1854, 1855,-32768, --32768,-32768, 1851,-32768,-32768,-32768, 1852, 1853, 1856, 1857, - 5870, 5892, 5914, 5936, 5958, 5980, 6002, 6024, 6046, 6068, - 6090, 6112, 6134, 6156, 6178, 6200, 6222, 6244, 6266, 6288, - 6310, 1858, 12409, 1860, 2050, 406, 2052, 611, 406, 2053, - 406, 2058, 611, 1963, 1901, 559, 559, 2081, 2091, 559, - 2093, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 48,-32768, 2094,-32768, 4, --32768, 1896, 584, 23,-32768, 1897, 72,-32768, 1900, 1903, - 1908, 21, 1907, 1911,-32768,-32768, 1944, 1945, 588, 12915, - 589, 12915, 596, 12915, 6332, 6354, 6376, 6398, 6420, 6442, - 6464, 6486, 6508, 6530, 6552, 6574, 6596, 6618, 6640, 6662, - 6684, 6706, 6728, 6750, 6772, 597,-32768, 1925, 1935, 2133, - 406, 611, 2135, 2146, 406, 2148, 406, 2054, 2324, 21, - 559, 611, 2149, 2151, 2324, 2152, 2324, 2153, 2324, 2154, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 48, 2155, 48, 2156,-32768, 75, 1967,-32768,-32768, - 83,-32768, 111, 1969, 6794, 21, 1971, 1972,-32768,-32768, - 12915,-32768, 12915,-32768, 12915,-32768, 12432, 12455, 12478, 6816, - 6838, 6860, 6882, 6904, 6926, 6948, 6970, 6992, 7014, 7036, - 7058, 7080, 7102, 7124, 7146, 7168, 7190,-32768,-32768, 602, --32768,-32768, 2170, 2171, 2172, 2173, 2324, 2324, 2010, 559, - 611,-32768,-32768,-32768, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 48, 2175,-32768,-32768,-32768,-32768, 7212, 3490, - 2011, 1988, 1990, 1979, 1991, 1992, 7234, 7256, 7278, 7300, - 7322, 7344, 7366, 7388, 7410, 7432, 7454, 7476, 7498, 7520, - 7542, 7564, 7586, 7608,-32768,-32768, 2324, 2191,-32768, 611, - 559, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 3514,-32768, 1995, 2001, 606, 12915, 607, 12915, - 613, 12915, 7630, 7652, 7674, 7696, 7718, 7740, 7762, 7784, - 7806, 7828, 7850, 7872, 7894, 7916, 7938, 7960, 7982, 8004, - 2196, 611, 2198, 2324, 2201, 2324, 2205, 2324, 2206, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324,-32768, 2012,-32768, - 12915,-32768, 12915,-32768, 12915,-32768, 12501, 12524, 12547, 8026, - 8048, 8070, 8092, 8114, 8136, 8158, 8180, 8202, 8224, 8246, - 8268, 8290, 8312, 8334, 611,-32768,-32768,-32768, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2014, 2009, 2024, 2027, 8356, 8378, 8400, - 8422, 8444, 8466, 8488, 8510, 8532, 8554, 8576, 8598, 8620, - 8642, 8664, 611, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2030, 614, 12915, 660, 12915, 663, 12915, 8686, 8708, - 8730, 8752, 8774, 8796, 8818, 8840, 8862, 8884, 8906, 8928, - 8950, 8972, 8994, 559, 2324, 2208, 2324, 2210, 2324, 2212, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2031, 12915,-32768, 12915,-32768, - 12915,-32768, 12570, 12593, 12616, 12639, 12662, 12685, 9016, 9038, - 9060, 9082, 9104, 9126, 9148, 9170, 9192, 2213,-32768,-32768, --32768,-32768,-32768,-32768, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324,-32768, 2035, 2037, 2039, 2040, 2041, 2042, - 9214, 9236, 9258, 9280, 9302, 9324, 9346, 9368, 9390, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 667, 12915, 688, 12915, 712, 12915, - 713, 12915, 716, 12915, 717, 12915, 9412, 9434, 9456, 9478, - 9500, 9522, 9544, 9566, 9588, 2324, 2220, 2324, 2221, 2324, - 2224, 2324, 2226, 2324, 2228, 2324, 2243, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 12915,-32768, 12915,-32768, - 12915,-32768, 12915,-32768, 12915,-32768, 12915,-32768, 9610, 9632, - 9654, 9676, 9698, 9720, 12708, 12731, 12754, 2324, 2324, 2324, - 2324, 2324, 2324,-32768,-32768,-32768, 9742, 9764, 9786, 9808, - 9830, 9852, 2046, 2048, 2059, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 9874, 9896, 9918, 9940, 9962, 9984, - 720, 12915, 721, 12915, 725, 12915, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2250, 2324, 2251, 2324, 2252, 10006, 10028, - 10050, 12777, 12800, 12823, 12915,-32768, 12915,-32768, 12915,-32768, - 2324, 2324, 2324,-32768,-32768,-32768, 10072, 10094, 10116, 2060, - 2066, 2067, 2324, 2324, 2324, 2324, 2324, 2324, 10138, 10160, - 10182, 731, 12915, 765, 12915, 766, 12915, 2324, 2324, 2324, - 2324, 2256, 2324, 2266, 2324, 2267, 10204, 10226, 10248, 12915, --32768, 12915,-32768, 12915,-32768, 2324, 2324, 2324, 10270, 10292, - 10314, 2324, 2324, 2324, 10336, 10358, 10380, 2324, 2324, 2324, - 12846, 12869, 12892,-32768,-32768,-32768, 2072, 2076, 2078, 2324, - 2324, 2324, 774, 12915, 802, 12915, 803, 12915, 2324, 2278, - 2324, 2279, 2324, 2281, 12915,-32768, 12915,-32768, 12915,-32768, - 2289, 2291,-32768 +-32768,-32768,-32768,-32768, 1720, 1720,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1258,-32768, 1841, 58,-32768, + 10946, 1287, 1841, 1190, 75, 1720, 1290, 1291, 1193,-32768, + 1295, 1188, 8, 1292,-32768, 1720,-32768, 300, -76, 423, + 423, 1301, 423, 1304, 423, 423,-32768, 1841, 3176, 1199, + 501,-32768, 2454, 1279, 1189, 1385, 1387, 1388, 1390, 1391, + 674, 1393, 1395, 1397, 1398, 1399, 1400, 1401, 1405, -43, + 3893, 3915,-32768,-32768, 3200, -76, -76, -76, 1404, 1841, + 1841, 1841, 1841, 1441, 1406, 1720, 1720, 423, 423, 1720, + 1407, 423, 1409, 3937,-32768, 2469, 767, 1410, 1242, 1415, + 1720, 1720, -76, 1417, 1419, 1235, 1421, 1422, 423, 423, + 1424, -76, 1425, 1426, 423, 423, 1427, 1429, 1431, 1432, + 1433, 423, 415, 423, 1434, 1435, 1436, 1439, 1440,-32768, + 1442, 484, 1445,-32768, 1446, 3111, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720,-32768, 12041, 10971, 12064, 10996, 12087, 11021, 12110, + 11046, 11071, 1240, 306, 1241, 301,-32768, 482,-32768, 20, + 350, 1244, 1444, 1609,-32768,-32768,-32768, 8, 1720,-32768, + 504,-32768, 2529, 1448, 19, 37, 1454, 423, 1464, 423, + 1465, 1466, 509,-32768,-32768, 1841,-32768, 1720,-32768, 1720, + 423, 423, 423, 1249, 1276,-32768, 444, 423, 423, 423, + 423, 423, 423, 423, 529, 1720, 1720, 1720, 1270, -116, + -106, -72,-32768, 516, 519, 522, 523,-32768,-32768, 3959, + 3981, 1470, 1492, 12133, -8, 1411,-32768, 1720, 1720, 1720, +-32768, 1313, 1340, 1318, 4003, 4025, 4, 1320, 1350, 1346, + 1352, 1348, 1354, 1351, 1368, 167, 1369, 1355, 1357, 1370, + 1371, 1372, 1374, 1375, 1376, 1412,-32768,-32768,-32768,-32768, +-32768, 1402, 1408, 1430, 1437, 1438, 1414, 1443,-32768, 1467, + 119,-32768, 1601, 4047, 4069, 4091, 4113, 4135, 4157, 4179, + 4201, 4223, 4245, 4267, 4289, 4311, 4333, 4355, 4377, 4399, + 4421, 4443, 4465, 4487, 4509, 4531, 4553, 4575, 4597,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1413,-32768,-32768, +-32768, 423, 58, 1720, 1602, 1605, 14,-32768, 1607, 11096, + 8,-32768,-32768,-32768,-32768, -76,-32768, 1626,-32768, 1628, +-32768,-32768, 1447, 527, 2529, 4619, 1629, 1630, 1632, 1720, + 1720, 1720, 1720, 1633, 1636, 1637, 1638, 1642, 1643, 1651, +-32768, 2394, 3235, 12156, 702, 486, -76, 1661, -76, 1663, + -76, 1665, 1667, 1669, 1671, 1698, 1720, 1720,-32768,-32768, + 1699, 423, 423, 1603, 423, 1961, 390, 12179, 1720, 21, + 1706, 1720, 423, 1704, 1708, 1707, 1526, 1709, 415, 1710, + 1715, 1720, 1714, 1718, 1716, 1719, 1723, 415, 1720, 1720, + 1720, 423, 1721, 1725, 415, 1720, 1750, 1751, 1749, 1720, + 484,-32768,-32768, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1754, + 1753, 1755, 1806,-32768, 1756, 1776,-32768, 1559,-32768, 24, +-32768,-32768,-32768, 1562, 1720,-32768,-32768,-32768, 4641, 4663, + 1919, 2256,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 2271, + 1777, 1586,-32768, 1720,-32768, 1595, -40,-32768, 1597, 85, +-32768, 1598, 172,-32768, 1599,-32768,-32768,-32768,-32768, 4685, + 4707, -8, 328,-32768, 528, 1600, 1705, 1720,-32768, 1720, +-32768,-32768, 4729, 21, 1608, 4751, 1606,-32768, 1610,-32768, + 1611,-32768, 1612,-32768, 1614, 12202,-32768, 1615,-32768,-32768, + 1613, 1617, 12225, 4773, 12248, 1616,-32768, 1622, 1644, 4795, + 1640, 1648,-32768, 4817, 1645, 4839, 4861, 4883, 4905, 4927, + 4949, 4971, 4993, 5015, 5037, 5059, 5081, 5103, 5125, 5147, + 5169, 5191, 5213, 5235, 5257, 5279, 5301, 5323, 5345, 5367, + 5389, 1649,-32768,-32768,-32768, 8,-32768, 1701,-32768,-32768, + 5411, 1720, 1720,-32768,-32768,-32768,-32768, 486, 2330,-32768, + 1515, 29, 1515, 29, 1515, 29, 1720, 1720, 1744,-32768, + 423,-32768, 423, 1720, 3267, 3291, 423, 21, 1869, -8, + 415, 1874, 1720, 1892, 415, 1893, 1905, 1903, 1904, 1907, + 1720, 1908, 423, 1909, 1910, 1720, 1915, 1913, 1720, 1906, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720,-32768, 1914,-32768, 1916, + 12271, 12294, 1722, 1720,-32768, 1515, 1515, 1720, 3315, 194, + 1917, 1724, -35,-32768, 3339, 199, -27, 3363, 201, -25, + 3387, 3411, 1740,-32768, 1742, 2362,-32768,-32768, 1741, 1759, +-32768, 1745, 1746, 1747, 5433,-32768, 1728,-32768, 1757,-32768, +-32768,-32768, 12317,-32768, 1748,-32768,-32768, 12340, 1758,-32768, + 12363, 1760, 12386, 12409, 12432, 5455, 5477, 5499, 5521, 5543, + 5565, 5587, 5609, 5631, 5653, 5675, 5697, 5719, 5741, 5763, + 5785, 5807, 5829, 5851, 5873, 5895, 12455, 5917,-32768, 1784, + 423, 423,-32768, 3435, 3579, 1941, 1720,-32768, 423, 1947, +-32768, 1948, 1720, 1951, 1952, 1720, 1953, 1954, 1955, 423, + 423,-32768, 1956, 21, 415, 415, 415, 415, 1991, 1992, + 1993, 415, 1994, 1995, 1997, 1999,-32768,-32768,-32768, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, +-32768, 1720, 2001, 423, 423,-32768,-32768, 1804, 3459, 1807, +-32768,-32768, 1822, 3483,-32768,-32768, 1825, 3507,-32768,-32768, +-32768, 1827, 1826,-32768, 21, 1829, 1831, 1837, 1838,-32768, +-32768,-32768, 1834,-32768,-32768,-32768, 1836, 1840, 1842, 1843, + 5939, 5961, 5983, 6005, 6027, 6049, 6071, 6093, 6115, 6137, + 6159, 6181, 6203, 6225, 6247, 6269, 6291, 6313, 6335, 6357, + 6379, 1844, 12478, 1839, 2034, 2035, 29, 2039, 423, 29, + 2043, 29, 2044, 423, 1949, 21, 415, 415, 2046, 2047, + 415, 2049, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 58,-32768, 2059,-32768, +-32768, -6,-32768, 1861, 548, -5,-32768, 1862, -4,-32768, + 1863, 1864, 1866, 1911, 1865, 1868,-32768,-32768, 1875, 1876, + 557, 2529, 558, 2529, 561, 2529, 6401, 6423, 6445, 6467, + 6489, 6511, 6533, 6555, 6577, 6599, 6621, 6643, 6665, 6687, + 6709, 6731, 6753, 6775, 6797, 6819, 6841, 573,-32768, 1871, + 1867, 2071, 29, 423, 2072, 2073, 29, 2094, 29, 2008, + 1720, 21, 415, 423, 2105, 2106, 1720, 2107, 1720, 2108, + 1720, 2111, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 58, 2113, 58, 2115,-32768, -2, 1918, +-32768,-32768, 11,-32768, 12, 1921, 6863, 21, 1924, 1939, +-32768,-32768, 2529,-32768, 2529,-32768, 2529,-32768, 12501, 12524, + 12547, 6885, 6907, 6929, 6951, 6973, 6995, 7017, 7039, 7061, + 7083, 7105, 7127, 7149, 7171, 7193, 7215, 7237, 7259,-32768, +-32768, 576,-32768,-32768, 2146, 2147, 2148, 2149, 1720, 1720, + 21, 415, 423,-32768,-32768,-32768, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 58, 2150,-32768,-32768,-32768,-32768, + 7281, 3531, 1998, 1962, 1964, 1965, 1966, 1967, 7303, 7325, + 7347, 7369, 7391, 7413, 7435, 7457, 7479, 7501, 7523, 7545, + 7567, 7589, 7611, 7633, 7655, 7677,-32768,-32768, 1720, 2166, + 2002, 423, 415, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 3555,-32768,-32768, 1971, 1977, 577, + 2529, 580, 2529, 587, 2529, 7699, 7721, 7743, 7765, 7787, + 7809, 7831, 7853, 7875, 7897, 7919, 7941, 7963, 7985, 8007, + 8029, 8051, 8073, 2179, 423, 2180, 1720, 2181, 1720, 2182, + 1720, 2183, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, +-32768, 1987,-32768, 2529,-32768, 2529,-32768, 2529,-32768, 12570, + 12593, 12616, 8095, 8117, 8139, 8161, 8183, 8205, 8227, 8249, + 8271, 8293, 8315, 8337, 8359, 8381, 8403, 423,-32768,-32768, +-32768, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1988, 1989, 1990, 2000, + 8425, 8447, 8469, 8491, 8513, 8535, 8557, 8579, 8601, 8623, + 8645, 8667, 8689, 8711, 8733, 423, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 2003, 604, 2529, 607, 2529, 610, + 2529, 8755, 8777, 8799, 8821, 8843, 8865, 8887, 8909, 8931, + 8953, 8975, 8997, 9019, 9041, 9063, 415, 1720, 2186, 1720, + 2189, 1720, 2190, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 2010, 2529, +-32768, 2529,-32768, 2529,-32768, 12639, 12662, 12685, 12708, 12731, + 12754, 9085, 9107, 9129, 9151, 9173, 9195, 9217, 9239, 9261, + 2203,-32768,-32768,-32768,-32768,-32768,-32768, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720,-32768, 2006, 2007, 2012, + 2015, 2016, 2020, 9283, 9305, 9327, 9349, 9371, 9393, 9415, + 9437, 9459, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 615, 2529, 663, + 2529, 666, 2529, 670, 2529, 691, 2529, 696, 2529, 9481, + 9503, 9525, 9547, 9569, 9591, 9613, 9635, 9657, 1720, 2208, + 1720, 2219, 1720, 2220, 1720, 2221, 1720, 2222, 1720, 2223, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 2529, +-32768, 2529,-32768, 2529,-32768, 2529,-32768, 2529,-32768, 2529, +-32768, 9679, 9701, 9723, 9745, 9767, 9789, 12777, 12800, 12823, + 1720, 1720, 1720, 1720, 1720, 1720,-32768,-32768,-32768, 9811, + 9833, 9855, 9877, 9899, 9921, 2026, 2027, 2028, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 9943, 9965, 9987, + 10009, 10031, 10053, 697, 2529, 701, 2529, 705, 2529, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 2233, 1720, 2234, 1720, + 2235, 10075, 10097, 10119, 12846, 12869, 12892, 2529,-32768, 2529, +-32768, 2529,-32768, 1720, 1720, 1720,-32768,-32768,-32768, 10141, + 10163, 10185, 2038, 2040, 2041, 1720, 1720, 1720, 1720, 1720, + 1720, 10207, 10229, 10251, 706, 2529, 714, 2529, 717, 2529, + 1720, 1720, 1720, 1720, 2237, 1720, 2240, 1720, 2241, 10273, + 10295, 10317, 2529,-32768, 2529,-32768, 2529,-32768, 1720, 1720, + 1720, 10339, 10361, 10383, 1720, 1720, 1720, 10405, 10427, 10449, + 1720, 1720, 1720, 12915, 12938, 12961,-32768,-32768,-32768, 2048, + 2050, 2052, 1720, 1720, 1720, 718, 2529, 721, 2529, 722, + 2529, 1720, 2251, 1720, 2252, 1720, 2253, 2529,-32768, 2529, +-32768, 2529,-32768, 2263, 2265,-32768 }; static const short yypgoto[] = {-32768, - -32,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 1669,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -177,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 1641,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, @@ -1436,2463 +1438,2467 @@ static const short yypgoto[] = {-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -304, -19,-32768, 2285, -4, -364, -176, -2,-32768,-32768, --32768,-32768,-32768, 2316,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, -1270, -1229,-32768,-32768, -1101, -23,-32768, - -29,-32768, -94,-32768, -1164, 1231, 1452, -211, -332, -734, - 1255,-32768, -21 +-32768, -297, -19,-32768, 2267, -3, -368, -168, 1,-32768, +-32768,-32768,-32768,-32768, 2272,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, -1282, -1236,-32768,-32768, -1109, -23, +-32768, -29,-32768, -90,-32768, -1185, 1166, 1462, -201, -334, + -732, 1228,-32768, -21 }; -#define YYLAST 13111 - - -static const short yytable[] = { 143, - 246, 496, 75, 142, 76, 557, 897, 376, 531, 183, - 380, 186, 1237, 197, 176, 178, 251, 740, 386, 207, - 151, 1246, 200, 85, 532, 151, 207, 195, 1253, 1383, - 378, 397, 1383, 399, 1384, 1051, 1389, 1384, 1392, 1050, - 1383, 483, 207, 9, 153, 1384, 209, 211, 125, 126, - 127, 1312, 207, 88, 213, 125, 126, 127, 367, 368, - 135, 136, 517, 306, 367, 368, 248, 518, 249, 1383, - 8, 125, 126, 127, 1384, 1082, 1109, 1083, 1052, 367, - 368, 125, 126, 127, 888, 367, 368, 89, 1383, 207, - 367, 368, 492, 1384, 367, 368, 1084, 253, 1085, 254, - 190, 1293, 1086, 191, 1087, 172, 173, 548, 299, 300, - 301, 558, 387, 302, 305, 90, 174, 310, 125, 126, - 127, 367, 368, 175, 330, 331, 332, 620, 334, 492, - 336, 337, 621, 348, 367, 368, 255, 1383, 256, 369, - 1383, 362, 1384, 364, 91, 1384, 1118, 94, 1383, 371, - 365, 366, 152, 1384, 100, 1462, 148, 152, 1404, 1462, - 1045, 92, 1462, 787, 788, 307, 308, 153, 1461, 384, - 385, 1465, 388, 93, 390, 100, 1383, 393, 394, 1468, - 401, 1384, 196, 789, 155, 746, 889, 890, 257, 734, - 258, 790, 313, 314, 315, 316, 317, 759, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 86, 1670, 184, - 147, 187, 327, 198, 582, 201, 252, 741, 208, 367, - 368, 439, 1405, 379, 437, 210, 1409, 1674, 95, 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, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, 1224, 96, 484, 485, 486, 1676, 135, 136, 1763, - 491, 367, 368, 725, 146, 840, 497, 1765, 726, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 516, 148, 1620, 492, 156, 1624, 522, - 1627, 524, 1174, 495, 149, 1766, 300, 491, 492, 128, - 129, 130, 131, 158, 901, 535, 536, 537, 538, 731, - 540, 541, 542, 543, 544, 545, 546, 551, 552, 1036, - 128, 129, 130, 131, 731, 150, 135, 136, 559, 560, - 561, 562, 367, 368, 840, 571, 367, 368, 259, 922, - 260, 135, 136, 578, 553, 553, 556, 556, 154, 733, - 370, 155, 586, 932, 1536, 1537, 1538, 1539, 367, 368, - 157, 1543, 367, 368, 1097, 1039, 367, 368, 367, 368, - 1462, 1098, 159, 881, 1462, 165, 627, 1462, 160, 1304, - 1717, 135, 136, 1306, 1721, 1308, 1723, 487, 923, 249, - 569, 570, 367, 368, 135, 136, 956, 261, 626, 262, - 527, 180, 249, 910, 181, 182, 10, 316, 317, 1458, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 313, - 314, 315, 316, 317, 327, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 940, 941, 942, 943, 161, 327, - 367, 368, 1313, 729, 135, 136, 300, 1314, 1225, 367, - 368, 1383, 737, 736, 735, 584, 1384, 1464, 128, 129, - 130, 131, 1067, 1068, 1633, 1634, 1467, 1462, 1637, 135, - 136, 1462, 170, 1462, 491, 758, 263, 249, 264, 135, - 136, 1076, 1077, 729, 757, 171, 491, 166, 761, 762, - 167, 168, 179, 169, 492, 768, 185, 188, 777, 886, - 324, 325, 326, 189, 192, 778, 779, 193, 327, 313, - 314, 315, 316, 317, 782, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 492, 265, 791, 266, 204, 327, - 128, 129, 130, 131, 267, 1371, 268, 801, 194, 803, - 804, 11, 12, 13, 14, 15, 16, 17, 18, 202, - 203, 135, 136, 206, 205, 492, 492, 492, 492, 1727, - 1060, 212, 1038, 1040, 313, 314, 315, 316, 317, 244, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 269, - 271, 270, 272, 842, 327, 841, 957, 322, 323, 324, - 325, 326, 247, 97, 338, 162, 163, 327, 164, 101, +#define YYLAST 13159 + + +static const short yytable[] = { 141, + 75, 559, 245, 140, 76, 532, 181, 497, 184, 1243, + 900, 195, 250, 376, 174, 176, 380, 742, 1252, 205, + 198, 378, 149, 210, 1054, 1259, 98, 205, 193, 1299, + 1391, 1397, 151, 1400, 402, 1392, 1319, 397, 1391, 399, + 1391, 386, 1055, 1392, 351, 1392, 207, 209, 123, 124, + 125, 352, 252, 149, 253, 305, 123, 124, 125, 1391, + 1391, 1391, 205, 1391, 1392, 1392, 1392, 146, 1392, 367, + 368, 5, 484, 205, 790, 85, 1391, 1391, 891, 367, + 368, 1392, 1392, 367, 368, 1056, 1087, 205, 1088, 133, + 134, 123, 124, 125, 1391, 247, 1089, 248, 1090, 1392, + 550, 493, 123, 124, 125, 86, 298, 299, 300, 170, + 171, 301, 304, 367, 368, 309, 123, 124, 125, 254, + 172, 255, 329, 330, 331, 92, 333, 173, 335, 336, + 1091, 347, 1092, 367, 368, 387, 367, 368, 493, 362, + 87, 364, 367, 368, 1412, 367, 368, 371, 365, 366, + 518, 369, 88, 560, 150, 519, 1471, 306, 307, 936, + 1471, 791, 1311, 1471, 151, 1049, 153, 384, 385, 1470, + 388, 792, 390, 793, 98, 393, 394, 1474, 89, 1477, + 892, 893, 622, 194, 748, 150, 90, 623, 1102, 367, + 368, 126, 127, 128, 129, 1103, 761, 736, 1682, 1686, + 1688, 1114, 1775, 91, 367, 368, 182, 211, 185, 367, + 368, 196, 251, 199, 379, 1777, 1778, 743, 206, 145, + 440, 1413, 584, 438, 591, 1417, 208, 93, 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, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 367, 368, 485, 486, 487, 133, 134, 188, 164, 492, + 189, 165, 166, 843, 167, 498, 94, 1313, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 144, 1632, 367, 368, 1636, 523, 1639, + 525, 133, 134, 133, 134, 299, 492, 493, 1179, 488, + 256, 248, 257, 370, 536, 537, 538, 539, 540, 493, + 542, 543, 544, 545, 546, 547, 548, 553, 554, 126, + 127, 128, 129, 154, 367, 368, 496, 146, 561, 562, + 563, 564, 367, 368, 727, 573, 1043, 367, 368, 728, + 133, 134, 629, 580, 1123, 555, 555, 147, 735, 558, + 558, 258, 588, 259, 1315, 1546, 1547, 1548, 1549, 367, + 368, 260, 1553, 261, 367, 368, 367, 368, 321, 322, + 323, 324, 325, 884, 156, 1471, 1467, 1230, 326, 1471, + 1729, 1473, 1471, 1476, 1733, 148, 1735, 315, 316, 152, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 628, + 323, 324, 325, 913, 326, 95, 337, 262, 326, 263, + 153, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 944, 945, 946, 947, 155, + 338, 10, 133, 134, 731, 571, 572, 299, 528, 157, + 248, 133, 134, 739, 738, 737, 264, 760, 265, 248, + 158, 43, 44, 45, 46, 47, 48, 1645, 1646, 533, + 159, 1649, 1471, 133, 134, 492, 1471, 904, 1471, 1072, + 1073, 843, 733, 1040, 731, 759, 163, 492, 733, 763, + 764, 126, 127, 128, 129, 178, 168, 771, 179, 180, + 780, 126, 127, 128, 129, 1320, 493, 781, 782, 169, + 1321, 889, 133, 134, 1081, 1082, 785, 987, 988, 989, + 990, 991, 133, 134, 43, 44, 45, 46, 794, 48, + 6, 7, 177, 8, 160, 161, 493, 162, 266, 804, + 267, 806, 807, 1378, 186, 312, 313, 314, 315, 316, + 187, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 268, 1064, 269, 1739, 725, 326, 726, 183, 493, 493, + 493, 493, 1042, 1044, 1231, 190, 11, 12, 13, 14, + 15, 16, 17, 18, 270, 845, 271, 844, 130, 339, + 272, 201, 273, 274, 132, 275, 276, 191, 277, 135, + 192, 95, 297, 278, 138, 279, 340, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 280, 282, 281, 283, 202, 203, 312, 313, 314, + 315, 316, 200, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 1814, 284, 204, 285, 286, 326, 287, 926, + 243, 874, 875, 288, 290, 289, 291, 292, 246, 293, + 294, 733, 733, 734, 762, 876, 877, 878, 879, 880, + 881, 882, 295, 733, 492, 917, 1051, 885, 1052, 888, + 308, 733, 894, 1063, 493, 310, 296, 1206, 733, 905, + 1093, 733, 903, 1094, 733, 733, 1095, 1096, 927, 733, + 1321, 1184, 1322, 1869, 492, 327, 731, 314, 315, 316, + 328, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 1684, 1000, 1685, 348, 354, 326, 940, 941, 942, 1697, + 1699, 1698, 1700, 1701, 332, 1702, 492, 492, 492, 492, + 334, 349, 950, 951, 960, 1724, 954, 1725, 1805, 1897, + 1806, 1898, 1899, 967, 1900, 350, 355, 965, 966, 1901, + 356, 1902, 976, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 361, 372, 130, 131, 2028, 326, 2029, 2030, + 132, 2031, 2032, 357, 2033, 135, 358, 2139, 302, 2140, + 138, 359, 303, 1004, 1005, 1006, 1007, 1008, 1009, 1010, + 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 312, + 313, 314, 315, 316, 360, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 373, 2141, 844, 2142, 2143, 326, + 2144, 1045, 2145, 375, 2146, 1050, 374, 312, 313, 314, + 315, 316, 383, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 492, 2147, 1065, 2148, 1066, 326, 2149, 2226, + 2150, 2227, 391, 2228, 1204, 2229, 1205, 2230, 2274, 2231, + 2275, 389, 1083, 1084, 1085, 392, 2276, 2049, 2277, 2278, + 2322, 2279, 2323, 2324, 2326, 2325, 2327, 395, 396, 398, + 400, 401, 1234, 403, 1106, 1107, 1108, 404, 405, 1383, + 406, 407, 312, 313, 314, 315, 316, 408, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 409, 410, 411, + 412, 413, 326, 433, 961, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 95, 297, 425, 426, + 427, 1142, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 428, 429, 430, 431, + 432, 435, 436, 311, 439, 326, 490, 499, 437, 500, + 1173, 1172, 501, 534, 529, 541, 1180, 549, 575, 576, + 579, 312, 313, 314, 315, 316, 582, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 1189, 1190, 1191, 1192, + 1265, 326, 585, 592, 593, 495, 1328, 1207, 1200, 1210, + 1201, 1213, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 1220, 1221, 605, 606, 607, 608, 609, + 610, 611, 555, 612, 613, 1233, 558, 614, 1236, 615, + 616, 729, 502, 617, 618, 619, 620, 621, 1246, 624, + 730, 625, 626, 741, 740, 1253, 1254, 1255, 745, 747, + 779, 749, 1260, 750, 751, 753, 1264, 755, 756, 765, + 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, + 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, + 1286, 1287, 1288, 1289, 1290, 1291, 783, 784, 796, 797, + 1410, 798, 799, 800, 802, 803, 809, 840, 810, 130, + 131, 1301, 811, 812, 813, 132, 814, 815, 816, 817, + 135, 818, 819, 757, 820, 138, 873, 758, 821, 822, + 1309, 823, 824, 312, 313, 314, 315, 316, 825, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 897, 826, + 827, 95, 297, 326, 1325, 828, 1326, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 95, 530, 829, 830, 831, 832, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 313, 314, 315, 316, 317, 339, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 295, 43, - 44, 45, 46, 327, 48, 273, 311, 274, 1802, 43, - 44, 45, 46, 47, 48, 275, 312, 276, 296, 871, - 872, 983, 984, 985, 986, 987, 277, 279, 278, 280, - 281, 297, 282, 873, 874, 875, 876, 877, 878, 879, - 309, 492, 491, 328, 501, 882, 283, 885, 284, 285, - 891, 286, 287, 289, 288, 290, 1200, 902, 329, 291, - 900, 292, 293, 723, 294, 724, 731, 333, 732, 1856, - 335, 731, 491, 760, 729, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 996, 731, 1047, 914, 1048, 327, - 731, 361, 1059, 936, 937, 938, 349, 731, 731, 1088, - 1089, 354, 350, 491, 491, 491, 491, 894, 351, 946, - 947, 355, 731, 950, 1090, 731, 731, 1091, 1179, 1314, - 963, 1315, 916, 352, 961, 962, 1672, 356, 1673, 972, - 1685, 1687, 1686, 1688, 357, 358, 132, 340, 1689, 1712, - 1690, 1713, 134, 372, 1793, 359, 1794, 137, 1884, 1886, - 1885, 1887, 140, 360, 341, 1888, 2015, 1889, 2016, 373, - 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, - 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, - 1020, 1021, 1022, 1023, 1024, 1025, 313, 314, 315, 316, - 317, 374, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 383, 2017, 841, 2018, 2019, 327, 2020, 1041, 2126, - 375, 2127, 1046, 389, 313, 314, 315, 316, 317, 391, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 491, - 2128, 1061, 2129, 1062, 327, 315, 316, 317, 392, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 1078, 1079, - 1080, 395, 2036, 327, 2130, 2132, 2131, 2133, 2134, 2136, - 2135, 2137, 2213, 2215, 2214, 2216, 1105, 2217, 396, 2218, - 1101, 1102, 1103, 2261, 398, 2262, 1375, 313, 314, 315, - 316, 317, 400, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 313, 314, 315, 316, 317, 327, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 2263, 2265, 2264, - 2266, 944, 327, 432, 97, 298, 2309, 1137, 2310, 402, + 122, 883, 312, 313, 314, 315, 316, 841, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 847, 1381, 1382, + 833, 1390, 326, 1396, 919, 1399, 834, 1389, 848, 1395, + 835, 1398, 887, 1401, 1402, 895, 896, 902, 849, 836, + 1406, 898, 850, 837, 555, 838, 1545, 908, 558, 1415, + 910, 851, 839, 852, 853, 854, 842, 1423, 855, 856, + 857, 858, 1428, 859, 860, 1431, 861, 1433, 1434, 1435, + 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, + 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, + 1456, 1457, 1458, 862, 863, 864, 865, 364, 866, 867, + 1464, 868, 298, 299, 1465, 869, 870, 1596, 312, 313, + 314, 315, 316, 871, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 872, 130, 131, 899, 586, 326, 890, + 132, 921, 920, 922, 923, 135, 924, 925, 915, 928, + 138, 929, 916, 930, 931, 932, 933, 934, 935, 943, + 963, 949, 957, 955, 130, 131, 962, 964, 1644, 968, + 132, 969, 970, 971, 972, 135, 975, 977, 978, 981, + 138, 982, 531, 983, 984, 985, 994, 1039, 1041, 995, + 996, 997, 998, 1529, 1046, 1070, 948, 999, 1001, 1534, + 1047, 1002, 1538, 1053, 312, 313, 314, 315, 316, 1057, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 1059, + 1061, 1062, 1071, 1086, 326, 1099, 1561, 1562, 1563, 1564, + 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, + 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1100, 1583, 312, + 313, 314, 315, 316, 1110, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 1738, 1105, 1109, 95, 297, 326, + 1111, 489, 1115, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 1116, 1117, 1118, + 1119, 1120, 1125, 1121, 1126, 312, 313, 314, 315, 316, + 1781, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 1122, 1124, 1127, 1128, 1129, 326, 1130, 1131, 1132, 1652, + 1654, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, + 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, + 1675, 1676, 1677, 1813, 1134, 1679, 1143, 1174, 1175, 1133, + 1135, 1139, 1177, 1170, 1048, 345, 312, 313, 314, 315, + 316, 353, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 1181, 1136, 1182, 1186, 1187, 326, 1188, 1193, 1137, + 1138, 1194, 1195, 1196, 377, 1140, 1183, 1197, 1198, 381, + 382, 312, 313, 314, 315, 316, 1199, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 1208, 1737, 1211, 1141, + 1214, 326, 1216, 1743, 1217, 1745, 1218, 1747, 551, 1749, + 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, + 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, + 1386, 1387, 1770, 1219, 1773, 1222, 132, 1226, 1235, 1238, + 1239, 1388, 1240, 1241, 1242, 1244, 138, 1245, 173, 1247, + 1248, 1249, 95, 297, 1250, 1251, 1257, 1258, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 2311, 2313, 2312, 2314, 403, 1044, - 404, 405, 406, 407, 408, 409, 1168, 1167, 410, 411, - 412, 413, 1175, 414, 415, 313, 314, 315, 316, 317, - 416, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 417, 1259, 1184, 1185, 1186, 327, 435, 418, 419, 494, - 420, 421, 1201, 1194, 1204, 1195, 1207, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 438, 1214, 1215, - 327, 489, 1228, 434, 436, 499, 553, 498, 556, 500, - 1227, 528, 533, 1230, 539, 547, 573, 1289, 577, 574, - 583, 580, 589, 1240, 590, 591, 592, 593, 594, 595, - 1247, 1248, 1249, 596, 597, 598, 599, 1254, 600, 601, - 602, 1258, 603, 604, 605, 1260, 1261, 1262, 1263, 1264, - 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, - 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, - 1285, 313, 314, 315, 316, 317, 606, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 1295, 132, 133, 607, - 608, 327, 609, 134, 610, 611, 612, 613, 137, 614, - 615, 303, 616, 140, 1302, 304, 617, 618, 619, 313, - 314, 315, 316, 317, 622, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 1297, 1321, 97, 298, 1318, 327, - 1319, 623, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 97, 298, 727, 624, - 728, 738, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 739, 313, 314, 315, - 316, 317, 743, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 1374, 745, 1382, 1298, 1388, 327, 1391, 747, - 1381, 748, 1387, 749, 1390, 751, 1393, 1394, 753, 754, - 763, 780, 781, 1398, 795, 796, 553, 776, 556, 793, - 799, 794, 1407, 797, 806, 807, 837, 880, 870, 844, - 1415, 800, 884, 838, 808, 1420, 809, 810, 1423, 811, - 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, - 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, - 1445, 1446, 1447, 1448, 1449, 1450, 812, 813, 814, 364, - 815, 816, 1455, 817, 299, 300, 1456, 892, 893, 818, - 845, 819, 887, 846, 313, 314, 315, 316, 317, 1475, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 132, - 133, 820, 895, 821, 327, 134, 822, 823, 824, 825, - 137, 847, 826, 755, 827, 140, 899, 756, 905, 828, - 829, 830, 831, 832, 833, 834, 835, 836, 839, 132, - 133, 848, 849, 850, 851, 134, 852, 853, 854, 855, - 137, 907, 917, 912, 856, 140, 857, 913, 858, 859, - 860, 861, 862, 863, 1519, 864, 865, 866, 1299, 867, - 1524, 868, 1535, 1528, 869, 313, 314, 315, 316, 317, - 896, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 918, 919, 920, 921, 924, 327, 925, 1551, 1552, 1553, - 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, - 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 926, 1573, - 927, 928, 929, 930, 931, 939, 959, 945, 953, 951, - 958, 960, 1585, 964, 965, 97, 529, 966, 967, 968, - 971, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 121, 122, 1261, 1262, 1263, 1811, 1812, 1292, 1293, 1298, + 1294, 1300, 1296, 1819, 1820, 1821, 1822, 1823, 1824, 1825, + 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, + 1836, 1297, 1307, 1837, 312, 313, 314, 315, 316, 1308, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 1310, + 1312, 1314, 1316, 1323, 326, 1329, 1324, 1379, 1331, 1334, + 1338, 1295, 1332, 1333, 1339, 1865, 1335, 1337, 1343, 1344, + 1871, 1873, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, + 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, + 1893, 1345, 1347, 95, 337, 1348, 1377, 1350, 1403, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 97, 298, 973, 974, 977, - 978, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 120, 121, 122, 1924, 1411, 1926, 1414, 1928, 338, 1930, + 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, + 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1416, 1418, 43, + 44, 45, 46, 47, 48, 130, 131, 1419, 1420, 1421, + 1432, 132, 1422, 1424, 1426, 1427, 135, 1429, 1430, 1459, + 1460, 138, 1468, 1484, 1304, 1489, 1463, 1469, 1971, 1972, + 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, + 1983, 1984, 1985, 1480, 1481, 1483, 1527, 1485, 1486, 1487, + 1492, 732, 1531, 1532, 1490, 1494, 1535, 1536, 1539, 1540, + 1541, 1544, 1496, 2007, 2009, 2011, 2012, 2013, 2014, 2015, + 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, + 2026, 312, 313, 314, 315, 316, 1523, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 1550, 1551, 1552, 1554, + 1555, 326, 1556, 1557, 2050, 1584, 2052, 1587, 2054, 1589, + 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, + 2066, 2067, 2068, 2069, 2070, 1590, 130, 491, 1592, 1594, + 1595, 1597, 132, 1598, 1599, 1600, 1601, 135, 1602, 1630, + 1631, 1629, 138, 1603, 1633, 1604, 1605, 1627, 1637, 1640, + 1643, 1647, 1648, 1650, 2094, 2095, 2096, 2097, 2098, 2099, + 2100, 2101, 2102, 1681, 1683, 1687, 1689, 1693, 1690, 1691, + 1694, 1727, 1695, 1696, 1726, 1692, 1728, 1731, 1732, 2119, + 2121, 2123, 2125, 2127, 2129, 2130, 2131, 2132, 2133, 2134, + 2135, 2136, 2137, 2138, 312, 313, 314, 315, 316, 1734, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 1736, + 1741, 1742, 1744, 1746, 326, 2160, 1748, 2162, 1771, 2164, + 1774, 2166, 1776, 2168, 1779, 2170, 1782, 2172, 2173, 2174, + 2175, 2176, 2177, 2178, 2179, 2180, 312, 313, 314, 315, + 316, 1783, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 1807, 1808, 1809, 1810, 1838, 326, 2190, 2191, 2192, + 2193, 2194, 2195, 1228, 1842, 1229, 1843, 1841, 1844, 1845, + 1846, 1866, 1867, 1895, 1896, 2208, 2209, 2210, 2211, 2212, + 2213, 2215, 2217, 2219, 1921, 1923, 1925, 1927, 1929, 1948, + 1986, 2051, 1987, 1988, 2053, 2055, 2232, 2233, 2234, 2235, + 2236, 2237, 2238, 1989, 2240, 2027, 2242, 2071, 2087, 2103, + 2104, 906, 907, 2161, 909, 2105, 911, 912, 2106, 2107, + 2250, 2251, 2252, 2108, 2163, 2165, 2167, 2169, 2171, 2205, + 2206, 2207, 2262, 2263, 2264, 2266, 2268, 2270, 2239, 2241, + 2243, 2259, 2284, 2260, 2261, 2286, 2288, 2280, 2281, 2282, + 2283, 2313, 2285, 2314, 2287, 2315, 2329, 2331, 2333, 952, + 953, 1305, 2335, 956, 2336, 2292, 2293, 2294, 1225, 846, + 74, 2298, 2299, 2300, 1176, 82, 1306, 2304, 2305, 2306, + 973, 974, 0, 0, 0, 0, 979, 980, 0, 2317, + 2319, 2321, 0, 986, 0, 993, 0, 0, 2328, 0, + 2330, 0, 2332, 95, 96, 97, 0, 98, 0, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 979, 980, 981, 1640, 1642, - 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, - 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, - 1664, 1665, 990, 991, 1667, 992, 993, 994, 995, 1680, - 1035, 997, 1473, 1037, 998, 1042, 1043, 346, 313, 314, - 315, 316, 317, 353, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 1049, 1053, 1055, 1057, 1058, 327, 1081, - 1066, 1094, 1095, 1100, 1104, 1111, 377, 1106, 1110, 1112, - 1113, 381, 382, 1114, 1115, 1138, 1116, 1726, 1117, 1169, - 1119, 1122, 1123, 1124, 1170, 1725, 1120, 1172, 1121, 1176, - 1128, 1731, 1134, 1733, 1125, 1735, 1126, 1737, 1738, 1739, - 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, - 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 132, 133, - 1758, 1127, 1761, 1769, 134, 1177, 1181, 1165, 1129, 137, - 1130, 1182, 1131, 1178, 140, 1183, 530, 1132, 1187, 1188, - 1189, 1133, 1135, 1136, 1190, 1191, 1192, 1193, 1378, 1379, - 1202, 1205, 1208, 1286, 134, 744, 1210, 1211, 1212, 1380, - 1213, 1229, 1216, 1220, 140, 1232, 175, 1233, 1234, 1235, - 1239, 1236, 1238, 1799, 1800, 1241, 1242, 1243, 1244, 1245, - 1251, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, - 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1252, - 1255, 1825, 313, 314, 315, 316, 317, 1256, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 1257, 1287, 1288, - 1301, 1290, 327, 1291, 1300, 1305, 1292, 1403, 1317, 1372, - 915, 1294, 1322, 1853, 1327, 1303, 1307, 1309, 1858, 1860, - 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, - 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1402, - 97, 338, 1331, 1316, 1324, 1325, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 1911, 1326, 1913, 1328, 1915, 339, 1917, 1918, 1919, 1920, - 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, - 1931, 1932, 1933, 1934, 1330, 1332, 43, 44, 45, 46, - 47, 48, 1337, 313, 314, 315, 316, 317, 1338, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 1336, 1340, - 1341, 1370, 1395, 327, 1406, 1958, 1959, 1960, 1961, 1962, - 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, - 1343, 1408, 1410, 1411, 1412, 1413, 1454, 1414, 1416, 1418, - 730, 1419, 1421, 1422, 1451, 1424, 1452, 1480, 1459, 1460, - 1994, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 313, 314, - 315, 316, 317, 1471, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 1472, 1474, 1517, 1521, 1522, 327, 1476, - 1525, 2037, 1477, 2039, 1481, 2041, 1478, 2043, 2044, 2045, - 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, - 2056, 2057, 1483, 132, 490, 1485, 1487, 1514, 1526, 134, - 1529, 1530, 1531, 1534, 137, 1540, 1541, 1542, 1544, 140, - 1545, 1546, 1547, 1574, 1576, 1578, 1584, 1579, 1581, 1583, - 1586, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, - 1587, 1588, 1589, 1590, 1591, 1619, 1592, 1621, 1625, 1593, - 1594, 1616, 1618, 1628, 1631, 1632, 2106, 2108, 2110, 2112, - 2114, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, - 2125, 313, 314, 315, 316, 317, 1635, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 1636, 1638, 1669, 1671, - 1675, 327, 2147, 1677, 2149, 625, 2151, 1678, 2153, 1681, - 2155, 1679, 2157, 1682, 2159, 2160, 2161, 2162, 2163, 2164, - 2165, 2166, 2167, 313, 314, 315, 316, 317, 1714, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 1716, 1715, - 1719, 1683, 1684, 327, 2177, 2178, 2179, 2180, 2181, 2182, - 1198, 1720, 1199, 1722, 1729, 1724, 1730, 1732, 1734, 1736, - 1759, 1762, 2195, 2196, 2197, 2198, 2199, 2200, 2202, 2204, - 2206, 1764, 1767, 1770, 1771, 1795, 1796, 1797, 1798, 1801, - 1826, 1829, 1832, 2219, 2220, 2221, 2222, 2223, 2224, 2225, - 1830, 2227, 1831, 2229, 1833, 1834, 1854, 1882, 1883, 903, - 904, 1908, 906, 1910, 908, 909, 1912, 2237, 2238, 2239, - 1914, 1916, 1974, 2038, 1935, 2040, 1973, 2042, 2074, 2249, - 2250, 2251, 2253, 2255, 2257, 2148, 2150, 1975, 2058, 2152, - 1976, 2154, 2014, 2156, 2267, 2268, 2269, 2270, 2090, 2272, - 2091, 2274, 2092, 2093, 2094, 2095, 948, 949, 2158, 2192, - 952, 2193, 2279, 2280, 2281, 2226, 2228, 2230, 2285, 2286, - 2287, 2271, 2194, 2246, 2291, 2292, 2293, 969, 970, 2247, - 2248, 2273, 2275, 975, 976, 2300, 2304, 2306, 2308, 2301, - 982, 2302, 989, 2316, 2318, 2315, 2320, 2317, 2322, 2319, - 2323, 74, 97, 98, 99, 843, 100, 1171, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 82, 125, 126, 127, 97, 298, 1219, 0, - 0, 0, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 1054, 0, 1056, 955, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1063, - 1064, 1065, 0, 0, 0, 1069, 1070, 1071, 1072, 1073, - 1074, 1075, 97, 298, 207, 0, 0, 0, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 97, 529, 0, 0, - 0, 0, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 128, 129, 130, 131, 0, 327, 0, 488, 0, - 0, 0, 0, 549, 0, 132, 133, 0, 0, 0, - 0, 134, 135, 136, 0, 0, 137, 0, 138, 1166, - 139, 140, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 132, - 133, 0, 327, 0, 0, 134, 0, 0, 0, 1222, - 137, 1223, 0, 0, 0, 140, 0, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 1221, 0, 0, 0, 0, 0, 0, 0, 1231, - 0, 0, 0, 0, 0, 132, 133, 0, 0, 0, - 0, 134, 0, 0, 0, 0, 137, 0, 1250, 0, - 0, 140, 563, 27, 28, 564, 565, 31, 566, 33, - 0, 34, 0, 36, 37, 38, 0, 40, 41, 132, - 133, 0, 0, 0, 0, 134, 0, 0, 0, 0, - 137, 0, 0, 0, 53, 140, 563, 27, 28, 564, - 565, 31, 566, 33, 0, 34, 0, 36, 37, 38, + 120, 121, 122, 0, 123, 124, 125, 95, 530, 0, + 0, 0, 0, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 1482, 0, 1058, + 0, 1060, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1067, 1068, 1069, 0, 0, 0, 0, 1074, + 1075, 1076, 1077, 1078, 1079, 1080, 95, 297, 205, 0, + 0, 0, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 0, 123, 124, 125, + 746, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 312, 313, 314, 315, + 316, 326, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 918, 0, 0, 0, 0, 326, 0, 0, 0, + 0, 0, 126, 127, 128, 129, 959, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 130, 131, 0, 0, + 0, 0, 132, 133, 134, 0, 0, 135, 0, 136, + 0, 137, 138, 1171, 0, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 130, 131, 0, 0, 0, 326, 132, 0, 0, 0, + 0, 135, 1384, 0, 1385, 0, 138, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 0, + 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, + 0, 0, 0, 0, 1237, 0, 0, 0, 0, 130, + 131, 0, 0, 0, 0, 132, 0, 0, 0, 0, + 135, 0, 0, 1256, 0, 138, 0, 0, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 312, 313, 314, 315, 316, 326, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 565, 27, 28, 566, 567, + 31, 568, 33, 0, 34, 0, 36, 37, 38, 0, + 40, 41, 0, 0, 0, 0, 0, 565, 27, 28, + 566, 567, 31, 568, 33, 0, 34, 53, 36, 37, + 38, 0, 40, 41, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 53, + 0, 0, 0, 0, 326, 0, 55, 56, 57, 0, + 565, 27, 28, 566, 567, 31, 568, 33, 0, 34, + 0, 36, 37, 38, 67, 40, 41, 0, 55, 56, + 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 0, 0, 0, 67, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 1404, 0, 1405, 0, 0, 326, 1409, 0, + 0, 55, 56, 57, 0, 0, 766, 0, 0, 0, + 0, 0, 0, 0, 1425, 0, 0, 0, 0, 67, + 565, 27, 28, 566, 567, 31, 568, 33, 0, 34, + 0, 36, 37, 38, 0, 40, 41, 0, 0, 0, + 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 0, 0, 0, 565, 27, 28, 566, + 567, 31, 568, 33, 574, 34, 0, 36, 37, 38, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 55, 56, 57, 0, 0, 53, 0, - 0, 563, 27, 28, 564, 565, 31, 566, 33, 0, - 34, 67, 36, 37, 38, 0, 40, 41, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, - 0, 0, 0, 53, 0, 563, 27, 28, 564, 565, - 31, 566, 33, 0, 34, 67, 36, 37, 38, 0, - 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 56, 57, 0, 0, 53, 0, 0, - 0, 0, 0, 0, 0, 313, 314, 315, 316, 317, - 67, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 55, 56, 57, 567, - 0, 0, 1376, 0, 1377, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 1396, 0, 1397, 0, 0, - 0, 1401, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 572, 0, 0, 0, 1417, 563, 27, - 28, 564, 565, 31, 566, 33, 0, 34, 0, 36, - 37, 38, 0, 40, 41, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, - 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -10, 1, 0, -10, -53, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, - 56, 57, 588, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -53, 0, 0, 67, -53, -53, - -53, -53, -53, -53, -53, -53, -53, 0, -53, -53, - -53, -53, -53, -53, -53, -53, 0, 0, 0, -53, - -53, -53, -53, -53, -53, -53, 0, -53, -53, -53, - -53, -53, 0, 0, 1515, 0, 313, 314, 315, 316, - 317, 1520, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 1532, 1533, 0, 0, 327, 0, 0, -53, - -53, -53, -53, 0, 0, 764, 0, -53, 0, -53, - 0, -53, -53, -53, -53, -53, -53, -53, -53, -53, - -53, 0, 0, 0, 0, 802, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1575, 0, 0, -10, - -10, -10, -10, -10, -10, -10, -10, 0, 0, 0, - 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 3, 0, 4, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 0, 0, 0, 0, 0, 1623, - 0, 0, 0, 0, 1630, 628, 629, 630, 631, 632, - 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, - 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, - 653, 215, 216, 217, 0, 0, 0, 0, 0, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 0, - 0, 0, 0, 0, 0, 0, 0, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 0, 238, 239, - 240, 241, 242, 243, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, - 0, 0, 0, 1718, 0, 0, 0, 0, 0, 0, - 0, 654, 0, 1728, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 0, - 34, 35, 36, 37, 38, 39, 40, 41, 999, 0, - 0, 42, 43, 44, 45, 46, 47, 48, 0, 49, - 50, 51, 52, 53, 563, 27, 28, 564, 565, 31, - 566, 33, 0, 34, 0, 36, 37, 38, 0, 40, - 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 54, 55, 56, 57, 0, 53, 0, 0, 58, - 0, 59, 1803, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 55, 56, 57, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 67, 0, 0, 0, 0, 327, 0, - 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, - 0, 1855, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 313, 314, 315, 316, - 317, 770, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 0, 0, - 0, 0, 0, 1909, 0, 911, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 0, 0, - 313, 314, 315, 316, 317, 935, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 0, 0, 0, 0, 1954, 0, 0, 1196, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 1399, - 0, 0, 0, 0, 1992, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 313, - 314, 315, 316, 317, 1400, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 0, 0, 313, 314, 315, 316, 317, 1457, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 0, 0, 313, 314, 315, - 316, 317, 1463, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 313, 314, 315, 316, 317, 1466, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 0, 0, 313, 314, 315, 316, 317, - 1469, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 313, - 314, 315, 316, 317, 1470, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 0, 0, 313, 314, 315, 316, 317, 1516, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 0, 0, 313, 314, 315, - 316, 317, 1577, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 313, 314, 315, 316, 317, 1580, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 0, 0, 313, 314, 315, 316, 317, - 1582, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 313, - 314, 315, 316, 317, 1828, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 0, 0, 313, 314, 315, 316, 317, 1881, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 549, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 550, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 581, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 703, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 704, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 717, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 718, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 719, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 720, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 721, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 722, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 783, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 784, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 785, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 933, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 934, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 954, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1092, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1093, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1107, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1108, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1139, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1140, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1141, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1142, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1143, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1144, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1145, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1146, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1147, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1148, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1149, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1150, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1151, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1152, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1153, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1154, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1155, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1156, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1157, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1158, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1159, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1160, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1161, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1162, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1163, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1164, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1180, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1296, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1310, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1311, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1320, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1323, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1334, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1339, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1342, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1344, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1345, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1346, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1347, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1348, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1349, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1350, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1351, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1352, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1353, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1354, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1355, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1356, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1357, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1358, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1359, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1360, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1361, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1362, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1363, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1364, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1365, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1366, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1367, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1368, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1369, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1373, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1479, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1491, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1492, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1493, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1494, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1495, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1496, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1497, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1498, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1499, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1500, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1501, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1502, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1503, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1504, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1505, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1506, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1507, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1508, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1509, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1510, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1511, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1513, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1595, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1596, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1597, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1598, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1599, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1600, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1601, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1602, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1603, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1604, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1605, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1606, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1607, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1608, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1609, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1610, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1611, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1612, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1613, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1614, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1615, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1691, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1692, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1693, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1694, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1695, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1696, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1697, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1698, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1699, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1700, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1701, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1702, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1703, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1704, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1705, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1706, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1707, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1708, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1709, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1710, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1711, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1768, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1775, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1776, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1777, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1778, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1779, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1780, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1781, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1782, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1783, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1784, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1785, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1786, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1787, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1788, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1789, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1790, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1791, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1792, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1827, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1835, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1836, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1837, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1838, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1839, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1840, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1841, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1842, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1843, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1844, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1845, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1846, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1847, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1848, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1849, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1850, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1851, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1852, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1890, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1891, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1892, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1893, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1894, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1895, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1896, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1897, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1898, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1899, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1900, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1901, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1902, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1903, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1904, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1905, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1906, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1907, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1939, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1940, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1941, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1942, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1943, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1944, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1945, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1946, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1947, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1948, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1949, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1950, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1951, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1952, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1953, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1977, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1978, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1979, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1980, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1981, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1982, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1983, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1984, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1985, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1986, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1987, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1988, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1989, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1990, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1991, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2021, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2022, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2023, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2024, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2025, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2026, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2027, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2028, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2029, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2030, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2031, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2032, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2033, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2034, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2035, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2065, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2066, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2067, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2068, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2069, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2070, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2071, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2072, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2073, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2096, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2097, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2098, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2099, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2100, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2101, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2102, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2103, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2104, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2138, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2139, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2140, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2141, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2142, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2143, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2144, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2145, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2146, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2168, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2169, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2170, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2171, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2172, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2173, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2186, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2187, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2188, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2189, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2190, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2191, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2207, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2208, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2209, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2210, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2211, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2212, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2231, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2232, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2233, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2243, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2244, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2245, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2258, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2259, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2260, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2276, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2277, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2278, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2282, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2283, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2284, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2288, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2289, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2290, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 682, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 684, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 686, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 688, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 690, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 692, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 694, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 696, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 698, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 700, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 702, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 706, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 708, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 710, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 712, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 714, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 716, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 786, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 792, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 883, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 1027, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 1029, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 1031, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 1033, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 1034, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 1173, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 488, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 519, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 520, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 521, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 523, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 525, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 526, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 534, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 575, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 576, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 579, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 585, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 681, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 683, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 685, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 687, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 689, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 691, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 693, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 695, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 697, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 699, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 701, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 705, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 707, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 709, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 711, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 713, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 715, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 750, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 752, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 765, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 766, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 767, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 771, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 772, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 773, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 774, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 775, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 798, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 805, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 1026, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 1028, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 1030, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 1032, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 1096, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 1197, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 1226, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 1329, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 1333, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 1335, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 1453, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 1482, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 1484, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 1486, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 1488, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 1489, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 1490, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 1512, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 1617, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 1772, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 1773, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 1774, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 1936, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 1937, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 1938, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 2059, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 2060, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 2061, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 2062, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 2063, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 2064, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 2174, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 2175, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 2176, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 2234, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 2235, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 2236, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 2294, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 2295, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 2296, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327 + 0, 55, 56, 57, 0, 0, 0, 0, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, + 0, 0, 312, 313, 314, 315, 316, 589, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 55, 56, 57, + 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, + 0, 770, 1524, 1525, 0, 67, 0, 0, 0, 0, + 1530, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1542, 1543, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, -7, 1, + 0, -12, -55, 326, 0, 0, 0, 0, 0, 0, + 0, 0, 772, 0, 0, 0, 0, 590, 0, 0, + 0, 0, 0, 0, 0, 1585, 1586, 0, 0, 0, + 0, -55, 0, 0, 0, -55, -55, -55, -55, -55, + -55, -55, -55, -55, 0, -55, -55, -55, -55, -55, + -55, -55, -55, 805, 0, 0, -55, -55, -55, -55, + -55, -55, -55, 0, -55, -55, -55, -55, -55, 565, + 27, 28, 566, 567, 31, 568, 33, 0, 34, 0, + 36, 37, 38, 0, 40, 41, 0, 0, 0, 0, + 1635, 0, 0, 0, 0, 1642, -55, -55, -55, -55, + 0, 53, 0, 0, -55, 0, -55, 0, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 55, 56, 57, 0, 0, 0, -12, -12, -12, -12, + -12, -12, -12, -12, 0, 0, 0, 0, 67, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -7, -7, 0, -7, 0, 0, 0, 0, 213, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 1730, 0, 0, 0, 0, + 326, 0, 0, 0, 627, 1740, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 214, 215, + 216, 0, 0, 0, 0, 0, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 0, 0, 23, 0, + 0, 0, 0, 0, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 1815, 237, 238, 239, 240, 241, + 242, 0, 0, 0, 0, 0, 0, 24, 0, 0, + 0, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 0, 34, 35, 36, 37, 38, 39, 40, 41, 0, + 0, 0, 42, 43, 44, 45, 46, 47, 48, 656, + 49, 50, 51, 52, 53, 0, 0, 0, 312, 313, + 314, 315, 316, 1868, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 1003, 0, 0, 326, 0, + 0, 0, 54, 55, 56, 57, 0, 773, 0, 0, + 58, 0, 59, 0, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 0, 0, 0, 0, + 0, 312, 313, 314, 315, 316, 1922, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 312, 313, 314, 315, 316, + 914, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, + 0, 0, 0, 0, 939, 0, 0, 0, 0, 1967, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 0, 0, 0, 0, 0, 1202, + 0, 0, 312, 313, 314, 315, 316, 2005, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 0, 0, 312, 313, 314, 315, + 316, 1407, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 312, 313, 314, 315, 316, 1408, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 312, 313, 314, 315, 316, 1466, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 0, 0, 312, 313, + 314, 315, 316, 1472, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 0, 0, 312, 313, 314, 315, 316, 1475, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 0, 0, 312, 313, 314, 315, + 316, 1478, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 312, 313, 314, 315, 316, 1479, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 312, 313, 314, 315, 316, 1526, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 0, 0, 312, 313, + 314, 315, 316, 1588, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 0, 0, 312, 313, 314, 315, 316, 1591, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 0, 0, 312, 313, 314, 315, + 316, 1593, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 312, 313, 314, 315, 316, 1840, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 312, 313, 314, 315, 316, 1894, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 489, 0, 0, 0, + 0, 551, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 552, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 583, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 705, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 706, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 719, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 720, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 721, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 722, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 723, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 724, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 786, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 787, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 788, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 937, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 938, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 958, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1097, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1098, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1112, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1113, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1144, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1145, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1146, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1147, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1148, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1149, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1150, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1151, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1152, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1153, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1154, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1155, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1156, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1157, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1158, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1159, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1160, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1161, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1162, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1163, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1164, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1165, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1166, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1167, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1168, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1169, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1185, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1302, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1303, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1317, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1318, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1327, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1330, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1341, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1346, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1349, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1351, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1352, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1353, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1354, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1355, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1356, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1357, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1358, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1359, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1360, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1361, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1362, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1363, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1364, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1365, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1366, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1367, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1368, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1369, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1370, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1371, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1372, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1373, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1374, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1375, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1376, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1380, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1488, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1500, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1501, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1502, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1503, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1504, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1505, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1506, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1507, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1508, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1509, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1510, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1511, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1512, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1513, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1514, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1515, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1516, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1517, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1518, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1519, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1520, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1522, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1606, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1607, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1608, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1609, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1610, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1611, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1612, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1613, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1614, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1615, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1616, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1617, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1618, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1619, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1620, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1621, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1622, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1623, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1624, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1625, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1626, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1703, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1704, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1705, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1706, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1707, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1708, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1709, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1710, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1711, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1712, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1713, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1714, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1715, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1716, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1717, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1718, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1719, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1720, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1721, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1722, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1723, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1780, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1787, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1788, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1789, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1790, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1791, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1792, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1793, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1794, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1795, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1796, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1797, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1798, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1799, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1800, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1801, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1802, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1803, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1804, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1839, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1847, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1848, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1849, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1850, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1851, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1852, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1853, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1854, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1855, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1856, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1857, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1858, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1859, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1860, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1861, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1862, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1863, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1864, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1903, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1904, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1905, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1906, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1907, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1908, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1909, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1910, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1911, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1912, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1913, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1914, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1915, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1916, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1917, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1918, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1919, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1920, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1952, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1953, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1954, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1955, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1956, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1957, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1958, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1959, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1960, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1961, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1962, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1963, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1964, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1965, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1966, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1990, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1991, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1992, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1993, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1994, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1995, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1996, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1997, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1998, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1999, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2000, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2001, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2002, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2003, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2004, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2034, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2035, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2036, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2037, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2038, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2039, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2040, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2041, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2042, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2043, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2044, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2045, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2046, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2047, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2048, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2078, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2079, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2080, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2081, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2082, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2083, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2084, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2085, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2086, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2109, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2110, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2111, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2112, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2113, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2114, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2115, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2116, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2117, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2151, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2152, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2153, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2154, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2155, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2156, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2157, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2158, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2159, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2181, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2182, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2183, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2184, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2185, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2186, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2199, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2200, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2201, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2202, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2203, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2204, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2220, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2221, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2222, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2223, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2224, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2225, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2244, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2245, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2246, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2256, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2257, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2258, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2271, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2272, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2273, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2289, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2290, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2291, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2295, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2296, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2297, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2301, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2302, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2303, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 684, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 686, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 688, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 690, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 692, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 694, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 696, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 698, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 700, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 702, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 704, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 708, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 710, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 712, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 714, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 716, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 718, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 789, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 795, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 886, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 1031, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 1033, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 1035, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 1037, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 1038, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 1178, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 520, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 521, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 522, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 524, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 526, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 527, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 535, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 577, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 578, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 581, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 587, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 683, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 685, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 687, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 689, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 691, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 693, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 695, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 697, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 699, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 701, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 703, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 707, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 709, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 711, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 713, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 715, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 717, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 752, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 754, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 767, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 768, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 769, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 774, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 775, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 776, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 777, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 778, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 801, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 808, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 1030, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 1032, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 1034, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 1036, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 1101, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 1203, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 1232, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 1336, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 1340, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 1342, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 1461, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 1462, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 1491, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 1493, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 1495, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 1497, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 1498, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 1499, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 1521, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 1628, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 1784, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 1785, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 1786, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 1949, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 1950, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 1951, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 2072, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 2073, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 2074, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 2075, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 2076, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 2077, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 2187, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 2188, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 2189, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 2247, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 2248, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 2249, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 2307, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 2308, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 2309 }; static const short yycheck[] = { 23, - 95, 306, 7, 23, 7, 370, 741, 184, 341, 4, - 187, 4, 1114, 4, 44, 45, 4, 4, 103, 5, - 65, 1123, 4, 3, 8, 65, 5, 42, 1130, 66, - 6, 208, 66, 210, 71, 6, 1307, 71, 1309, 6, - 66, 4, 5, 167, 65, 71, 68, 69, 34, 35, - 36, 1216, 5, 7, 87, 34, 35, 36, 186, 187, - 193, 194, 198, 4, 186, 187, 199, 203, 201, 66, - 6, 34, 35, 36, 71, 203, 198, 205, 49, 186, - 187, 34, 35, 36, 4, 186, 187, 6, 66, 5, - 186, 187, 304, 71, 186, 187, 203, 197, 205, 199, - 38, 6, 203, 41, 205, 186, 187, 203, 132, 133, - 134, 203, 197, 137, 138, 6, 197, 141, 34, 35, - 36, 186, 187, 204, 148, 149, 150, 198, 152, 341, - 154, 155, 203, 157, 186, 187, 197, 66, 199, 204, - 66, 171, 71, 173, 6, 71, 198, 197, 66, 179, - 174, 175, 197, 71, 7, 1385, 197, 197, 1323, 1389, - 895, 6, 1392, 204, 204, 106, 107, 65, 205, 193, - 194, 205, 196, 6, 198, 7, 66, 201, 202, 205, - 213, 71, 197, 204, 197, 518, 106, 107, 197, 494, - 199, 204, 176, 177, 178, 179, 180, 530, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 187, 205, 204, - 6, 204, 196, 204, 391, 197, 204, 204, 204, 186, - 187, 251, 1324, 199, 248, 204, 1328, 205, 197, 253, + 4, 370, 93, 23, 4, 340, 4, 305, 4, 1119, + 743, 4, 4, 182, 44, 45, 185, 4, 1128, 5, + 4, 6, 65, 3, 6, 1135, 7, 5, 42, 6, + 66, 1314, 65, 1316, 212, 71, 1222, 206, 66, 208, + 66, 103, 6, 71, 197, 71, 68, 69, 34, 35, + 36, 204, 197, 65, 199, 4, 34, 35, 36, 66, + 66, 66, 5, 66, 71, 71, 71, 197, 71, 186, + 187, 6, 4, 5, 204, 167, 66, 66, 4, 186, + 187, 71, 71, 186, 187, 49, 203, 5, 205, 193, + 194, 34, 35, 36, 66, 199, 203, 201, 205, 71, + 203, 303, 34, 35, 36, 7, 130, 131, 132, 186, + 187, 135, 136, 186, 187, 139, 34, 35, 36, 197, + 197, 199, 146, 147, 148, 197, 150, 204, 152, 153, + 203, 155, 205, 186, 187, 197, 186, 187, 340, 169, + 6, 171, 186, 187, 1330, 186, 187, 177, 172, 173, + 198, 204, 6, 203, 197, 203, 1393, 106, 107, 203, + 1397, 204, 203, 1400, 65, 898, 197, 191, 192, 205, + 194, 204, 196, 204, 7, 199, 200, 205, 6, 205, + 106, 107, 198, 197, 519, 197, 6, 203, 197, 186, + 187, 172, 173, 174, 175, 204, 531, 495, 205, 205, + 205, 198, 205, 6, 186, 187, 204, 187, 204, 186, + 187, 204, 204, 197, 199, 205, 205, 204, 204, 6, + 250, 1331, 391, 247, 402, 1335, 204, 197, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 8, 197, 295, 296, 297, 205, 193, 194, 205, - 304, 186, 187, 198, 197, 201, 306, 205, 203, 313, + 186, 187, 294, 295, 296, 193, 194, 38, 38, 303, + 41, 41, 42, 201, 44, 305, 197, 203, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 197, 1576, 518, 46, 1579, 333, - 1581, 335, 1047, 7, 197, 205, 340, 341, 530, 172, - 173, 174, 175, 42, 198, 349, 350, 351, 352, 203, - 354, 355, 356, 357, 358, 359, 360, 367, 368, 198, - 172, 173, 174, 175, 203, 197, 193, 194, 372, 373, - 374, 375, 186, 187, 201, 379, 186, 187, 197, 6, - 199, 193, 194, 387, 369, 370, 369, 370, 197, 201, - 204, 197, 396, 203, 1476, 1477, 1478, 1479, 186, 187, - 197, 1483, 186, 187, 197, 7, 186, 187, 186, 187, - 1620, 204, 42, 726, 1624, 44, 204, 1627, 42, 203, - 1671, 193, 194, 203, 1675, 203, 1677, 199, 55, 201, - 6, 7, 186, 187, 193, 194, 8, 197, 438, 199, - 199, 38, 201, 756, 41, 42, 3, 179, 180, 203, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 176, - 177, 178, 179, 180, 196, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 787, 788, 789, 790, 42, 196, - 186, 187, 198, 487, 193, 194, 490, 203, 205, 186, - 187, 66, 496, 495, 494, 8, 71, 203, 172, 173, - 174, 175, 56, 57, 1586, 1587, 203, 1717, 1590, 193, - 194, 1721, 197, 1723, 518, 199, 197, 201, 199, 193, - 194, 6, 7, 527, 528, 204, 530, 38, 532, 533, - 41, 42, 204, 44, 726, 539, 42, 6, 548, 731, - 188, 189, 190, 6, 4, 549, 550, 197, 196, 176, - 177, 178, 179, 180, 558, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 756, 197, 570, 199, 4, 196, - 172, 173, 174, 175, 197, 1290, 199, 581, 197, 583, - 584, 138, 139, 140, 141, 142, 143, 144, 145, 197, - 6, 193, 194, 42, 4, 787, 788, 789, 790, 1681, - 913, 3, 887, 888, 176, 177, 178, 179, 180, 197, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 197, - 197, 199, 199, 625, 196, 625, 198, 186, 187, 188, - 189, 190, 5, 3, 4, 41, 42, 196, 44, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 176, 177, 178, 179, 180, 38, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 197, 59, - 60, 61, 62, 196, 64, 197, 6, 199, 1770, 59, - 60, 61, 62, 63, 64, 197, 6, 199, 197, 703, - 704, 123, 124, 125, 126, 127, 197, 197, 199, 199, - 197, 197, 199, 717, 718, 719, 720, 721, 722, 723, - 4, 913, 726, 6, 6, 727, 197, 731, 199, 197, - 734, 199, 197, 197, 199, 199, 1081, 747, 5, 197, - 744, 199, 197, 199, 199, 201, 203, 197, 205, 1831, - 197, 203, 756, 205, 758, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 839, 203, 203, 205, 205, 196, - 203, 4, 205, 783, 784, 785, 204, 203, 203, 205, - 205, 204, 197, 787, 788, 789, 790, 6, 197, 793, - 794, 204, 203, 797, 205, 203, 203, 205, 205, 203, - 810, 205, 6, 197, 808, 809, 203, 197, 205, 819, - 203, 203, 205, 205, 197, 197, 186, 187, 203, 203, - 205, 205, 192, 204, 203, 197, 205, 197, 203, 203, - 205, 205, 202, 197, 204, 203, 203, 205, 205, 204, - 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, + 324, 325, 326, 197, 1587, 186, 187, 1590, 332, 1592, + 334, 193, 194, 193, 194, 339, 340, 519, 1051, 199, + 197, 201, 199, 204, 348, 349, 350, 351, 352, 531, + 354, 355, 356, 357, 358, 359, 360, 367, 368, 172, + 173, 174, 175, 46, 186, 187, 7, 197, 372, 373, + 374, 375, 186, 187, 198, 379, 7, 186, 187, 203, + 193, 194, 204, 387, 198, 369, 370, 197, 201, 369, + 370, 197, 396, 199, 203, 1485, 1486, 1487, 1488, 186, + 187, 197, 1492, 199, 186, 187, 186, 187, 186, 187, + 188, 189, 190, 728, 42, 1632, 203, 8, 196, 1636, + 1683, 203, 1639, 203, 1687, 197, 1689, 179, 180, 197, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 439, + 188, 189, 190, 758, 196, 3, 4, 197, 196, 199, + 197, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 790, 791, 792, 793, 197, + 38, 3, 193, 194, 488, 6, 7, 491, 199, 42, + 201, 193, 194, 497, 496, 495, 197, 199, 199, 201, + 42, 59, 60, 61, 62, 63, 64, 1597, 1598, 8, + 42, 1601, 1729, 193, 194, 519, 1733, 198, 1735, 56, + 57, 201, 203, 198, 528, 529, 44, 531, 203, 533, + 534, 172, 173, 174, 175, 38, 197, 541, 41, 42, + 550, 172, 173, 174, 175, 198, 728, 551, 552, 204, + 203, 733, 193, 194, 6, 7, 560, 123, 124, 125, + 126, 127, 193, 194, 59, 60, 61, 62, 572, 64, + 163, 164, 204, 166, 41, 42, 758, 44, 197, 583, + 199, 585, 586, 1296, 6, 176, 177, 178, 179, 180, + 6, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 197, 916, 199, 1693, 199, 196, 201, 42, 790, 791, + 792, 793, 890, 891, 205, 4, 138, 139, 140, 141, + 142, 143, 144, 145, 197, 627, 199, 627, 186, 187, + 197, 6, 199, 197, 192, 199, 197, 197, 199, 197, + 197, 3, 4, 197, 202, 199, 204, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 197, 197, 199, 199, 4, 4, 176, 177, 178, + 179, 180, 197, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 1782, 197, 42, 199, 197, 196, 199, 6, + 197, 705, 706, 197, 197, 199, 199, 197, 5, 199, + 197, 203, 203, 205, 205, 719, 720, 721, 722, 723, + 724, 725, 197, 203, 728, 205, 203, 729, 205, 733, + 4, 203, 736, 205, 916, 6, 197, 1086, 203, 749, + 205, 203, 746, 205, 203, 203, 205, 205, 55, 203, + 203, 205, 205, 1843, 758, 6, 760, 178, 179, 180, + 5, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 203, 842, 205, 204, 204, 196, 786, 787, 788, 203, + 203, 205, 205, 203, 197, 205, 790, 791, 792, 793, + 197, 197, 796, 797, 8, 203, 800, 205, 203, 203, + 205, 205, 203, 813, 205, 197, 204, 811, 812, 203, + 197, 205, 822, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 4, 204, 186, 187, 203, 196, 205, 203, + 192, 205, 203, 197, 205, 197, 197, 203, 200, 205, + 202, 197, 204, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, - 864, 865, 866, 867, 868, 869, 176, 177, 178, 179, - 180, 204, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 6, 203, 883, 205, 203, 196, 205, 888, 203, - 199, 205, 896, 201, 176, 177, 178, 179, 180, 204, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 913, - 203, 915, 205, 917, 196, 178, 179, 180, 109, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 932, 933, - 934, 6, 2014, 196, 203, 203, 205, 205, 203, 203, - 205, 205, 203, 203, 205, 205, 959, 203, 197, 205, - 954, 955, 956, 203, 6, 205, 1301, 176, 177, 178, + 864, 865, 866, 867, 868, 869, 870, 871, 872, 176, + 177, 178, 179, 180, 197, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 204, 203, 886, 205, 203, 196, + 205, 891, 203, 199, 205, 899, 204, 176, 177, 178, 179, 180, 6, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 176, 177, 178, 179, 180, 196, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 203, 203, 205, - 205, 6, 196, 5, 3, 4, 203, 997, 205, 197, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 203, 203, 205, 205, 197, 6, - 197, 197, 197, 197, 197, 197, 1040, 1039, 197, 197, - 197, 197, 1052, 197, 197, 176, 177, 178, 179, 180, - 197, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 197, 1136, 1066, 1067, 1068, 196, 198, 197, 197, 200, - 197, 197, 1082, 1077, 1084, 1077, 1086, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 4, 1092, 1093, - 196, 7, 1105, 203, 203, 7, 1081, 201, 1081, 199, - 1104, 204, 7, 1107, 7, 198, 7, 6, 104, 7, - 204, 106, 168, 1117, 5, 5, 5, 5, 5, 5, - 1124, 1125, 1126, 5, 5, 5, 5, 1131, 5, 5, - 5, 1135, 5, 5, 5, 1139, 1140, 1141, 1142, 1143, + 189, 190, 916, 203, 918, 205, 920, 196, 203, 203, + 205, 205, 204, 203, 203, 205, 205, 203, 203, 205, + 205, 201, 936, 937, 938, 109, 203, 2027, 205, 203, + 203, 205, 205, 203, 203, 205, 205, 6, 197, 6, + 6, 3, 1110, 197, 958, 959, 960, 197, 197, 1308, + 197, 197, 176, 177, 178, 179, 180, 197, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 197, 197, 197, + 197, 197, 196, 5, 198, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 3, 4, 197, 197, + 197, 1001, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 197, 197, 197, 197, + 197, 203, 198, 6, 4, 196, 7, 201, 203, 7, + 1044, 1043, 199, 7, 204, 7, 1056, 198, 7, 7, + 104, 176, 177, 178, 179, 180, 106, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 1070, 1071, 1072, 1073, + 1141, 196, 204, 5, 5, 200, 1234, 1087, 1082, 1089, + 1082, 1091, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 1097, 1098, 5, 5, 5, 5, 5, + 5, 5, 1086, 5, 5, 1109, 1086, 5, 1112, 156, + 5, 203, 6, 5, 5, 5, 3, 5, 1122, 5, + 198, 6, 5, 4, 6, 1129, 1130, 1131, 200, 6, + 201, 7, 1136, 7, 7, 7, 1140, 7, 7, 7, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, - 1164, 176, 177, 178, 179, 180, 5, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 1180, 186, 187, 5, - 5, 196, 5, 192, 5, 5, 5, 156, 197, 5, - 5, 200, 5, 202, 1198, 204, 5, 3, 5, 176, - 177, 178, 179, 180, 5, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 6, 1228, 3, 4, 1222, 196, - 1224, 6, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 3, 4, 203, 5, - 198, 6, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 4, 176, 177, 178, - 179, 180, 200, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 1296, 6, 1304, 6, 1306, 196, 1308, 7, - 1304, 7, 1306, 7, 1308, 7, 1310, 1311, 7, 7, - 7, 205, 205, 1317, 7, 7, 1301, 201, 1301, 204, - 7, 204, 1326, 197, 169, 203, 5, 4, 6, 197, - 1334, 201, 6, 198, 203, 1339, 203, 203, 1342, 203, - 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, + 1164, 1165, 1166, 1167, 1168, 1169, 205, 205, 204, 204, + 1328, 7, 7, 197, 7, 201, 168, 5, 203, 186, + 187, 1185, 203, 203, 203, 192, 203, 203, 203, 203, + 197, 203, 203, 200, 203, 202, 6, 204, 203, 203, + 1204, 203, 203, 176, 177, 178, 179, 180, 203, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 6, 203, + 203, 3, 4, 196, 1228, 203, 1230, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 3, 4, 203, 203, 203, 203, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 4, 176, 177, 178, 179, 180, 198, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 197, 1302, 1303, + 203, 1311, 196, 1313, 6, 1315, 203, 1311, 197, 1313, + 203, 1315, 6, 1317, 1318, 6, 6, 6, 197, 203, + 1324, 7, 197, 203, 1308, 203, 1484, 7, 1308, 1333, + 7, 197, 203, 197, 197, 197, 203, 1341, 197, 197, + 197, 197, 1346, 197, 197, 1349, 197, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, - 1364, 1365, 1366, 1367, 1368, 1369, 203, 203, 203, 1379, - 203, 203, 1376, 203, 1378, 1379, 1380, 6, 6, 203, - 197, 203, 200, 197, 176, 177, 178, 179, 180, 1402, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 186, - 187, 203, 7, 203, 196, 192, 203, 203, 203, 203, - 197, 197, 203, 200, 203, 202, 6, 204, 7, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 186, - 187, 197, 197, 197, 197, 192, 197, 197, 197, 197, - 197, 7, 204, 200, 197, 202, 197, 204, 197, 197, - 197, 197, 197, 197, 1458, 197, 197, 197, 6, 197, - 1464, 197, 1475, 1467, 197, 176, 177, 178, 179, 180, - 199, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 7, 7, 7, 7, 7, 196, 7, 1491, 1492, 1493, - 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, - 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 7, 1513, - 7, 7, 7, 7, 4, 6, 165, 6, 4, 7, - 7, 3, 1535, 3, 3, 3, 4, 188, 3, 3, - 3, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 3, 4, 3, 3, 3, - 3, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 3, 3, 3, 1592, 1593, - 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, + 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, + 1374, 1375, 1376, 197, 197, 197, 197, 1387, 197, 197, + 1384, 197, 1386, 1387, 1388, 197, 197, 1545, 176, 177, + 178, 179, 180, 197, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 197, 186, 187, 199, 8, 196, 200, + 192, 7, 204, 7, 7, 197, 7, 7, 200, 7, + 202, 7, 204, 7, 7, 7, 7, 7, 4, 6, + 169, 6, 4, 7, 186, 187, 7, 3, 1596, 3, + 192, 3, 188, 3, 3, 197, 3, 3, 3, 3, + 202, 3, 204, 3, 3, 3, 3, 198, 198, 5, + 5, 3, 3, 1467, 201, 197, 6, 6, 4, 1473, + 7, 6, 1476, 6, 176, 177, 178, 179, 180, 6, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 6, + 6, 6, 197, 204, 196, 6, 1500, 1501, 1502, 1503, + 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, + 1514, 1515, 1516, 1517, 1518, 1519, 1520, 6, 1522, 176, + 177, 178, 179, 180, 165, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 1692, 105, 204, 3, 4, 196, + 203, 198, 203, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 198, 203, 198, + 203, 198, 198, 203, 198, 176, 177, 178, 179, 180, + 1738, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 203, 203, 203, 203, 203, 196, 203, 203, 203, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, - 1614, 1615, 3, 5, 1616, 5, 3, 3, 6, 1632, - 198, 4, 6, 198, 6, 201, 7, 156, 176, 177, - 178, 179, 180, 162, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 6, 6, 6, 6, 6, 196, 204, - 197, 6, 6, 105, 204, 198, 185, 203, 203, 203, - 198, 190, 191, 203, 198, 6, 203, 1680, 203, 6, - 203, 203, 203, 203, 4, 1679, 198, 6, 198, 6, - 198, 1685, 198, 1687, 203, 1689, 203, 1691, 1692, 1693, - 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, - 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 186, 187, - 1712, 203, 1714, 1726, 192, 6, 6, 201, 203, 197, - 203, 6, 203, 200, 202, 6, 204, 203, 6, 6, - 6, 203, 203, 203, 6, 6, 6, 6, 186, 187, - 6, 6, 6, 4, 192, 8, 6, 6, 6, 197, - 6, 3, 7, 105, 202, 6, 204, 3, 6, 188, - 3, 6, 6, 1767, 1768, 6, 3, 6, 6, 3, - 6, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, - 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 3, - 3, 1793, 176, 177, 178, 179, 180, 3, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 6, 6, 6, - 204, 7, 196, 6, 6, 204, 201, 6, 102, 107, - 8, 200, 198, 1827, 198, 205, 204, 204, 1832, 1833, - 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, - 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 165, - 3, 4, 198, 204, 203, 203, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 1884, 203, 1886, 203, 1888, 38, 1890, 1891, 1892, 1893, - 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, - 1904, 1905, 1906, 1907, 203, 198, 59, 60, 61, 62, - 63, 64, 198, 176, 177, 178, 179, 180, 198, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 203, 203, - 198, 198, 105, 196, 3, 1939, 1940, 1941, 1942, 1943, - 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, - 203, 6, 6, 3, 6, 6, 205, 6, 6, 6, - 489, 6, 3, 6, 6, 5, 5, 198, 6, 204, - 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, - 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 176, 177, - 178, 179, 180, 204, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 203, 205, 6, 6, 6, 196, 203, - 6, 2015, 203, 2017, 198, 2019, 203, 2021, 2022, 2023, - 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, - 2034, 2035, 203, 186, 187, 198, 203, 203, 6, 192, - 6, 6, 6, 6, 197, 6, 6, 6, 6, 202, - 6, 6, 5, 5, 204, 203, 205, 204, 204, 203, - 203, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, - 203, 198, 198, 203, 203, 6, 204, 6, 6, 204, - 204, 204, 203, 6, 102, 165, 2090, 2091, 2092, 2093, - 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, - 2104, 176, 177, 178, 179, 180, 6, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 6, 5, 5, 204, - 204, 196, 2126, 204, 2128, 200, 2130, 205, 2132, 203, - 2134, 204, 2136, 203, 2138, 2139, 2140, 2141, 2142, 2143, - 2144, 2145, 2146, 176, 177, 178, 179, 180, 204, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 6, 205, - 6, 198, 198, 196, 2168, 2169, 2170, 2171, 2172, 2173, - 203, 6, 205, 6, 6, 102, 6, 6, 6, 6, - 6, 6, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, - 2194, 205, 204, 203, 203, 6, 6, 6, 6, 170, - 6, 171, 204, 2207, 2208, 2209, 2210, 2211, 2212, 2213, - 203, 2215, 203, 2217, 204, 204, 6, 203, 198, 748, - 749, 6, 751, 6, 753, 754, 6, 2231, 2232, 2233, - 6, 6, 204, 6, 203, 6, 203, 6, 6, 2243, - 2244, 2245, 2246, 2247, 2248, 6, 6, 204, 198, 6, - 204, 6, 203, 6, 2258, 2259, 2260, 2261, 204, 2263, - 204, 2265, 204, 204, 204, 204, 795, 796, 6, 204, - 799, 204, 2276, 2277, 2278, 6, 6, 6, 2282, 2283, - 2284, 6, 204, 204, 2288, 2289, 2290, 816, 817, 204, - 204, 6, 6, 822, 823, 204, 2300, 2301, 2302, 204, - 829, 204, 831, 6, 6, 2309, 6, 2311, 0, 2313, - 0, 7, 3, 4, 5, 627, 7, 1043, 9, 10, + 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, + 1624, 1625, 1626, 1781, 203, 1627, 6, 6, 4, 198, + 203, 198, 6, 201, 6, 154, 176, 177, 178, 179, + 180, 160, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 6, 203, 6, 6, 6, 196, 6, 6, 203, + 203, 6, 6, 6, 183, 203, 200, 6, 6, 188, + 189, 176, 177, 178, 179, 180, 6, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 6, 1691, 6, 203, + 6, 196, 6, 1697, 6, 1699, 6, 1701, 203, 1703, + 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, + 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, + 186, 187, 1724, 6, 1726, 7, 192, 105, 3, 6, + 3, 197, 6, 188, 6, 6, 202, 3, 204, 6, + 3, 6, 3, 4, 6, 3, 6, 3, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 7, 34, 35, 36, 3, 4, 1098, -1, - -1, -1, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 905, -1, 907, 8, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 918, - 919, 920, -1, -1, -1, 924, 925, 926, 927, 928, - 929, 930, 3, 4, 5, -1, -1, -1, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, 35, 36, 3, 4, -1, -1, + 31, 32, 3, 3, 6, 1779, 1780, 4, 6, 201, + 6, 200, 7, 1787, 1788, 1789, 1790, 1791, 1792, 1793, + 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, + 1804, 6, 6, 1805, 176, 177, 178, 179, 180, 204, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 205, + 204, 204, 204, 204, 196, 198, 102, 107, 203, 198, + 198, 6, 203, 203, 198, 1839, 203, 203, 203, 198, + 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, + 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, + 1864, 198, 203, 3, 4, 198, 198, 203, 105, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 1897, 6, 1899, 3, 1901, 38, 1903, + 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, + 1914, 1915, 1916, 1917, 1918, 1919, 1920, 6, 6, 59, + 60, 61, 62, 63, 64, 186, 187, 3, 6, 6, + 5, 192, 6, 6, 6, 6, 197, 3, 6, 6, + 5, 202, 6, 165, 6, 198, 205, 204, 1952, 1953, + 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, + 1964, 1965, 1966, 204, 203, 205, 6, 203, 203, 203, + 203, 490, 6, 6, 198, 198, 6, 6, 6, 6, + 6, 6, 203, 1987, 1988, 1989, 1990, 1991, 1992, 1993, + 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, + 2004, 176, 177, 178, 179, 180, 203, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 6, 6, 6, 6, + 6, 196, 6, 5, 2028, 5, 2030, 204, 2032, 203, + 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, + 2044, 2045, 2046, 2047, 2048, 204, 186, 187, 204, 203, + 205, 203, 192, 203, 198, 198, 203, 197, 203, 6, + 6, 203, 202, 204, 6, 204, 204, 204, 6, 6, + 102, 6, 6, 5, 2078, 2079, 2080, 2081, 2082, 2083, + 2084, 2085, 2086, 5, 204, 204, 204, 203, 205, 204, + 203, 205, 198, 198, 204, 165, 6, 6, 6, 2103, + 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, + 2114, 2115, 2116, 2117, 176, 177, 178, 179, 180, 6, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 102, + 6, 6, 6, 6, 196, 2139, 6, 2141, 6, 2143, + 6, 2145, 205, 2147, 204, 2149, 203, 2151, 2152, 2153, + 2154, 2155, 2156, 2157, 2158, 2159, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 6, 6, 6, 6, 6, 196, 2181, 2182, 2183, + 2184, 2185, 2186, 203, 203, 205, 203, 170, 204, 204, + 204, 6, 171, 203, 198, 2199, 2200, 2201, 2202, 2203, + 2204, 2205, 2206, 2207, 6, 6, 6, 6, 6, 203, + 203, 6, 204, 204, 6, 6, 2220, 2221, 2222, 2223, + 2224, 2225, 2226, 204, 2228, 203, 2230, 198, 6, 204, + 204, 750, 751, 6, 753, 204, 755, 756, 204, 204, + 2244, 2245, 2246, 204, 6, 6, 6, 6, 6, 204, + 204, 204, 2256, 2257, 2258, 2259, 2260, 2261, 6, 6, + 6, 204, 6, 204, 204, 6, 6, 2271, 2272, 2273, + 2274, 204, 2276, 204, 2278, 204, 6, 6, 6, 798, + 799, 6, 0, 802, 0, 2289, 2290, 2291, 1103, 629, + 4, 2295, 2296, 2297, 1047, 4, 6, 2301, 2302, 2303, + 819, 820, -1, -1, -1, -1, 825, 826, -1, 2313, + 2314, 2315, -1, 832, -1, 834, -1, -1, 2322, -1, + 2324, -1, 2326, 3, 4, 5, -1, 7, -1, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, 35, 36, 3, 4, -1, + -1, -1, -1, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 6, -1, 908, + -1, 910, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 921, 922, 923, -1, -1, -1, -1, 928, + 929, 930, 931, 932, 933, 934, 3, 4, 5, -1, -1, -1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 176, 177, 178, 179, - 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 172, 173, 174, 175, -1, 196, -1, 198, -1, - -1, -1, -1, 203, -1, 186, 187, -1, -1, -1, - -1, 192, 193, 194, -1, -1, 197, -1, 199, 1038, - 201, 202, 176, 177, 178, 179, 180, -1, 182, 183, - 184, 185, 186, 187, 188, 189, 190, -1, -1, 186, - 187, -1, 196, -1, -1, 192, -1, -1, -1, 203, - 197, 205, -1, -1, -1, 202, -1, 176, 177, 178, + 27, 28, 29, 30, 31, 32, -1, 34, 35, 36, + 8, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 176, 177, 178, 179, + 180, 196, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 8, -1, -1, -1, -1, 196, -1, -1, -1, + -1, -1, 172, 173, 174, 175, 8, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 186, 187, -1, -1, + -1, -1, 192, 193, 194, -1, -1, 197, -1, 199, + -1, 201, 202, 1042, -1, 176, 177, 178, 179, 180, + -1, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 186, 187, -1, -1, -1, 196, 192, -1, -1, -1, + -1, 197, 203, -1, 205, -1, 202, 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 1100, -1, -1, -1, -1, -1, -1, -1, 1108, - -1, -1, -1, -1, -1, 186, 187, -1, -1, -1, - -1, 192, -1, -1, -1, -1, 197, -1, 1127, -1, - -1, 202, 38, 39, 40, 41, 42, 43, 44, 45, - -1, 47, -1, 49, 50, 51, -1, 53, 54, 186, + -1, -1, -1, -1, -1, -1, 1105, -1, -1, -1, + -1, -1, -1, -1, 1113, -1, -1, -1, -1, 186, 187, -1, -1, -1, -1, 192, -1, -1, -1, -1, - 197, -1, -1, -1, 70, 202, 38, 39, 40, 41, - 42, 43, 44, 45, -1, 47, -1, 49, 50, 51, - -1, 53, 54, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 99, 100, 101, -1, -1, 70, -1, - -1, 38, 39, 40, 41, 42, 43, 44, 45, -1, - 47, 117, 49, 50, 51, -1, 53, 54, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 99, 100, 101, - -1, -1, -1, 70, -1, 38, 39, 40, 41, 42, - 43, 44, 45, -1, 47, 117, 49, 50, 51, -1, - 53, 54, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 99, 100, 101, -1, -1, 70, -1, -1, - -1, -1, -1, -1, -1, 176, 177, 178, 179, 180, - 117, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, 99, 100, 101, 205, - -1, -1, 203, -1, 205, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 117, 1314, -1, 1316, -1, -1, - -1, 1320, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 205, -1, -1, -1, 1336, 38, 39, - 40, 41, 42, 43, 44, 45, -1, 47, -1, 49, - 50, 51, -1, 53, 54, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 205, -1, - 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 0, 1, -1, 3, 4, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, - 100, 101, 205, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, -1, -1, 117, 37, 38, - 39, 40, 41, 42, 43, 44, 45, -1, 47, 48, - 49, 50, 51, 52, 53, 54, -1, -1, -1, 58, - 59, 60, 61, 62, 63, 64, -1, 66, 67, 68, - 69, 70, -1, -1, 1453, -1, 176, 177, 178, 179, - 180, 1460, 182, 183, 184, 185, 186, 187, 188, 189, - 190, -1, 1471, 1472, -1, -1, 196, -1, -1, 98, - 99, 100, 101, -1, -1, 205, -1, 106, -1, 108, - -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, -1, -1, -1, 205, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1515, -1, -1, 138, - 139, 140, 141, 142, 143, 144, 145, -1, -1, -1, - -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 163, 164, -1, 166, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, -1, -1, -1, -1, -1, 1578, - -1, -1, -1, -1, 1583, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 120, 121, 122, -1, -1, -1, -1, -1, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, -1, - -1, -1, -1, -1, -1, -1, -1, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, -1, 157, 158, - 159, 160, 161, 162, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, - -1, -1, -1, 1672, -1, -1, -1, -1, -1, -1, - -1, 205, -1, 1682, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, - 37, 38, 39, 40, 41, 42, 43, 44, 45, -1, - 47, 48, 49, 50, 51, 52, 53, 54, 205, -1, - -1, 58, 59, 60, 61, 62, 63, 64, -1, 66, - 67, 68, 69, 70, 38, 39, 40, 41, 42, 43, - 44, 45, -1, 47, -1, 49, 50, 51, -1, 53, - 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 98, 99, 100, 101, -1, 70, -1, -1, 106, - -1, 108, 1771, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 99, 100, 101, 176, 177, + 197, -1, -1, 1132, -1, 202, -1, -1, 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 117, -1, -1, -1, -1, 196, -1, - -1, -1, -1, -1, -1, -1, -1, 205, -1, -1, - -1, 1830, 176, 177, 178, 179, 180, -1, 182, 183, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 176, + 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 176, 177, 178, 179, 180, 196, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, 38, 39, 40, 41, 42, + 43, 44, 45, -1, 47, -1, 49, 50, 51, -1, + 53, 54, -1, -1, -1, -1, -1, 38, 39, 40, + 41, 42, 43, 44, 45, -1, 47, 70, 49, 50, + 51, -1, 53, 54, 176, 177, 178, 179, 180, -1, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 70, + -1, -1, -1, -1, 196, -1, 99, 100, 101, -1, + 38, 39, 40, 41, 42, 43, 44, 45, -1, 47, + -1, 49, 50, 51, 117, 53, 54, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 70, -1, -1, -1, 117, 176, 177, 178, + 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 1321, -1, 1323, -1, -1, 196, 1327, -1, + -1, 99, 100, 101, -1, -1, 205, -1, -1, -1, + -1, -1, -1, -1, 1343, -1, -1, -1, -1, 117, + 38, 39, 40, 41, 42, 43, 44, 45, -1, 47, + -1, 49, 50, 51, -1, 53, 54, -1, -1, -1, + -1, -1, 205, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 70, -1, -1, -1, 38, 39, 40, 41, + 42, 43, 44, 45, 205, 47, -1, 49, 50, 51, + -1, 53, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 99, 100, 101, -1, -1, -1, -1, 70, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 117, + -1, -1, 176, 177, 178, 179, 180, 205, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 99, 100, 101, + -1, -1, 196, -1, -1, -1, -1, -1, -1, -1, + -1, 205, 1461, 1462, -1, 117, -1, -1, -1, -1, + 1469, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1480, 1481, 176, 177, 178, 179, 180, -1, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 0, 1, + -1, 3, 4, 196, -1, -1, -1, -1, -1, -1, + -1, -1, 205, -1, -1, -1, -1, 205, -1, -1, + -1, -1, -1, -1, -1, 1524, 1525, -1, -1, -1, + -1, 33, -1, -1, -1, 37, 38, 39, 40, 41, + 42, 43, 44, 45, -1, 47, 48, 49, 50, 51, + 52, 53, 54, 205, -1, -1, 58, 59, 60, 61, + 62, 63, 64, -1, 66, 67, 68, 69, 70, 38, + 39, 40, 41, 42, 43, 44, 45, -1, 47, -1, + 49, 50, 51, -1, 53, 54, -1, -1, -1, -1, + 1589, -1, -1, -1, -1, 1594, 98, 99, 100, 101, + -1, 70, -1, -1, 106, -1, 108, -1, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 99, 100, 101, -1, -1, -1, 138, 139, 140, 141, + 142, 143, 144, 145, -1, -1, -1, -1, 117, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 163, 164, -1, 166, -1, -1, -1, -1, 41, + 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 1684, -1, -1, -1, -1, + 196, -1, -1, -1, 200, 1694, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 120, 121, + 122, -1, -1, -1, -1, -1, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, -1, -1, 4, -1, + -1, -1, -1, -1, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 1783, 157, 158, 159, 160, 161, + 162, -1, -1, -1, -1, -1, -1, 33, -1, -1, + -1, 37, 38, 39, 40, 41, 42, 43, 44, 45, + -1, 47, 48, 49, 50, 51, 52, 53, 54, -1, + -1, -1, 58, 59, 60, 61, 62, 63, 64, 205, + 66, 67, 68, 69, 70, -1, -1, -1, 176, 177, + 178, 179, 180, 1842, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, 205, -1, -1, 196, -1, + -1, -1, 98, 99, 100, 101, -1, 205, -1, -1, + 106, -1, 108, -1, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, -1, -1, -1, -1, -1, -1, + -1, 176, 177, 178, 179, 180, 1895, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 176, 177, 178, 179, 180, + 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, + -1, -1, -1, -1, -1, 196, -1, -1, -1, -1, + -1, -1, -1, -1, 205, -1, -1, -1, -1, 1948, + 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, -1, -1, -1, -1, -1, -1, -1, 205, + -1, -1, 176, 177, 178, 179, 180, 1986, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, 176, 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, - -1, -1, -1, 1882, -1, 205, 176, 177, 178, 179, - 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 176, 177, 178, 179, 180, 205, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, -1, -1, 176, 177, 178, 179, 180, 205, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, -1, -1, 176, 177, + 178, 179, 180, 205, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + -1, -1, 176, 177, 178, 179, 180, 205, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, -1, -1, 176, 177, 178, 179, + 180, 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, 176, 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, - 196, -1, -1, -1, -1, -1, 1935, -1, -1, 205, - 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, + 196, -1, -1, -1, 176, 177, 178, 179, 180, 205, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, -1, -1, 176, 177, + 178, 179, 180, 205, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + -1, -1, 176, 177, 178, 179, 180, 205, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, -1, -1, 176, 177, 178, 179, + 180, 205, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 176, 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, - 196, -1, -1, -1, -1, -1, -1, -1, -1, 205, - -1, -1, -1, -1, 1973, 176, 177, 178, 179, 180, - -1, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, -1, -1, 176, - 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, -1, -1, 176, 177, 178, 179, 180, 205, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, -1, -1, 176, 177, 178, - 179, 180, 205, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 176, 177, 178, 179, 180, 205, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, -1, -1, 176, 177, 178, 179, 180, - 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, -1, -1, 176, - 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, -1, -1, 176, 177, 178, 179, 180, 205, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, -1, -1, 176, 177, 178, - 179, 180, 205, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 176, 177, 178, 179, 180, 205, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, -1, -1, 176, 177, 178, 179, 180, - 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, -1, -1, 176, - 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, -1, -1, 176, 177, 178, 179, 180, 205, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + 196, -1, -1, -1, 176, 177, 178, 179, 180, 205, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 198, -1, -1, -1, + -1, 203, 176, 177, 178, 179, 180, -1, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 198, - 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, - 196, -1, 198, 176, 177, 178, 179, 180, -1, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 198, 176, 177, 178, 179, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, 198, 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, @@ -4074,7 +4080,11 @@ static const short yycheck[] = { 23, 189, 190, -1, -1, -1, -1, -1, 196, -1, 198, 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, - 196 + 196, -1, 198, 176, 177, 178, 179, 180, -1, 182, + 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, + -1, -1, -1, 196, -1, 198, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 198 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/bison.simple" @@ -4620,250 +4630,247 @@ yyreduce: switch (yyn) { case 4: -#line 171 "Gmsh.y" -{ yyerrok ; return 1; ; +#line 165 "Gmsh.y" +{ yyerrok; return 1; ; break;} case 5: -#line 177 "Gmsh.y" +#line 171 "Gmsh.y" { yyval.d = yyvsp[0].d; ; break;} case 6: -#line 178 "Gmsh.y" +#line 172 "Gmsh.y" { yyval.d = -yyvsp[0].d; ; break;} -case 7: -#line 183 "Gmsh.y" +case 9: +#line 182 "Gmsh.y" { - yymsg(INFO, "STL file format"); - STL_Surf = Create_Surface(1, MSH_SURF_STL); + yymsg(INFO, "Reading STL solid"); + STL_Surf = Create_Surface(NEWSURFACE(), MSH_SURF_STL); STL_Surf->STL = new STL_Data; return 1; ; break;} -case 8: -#line 197 "Gmsh.y" +case 10: +#line 196 "Gmsh.y" { STL_Surf->STL->Add_Facet(yyvsp[-12].d, yyvsp[-11].d, yyvsp[-10].d, yyvsp[-8].d, yyvsp[-7].d, yyvsp[-6].d, - yyvsp[-4].d, yyvsp[-3].d, yyvsp[-2].d); + yyvsp[-4].d, yyvsp[-3].d, yyvsp[-2].d, CTX.geom.stl_create_elementary); return 1; ; break;} -case 9: -#line 204 "Gmsh.y" +case 11: +#line 203 "Gmsh.y" { - yymsg(INFO, "STL file format read"); - Tree_Add(THEM->Surfaces, &STL_Surf); + if(CTX.geom.stl_create_elementary){ + STL_Surf->STL->ReplaceDuplicate(); + if(CTX.geom.stl_create_physical) + STL_Surf->STL->CreatePhysicalSurface(); + } + else{ + Tree_Add(THEM->Surfaces, &STL_Surf); + } + yymsg(INFO, "Read STL solid"); return 1; ; break;} -case 12: -#line 219 "Gmsh.y" +case 14: +#line 225 "Gmsh.y" { return 1; ; break;} -case 13: -#line 220 "Gmsh.y" +case 15: +#line 226 "Gmsh.y" { return 1; ; break;} -case 14: -#line 221 "Gmsh.y" +case 16: +#line 227 "Gmsh.y" { return 1; ; break;} -case 15: -#line 226 "Gmsh.y" +case 17: +#line 232 "Gmsh.y" { - yymsg(INFO, "Step Iso-10303-21 file format"); + yymsg(INFO, "Reading Step Iso-10303-21 data"); Create_Step_Solid_BRep(); ; break;} -case 16: -#line 231 "Gmsh.y" +case 18: +#line 237 "Gmsh.y" { - yymsg(INFO, "Step Iso-10303-21 file format read"); Resolve_BREP (); + yymsg(INFO, "Read Step Iso-10303-21 data"); ; break;} -case 20: -#line 242 "Gmsh.y" +case 22: +#line 248 "Gmsh.y" { ; break;} -case 21: -#line 245 "Gmsh.y" +case 23: +#line 251 "Gmsh.y" { ; break;} -case 22: -#line 249 "Gmsh.y" +case 24: +#line 255 "Gmsh.y" { ; break;} -case 23: -#line 255 "Gmsh.y" +case 25: +#line 261 "Gmsh.y" { Add_Cartesian_Point((int)yyvsp[-8].d, yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]); ; break;} -case 24: -#line 261 "Gmsh.y" +case 26: +#line 267 "Gmsh.y" { Add_BSpline_Curve_With_Knots ((int)yyvsp[-22].d, yyvsp[-18].c, (int) yyvsp[-16].d, yyvsp[-14].l, yyvsp[-6].l, yyvsp[-4].l, 0., 1.); ; break;} -case 25: -#line 268 "Gmsh.y" +case 27: +#line 274 "Gmsh.y" { Add_BSpline_Surface_With_Knots ((int)yyvsp[-30].d, yyvsp[-26].c, (int) yyvsp[-24].d, (int) yyvsp[-22].d, yyvsp[-20].l, yyvsp[-10].l, yyvsp[-8].l, yyvsp[-6].l, yyvsp[-4].l, 0., 1., 0., 1. ); ; break;} -case 26: -#line 274 "Gmsh.y" +case 28: +#line 280 "Gmsh.y" { Add_Edge_Curve ((int)yyvsp[-14].d, yyvsp[-10].c , (int)yyvsp[-8].d , (int)yyvsp[-6].d, (int)yyvsp[-4].d); ; break;} -case 27: -#line 278 "Gmsh.y" +case 29: +#line 284 "Gmsh.y" { Add_Face_Outer_Bound((int)yyvsp[-10].d, yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-2].i, 1); ; break;} -case 28: -#line 282 "Gmsh.y" +case 30: +#line 288 "Gmsh.y" { // check the norm! Face_Bound : hole outside surface! yymsg(INFO, "Found a face bound"); Add_Face_Outer_Bound((int)yyvsp[-10].d, yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-2].i, 0); ; break;} -case 29: -#line 289 "Gmsh.y" -{ - Add_Oriented_Edge((int)yyvsp[-14].d, yyvsp[-10].c, (int)yyvsp[-4].d, yyvsp[-2].i); - ; - break;} -case 30: -#line 293 "Gmsh.y" -{ - Add_Edge_Loop((int)yyvsp[-8].d, yyvsp[-4].c, yyvsp[-2].l); - ; - break;} case 31: -#line 298 "Gmsh.y" +#line 295 "Gmsh.y" { - Add_Advanced_Face((int)yyvsp[-12].d, yyvsp[-8].c, yyvsp[-6].l, (int)yyvsp[-4].d, yyvsp[-2].i); + Add_Oriented_Edge((int)yyvsp[-14].d, yyvsp[-10].c, (int)yyvsp[-4].d, yyvsp[-2].i); ; break;} case 32: -#line 302 "Gmsh.y" +#line 299 "Gmsh.y" { - Add_Vertex_Point((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d); + Add_Edge_Loop((int)yyvsp[-8].d, yyvsp[-4].c, yyvsp[-2].l); ; break;} case 33: -#line 306 "Gmsh.y" +#line 304 "Gmsh.y" { + Add_Advanced_Face((int)yyvsp[-12].d, yyvsp[-8].c, yyvsp[-6].l, (int)yyvsp[-4].d, yyvsp[-2].i); ; break;} case 34: -#line 310 "Gmsh.y" +#line 308 "Gmsh.y" { - Add_Axis2_Placement3D ((int)yyvsp[-12].d, (int)yyvsp[-4].d, (int)yyvsp[-2].d, (int)yyvsp[-6].d); + Add_Vertex_Point((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d); ; break;} case 35: -#line 314 "Gmsh.y" +#line 312 "Gmsh.y" { - Add_Direction((int)yyvsp[-8].d , yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]); ; break;} case 36: -#line 318 "Gmsh.y" +#line 316 "Gmsh.y" { - Add_Plane((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d); + Add_Axis2_Placement3D ((int)yyvsp[-12].d, (int)yyvsp[-4].d, (int)yyvsp[-2].d, (int)yyvsp[-6].d); ; break;} case 37: -#line 322 "Gmsh.y" +#line 320 "Gmsh.y" { - Add_Line ((int)yyvsp[-10].d, yyvsp[-6].c , (int) yyvsp[-4].d, (int)yyvsp[-2].d); + Add_Direction((int)yyvsp[-8].d , yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]); ; break;} case 38: -#line 326 "Gmsh.y" +#line 324 "Gmsh.y" { - yymsg(INFO, "Found a closed shell"); - Add_Closed_Shell((int)yyvsp[-8].d, yyvsp[-4].c , yyvsp[-2].l); + Add_Plane((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d); ; break;} case 39: -#line 332 "Gmsh.y" +#line 328 "Gmsh.y" { + Add_Line ((int)yyvsp[-10].d, yyvsp[-6].c , (int) yyvsp[-4].d, (int)yyvsp[-2].d); ; break;} case 40: -#line 335 "Gmsh.y" +#line 332 "Gmsh.y" { + yymsg(INFO, "Found a closed shell"); + Add_Closed_Shell((int)yyvsp[-8].d, yyvsp[-4].c , yyvsp[-2].l); ; break;} case 41: #line 338 "Gmsh.y" { - Add_Cylinder ((int)yyvsp[-10].d, yyvsp[-6].c , (int)yyvsp[-4].d, yyvsp[-2].d); ; break;} case 42: -#line 342 "Gmsh.y" +#line 341 "Gmsh.y" { - Add_Cone ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); ; break;} case 43: -#line 346 "Gmsh.y" +#line 344 "Gmsh.y" { - Add_Torus ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); + Add_Cylinder ((int)yyvsp[-10].d, yyvsp[-6].c , (int)yyvsp[-4].d, yyvsp[-2].d); ; break;} case 44: -#line 350 "Gmsh.y" +#line 348 "Gmsh.y" { - Add_Circle((int) yyvsp[-10].d, yyvsp[-6].c, (int) yyvsp[-4].d, yyvsp[-2].d); + Add_Cone ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); ; break;} case 45: -#line 354 "Gmsh.y" +#line 352 "Gmsh.y" { - Add_Ellipse((int) yyvsp[-12].d, yyvsp[-8].c, (int) yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); + Add_Torus ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); ; break;} case 46: -#line 359 "Gmsh.y" +#line 356 "Gmsh.y" { + Add_Circle((int) yyvsp[-10].d, yyvsp[-6].c, (int) yyvsp[-4].d, yyvsp[-2].d); ; break;} case 47: -#line 362 "Gmsh.y" +#line 360 "Gmsh.y" { + Add_Ellipse((int) yyvsp[-12].d, yyvsp[-8].c, (int) yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); ; break;} case 48: -#line 366 "Gmsh.y" +#line 365 "Gmsh.y" { ; break;} case 49: -#line 369 "Gmsh.y" +#line 368 "Gmsh.y" { ; break;} case 50: -#line 373 "Gmsh.y" +#line 372 "Gmsh.y" { ; break;} case 51: -#line 376 "Gmsh.y" +#line 375 "Gmsh.y" { ; break;} @@ -4873,82 +4880,82 @@ case 52: ; break;} case 53: -#line 387 "Gmsh.y" +#line 382 "Gmsh.y" { - ; + ; break;} case 54: -#line 390 "Gmsh.y" +#line 385 "Gmsh.y" { - yymsg(INFO, "Gmsh file format read"); - ; - break;} -case 55: -#line 396 "Gmsh.y" -{ return 1; ; + ; break;} -case 56: +case 57: #line 397 "Gmsh.y" { return 1; ; break;} -case 57: +case 58: #line 398 "Gmsh.y" { return 1; ; break;} -case 58: +case 59: #line 399 "Gmsh.y" { return 1; ; break;} -case 59: +case 60: #line 400 "Gmsh.y" { return 1; ; break;} -case 60: +case 61: #line 401 "Gmsh.y" -{ return 1; ; +{ List_Delete(yyvsp[0].l); return 1; ; break;} -case 61: +case 62: #line 402 "Gmsh.y" -{ return 1; ; +{ List_Delete(yyvsp[0].l); return 1; ; break;} -case 62: +case 63: #line 403 "Gmsh.y" { return 1; ; break;} -case 63: +case 64: #line 404 "Gmsh.y" { return 1; ; break;} -case 64: +case 65: #line 405 "Gmsh.y" { return 1; ; break;} -case 65: +case 66: #line 406 "Gmsh.y" -{ return 1; ; +{ List_Delete(yyvsp[0].l); return 1; ; break;} -case 66: +case 67: #line 407 "Gmsh.y" { return 1; ; break;} -case 67: +case 68: #line 408 "Gmsh.y" { return 1; ; break;} -case 68: +case 69: #line 409 "Gmsh.y" { return 1; ; break;} -case 69: -#line 414 "Gmsh.y" +case 70: +#line 410 "Gmsh.y" +{ return 1; ; + break;} +case 71: +#line 415 "Gmsh.y" { Msg(DIRECT, yyvsp[-2].c); ; break;} -case 70: -#line 418 "Gmsh.y" +case 72: +#line 419 "Gmsh.y" { - i = PrintListOfDouble(yyvsp[-4].c, yyvsp[-2].l, tmpstring); + char tmpstring[1024]; + int i = PrintListOfDouble(yyvsp[-4].c, yyvsp[-2].l, tmpstring); if(i < 0) yymsg(GERROR, "Too few arguments in Printf"); else if(i > 0) @@ -4958,163 +4965,163 @@ case 70: List_Delete(yyvsp[-2].l); ; break;} -case 71: -#line 434 "Gmsh.y" +case 73: +#line 436 "Gmsh.y" { if(!strcmp(yyvsp[-5].c, "View")) EndView(View, 1, yyname, yyvsp[-4].c); ; break;} -case 72: -#line 438 "Gmsh.y" +case 74: +#line 440 "Gmsh.y" { if(!strcmp(yyvsp[-7].c, "View")) EndView(View, 1, yyname, yyvsp[-6].c); ; break;} -case 73: -#line 445 "Gmsh.y" +case 75: +#line 447 "Gmsh.y" { View = BeginView(1); ; break;} -case 100: -#line 478 "Gmsh.y" -{ List_Add(View->SP, &yyvsp[0].d) ; ; - break;} -case 101: +case 102: #line 480 "Gmsh.y" -{ List_Add(View->SP, &yyvsp[0].d) ; ; +{ List_Add(View->SP, &yyvsp[0].d); ; break;} -case 102: -#line 485 "Gmsh.y" +case 103: +#line 482 "Gmsh.y" +{ List_Add(View->SP, &yyvsp[0].d); ; + break;} +case 104: +#line 487 "Gmsh.y" { List_Add(View->SP, &yyvsp[-5].d); List_Add(View->SP, &yyvsp[-3].d); List_Add(View->SP, &yyvsp[-1].d); ; break;} -case 103: -#line 490 "Gmsh.y" +case 105: +#line 492 "Gmsh.y" { - View->NbSP++ ; + View->NbSP++; ; break;} -case 104: -#line 497 "Gmsh.y" -{ List_Add(View->VP, &yyvsp[0].d) ; ; - break;} -case 105: +case 106: #line 499 "Gmsh.y" -{ List_Add(View->VP, &yyvsp[0].d) ; ; +{ List_Add(View->VP, &yyvsp[0].d); ; break;} -case 106: -#line 504 "Gmsh.y" +case 107: +#line 501 "Gmsh.y" +{ List_Add(View->VP, &yyvsp[0].d); ; + break;} +case 108: +#line 506 "Gmsh.y" { List_Add(View->VP, &yyvsp[-5].d); List_Add(View->VP, &yyvsp[-3].d); List_Add(View->VP, &yyvsp[-1].d); ; break;} -case 107: -#line 509 "Gmsh.y" +case 109: +#line 511 "Gmsh.y" { - View->NbVP++ ; + View->NbVP++; ; break;} -case 108: -#line 516 "Gmsh.y" -{ List_Add(View->TP, &yyvsp[0].d) ; ; - break;} -case 109: +case 110: #line 518 "Gmsh.y" -{ List_Add(View->TP, &yyvsp[0].d) ; ; +{ List_Add(View->TP, &yyvsp[0].d); ; break;} -case 110: -#line 523 "Gmsh.y" +case 111: +#line 520 "Gmsh.y" +{ List_Add(View->TP, &yyvsp[0].d); ; + break;} +case 112: +#line 525 "Gmsh.y" { List_Add(View->TP, &yyvsp[-5].d); List_Add(View->TP, &yyvsp[-3].d); List_Add(View->TP, &yyvsp[-1].d); ; break;} -case 111: -#line 528 "Gmsh.y" +case 113: +#line 530 "Gmsh.y" { - View->NbTP++ ; + View->NbTP++; ; break;} -case 112: -#line 535 "Gmsh.y" -{ List_Add(View->SL, &yyvsp[0].d) ; ; - break;} -case 113: +case 114: #line 537 "Gmsh.y" -{ List_Add(View->SL, &yyvsp[0].d) ; ; +{ List_Add(View->SL, &yyvsp[0].d); ; break;} -case 114: -#line 543 "Gmsh.y" +case 115: +#line 539 "Gmsh.y" +{ List_Add(View->SL, &yyvsp[0].d); ; + break;} +case 116: +#line 545 "Gmsh.y" { List_Add(View->SL, &yyvsp[-11].d); List_Add(View->SL, &yyvsp[-5].d); List_Add(View->SL, &yyvsp[-9].d); List_Add(View->SL, &yyvsp[-3].d); List_Add(View->SL, &yyvsp[-7].d); List_Add(View->SL, &yyvsp[-1].d); ; break;} -case 115: -#line 549 "Gmsh.y" +case 117: +#line 551 "Gmsh.y" { - View->NbSL++ ; + View->NbSL++; ; break;} -case 116: -#line 556 "Gmsh.y" -{ List_Add(View->VL, &yyvsp[0].d) ; ; - break;} -case 117: +case 118: #line 558 "Gmsh.y" -{ List_Add(View->VL, &yyvsp[0].d) ; ; +{ List_Add(View->VL, &yyvsp[0].d); ; break;} -case 118: -#line 564 "Gmsh.y" +case 119: +#line 560 "Gmsh.y" +{ List_Add(View->VL, &yyvsp[0].d); ; + break;} +case 120: +#line 566 "Gmsh.y" { List_Add(View->VL, &yyvsp[-11].d); List_Add(View->VL, &yyvsp[-5].d); List_Add(View->VL, &yyvsp[-9].d); List_Add(View->VL, &yyvsp[-3].d); List_Add(View->VL, &yyvsp[-7].d); List_Add(View->VL, &yyvsp[-1].d); ; break;} -case 119: -#line 570 "Gmsh.y" +case 121: +#line 572 "Gmsh.y" { - View->NbVL++ ; + View->NbVL++; ; break;} -case 120: -#line 577 "Gmsh.y" -{ List_Add(View->TL, &yyvsp[0].d) ; ; - break;} -case 121: +case 122: #line 579 "Gmsh.y" -{ List_Add(View->TL, &yyvsp[0].d) ; ; +{ List_Add(View->TL, &yyvsp[0].d); ; break;} -case 122: -#line 585 "Gmsh.y" +case 123: +#line 581 "Gmsh.y" +{ List_Add(View->TL, &yyvsp[0].d); ; + break;} +case 124: +#line 587 "Gmsh.y" { List_Add(View->TL, &yyvsp[-11].d); List_Add(View->TL, &yyvsp[-5].d); List_Add(View->TL, &yyvsp[-9].d); List_Add(View->TL, &yyvsp[-3].d); List_Add(View->TL, &yyvsp[-7].d); List_Add(View->TL, &yyvsp[-1].d); ; break;} -case 123: -#line 591 "Gmsh.y" +case 125: +#line 593 "Gmsh.y" { - View->NbTL++ ; + View->NbTL++; ; break;} -case 124: -#line 598 "Gmsh.y" -{ List_Add(View->ST, &yyvsp[0].d) ; ; - break;} -case 125: +case 126: #line 600 "Gmsh.y" -{ List_Add(View->ST, &yyvsp[0].d) ; ; +{ List_Add(View->ST, &yyvsp[0].d); ; break;} -case 126: -#line 607 "Gmsh.y" +case 127: +#line 602 "Gmsh.y" +{ List_Add(View->ST, &yyvsp[0].d); ; + break;} +case 128: +#line 609 "Gmsh.y" { List_Add(View->ST, &yyvsp[-17].d); List_Add(View->ST, &yyvsp[-11].d); List_Add(View->ST, &yyvsp[-5].d); @@ -5124,22 +5131,22 @@ case 126: List_Add(View->ST, &yyvsp[-1].d); ; break;} -case 127: -#line 616 "Gmsh.y" +case 129: +#line 618 "Gmsh.y" { - View->NbST++ ; + View->NbST++; ; break;} -case 128: -#line 623 "Gmsh.y" -{ List_Add(View->VT, &yyvsp[0].d) ; ; - break;} -case 129: +case 130: #line 625 "Gmsh.y" -{ List_Add(View->VT, &yyvsp[0].d) ; ; +{ List_Add(View->VT, &yyvsp[0].d); ; break;} -case 130: -#line 632 "Gmsh.y" +case 131: +#line 627 "Gmsh.y" +{ List_Add(View->VT, &yyvsp[0].d); ; + break;} +case 132: +#line 634 "Gmsh.y" { List_Add(View->VT, &yyvsp[-17].d); List_Add(View->VT, &yyvsp[-11].d); List_Add(View->VT, &yyvsp[-5].d); @@ -5149,22 +5156,22 @@ case 130: List_Add(View->VT, &yyvsp[-1].d); ; break;} -case 131: -#line 641 "Gmsh.y" +case 133: +#line 643 "Gmsh.y" { - View->NbVT++ ; + View->NbVT++; ; break;} -case 132: -#line 648 "Gmsh.y" -{ List_Add(View->TT, &yyvsp[0].d) ; ; - break;} -case 133: +case 134: #line 650 "Gmsh.y" -{ List_Add(View->TT, &yyvsp[0].d) ; ; +{ List_Add(View->TT, &yyvsp[0].d); ; break;} -case 134: -#line 657 "Gmsh.y" +case 135: +#line 652 "Gmsh.y" +{ List_Add(View->TT, &yyvsp[0].d); ; + break;} +case 136: +#line 659 "Gmsh.y" { List_Add(View->TT, &yyvsp[-17].d); List_Add(View->TT, &yyvsp[-11].d); List_Add(View->TT, &yyvsp[-5].d); @@ -5174,22 +5181,22 @@ case 134: List_Add(View->TT, &yyvsp[-1].d); ; break;} -case 135: -#line 666 "Gmsh.y" +case 137: +#line 668 "Gmsh.y" { - View->NbTT++ ; + View->NbTT++; ; break;} -case 136: -#line 673 "Gmsh.y" -{ List_Add(View->SQ, &yyvsp[0].d) ; ; - break;} -case 137: +case 138: #line 675 "Gmsh.y" -{ List_Add(View->SQ, &yyvsp[0].d) ; ; +{ List_Add(View->SQ, &yyvsp[0].d); ; break;} -case 138: -#line 683 "Gmsh.y" +case 139: +#line 677 "Gmsh.y" +{ List_Add(View->SQ, &yyvsp[0].d); ; + break;} +case 140: +#line 685 "Gmsh.y" { List_Add(View->SQ, &yyvsp[-23].d); List_Add(View->SQ, &yyvsp[-17].d); List_Add(View->SQ, &yyvsp[-11].d); List_Add(View->SQ, &yyvsp[-5].d); @@ -5199,22 +5206,22 @@ case 138: List_Add(View->SQ, &yyvsp[-7].d); List_Add(View->SQ, &yyvsp[-1].d); ; break;} -case 139: -#line 692 "Gmsh.y" +case 141: +#line 694 "Gmsh.y" { - View->NbSQ++ ; + View->NbSQ++; ; break;} -case 140: -#line 699 "Gmsh.y" -{ List_Add(View->VQ, &yyvsp[0].d) ; ; - break;} -case 141: +case 142: #line 701 "Gmsh.y" -{ List_Add(View->VQ, &yyvsp[0].d) ; ; +{ List_Add(View->VQ, &yyvsp[0].d); ; break;} -case 142: -#line 709 "Gmsh.y" +case 143: +#line 703 "Gmsh.y" +{ List_Add(View->VQ, &yyvsp[0].d); ; + break;} +case 144: +#line 711 "Gmsh.y" { List_Add(View->VQ, &yyvsp[-23].d); List_Add(View->VQ, &yyvsp[-17].d); List_Add(View->VQ, &yyvsp[-11].d); List_Add(View->VQ, &yyvsp[-5].d); @@ -5224,22 +5231,22 @@ case 142: List_Add(View->VQ, &yyvsp[-7].d); List_Add(View->VQ, &yyvsp[-1].d); ; break;} -case 143: -#line 718 "Gmsh.y" +case 145: +#line 720 "Gmsh.y" { - View->NbVQ++ ; + View->NbVQ++; ; break;} -case 144: -#line 725 "Gmsh.y" -{ List_Add(View->TQ, &yyvsp[0].d) ; ; - break;} -case 145: +case 146: #line 727 "Gmsh.y" -{ List_Add(View->TQ, &yyvsp[0].d) ; ; +{ List_Add(View->TQ, &yyvsp[0].d); ; break;} -case 146: -#line 735 "Gmsh.y" +case 147: +#line 729 "Gmsh.y" +{ List_Add(View->TQ, &yyvsp[0].d); ; + break;} +case 148: +#line 737 "Gmsh.y" { List_Add(View->TQ, &yyvsp[-23].d); List_Add(View->TQ, &yyvsp[-17].d); List_Add(View->TQ, &yyvsp[-11].d); List_Add(View->TQ, &yyvsp[-5].d); @@ -5249,22 +5256,22 @@ case 146: List_Add(View->TQ, &yyvsp[-7].d); List_Add(View->TQ, &yyvsp[-1].d); ; break;} -case 147: -#line 744 "Gmsh.y" +case 149: +#line 746 "Gmsh.y" { - View->NbTQ++ ; + View->NbTQ++; ; break;} -case 148: -#line 751 "Gmsh.y" -{ List_Add(View->SS, &yyvsp[0].d) ; ; - break;} -case 149: +case 150: #line 753 "Gmsh.y" -{ List_Add(View->SS, &yyvsp[0].d) ; ; +{ List_Add(View->SS, &yyvsp[0].d); ; break;} -case 150: -#line 761 "Gmsh.y" +case 151: +#line 755 "Gmsh.y" +{ List_Add(View->SS, &yyvsp[0].d); ; + break;} +case 152: +#line 763 "Gmsh.y" { List_Add(View->SS, &yyvsp[-23].d); List_Add(View->SS, &yyvsp[-17].d); List_Add(View->SS, &yyvsp[-11].d); List_Add(View->SS, &yyvsp[-5].d); @@ -5274,22 +5281,22 @@ case 150: List_Add(View->SS, &yyvsp[-7].d); List_Add(View->SS, &yyvsp[-1].d); ; break;} -case 151: -#line 770 "Gmsh.y" +case 153: +#line 772 "Gmsh.y" { - View->NbSS++ ; + View->NbSS++; ; break;} -case 152: -#line 777 "Gmsh.y" -{ List_Add(View->VS, &yyvsp[0].d) ; ; - break;} -case 153: +case 154: #line 779 "Gmsh.y" -{ List_Add(View->VS, &yyvsp[0].d) ; ; +{ List_Add(View->VS, &yyvsp[0].d); ; break;} -case 154: -#line 787 "Gmsh.y" +case 155: +#line 781 "Gmsh.y" +{ List_Add(View->VS, &yyvsp[0].d); ; + break;} +case 156: +#line 789 "Gmsh.y" { List_Add(View->VS, &yyvsp[-23].d); List_Add(View->VS, &yyvsp[-17].d); List_Add(View->VS, &yyvsp[-11].d); List_Add(View->VS, &yyvsp[-5].d); @@ -5299,22 +5306,22 @@ case 154: List_Add(View->VS, &yyvsp[-7].d); List_Add(View->VS, &yyvsp[-1].d); ; break;} -case 155: -#line 796 "Gmsh.y" +case 157: +#line 798 "Gmsh.y" { - View->NbVS++ ; + View->NbVS++; ; break;} -case 156: -#line 803 "Gmsh.y" -{ List_Add(View->TS, &yyvsp[0].d) ; ; - break;} -case 157: +case 158: #line 805 "Gmsh.y" -{ List_Add(View->TS, &yyvsp[0].d) ; ; +{ List_Add(View->TS, &yyvsp[0].d); ; break;} -case 158: -#line 813 "Gmsh.y" +case 159: +#line 807 "Gmsh.y" +{ List_Add(View->TS, &yyvsp[0].d); ; + break;} +case 160: +#line 815 "Gmsh.y" { List_Add(View->TS, &yyvsp[-23].d); List_Add(View->TS, &yyvsp[-17].d); List_Add(View->TS, &yyvsp[-11].d); List_Add(View->TS, &yyvsp[-5].d); @@ -5324,22 +5331,22 @@ case 158: List_Add(View->TS, &yyvsp[-7].d); List_Add(View->TS, &yyvsp[-1].d); ; break;} -case 159: -#line 822 "Gmsh.y" +case 161: +#line 824 "Gmsh.y" { - View->NbTS++ ; + View->NbTS++; ; break;} -case 160: -#line 829 "Gmsh.y" -{ List_Add(View->SH, &yyvsp[0].d) ; ; - break;} -case 161: +case 162: #line 831 "Gmsh.y" -{ List_Add(View->SH, &yyvsp[0].d) ; ; +{ List_Add(View->SH, &yyvsp[0].d); ; break;} -case 162: -#line 843 "Gmsh.y" +case 163: +#line 833 "Gmsh.y" +{ List_Add(View->SH, &yyvsp[0].d); ; + break;} +case 164: +#line 845 "Gmsh.y" { List_Add(View->SH, &yyvsp[-47].d); List_Add(View->SH, &yyvsp[-41].d); List_Add(View->SH, &yyvsp[-35].d); List_Add(View->SH, &yyvsp[-29].d); @@ -5355,22 +5362,22 @@ case 162: List_Add(View->SH, &yyvsp[-7].d); List_Add(View->SH, &yyvsp[-1].d); ; break;} -case 163: -#line 858 "Gmsh.y" +case 165: +#line 860 "Gmsh.y" { - View->NbSH++ ; + View->NbSH++; ; break;} -case 164: -#line 865 "Gmsh.y" -{ List_Add(View->VH, &yyvsp[0].d) ; ; - break;} -case 165: +case 166: #line 867 "Gmsh.y" -{ List_Add(View->VH, &yyvsp[0].d) ; ; +{ List_Add(View->VH, &yyvsp[0].d); ; break;} -case 166: -#line 879 "Gmsh.y" +case 167: +#line 869 "Gmsh.y" +{ List_Add(View->VH, &yyvsp[0].d); ; + break;} +case 168: +#line 881 "Gmsh.y" { List_Add(View->VH, &yyvsp[-47].d); List_Add(View->VH, &yyvsp[-41].d); List_Add(View->VH, &yyvsp[-35].d); List_Add(View->VH, &yyvsp[-29].d); @@ -5386,22 +5393,22 @@ case 166: List_Add(View->VH, &yyvsp[-7].d); List_Add(View->VH, &yyvsp[-1].d); ; break;} -case 167: -#line 894 "Gmsh.y" +case 169: +#line 896 "Gmsh.y" { - View->NbVH++ ; + View->NbVH++; ; break;} -case 168: -#line 901 "Gmsh.y" -{ List_Add(View->TH, &yyvsp[0].d) ; ; - break;} -case 169: +case 170: #line 903 "Gmsh.y" -{ List_Add(View->TH, &yyvsp[0].d) ; ; +{ List_Add(View->TH, &yyvsp[0].d); ; break;} -case 170: -#line 915 "Gmsh.y" +case 171: +#line 905 "Gmsh.y" +{ List_Add(View->TH, &yyvsp[0].d); ; + break;} +case 172: +#line 917 "Gmsh.y" { List_Add(View->TH, &yyvsp[-47].d); List_Add(View->TH, &yyvsp[-41].d); List_Add(View->TH, &yyvsp[-35].d); List_Add(View->TH, &yyvsp[-29].d); @@ -5417,22 +5424,22 @@ case 170: List_Add(View->TH, &yyvsp[-7].d); List_Add(View->TH, &yyvsp[-1].d); ; break;} -case 171: -#line 930 "Gmsh.y" +case 173: +#line 932 "Gmsh.y" { - View->NbTH++ ; + View->NbTH++; ; break;} -case 172: -#line 937 "Gmsh.y" -{ List_Add(View->SI, &yyvsp[0].d) ; ; - break;} -case 173: +case 174: #line 939 "Gmsh.y" -{ List_Add(View->SI, &yyvsp[0].d) ; ; +{ List_Add(View->SI, &yyvsp[0].d); ; break;} -case 174: -#line 949 "Gmsh.y" +case 175: +#line 941 "Gmsh.y" +{ List_Add(View->SI, &yyvsp[0].d); ; + break;} +case 176: +#line 951 "Gmsh.y" { List_Add(View->SI, &yyvsp[-35].d); List_Add(View->SI, &yyvsp[-29].d); List_Add(View->SI, &yyvsp[-23].d); List_Add(View->SI, &yyvsp[-17].d); @@ -5445,22 +5452,22 @@ case 174: List_Add(View->SI, &yyvsp[-7].d); List_Add(View->SI, &yyvsp[-1].d); ; break;} -case 175: -#line 961 "Gmsh.y" +case 177: +#line 963 "Gmsh.y" { - View->NbSI++ ; + View->NbSI++; ; break;} -case 176: -#line 968 "Gmsh.y" -{ List_Add(View->VI, &yyvsp[0].d) ; ; - break;} -case 177: +case 178: #line 970 "Gmsh.y" -{ List_Add(View->VI, &yyvsp[0].d) ; ; +{ List_Add(View->VI, &yyvsp[0].d); ; break;} -case 178: -#line 980 "Gmsh.y" +case 179: +#line 972 "Gmsh.y" +{ List_Add(View->VI, &yyvsp[0].d); ; + break;} +case 180: +#line 982 "Gmsh.y" { List_Add(View->VI, &yyvsp[-35].d); List_Add(View->VI, &yyvsp[-29].d); List_Add(View->VI, &yyvsp[-23].d); List_Add(View->VI, &yyvsp[-17].d); @@ -5473,22 +5480,22 @@ case 178: List_Add(View->VI, &yyvsp[-7].d); List_Add(View->VI, &yyvsp[-1].d); ; break;} -case 179: -#line 992 "Gmsh.y" +case 181: +#line 994 "Gmsh.y" { - View->NbVI++ ; + View->NbVI++; ; break;} -case 180: -#line 999 "Gmsh.y" -{ List_Add(View->TI, &yyvsp[0].d) ; ; - break;} -case 181: +case 182: #line 1001 "Gmsh.y" -{ List_Add(View->TI, &yyvsp[0].d) ; ; +{ List_Add(View->TI, &yyvsp[0].d); ; break;} -case 182: -#line 1011 "Gmsh.y" +case 183: +#line 1003 "Gmsh.y" +{ List_Add(View->TI, &yyvsp[0].d); ; + break;} +case 184: +#line 1013 "Gmsh.y" { List_Add(View->TI, &yyvsp[-35].d); List_Add(View->TI, &yyvsp[-29].d); List_Add(View->TI, &yyvsp[-23].d); List_Add(View->TI, &yyvsp[-17].d); @@ -5501,22 +5508,22 @@ case 182: List_Add(View->TI, &yyvsp[-7].d); List_Add(View->TI, &yyvsp[-1].d); ; break;} -case 183: -#line 1023 "Gmsh.y" +case 185: +#line 1025 "Gmsh.y" { - View->NbTI++ ; + View->NbTI++; ; break;} -case 184: -#line 1030 "Gmsh.y" -{ List_Add(View->SY, &yyvsp[0].d) ; ; - break;} -case 185: +case 186: #line 1032 "Gmsh.y" -{ List_Add(View->SY, &yyvsp[0].d) ; ; +{ List_Add(View->SY, &yyvsp[0].d); ; break;} -case 186: -#line 1041 "Gmsh.y" +case 187: +#line 1034 "Gmsh.y" +{ List_Add(View->SY, &yyvsp[0].d); ; + break;} +case 188: +#line 1043 "Gmsh.y" { List_Add(View->SY, &yyvsp[-29].d); List_Add(View->SY, &yyvsp[-23].d); List_Add(View->SY, &yyvsp[-17].d); List_Add(View->SY, &yyvsp[-11].d); @@ -5529,22 +5536,22 @@ case 186: List_Add(View->SY, &yyvsp[-1].d); ; break;} -case 187: -#line 1053 "Gmsh.y" +case 189: +#line 1055 "Gmsh.y" { - View->NbSY++ ; + View->NbSY++; ; break;} -case 188: -#line 1060 "Gmsh.y" -{ List_Add(View->VY, &yyvsp[0].d) ; ; - break;} -case 189: +case 190: #line 1062 "Gmsh.y" -{ List_Add(View->VY, &yyvsp[0].d) ; ; +{ List_Add(View->VY, &yyvsp[0].d); ; break;} -case 190: -#line 1071 "Gmsh.y" +case 191: +#line 1064 "Gmsh.y" +{ List_Add(View->VY, &yyvsp[0].d); ; + break;} +case 192: +#line 1073 "Gmsh.y" { List_Add(View->VY, &yyvsp[-29].d); List_Add(View->VY, &yyvsp[-23].d); List_Add(View->VY, &yyvsp[-17].d); List_Add(View->VY, &yyvsp[-11].d); @@ -5557,22 +5564,22 @@ case 190: List_Add(View->VY, &yyvsp[-1].d); ; break;} -case 191: -#line 1083 "Gmsh.y" +case 193: +#line 1085 "Gmsh.y" { - View->NbVY++ ; + View->NbVY++; ; break;} -case 192: -#line 1090 "Gmsh.y" -{ List_Add(View->TY, &yyvsp[0].d) ; ; - break;} -case 193: +case 194: #line 1092 "Gmsh.y" -{ List_Add(View->TY, &yyvsp[0].d) ; ; +{ List_Add(View->TY, &yyvsp[0].d); ; break;} -case 194: -#line 1101 "Gmsh.y" +case 195: +#line 1094 "Gmsh.y" +{ List_Add(View->TY, &yyvsp[0].d); ; + break;} +case 196: +#line 1103 "Gmsh.y" { List_Add(View->TY, &yyvsp[-29].d); List_Add(View->TY, &yyvsp[-23].d); List_Add(View->TY, &yyvsp[-17].d); List_Add(View->TY, &yyvsp[-11].d); @@ -5585,102 +5592,104 @@ case 194: List_Add(View->TY, &yyvsp[-1].d); ; break;} -case 195: -#line 1113 "Gmsh.y" +case 197: +#line 1115 "Gmsh.y" { - View->NbTY++ ; + View->NbTY++; ; break;} -case 196: -#line 1120 "Gmsh.y" +case 198: +#line 1122 "Gmsh.y" { - for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]) ; + for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]); Free(yyvsp[0].c); ; break;} -case 197: -#line 1125 "Gmsh.y" +case 199: +#line 1127 "Gmsh.y" { - for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]) ; + for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]); Free(yyvsp[0].c); ; break;} -case 198: -#line 1133 "Gmsh.y" +case 200: +#line 1135 "Gmsh.y" { List_Add(View->T2D, &yyvsp[-5].d); List_Add(View->T2D, &yyvsp[-3].d); List_Add(View->T2D, &yyvsp[-1].d); - d = List_Nbr(View->T2C); + double d = List_Nbr(View->T2C); List_Add(View->T2D, &d); ; break;} -case 199: -#line 1140 "Gmsh.y" +case 201: +#line 1142 "Gmsh.y" { - View->NbT2++ ; + View->NbT2++; ; break;} -case 200: -#line 1147 "Gmsh.y" +case 202: +#line 1149 "Gmsh.y" { - for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]) ; + for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]); Free(yyvsp[0].c); ; break;} -case 201: -#line 1152 "Gmsh.y" +case 203: +#line 1154 "Gmsh.y" { - for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]) ; + for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]); Free(yyvsp[0].c); ; break;} -case 202: -#line 1160 "Gmsh.y" +case 204: +#line 1162 "Gmsh.y" { List_Add(View->T3D, &yyvsp[-7].d); List_Add(View->T3D, &yyvsp[-5].d); List_Add(View->T3D, &yyvsp[-3].d); List_Add(View->T3D, &yyvsp[-1].d); - d = List_Nbr(View->T3C); + double d = List_Nbr(View->T3C); List_Add(View->T3D, &d); ; break;} -case 203: -#line 1167 "Gmsh.y" +case 205: +#line 1169 "Gmsh.y" { - View->NbT3++ ; + View->NbT3++; ; break;} -case 204: -#line 1176 "Gmsh.y" -{ yyval.i = 0 ; ; - break;} -case 205: -#line 1177 "Gmsh.y" -{ yyval.i = 1 ; ; - break;} case 206: #line 1178 "Gmsh.y" -{ yyval.i = 2 ; ; +{ yyval.i = 0; ; break;} case 207: #line 1179 "Gmsh.y" -{ yyval.i = 3 ; ; +{ yyval.i = 1; ; break;} case 208: #line 1180 "Gmsh.y" -{ yyval.i = 4 ; ; +{ yyval.i = 2; ; break;} case 209: -#line 1184 "Gmsh.y" -{ yyval.i = 1 ; ; +#line 1181 "Gmsh.y" +{ yyval.i = 3; ; break;} case 210: -#line 1185 "Gmsh.y" -{ yyval.i = -1 ; ; +#line 1182 "Gmsh.y" +{ yyval.i = 4; ; break;} case 211: -#line 1193 "Gmsh.y" +#line 1186 "Gmsh.y" +{ yyval.i = 1; ; + break;} +case 212: +#line 1187 "Gmsh.y" +{ yyval.i = -1; ; + break;} +case 213: +#line 1195 "Gmsh.y" { + Symbol TheSymbol; TheSymbol.Name = yyvsp[-3].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); if(!yyvsp[-2].i){ @@ -5688,27 +5697,29 @@ case 211: Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c) ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c); } else{ - pd = (double*)List_Pointer_Fast(pSymbol->val, 0) ; + double *pd = (double*)List_Pointer_Fast(pSymbol->val, 0); switch(yyvsp[-2].i){ - case 0 : *pd = yyvsp[-1].d; break ; - case 1 : *pd += yyvsp[-1].d ; break ; - case 2 : *pd -= yyvsp[-1].d ; break ; - case 3 : *pd *= yyvsp[-1].d ; break ; + case 0 : *pd = yyvsp[-1].d; break; + case 1 : *pd += yyvsp[-1].d; break; + case 2 : *pd -= yyvsp[-1].d; break; + case 3 : *pd *= yyvsp[-1].d; break; case 4 : - if(yyvsp[-1].d) *pd /= yyvsp[-1].d ; + if(yyvsp[-1].d) *pd /= yyvsp[-1].d; else yymsg(GERROR, "Division by zero in '%s /= %g'", yyvsp[-3].c, yyvsp[-1].d); break; } } ; break;} -case 212: -#line 1220 "Gmsh.y" +case 214: +#line 1223 "Gmsh.y" { + Symbol TheSymbol; TheSymbol.Name = yyvsp[-6].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); if(!yyvsp[-2].i){ @@ -5716,17 +5727,18 @@ case 212: Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-6].c) ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-6].c); } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-4].d))){ switch(yyvsp[-2].i){ - case 0 : *pd = yyvsp[-1].d; break ; - case 1 : *pd += yyvsp[-1].d ; break ; - case 2 : *pd -= yyvsp[-1].d ; break ; - case 3 : *pd *= yyvsp[-1].d ; break ; + case 0 : *pd = yyvsp[-1].d; break; + case 1 : *pd += yyvsp[-1].d; break; + case 2 : *pd -= yyvsp[-1].d; break; + case 3 : *pd *= yyvsp[-1].d; break; case 4 : - if(yyvsp[-1].d) *pd /= yyvsp[-1].d ; + if(yyvsp[-1].d) *pd /= yyvsp[-1].d; else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].d); break; } @@ -5735,42 +5747,45 @@ case 212: if(!yyvsp[-2].i) List_Put(pSymbol->val, (int)yyvsp[-4].d, &yyvsp[-1].d); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d); } } ; break;} -case 213: -#line 1254 "Gmsh.y" +case 215: +#line 1259 "Gmsh.y" { if(List_Nbr(yyvsp[-5].l) != List_Nbr(yyvsp[-1].l)) yymsg(GERROR, "Incompatible array dimensions in affectation"); else{ + Symbol TheSymbol; TheSymbol.Name = yyvsp[-8].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); if(!yyvsp[-2].i){ - for(i = 0; i < List_Nbr(yyvsp[-5].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-5].l); i++){ List_Put(TheSymbol.val, (int)(*(double*)List_Pointer(yyvsp[-5].l, i)), (double*)List_Pointer(yyvsp[-1].l, i)); } Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-8].c) ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-8].c); } else{ - for(i = 0; i < List_Nbr(yyvsp[-5].l); i++){ - j = (int)(*(double*)List_Pointer(yyvsp[-5].l, i)) ; - d = *(double*)List_Pointer(yyvsp[-1].l, i) ; + for(int i = 0; i < List_Nbr(yyvsp[-5].l); i++){ + int j = (int)(*(double*)List_Pointer(yyvsp[-5].l, i)); + double d = *(double*)List_Pointer(yyvsp[-1].l, i); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ switch(yyvsp[-2].i){ - case 0 : *pd = d; break ; - case 1 : *pd += d ; break ; - case 2 : *pd -= d ; break ; - case 3 : *pd *= d ; break ; + case 0 : *pd = d; break; + case 1 : *pd += d; break; + case 2 : *pd -= d; break; + case 3 : *pd *= d; break; case 4 : - if(yyvsp[-1].l) *pd /= d ; + if(yyvsp[-1].l) *pd /= d; else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", yyvsp[-8].c, j, d); break; } @@ -5779,7 +5794,7 @@ case 213: if(!yyvsp[-2].i) List_Put(pSymbol->val, j, &d); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-8].c, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-8].c, j); } } } @@ -5788,10 +5803,12 @@ case 213: List_Delete(yyvsp[-1].l); ; break;} -case 214: -#line 1301 "Gmsh.y" +case 216: +#line 1308 "Gmsh.y" { + Symbol TheSymbol; TheSymbol.Name = yyvsp[-5].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); List_Copy(yyvsp[-1].l, TheSymbol.val); @@ -5804,159 +5821,182 @@ case 214: List_Delete(yyvsp[-1].l); ; break;} -case 215: -#line 1316 "Gmsh.y" +case 217: +#line 1324 "Gmsh.y" { + Symbol TheSymbol; TheSymbol.Name = yyvsp[-2].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c); else *(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[-1].i; ; break;} -case 216: -#line 1325 "Gmsh.y" +case 218: +#line 1334 "Gmsh.y" { - TheSymbol.Name = yyvsp[-5].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-5].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c) ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c); else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-3].d))) - *pd += yyvsp[-1].i ; + *pd += yyvsp[-1].i; else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, (int)yyvsp[-3].d) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, (int)yyvsp[-3].d); } ; break;} -case 217: -#line 1340 "Gmsh.y" +case 219: +#line 1352 "Gmsh.y" { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory(yyvsp[-5].c))) yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-5].c); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-3].c, pStrCat))) yymsg(GERROR, "Unknown string option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c); else - pStrOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].c) ; + pStrOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].c); } ; break;} -case 218: -#line 1352 "Gmsh.y" +case 220: +#line 1365 "Gmsh.y" { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory(yyvsp[-8].c))) yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-8].c); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-3].c, pStrCat))) yymsg(GERROR, "Unknown string option '%s[%d].%s'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c); else - pStrOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, yyvsp[-1].c) ; + pStrOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, yyvsp[-1].c); } ; break;} -case 219: -#line 1366 "Gmsh.y" +case 221: +#line 1381 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))) yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-5].c); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-3].c, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c); else{ + double d = 0; switch(yyvsp[-2].i){ - case 0 : d = yyvsp[-1].d ; break ; - case 1 : d = pNumOpt(0, GMSH_GET, 0) + yyvsp[-1].d ; break ; - case 2 : d = pNumOpt(0, GMSH_GET, 0) - yyvsp[-1].d ; break ; - case 3 : d = pNumOpt(0, GMSH_GET, 0) * yyvsp[-1].d ; break ; + case 0 : d = yyvsp[-1].d; break; + case 1 : d = pNumOpt(0, GMSH_GET, 0) + yyvsp[-1].d; break; + case 2 : d = pNumOpt(0, GMSH_GET, 0) - yyvsp[-1].d; break; + case 3 : d = pNumOpt(0, GMSH_GET, 0) * yyvsp[-1].d; break; case 4 : - if(yyvsp[-1].d) d = pNumOpt(0, GMSH_GET, 0) / yyvsp[-1].d ; + if(yyvsp[-1].d) d = pNumOpt(0, GMSH_GET, 0) / yyvsp[-1].d; else yymsg(GERROR, "Division by zero in '%s.%s /= %g'", yyvsp[-5].c, yyvsp[-3].c, yyvsp[-1].d); break; } - pNumOpt(0, GMSH_SET|GMSH_GUI, d) ; + pNumOpt(0, GMSH_SET|GMSH_GUI, d); } } ; break;} -case 220: -#line 1389 "Gmsh.y" +case 222: +#line 1406 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-8].c))) yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-8].c); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-3].c, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c); else{ + double d = 0; switch(yyvsp[-2].i){ - case 0 : d = yyvsp[-1].d; break ; - case 1 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) + yyvsp[-1].d ; break ; - case 2 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) - yyvsp[-1].d ; break ; - case 3 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) * yyvsp[-1].d ; break ; + case 0 : d = yyvsp[-1].d; break; + case 1 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) + yyvsp[-1].d; break; + case 2 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) - yyvsp[-1].d; break; + case 3 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) * yyvsp[-1].d; break; case 4 : - if(yyvsp[-1].d) d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) / yyvsp[-1].d ; + if(yyvsp[-1].d) d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) / yyvsp[-1].d; else yymsg(GERROR, "Division by zero in '%s[%d].%s /= %g'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c, yyvsp[-1].d); break; } - pNumOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, d) ; + pNumOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, d); } } ; break;} -case 221: -#line 1413 "Gmsh.y" +case 223: +#line 1432 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-4].c))) yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-4].c); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-2].c, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-4].c, yyvsp[-2].c); else - pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[-1].i) ; + pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[-1].i); } ; break;} -case 222: -#line 1425 "Gmsh.y" +case 224: +#line 1445 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-7].c))) yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-7].c); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-2].c, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-7].c, (int)yyvsp[-5].d, yyvsp[-2].c); else - pNumOpt((int)yyvsp[-5].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-5].d, GMSH_GET, 0)+yyvsp[-1].i) ; + pNumOpt((int)yyvsp[-5].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-5].d, GMSH_GET, 0)+yyvsp[-1].i); } ; break;} -case 223: -#line 1439 "Gmsh.y" +case 225: +#line 1461 "Gmsh.y" { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory(yyvsp[-7].c))) yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-7].c); else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[-3].c, pColCat))) yymsg(GERROR, "Unknown color option '%s.Color.%s'", yyvsp[-7].c, yyvsp[-3].c); else - pColOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].u) ; + pColOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].u); } ; break;} -case 224: -#line 1451 "Gmsh.y" +case 226: +#line 1474 "Gmsh.y" { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory(yyvsp[-10].c))) yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-10].c); else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[-3].c, pColCat))) yymsg(GERROR, "Unknown color option '%s[%d].Color.%s'", yyvsp[-10].c, (int)yyvsp[-8].d, yyvsp[-3].c); else - pColOpt((int)yyvsp[-8].d, GMSH_SET|GMSH_GUI, yyvsp[-1].u) ; + pColOpt((int)yyvsp[-8].d, GMSH_SET|GMSH_GUI, yyvsp[-1].u); } ; break;} -case 225: -#line 1465 "Gmsh.y" +case 227: +#line 1490 "Gmsh.y" { GmshColorTable *ct = Get_ColorTable(0); if(!ct) @@ -5967,7 +6007,7 @@ case 225: yymsg(GERROR, "Too many (%d>%d) colors in View[%d].ColorTable", ct->size, COLORTABLE_NBMAX_COLOR, 0); else - for(i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]); + for(int i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]); if(ct->size == 1){ ct->size = 2; ct->table[1] = ct->table[0]; @@ -5976,8 +6016,8 @@ case 225: List_Delete(yyvsp[-1].l); ; break;} -case 226: -#line 1485 "Gmsh.y" +case 228: +#line 1509 "Gmsh.y" { GmshColorTable *ct = Get_ColorTable((int)yyvsp[-6].d); if(!ct) @@ -5988,7 +6028,7 @@ case 226: yymsg(GERROR, "Too many (%d>%d) colors in View[%d].ColorTable", ct->size, COLORTABLE_NBMAX_COLOR, (int)yyvsp[-6].d); else - for(i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]); + for(int i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]); if(ct->size == 1){ ct->size = 2; ct->table[1] = ct->table[0]; @@ -5997,8 +6037,8 @@ case 226: List_Delete(yyvsp[-1].l); ; break;} -case 227: -#line 1507 "Gmsh.y" +case 229: +#line 1531 "Gmsh.y" { try { GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].d); @@ -6008,8 +6048,8 @@ case 227: } ; break;} -case 228: -#line 1517 "Gmsh.y" +case 230: +#line 1540 "Gmsh.y" { try { GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].c); @@ -6019,47 +6059,68 @@ case 228: } ; break;} -case 229: -#line 1535 "Gmsh.y" +case 231: +#line 1558 "Gmsh.y" { - Cdbpts101((int)yyvsp[-4].d, yyvsp[-1].v[0], yyvsp[-1].v[1], yyvsp[-1].v[2], yyvsp[-1].v[3], yyvsp[-1].v[4]); + int num = (int)yyvsp[-4].d; + if(FindPoint(num, THEM)){ + yymsg(GERROR, "Point %d already exists", num); + } + else{ + Vertex *v = Create_Vertex(num, CTX.geom.scaling_factor * yyvsp[-1].v[0], + CTX.geom.scaling_factor * yyvsp[-1].v[1], + CTX.geom.scaling_factor * yyvsp[-1].v[2], + CTX.geom.scaling_factor * yyvsp[-1].v[3], 1.0); + Tree_Add(THEM->Points, &v); + } yyval.s.Type = MSH_POINT; - yyval.s.Num = (int)yyvsp[-4].d; + yyval.s.Num = num; ; break;} -case 230: -#line 1542 "Gmsh.y" +case 232: +#line 1574 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_POINT, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); + int num = (int)yyvsp[-4].d; + if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT, THEM)){ + yymsg(GERROR, "Physical point %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete(yyvsp[-1].l); yyval.s.Type = MSH_PHYSICAL_POINT; - yyval.s.Num = (int)yyvsp[-4].d; + yyval.s.Num = num; ; break;} -case 231: -#line 1548 "Gmsh.y" +case 233: +#line 1590 "Gmsh.y" { - Vertex *v; - Attractor *a; - double p; - int ip; for(int i = 0; i < List_Nbr(yyvsp[-9].l); i++){ + double p; List_Read(yyvsp[-9].l, i, &p); - ip = (int)p; - v = FindPoint(ip, THEM); + Vertex *v = FindPoint((int)p, THEM); if(!v) - yymsg(WARNING, "Unknown Point %d", ip); + yymsg(WARNING, "Unknown Point %d", (int)p); else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, v, NULL, NULL); + Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, + yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, v, NULL, NULL); List_Add(THEM->Metric->Attractors, &a); } } + List_Delete(yyvsp[-9].l); + // dummy values + yyval.s.Type = 0; + yyval.s.Num = 0; ; break;} -case 232: -#line 1567 "Gmsh.y" +case 234: +#line 1609 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + double d; List_Read(yyvsp[-3].l, i, &d); Vertex *v = FindPoint((int)d, THEM); if(!v) @@ -6067,323 +6128,593 @@ case 232: else v->lc = yyvsp[-1].d; } - ; - break;} -case 233: -#line 1581 "Gmsh.y" -{ - Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_LINE, 1, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - yyval.s.Type = MSH_SEGM_LINE; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 234: -#line 1587 "Gmsh.y" -{ - Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_SPLN, 3, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - yyval.s.Type = MSH_SEGM_SPLN; - yyval.s.Num = (int)yyvsp[-4].d; + List_Delete(yyvsp[-3].l); + // dummy values + yyval.s.Type = 0; + yyval.s.Num = 0; ; break;} case 235: -#line 1593 "Gmsh.y" +#line 1628 "Gmsh.y" { - Curve *c; - Attractor *a; - double p; - int ip; - for(int i = 0; i < List_Nbr(yyvsp[-9].l); i++){ - List_Read(yyvsp[-9].l, i, &p); - ip = (int)p; - c = FindCurve(ip, THEM); - if(!c) - yymsg(WARNING, "Unknown Curve %d", ip); - else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, NULL, c, NULL); - List_Add(THEM->Metric->Attractors, &a); - } + int num = (int)yyvsp[-4].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_LINE; + yyval.s.Num = num; ; break;} case 236: -#line 1612 "Gmsh.y" +#line 1646 "Gmsh.y" { - Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_CIRC, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - yyval.s.Type = MSH_SEGM_CIRC ; - yyval.s.Num = (int)yyvsp[-4].d; + int num = (int)yyvsp[-4].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_SPLN; + yyval.s.Num = num; ; break;} case 237: -#line 1618 "Gmsh.y" +#line 1664 "Gmsh.y" { - Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_ELLI, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - yyval.s.Type = MSH_SEGM_ELLI ; - yyval.s.Num = (int)yyvsp[-4].d; + int num = (int)yyvsp[-4].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_CIRC; + yyval.s.Num = num; ; break;} case 238: -#line 1624 "Gmsh.y" +#line 1682 "Gmsh.y" { - List_T *temp; - int i, j; - double d; - temp = List_Create(List_Nbr(yyvsp[-3].l), 1, sizeof(int)); - for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){ - List_Read(yyvsp[-3].l, i, &d); - j = (int)d; - List_Add(temp, &j); + int num = (int)yyvsp[-6].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-3].l); + Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL, + -1, -1, 0., 1.); + c->Circle.n[0] = yyvsp[-1].v[0]; + c->Circle.n[1] = yyvsp[-1].v[1]; + c->Circle.n[2] = yyvsp[-1].v[2]; + End_Curve(c); + Tree_Add(THEM->Curves, &c); + Curve *rc = CreateReversedCurve(THEM, c); + rc->Circle.n[0] = yyvsp[-1].v[0]; + rc->Circle.n[1] = yyvsp[-1].v[1]; + rc->Circle.n[2] = yyvsp[-1].v[2]; + End_Curve(rc); + List_Delete(temp); } - AddCircleInDataBase ((int) yyvsp[-6].d, MSH_SEGM_CIRC, temp, yyvsp[-1].v); - List_Delete(temp); - yyval.s.Type = MSH_SEGM_CIRC ; - yyval.s.Num = (int)yyvsp[-6].d; + List_Delete(yyvsp[-3].l); + yyval.s.Type = MSH_SEGM_CIRC; + yyval.s.Num = num; ; break;} case 239: -#line 1641 "Gmsh.y" +#line 1708 "Gmsh.y" { - Cdbseg101((int)yyvsp[-14].d, MSH_SEGM_PARAMETRIC, 2, NULL, NULL, -1, -1, yyvsp[-10].d, yyvsp[-8].d, yyvsp[-6].c, yyvsp[-4].c, yyvsp[-2].c); - yyval.s.Type = MSH_SEGM_PARAMETRIC ; - yyval.s.Num = (int)yyvsp[-14].d; + int num = (int)yyvsp[-4].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_ELLI; + yyval.s.Num = num; ; break;} case 240: -#line 1647 "Gmsh.y" +#line 1727 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_LINE, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); - yyval.s.Type = MSH_PHYSICAL_LINE; - yyval.s.Num = (int)yyvsp[-4].d; + int num = (int)yyvsp[-14].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + Curve *c = Create_Curve(num, MSH_SEGM_PARAMETRIC, 2, NULL, NULL, + -1, -1, yyvsp[-10].d, yyvsp[-8].d); + strcpy(c->functu, yyvsp[-6].c); + strcpy(c->functv, yyvsp[-4].c); + strcpy(c->functw, yyvsp[-2].c); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + } + yyval.s.Type = MSH_SEGM_PARAMETRIC; + yyval.s.Num = num; ; break;} case 241: -#line 1653 "Gmsh.y" +#line 1745 "Gmsh.y" { - yyval.s.Type = MSH_SEGM_LOOP; - Cdbz101((int)yyvsp[-4].d, yyval.s.Type, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); - yyval.s.Num = (int)yyvsp[-4].d; + int num = (int)yyvsp[-4].d; + if(List_Nbr(yyvsp[-1].l) < 4){ + yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", num, + List_Nbr(yyvsp[-1].l)); + } + else{ + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_BSPLN; + yyval.s.Num = num; ; break;} case 242: -#line 1659 "Gmsh.y" +#line 1769 "Gmsh.y" { - if(List_Nbr(yyvsp[-1].l) > 3){ - Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_BSPLN, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - yyval.s.Type = MSH_SEGM_BSPLN; - yyval.s.Num = (int)yyvsp[-4].d; - } - else - yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", (int)yyvsp[-4].d, + int num = (int)yyvsp[-4].d; + if(List_Nbr(yyvsp[-1].l) < 4){ + yymsg(GERROR, "Too few control points for Bezier curve %d (%d < 4)", num, List_Nbr(yyvsp[-1].l)); + } + else{ + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_BEZIER; + yyval.s.Num = num; ; break;} case 243: -#line 1670 "Gmsh.y" +#line 1793 "Gmsh.y" { - if(List_Nbr(yyvsp[-1].l) > 3){ - Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_BEZIER, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - yyval.s.Type = MSH_SEGM_BSPLN; - yyval.s.Num = (int)yyvsp[-4].d; + int num = (int)yyvsp[-8].d; + if(List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1 != List_Nbr(yyvsp[-3].l)){ + yymsg(GERROR, "Wrong definition of Nurbs Curve %d: " + "got %d knots, need N + D + 1 = %d + %d + 1 = %d", + (int)yyvsp[-8].d, List_Nbr(yyvsp[-3].l), List_Nbr(yyvsp[-5].l), (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1); } - else - yymsg(GERROR, "Too few control points for Bezier %d (%d < 4)", (int)yyvsp[-4].d, - List_Nbr(yyvsp[-1].l)); + else{ + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-5].l); + Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)yyvsp[-1].d, temp, yyvsp[-3].l, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + } + List_Delete(yyvsp[-5].l); + List_Delete(yyvsp[-3].l); + yyval.s.Type = MSH_SEGM_NURBS; + yyval.s.Num = num; ; break;} case 244: -#line 1681 "Gmsh.y" +#line 1819 "Gmsh.y" { - List_T *Temp; - int i; - double d; - if(List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1 != List_Nbr(yyvsp[-3].l)){ - yymsg(GERROR, "Wrong definition of Nurbs Curve %d: " - "got %d Knots, need N + D + 1 = %d + %d + 1 = %d", - (int)yyvsp[-8].d, - List_Nbr(yyvsp[-3].l), List_Nbr(yyvsp[-5].l), (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1); + int num = (int)yyvsp[-4].d; + if(FindEdgeLoop(num, THEM)){ + yymsg(GERROR, "Line loop %d already exists", num); } else{ - Temp = List_Create(List_Nbr(yyvsp[-5].l), 1, sizeof(int)); - for(i = 0; i < List_Nbr(yyvsp[-5].l); i++) { - List_Read(yyvsp[-5].l, i, &d); - j = (int)d; - List_Add(Temp, &j); - } - AddCurveInDataBase ((int)yyvsp[-8].d, MSH_SEGM_NURBS, (int)yyvsp[-1].d, Temp, yyvsp[-3].l, -1, -1, 0., 1.); - List_Delete(Temp); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + sortEdgesInLoop(num, temp); + EdgeLoop *l = Create_EdgeLoop(num, temp); + Tree_Add(THEM->EdgeLoops, &l); + List_Delete(temp); } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_LOOP; + yyval.s.Num = num; ; break;} case 245: -#line 1706 "Gmsh.y" +#line 1836 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); - yyval.s.Type = MSH_SURF_PLAN; - yyval.s.Num = (int)yyvsp[-4].d; + for(int i = 0; i < List_Nbr(yyvsp[-9].l); i++){ + double p; + List_Read(yyvsp[-9].l, i, &p); + Curve *c = FindCurve((int)p, THEM); + if(!c) + yymsg(WARNING, "Unknown Curve %d", (int)p); + else{ + Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, + yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, NULL, c, NULL); + List_Add(THEM->Metric->Attractors, &a); + } + } + // dummy values + yyval.s.Type = 0; + yyval.s.Num = 0; ; break;} case 246: -#line 1712 "Gmsh.y" +#line 1854 "Gmsh.y" { - Surface *s,*support; - support = FindSurface((int)yyvsp[-4].d, THEM); - if(!support) - yymsg(GERROR, "Unknown Surface %d", (int)yyvsp[-4].d); + int num = (int)yyvsp[-4].d; + if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE, THEM)){ + yymsg(GERROR, "Physical line %d already exists", num); + } else{ - Cdbz101((int)yyvsp[-8].d, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, yyvsp[-2].l, NULL); - s = FindSurface((int)yyvsp[-8].d, THEM); - if(!s) - yymsg(GERROR, "Unknown Surface %d", (int)yyvsp[-8].d); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_PHYSICAL_LINE; + yyval.s.Num = num; + ; + break;} +case 247: +#line 1873 "Gmsh.y" +{ + int num = (int)yyvsp[-4].d; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + Surface *s = Create_Surface(num, MSH_SURF_PLAN); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SURF_PLAN; + yyval.s.Num = num; + ; + break;} +case 248: +#line 1892 "Gmsh.y" +{ + int num = (int)yyvsp[-4].d, type = 0; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + double d; + List_Read(yyvsp[-1].l, 0, &d); + EdgeLoop *el = FindEdgeLoop((int)d, THEM); + if(!el){ + yymsg(GERROR, "Unknown Line Loop %d", (int)d); + } + else{ + int j = List_Nbr(el->Curves); + if(j == 4){ + type = MSH_SURF_REGL; + } + else if(j == 3){ + type = MSH_SURF_TRIC; + } + else{ + yymsg(GERROR, "Wrong definition of Ruled Surface %d: " + "%d borders instead of 3 or 4", num, j); + type = MSH_SURF_PLAN; + } + Surface *s = Create_Surface(num, type); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + } + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = type; + yyval.s.Num = num; + ; + break;} +case 249: +#line 1931 "Gmsh.y" +{ + int num = (int)yyvsp[-8].d; + Surface *support = FindSurface((int)yyvsp[-4].d, THEM); + if(!support){ + yymsg(GERROR, "Unknown support surface %d", (int)yyvsp[-4].d); + } + else{ + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } else{ - s->Typ = MSH_SURF_TRIMMED; + Surface *s = Create_Surface(num, MSH_SURF_TRIMMED); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-2].l); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); s->Support = support; - yyval.s.Type = MSH_SURF_TRIMMED; - yyval.s.Num = (int)yyvsp[-8].d; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); } } + List_Delete(yyvsp[-2].l); + yyval.s.Type = MSH_SURF_TRIMMED; + yyval.s.Num = num; + ; + break;} +case 250: +#line 1957 "Gmsh.y" +{ + int num = (int)yyvsp[-10].d, type = 0; + Surface *s = FindSurface(num, THEM); + if(!s) { + yymsg(GERROR, "Unknown surface %d", num); + } + else{ + // FIXME: parameters not used; undocumented + POLY_rep *rep = new POLY_rep(yyvsp[-2].l, yyvsp[-1].l); + s->thePolyRep = rep; + type = s->Typ; + } + //FIXME: do you copy the data? + //List_Delete($12); + //List_Delete($13); + yyval.s.Type = type; + yyval.s.Num = (int)yyvsp[-10].d; ; break;} -case 247: -#line 1731 "Gmsh.y" +case 251: +#line 1979 "Gmsh.y" { - List_Read(yyvsp[-1].l, 0, &d); - i = (int)d; - EdgeLoop *el = FindEdgeLoop(i, THEM); - if(!el) - yymsg(GERROR, "Unknown Line Loop %d", i); + int num = (int)yyvsp[-10].d, type = 0; + Surface *s = FindSurface(num, THEM); + if(!s) { + yymsg(GERROR, "Unknown surface %d", num); + } else{ - j = List_Nbr(el->Curves); - if(j==4) - yyval.s.Type = MSH_SURF_REGL; - else if(j==3) - yyval.s.Type = MSH_SURF_TRIC; - else - yymsg(GERROR, "Wrong definition of Ruled Surface %d: " - "%d borders instead of 3 or 4", - (int)yyvsp[-4].d, j); - Cdbz101((int)yyvsp[-4].d, yyval.s.Type, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); - yyval.s.Num = (int)yyvsp[-4].d; + POLY_rep *rep = new POLY_rep(yyvsp[-2].l, yyvsp[-1].l); + s->thePolyRep = rep; + type = s->Typ; } + yyval.s.Type = type; + yyval.s.Num = (int)yyvsp[-10].d; ; break;} -case 248: -#line 1753 "Gmsh.y" -{ - AddTriangulationToSurface ((int) yyvsp[-10].d, (int) yyvsp[-6].d, (int) yyvsp[-4].d, yyvsp[-2].l, yyvsp[-1].l); - yyval.s.Num = (int)yyvsp[-10].d; - ; - break;} -case 249: -#line 1761 "Gmsh.y" +case 252: +#line 1996 "Gmsh.y" { - CreateNurbsSurface ((int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); + int num = (int)yyvsp[-16].d; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + CreateNurbsSurface(num, (int)yyvsp[-4].d, (int)yyvsp[-2].d, yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); + } + for(int i = 0; i < List_Nbr(yyvsp[-13].l); i++) + List_Delete((List_T*)List_Pointer(yyvsp[-13].l, i)); + List_Delete(yyvsp[-13].l); + List_Delete(yyvsp[-10].l); + List_Delete(yyvsp[-8].l); yyval.s.Type = MSH_SURF_NURBS; - yyval.s.Num = (int)yyvsp[-16].d; + yyval.s.Num = num; ; break;} -case 250: -#line 1769 "Gmsh.y" +case 253: +#line 2015 "Gmsh.y" { - CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); + int num = (int)yyvsp[-16].d; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + CreateNurbsSurfaceSupport(num, (int)yyvsp[-4].d, (int)yyvsp[-2].d, yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); + } + for(int i = 0; i < List_Nbr(yyvsp[-13].l); i++) + List_Delete((List_T*)List_Pointer(yyvsp[-13].l, i)); + List_Delete(yyvsp[-13].l); + List_Delete(yyvsp[-10].l); + List_Delete(yyvsp[-8].l); + yyval.s.Type = MSH_SURF_NURBS; + yyval.s.Num = num; ; break;} -case 251: -#line 1773 "Gmsh.y" +case 254: +#line 2032 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_SURFACE, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); - yyval.s.Type = MSH_PHYSICAL_SURFACE; - yyval.s.Num = (int)yyvsp[-4].d; + int num = (int)yyvsp[-4].d; + if(FindSurfaceLoop(num, THEM)){ + yymsg(GERROR, "Surface loop %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + SurfaceLoop *l = Create_SurfaceLoop(num, temp); + Tree_Add(THEM->SurfaceLoops, &l); + List_Delete(temp); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SURF_LOOP; + yyval.s.Num = num; ; break;} -case 252: -#line 1779 "Gmsh.y" +case 255: +#line 2048 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); - yyval.s.Type = MSH_SURF_LOOP; - yyval.s.Num = (int)yyvsp[-4].d; + int num = (int)yyvsp[-4].d; + if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE, THEM)){ + yymsg(GERROR, "Physical surface %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_PHYSICAL_SURFACE; + yyval.s.Num = num; ; break;} -case 253: -#line 1788 "Gmsh.y" +case 256: +#line 2067 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); + int num = (int)yyvsp[-4].d; + if(FindVolume(num, THEM)){ + yymsg(GERROR, "Volume %d already exists", num); + } + else{ + Volume *v = Create_Volume(num, MSH_VOLUME); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + setVolumeSurfaces(v, temp); + List_Delete(temp); + Tree_Add(THEM->Volumes, &v); + } + List_Delete(yyvsp[-1].l); yyval.s.Type = MSH_VOLUME; - yyval.s.Num = (int)yyvsp[-4].d; + yyval.s.Num = num; ; break;} -case 254: -#line 1794 "Gmsh.y" +case 257: +#line 2084 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); + int num = (int)yyvsp[-4].d; + if(FindVolume(num, THEM)){ + yymsg(GERROR, "Volume %d already exists", num); + } + else{ + Volume *v = Create_Volume(num, MSH_VOLUME); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + setVolumeSurfaces(v, temp); + List_Delete(temp); + Tree_Add(THEM->Volumes, &v); + } + List_Delete(yyvsp[-1].l); yyval.s.Type = MSH_VOLUME; - yyval.s.Num = (int)yyvsp[-4].d; + yyval.s.Num = num; ; break;} -case 255: -#line 1800 "Gmsh.y" +case 258: +#line 2101 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); + int num = (int)yyvsp[-4].d; + if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME, THEM)){ + yymsg(GERROR, "Physical volume %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete(yyvsp[-1].l); yyval.s.Type = MSH_PHYSICAL_VOLUME; - yyval.s.Num = (int)yyvsp[-4].d; + yyval.s.Num = num; ; break;} -case 256: -#line 1811 "Gmsh.y" +case 259: +#line 2122 "Gmsh.y" { - TranslateShapes (yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-1].l, 1); + TranslateShapes(yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-1].l, 1); yyval.l = yyvsp[-1].l; ; break;} -case 257: -#line 1816 "Gmsh.y" +case 260: +#line 2127 "Gmsh.y" { RotateShapes(yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].d, yyvsp[-1].l, 1); yyval.l = yyvsp[-1].l; ; break;} -case 258: -#line 1821 "Gmsh.y" +case 261: +#line 2132 "Gmsh.y" { SymmetryShapes(yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-3].v[3], yyvsp[-1].l, 1); yyval.l = yyvsp[-1].l; ; break;} -case 259: -#line 1826 "Gmsh.y" +case 262: +#line 2137 "Gmsh.y" { DilatShapes(yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].d, yyvsp[-1].l, 1); yyval.l = yyvsp[-1].l; ; break;} -case 260: -#line 1833 "Gmsh.y" +case 263: +#line 2144 "Gmsh.y" { yyval.l = yyvsp[0].l; ; break;} -case 261: -#line 1834 "Gmsh.y" +case 264: +#line 2145 "Gmsh.y" { yyval.l = yyvsp[0].l; ; break;} -case 262: -#line 1835 "Gmsh.y" +case 265: +#line 2146 "Gmsh.y" { yyval.l = yyvsp[0].l; ; break;} -case 263: -#line 1840 "Gmsh.y" +case 266: +#line 2151 "Gmsh.y" { yyval.l = List_Create(3, 3, sizeof(Shape)); ; break;} -case 264: -#line 1844 "Gmsh.y" +case 267: +#line 2155 "Gmsh.y" { List_Add(yyval.l, &yyvsp[0].s); ; break;} -case 265: -#line 1848 "Gmsh.y" +case 268: +#line 2159 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + double d; List_Read(yyvsp[-2].l, i, &d); + Shape TheShape; TheShape.Num = (int)d; Vertex *v = FindPoint(TheShape.Num, THEM); if(!v) @@ -6395,11 +6726,13 @@ case 265: } ; break;} -case 266: -#line 1862 "Gmsh.y" +case 269: +#line 2175 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + double d; List_Read(yyvsp[-2].l, i, &d); + Shape TheShape; TheShape.Num = (int)d; Curve *c = FindCurve(TheShape.Num, THEM); if(!c) @@ -6411,11 +6744,13 @@ case 266: } ; break;} -case 267: -#line 1876 "Gmsh.y" +case 270: +#line 2191 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + double d; List_Read(yyvsp[-2].l, i, &d); + Shape TheShape; TheShape.Num = (int)d; Surface *s = FindSurface(TheShape.Num, THEM); if(!s) @@ -6427,11 +6762,13 @@ case 267: } ; break;} -case 268: -#line 1890 "Gmsh.y" +case 271: +#line 2207 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + double d; List_Read(yyvsp[-2].l, i, &d); + Shape TheShape; TheShape.Num = (int)d; Volume *v = FindVolume(TheShape.Num, THEM); if(!v) @@ -6443,102 +6780,119 @@ case 268: } ; break;} -case 269: -#line 1909 "Gmsh.y" +case 272: +#line 2228 "Gmsh.y" { yyval.l = List_Create(3, 3, sizeof(Shape)); - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ - List_Read (yyvsp[-1].l, i, &TheShape); + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + Shape TheShape; + List_Read(yyvsp[-1].l, i, &TheShape); + int j; CopyShape(TheShape.Type, TheShape.Num, &j); TheShape.Num = j; List_Add(yyval.l, &TheShape); } + List_Delete(yyvsp[-1].l); ; break;} -case 270: -#line 1919 "Gmsh.y" +case 273: +#line 2241 "Gmsh.y" { if(!strcmp(yyvsp[-4].c, "View")) DuplicateView((int)yyvsp[-2].d, 0); yyval.l = NULL; ; break;} -case 271: -#line 1930 "Gmsh.y" +case 274: +#line 2252 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ - List_Read (yyvsp[-1].l, i, &TheShape); + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + Shape TheShape; + List_Read(yyvsp[-1].l, i, &TheShape); DeleteShape(TheShape.Type, TheShape.Num); } + List_Delete(yyvsp[-1].l); ; break;} -case 272: -#line 1937 "Gmsh.y" +case 275: +#line 2261 "Gmsh.y" { if(!strcmp(yyvsp[-4].c, "View")) RemoveViewByIndex((int)yyvsp[-2].d); ; break;} -case 273: -#line 1941 "Gmsh.y" +case 276: +#line 2265 "Gmsh.y" { if(!strcmp(yyvsp[-1].c, "Meshes") || !strcmp(yyvsp[-1].c, "All")) Init_Mesh(THEM); ; break;} -case 274: -#line 1951 "Gmsh.y" +case 277: +#line 2275 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ - List_Read (yyvsp[-1].l, i, &TheShape); + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + Shape TheShape; + List_Read(yyvsp[-1].l, i, &TheShape); ColorShape(TheShape.Type, TheShape.Num, yyvsp[-3].u); } + List_Delete(yyvsp[-1].l); ; break;} -case 275: -#line 1963 "Gmsh.y" +case 278: +#line 2289 "Gmsh.y" { int m = (CTX.visibility_mode == 2) ? VIS_MESH : ((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH); - for(i = 2; i < 6; i++) + for(int i = 2; i < 6; i++) SetVisibilityByNumber(yyvsp[-1].c, i, m); ; break;} -case 276: -#line 1970 "Gmsh.y" +case 279: +#line 2296 "Gmsh.y" { - for(i = 2; i < 6; i++) + for(int i = 2; i < 6; i++) SetVisibilityByNumber(yyvsp[-1].c, i, 0); ; break;} -case 277: -#line 1975 "Gmsh.y" +case 280: +#line 2301 "Gmsh.y" { int m = (CTX.visibility_mode == 2) ? VIS_MESH : ((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH); - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ - List_Read (yyvsp[-1].l, i, &TheShape); + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + Shape TheShape; + List_Read(yyvsp[-1].l, i, &TheShape); VisibilityShape(TheShape.Type, TheShape.Num, m); } + List_Delete(yyvsp[-1].l); ; break;} -case 278: -#line 1984 "Gmsh.y" +case 281: +#line 2312 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ - List_Read (yyvsp[-1].l, i, &TheShape); + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + Shape TheShape; + List_Read(yyvsp[-1].l, i, &TheShape); VisibilityShape(TheShape.Type, TheShape.Num, 0); } + List_Delete(yyvsp[-1].l); ; break;} -case 279: -#line 1996 "Gmsh.y" +case 282: +#line 2326 "Gmsh.y" { if(!strcmp(yyvsp[-2].c, "Include")){ + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); + // Warning: we *don't* close included files. If you need to + // include many files, use "Merge" instead: some OSes limit + // the number of files a process can open simultaneously (500 + // for OS X) ParseFile(tmpstring, 0, 0); } else if(!strcmp(yyvsp[-2].c, "Print")){ #if defined(HAVE_FLTK) if(!CTX.batch){ + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); CreateOutputFile(tmpstring, CTX.print.format); } @@ -6546,15 +6900,18 @@ case 279: } else if(!strcmp(yyvsp[-2].c, "Save")){ #if defined(HAVE_FLTK) + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); CreateOutputFile(tmpstring, CTX.mesh.format); #endif } else if(!strcmp(yyvsp[-2].c, "Merge")){ + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); MergeProblem(tmpstring); } else if(!strcmp(yyvsp[-2].c, "MergeWithBoundingBox")){ + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); MergeProblemWithBoundingBox(tmpstring); } @@ -6566,12 +6923,13 @@ case 279: } ; break;} -case 280: -#line 2031 "Gmsh.y" +case 283: +#line 2370 "Gmsh.y" { if(!strcmp(yyvsp[-6].c, "Save") && !strcmp(yyvsp[-5].c, "View")){ Post_View *v = (Post_View *)List_Pointer_Test(CTX.post.list, (int)yyvsp[-3].d); if(v){ + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); WriteView(v, tmpstring, 0, 0); } @@ -6581,8 +6939,8 @@ case 280: } ; break;} -case 281: -#line 2044 "Gmsh.y" +case 284: +#line 2384 "Gmsh.y" { if(!strcmp(yyvsp[-2].c, "Sleep")){ long sleep_time = GetTime(); @@ -6591,8 +6949,6 @@ case 281: } } else if(!strcmp(yyvsp[-2].c, "Mesh")){ - //Maillage_Dimension_0(THEM); - //mai3d(THEM, (int)$2); yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts"); } else{ @@ -6600,19 +6956,19 @@ case 281: } ; break;} -case 282: -#line 2061 "Gmsh.y" +case 285: +#line 2399 "Gmsh.y" { try { GMSH_PluginManager::instance()->action(yyvsp[-4].c, yyvsp[-1].c, 0); } - catch (...) { + catch(...) { yymsg(WARNING, "Unknown action '%s' or plugin '%s'", yyvsp[-1].c, yyvsp[-4].c); } ; break;} -case 283: -#line 2070 "Gmsh.y" +case 286: +#line 2408 "Gmsh.y" { if(!strcmp(yyvsp[-1].c, "Views")) CombineViews(1, 0); @@ -6622,14 +6978,14 @@ case 283: yymsg(GERROR, "Unknown Combine command"); ; break;} -case 284: -#line 2079 "Gmsh.y" +case 287: +#line 2417 "Gmsh.y" { exit(0); ; break;} -case 285: -#line 2083 "Gmsh.y" +case 288: +#line 2421 "Gmsh.y" { #if defined(HAVE_FLTK) if(!CTX.batch){ // we're in interactive mode @@ -6646,39 +7002,48 @@ case 285: #endif ; break;} -case 286: -#line 2105 "Gmsh.y" +case 289: +#line 2443 "Gmsh.y" { - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; + LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d; + LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d; + LoopControlVariablesTab[ImbricatedLoop][2] = 1.0; + LoopControlVariablesNameTab[ImbricatedLoop] = ""; fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } ; break;} -case 287: -#line 2115 "Gmsh.y" +case 290: +#line 2457 "Gmsh.y" { - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; + LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d; + LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d; + LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d; + LoopControlVariablesNameTab[ImbricatedLoop] = ""; fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } ; break;} -case 288: -#line 2125 "Gmsh.y" +case 291: +#line 2471 "Gmsh.y" { - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-6].c ; - + LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d; + LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d; + LoopControlVariablesTab[ImbricatedLoop][2] = 1.0; + LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-6].c; + Symbol TheSymbol; TheSymbol.Name = yyvsp[-6].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); List_Put(TheSymbol.val, 0, &yyvsp[-3].d); @@ -6687,21 +7052,25 @@ case 288: else{ List_Write(pSymbol->val, 0, &yyvsp[-3].d); } - fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } ; break;} -case 289: -#line 2146 "Gmsh.y" +case 292: +#line 2496 "Gmsh.y" { - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d ; - LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-8].c ; - + LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d; + LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d; + LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d; + LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-8].c; + Symbol TheSymbol; TheSymbol.Name = yyvsp[-8].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); List_Put(TheSymbol.val, 0, &yyvsp[-5].d); @@ -6710,72 +7079,82 @@ case 289: else{ List_Write(pSymbol->val, 0, &yyvsp[-5].d); } - fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } ; break;} -case 290: -#line 2167 "Gmsh.y" +case 293: +#line 2521 "Gmsh.y" { if(LoopControlVariablesTab[ImbricatedLoop-1][1] > LoopControlVariablesTab[ImbricatedLoop-1][0]){ LoopControlVariablesTab[ImbricatedLoop-1][0] += LoopControlVariablesTab[ImbricatedLoop-1][2]; - if(strlen(LoopControlVariablesNameTab[ImbricatedLoop-1])){ + Symbol TheSymbol; TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1]; - pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol); - *(double*)List_Pointer_Fast(pSymbol->val, 0) += - LoopControlVariablesTab[ImbricatedLoop-1][2] ; + Symbol *pSymbol; + if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) + yymsg(GERROR, "Unknown loop variable"); + else + *(double*)List_Pointer_Fast(pSymbol->val, 0) += + LoopControlVariablesTab[ImbricatedLoop-1][2]; } - fsetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop-1]); yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop-1]; } else{ ImbricatedLoop--; + if(ImbricatedLoop < 0){ + yymsg(GERROR, "Problem with imbricated loops"); + ImbricatedLoop = 0; + } } ; break;} -case 291: -#line 2188 "Gmsh.y" +case 294: +#line 2548 "Gmsh.y" { if(!FunctionManager::Instance()->createFunction(yyvsp[0].c, yyin, yyname, yylineno)) yymsg(GERROR, "Redefinition of function %s", yyvsp[0].c); skip_until(NULL, "Return"); ; break;} -case 292: -#line 2194 "Gmsh.y" +case 295: +#line 2554 "Gmsh.y" { if(!FunctionManager::Instance()->leaveFunction(&yyin, yyname, yylineno)) yymsg(GERROR, "Error while exiting function"); ; break;} -case 293: -#line 2199 "Gmsh.y" +case 296: +#line 2559 "Gmsh.y" { if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c, &yyin, yyname, yylineno)) yymsg(GERROR, "Unknown function %s", yyvsp[-1].c); ; break;} -case 294: -#line 2204 "Gmsh.y" +case 297: +#line 2564 "Gmsh.y" { if(!yyvsp[-1].d) skip_until("If", "EndIf"); ; break;} -case 295: -#line 2208 "Gmsh.y" +case 298: +#line 2568 "Gmsh.y" { ; break;} -case 296: -#line 2219 "Gmsh.y" +case 299: +#line 2579 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)yyvsp[-4].d, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2], 0., 0., 0., 0., 0., 0., 0., &pc, &prc, 1, NULL); @@ -6784,10 +7163,11 @@ case 296: List_Add(yyval.l, &TheShape); ; break;} -case 297: -#line 2229 "Gmsh.y" +case 300: +#line 2590 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)yyvsp[-8].d, 0., 0., 0., yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d, &pc, &prc, 1, NULL); @@ -6796,10 +7176,11 @@ case 297: List_Add(yyval.l, &TheShape); ; break;} -case 298: -#line 2239 "Gmsh.y" +case 301: +#line 2601 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE_ROTATE, (int)yyvsp[-10].d, yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d, &pc, &prc, 1, NULL); @@ -6808,17 +7189,18 @@ case 298: List_Add(yyval.l, &TheShape); ; break;} -case 299: -#line 2249 "Gmsh.y" +case 302: +#line 2612 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 300: -#line 2254 "Gmsh.y" +case 303: +#line 2617 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)yyvsp[-8].d, yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], 0., 0., 0., 0., 0., 0., 0., &pc, &prc, 1, &extr); @@ -6827,17 +7209,18 @@ case 300: List_Add(yyval.l, &TheShape); ; break;} -case 301: -#line 2264 "Gmsh.y" +case 304: +#line 2628 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 302: -#line 2269 "Gmsh.y" +case 305: +#line 2633 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)yyvsp[-12].d, 0., 0., 0., yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, &pc, &prc, 1, &extr); @@ -6846,17 +7229,18 @@ case 302: List_Add(yyval.l, &TheShape); ; break;} -case 303: -#line 2279 "Gmsh.y" +case 306: +#line 2644 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 304: -#line 2284 "Gmsh.y" +case 307: +#line 2649 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE_ROTATE, (int)yyvsp[-14].d, yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2], yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, &pc, &prc, 1, &extr); @@ -6865,10 +7249,11 @@ case 304: List_Add(yyval.l, &TheShape); ; break;} -case 305: -#line 2296 "Gmsh.y" +case 308: +#line 2662 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)yyvsp[-4].d, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2], 0., 0., 0., 0., 0., 0., 0., &ps, 1, NULL); @@ -6884,10 +7269,11 @@ case 305: List_Add(yyval.l, &TheShape); ; break;} -case 306: -#line 2313 "Gmsh.y" +case 309: +#line 2680 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)yyvsp[-8].d, 0., 0., 0., yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d, &ps, 1, NULL); @@ -6903,10 +7289,11 @@ case 306: List_Add(yyval.l, &TheShape); ; break;} -case 307: -#line 2330 "Gmsh.y" +case 310: +#line 2698 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE_ROTATE, (int)yyvsp[-10].d, yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d, &ps, 1, NULL); @@ -6922,17 +7309,18 @@ case 307: List_Add(yyval.l, &TheShape); ; break;} -case 308: -#line 2347 "Gmsh.y" +case 311: +#line 2716 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 309: -#line 2352 "Gmsh.y" +case 312: +#line 2721 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)yyvsp[-8].d, yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], 0., 0., 0., 0., 0., 0., 0., &ps, 1, &extr); @@ -6948,17 +7336,18 @@ case 309: List_Add(yyval.l, &TheShape); ; break;} -case 310: -#line 2369 "Gmsh.y" +case 313: +#line 2739 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 311: -#line 2374 "Gmsh.y" +case 314: +#line 2744 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)yyvsp[-12].d, 0., 0., 0., yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, &ps, 1, &extr); @@ -6974,17 +7363,18 @@ case 311: List_Add(yyval.l, &TheShape); ; break;} -case 312: -#line 2391 "Gmsh.y" +case 315: +#line 2762 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 313: -#line 2396 "Gmsh.y" +case 316: +#line 2767 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE_ROTATE, (int)yyvsp[-14].d, yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2], yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, &ps, 1, &extr); @@ -7000,9 +7390,10 @@ case 313: List_Add(yyval.l, &TheShape); ; break;} -case 314: -#line 2416 "Gmsh.y" +case 317: +#line 2788 "Gmsh.y" { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)yyvsp[-4].d, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2], 0., 0., 0., 0., 0., 0., 0., 0, NULL); @@ -7018,9 +7409,10 @@ case 314: List_Add(yyval.l, &TheShape); ; break;} -case 315: -#line 2432 "Gmsh.y" +case 318: +#line 2805 "Gmsh.y" { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)yyvsp[-8].d, 0., 0., 0., yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d, 0, NULL); @@ -7036,9 +7428,10 @@ case 315: List_Add(yyval.l, &TheShape); ; break;} -case 316: -#line 2448 "Gmsh.y" +case 319: +#line 2822 "Gmsh.y" { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE_ROTATE, (int)yyvsp[-10].d, yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d, 0, NULL); @@ -7054,20 +7447,20 @@ case 316: List_Add(yyval.l, &TheShape); ; break;} -case 317: -#line 2464 "Gmsh.y" +case 320: +#line 2839 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 318: -#line 2469 "Gmsh.y" +case 321: +#line 2844 "Gmsh.y" { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)yyvsp[-8].d, yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], 0., 0., 0., 0., 0., 0., 0., - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -7080,20 +7473,20 @@ case 318: List_Add(yyval.l, &TheShape); ; break;} -case 319: -#line 2486 "Gmsh.y" +case 322: +#line 2861 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 320: -#line 2492 "Gmsh.y" +case 323: +#line 2867 "Gmsh.y" { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)yyvsp[-12].d, 0., 0., 0., yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -7106,20 +7499,20 @@ case 320: List_Add(yyval.l, &TheShape); ; break;} -case 321: -#line 2509 "Gmsh.y" +case 324: +#line 2884 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 322: -#line 2515 "Gmsh.y" +case 325: +#line 2890 "Gmsh.y" { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE_ROTATE, (int)yyvsp[-14].d, yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2], yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -7132,18 +7525,18 @@ case 322: List_Add(yyval.l, &TheShape); ; break;} -case 323: -#line 2535 "Gmsh.y" +case 326: +#line 2910 "Gmsh.y" { ; break;} -case 324: -#line 2538 "Gmsh.y" +case 327: +#line 2913 "Gmsh.y" { ; break;} -case 325: -#line 2544 "Gmsh.y" +case 328: +#line 2919 "Gmsh.y" { double d; extr.mesh.ExtrudeMesh = true; @@ -7170,8 +7563,8 @@ case 325: List_Delete(yyvsp[-2].l); ; break;} -case 326: -#line 2570 "Gmsh.y" +case 329: +#line 2945 "Gmsh.y" { double d; extr.mesh.ExtrudeMesh = true; @@ -7196,20 +7589,20 @@ case 326: List_Delete(yyvsp[-2].l); ; break;} -case 327: -#line 2594 "Gmsh.y" +case 330: +#line 2969 "Gmsh.y" { extr.mesh.Recombine = true; ; break;} -case 328: -#line 2603 "Gmsh.y" +case 331: +#line 2978 "Gmsh.y" { - Curve *c; - for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + double d; List_Read(yyvsp[-3].l, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -7222,14 +7615,14 @@ case 328: List_Delete(yyvsp[-3].l); ; break;} -case 329: -#line 2621 "Gmsh.y" +case 332: +#line 2996 "Gmsh.y" { - Curve *c; - for(i = 0; i < List_Nbr(yyvsp[-6].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){ + double d; List_Read(yyvsp[-6].l, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -7242,14 +7635,14 @@ case 329: List_Delete(yyvsp[-6].l); ; break;} -case 330: -#line 2639 "Gmsh.y" +case 333: +#line 3014 "Gmsh.y" { - Curve *c; - for(i = 0; i < List_Nbr(yyvsp[-6].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){ + double d; List_Read(yyvsp[-6].l, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -7262,23 +7655,24 @@ case 330: List_Delete(yyvsp[-6].l); ; break;} -case 331: -#line 2657 "Gmsh.y" +case 334: +#line 3032 "Gmsh.y" { Surface *s = FindSurface((int)yyvsp[-4].d, THEM); if(!s) yymsg(WARNING, "Unknown Surface %d", (int)yyvsp[-4].d); else{ s->Method = TRANSFINI; - k = List_Nbr(yyvsp[-1].l); - if(k!=3 && k!=4){ + int k = List_Nbr(yyvsp[-1].l); + if(k != 3 && k != 4){ yymsg(GERROR, "Wrong definition of Transfinite Surface %d: " - "%d points instead of 3 or 4" , yyvsp[-4].d, k) ; + "%d points instead of 3 or 4" , yyvsp[-4].d, k); } else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read(yyvsp[-1].l, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); s->ipar[i] = j; } } @@ -7286,22 +7680,23 @@ case 331: List_Delete(yyvsp[-1].l); ; break;} -case 332: -#line 2679 "Gmsh.y" +case 335: +#line 3055 "Gmsh.y" { Surface *s = FindSurface((int)yyvsp[-4].d, THEM); if(!s) yymsg(WARNING, "Unknown Surface %d", (int)yyvsp[-4].d); else{ s->Method = ELLIPTIC; - k = List_Nbr(yyvsp[-1].l); + int k = List_Nbr(yyvsp[-1].l); if(k != 4) yymsg(GERROR, "Wrong definition of Elliptic Surface %d: " - "%d points instead of 4" , yyvsp[-4].d, k) ; + "%d points instead of 4" , yyvsp[-4].d, k); else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read(yyvsp[-1].l, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); s->ipar[i] = j; } } @@ -7309,22 +7704,23 @@ case 332: List_Delete(yyvsp[-1].l); ; break;} -case 333: -#line 2700 "Gmsh.y" +case 336: +#line 3077 "Gmsh.y" { Volume *v = FindVolume((int)yyvsp[-4].d, THEM); if(!v) yymsg(WARNING, "Unknown Volume %d", (int)yyvsp[-4].d); else{ v->Method = TRANSFINI; - k = List_Nbr(yyvsp[-1].l); + int k = List_Nbr(yyvsp[-1].l); if(k != 6 && k != 8) yymsg(GERROR, "Wrong definition of Transfinite Volume %d: " - "%d points instead of 6 or 8" , yyvsp[-4].d, k) ; + "%d points instead of 6 or 8" , yyvsp[-4].d, k); else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read(yyvsp[-1].l, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); v->ipar[i] = j; } } @@ -7332,14 +7728,14 @@ case 333: List_Delete(yyvsp[-1].l); ; break;} -case 334: -#line 2721 "Gmsh.y" +case 337: +#line 3099 "Gmsh.y" { - Surface *s; - for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + double d; List_Read(yyvsp[-3].l, i, &d); - j = (int)d; - s = FindSurface(j, THEM); + int j = (int)d; + Surface *s = FindSurface(j, THEM); if(s){ s->Recombine = 1; s->RecombineAngle = (yyvsp[-1].d > 0 && yyvsp[-1].d < 90) ? yyvsp[-1].d : 90; @@ -7348,14 +7744,14 @@ case 334: List_Delete(yyvsp[-3].l); ; break;} -case 335: -#line 2735 "Gmsh.y" +case 338: +#line 3113 "Gmsh.y" { - Surface *s; - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + double d; List_Read(yyvsp[-1].l, i, &d); - j = (int)d; - s = FindSurface(j, THEM); + int j = (int)d; + Surface *s = FindSurface(j, THEM); if(s){ s->Recombine = 1; s->RecombineAngle = 30.; @@ -7364,857 +7760,896 @@ case 335: List_Delete(yyvsp[-1].l); ; break;} -case 336: -#line 2755 "Gmsh.y" +case 339: +#line 3133 "Gmsh.y" { ReplaceAllDuplicates(THEM); ; break;} -case 337: -#line 2759 "Gmsh.y" +case 340: +#line 3137 "Gmsh.y" { IntersectAllSegmentsTogether(); ; break;} -case 338: -#line 2768 "Gmsh.y" -{yyval.i = 1;; - break;} -case 339: -#line 2769 "Gmsh.y" -{yyval.i = 0;; - break;} -case 340: -#line 2770 "Gmsh.y" -{yyval.i = -1;; - break;} case 341: -#line 2771 "Gmsh.y" -{yyval.i = -1;; +#line 3146 "Gmsh.y" +{yyval.i = 1;; break;} case 342: -#line 2772 "Gmsh.y" -{yyval.i = -1;; +#line 3147 "Gmsh.y" +{yyval.i = 0;; break;} case 343: -#line 2776 "Gmsh.y" -{ yyval.d = yyvsp[0].d; ; +#line 3148 "Gmsh.y" +{yyval.i = -1;; break;} case 344: -#line 2777 "Gmsh.y" -{ yyval.d = yyvsp[-1].d ; ; +#line 3149 "Gmsh.y" +{yyval.i = -1;; break;} case 345: -#line 2778 "Gmsh.y" -{ yyval.d = -yyvsp[0].d ; ; +#line 3150 "Gmsh.y" +{yyval.i = -1;; break;} case 346: -#line 2779 "Gmsh.y" +#line 3154 "Gmsh.y" { yyval.d = yyvsp[0].d; ; break;} case 347: -#line 2780 "Gmsh.y" -{ yyval.d = !yyvsp[0].d ; ; +#line 3155 "Gmsh.y" +{ yyval.d = yyvsp[-1].d; ; break;} case 348: -#line 2781 "Gmsh.y" -{ yyval.d = yyvsp[-2].d - yyvsp[0].d ; ; +#line 3156 "Gmsh.y" +{ yyval.d = -yyvsp[0].d; ; break;} case 349: -#line 2782 "Gmsh.y" -{ yyval.d = yyvsp[-2].d + yyvsp[0].d ; ; +#line 3157 "Gmsh.y" +{ yyval.d = yyvsp[0].d; ; break;} case 350: -#line 2783 "Gmsh.y" -{ yyval.d = yyvsp[-2].d * yyvsp[0].d ; ; +#line 3158 "Gmsh.y" +{ yyval.d = !yyvsp[0].d; ; break;} case 351: -#line 2785 "Gmsh.y" -{ - if(!yyvsp[0].d) - yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d); - else - yyval.d = yyvsp[-2].d / yyvsp[0].d ; - ; +#line 3159 "Gmsh.y" +{ yyval.d = yyvsp[-2].d - yyvsp[0].d; ; break;} case 352: -#line 2791 "Gmsh.y" -{ yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ; ; +#line 3160 "Gmsh.y" +{ yyval.d = yyvsp[-2].d + yyvsp[0].d; ; break;} case 353: -#line 2792 "Gmsh.y" -{ yyval.d = pow(yyvsp[-2].d, yyvsp[0].d) ; ; +#line 3161 "Gmsh.y" +{ yyval.d = yyvsp[-2].d * yyvsp[0].d; ; break;} case 354: -#line 2793 "Gmsh.y" -{ yyval.d = yyvsp[-2].d < yyvsp[0].d ; ; +#line 3163 "Gmsh.y" +{ + if(!yyvsp[0].d) + yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d); + else + yyval.d = yyvsp[-2].d / yyvsp[0].d; + ; break;} case 355: -#line 2794 "Gmsh.y" -{ yyval.d = yyvsp[-2].d > yyvsp[0].d ; ; +#line 3169 "Gmsh.y" +{ yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d; ; break;} case 356: -#line 2795 "Gmsh.y" -{ yyval.d = yyvsp[-2].d <= yyvsp[0].d ; ; +#line 3170 "Gmsh.y" +{ yyval.d = pow(yyvsp[-2].d, yyvsp[0].d); ; break;} case 357: -#line 2796 "Gmsh.y" -{ yyval.d = yyvsp[-2].d >= yyvsp[0].d ; ; +#line 3171 "Gmsh.y" +{ yyval.d = yyvsp[-2].d < yyvsp[0].d; ; break;} case 358: -#line 2797 "Gmsh.y" -{ yyval.d = yyvsp[-2].d == yyvsp[0].d ; ; +#line 3172 "Gmsh.y" +{ yyval.d = yyvsp[-2].d > yyvsp[0].d; ; break;} case 359: -#line 2798 "Gmsh.y" -{ yyval.d = yyvsp[-2].d != yyvsp[0].d ; ; +#line 3173 "Gmsh.y" +{ yyval.d = yyvsp[-2].d <= yyvsp[0].d; ; break;} case 360: -#line 2799 "Gmsh.y" -{ yyval.d = yyvsp[-2].d && yyvsp[0].d ; ; +#line 3174 "Gmsh.y" +{ yyval.d = yyvsp[-2].d >= yyvsp[0].d; ; break;} case 361: -#line 2800 "Gmsh.y" -{ yyval.d = yyvsp[-2].d || yyvsp[0].d ; ; +#line 3175 "Gmsh.y" +{ yyval.d = yyvsp[-2].d == yyvsp[0].d; ; break;} case 362: -#line 2801 "Gmsh.y" -{ yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ; +#line 3176 "Gmsh.y" +{ yyval.d = yyvsp[-2].d != yyvsp[0].d; ; break;} case 363: -#line 2802 "Gmsh.y" -{ yyval.d = exp(yyvsp[-1].d); ; +#line 3177 "Gmsh.y" +{ yyval.d = yyvsp[-2].d && yyvsp[0].d; ; break;} case 364: -#line 2803 "Gmsh.y" -{ yyval.d = log(yyvsp[-1].d); ; +#line 3178 "Gmsh.y" +{ yyval.d = yyvsp[-2].d || yyvsp[0].d; ; break;} case 365: -#line 2804 "Gmsh.y" -{ yyval.d = log10(yyvsp[-1].d); ; +#line 3179 "Gmsh.y" +{ yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d; ; break;} case 366: -#line 2805 "Gmsh.y" -{ yyval.d = sqrt(yyvsp[-1].d); ; +#line 3180 "Gmsh.y" +{ yyval.d = exp(yyvsp[-1].d); ; break;} case 367: -#line 2806 "Gmsh.y" -{ yyval.d = sin(yyvsp[-1].d); ; +#line 3181 "Gmsh.y" +{ yyval.d = log(yyvsp[-1].d); ; break;} case 368: -#line 2807 "Gmsh.y" -{ yyval.d = asin(yyvsp[-1].d); ; +#line 3182 "Gmsh.y" +{ yyval.d = log10(yyvsp[-1].d); ; break;} case 369: -#line 2808 "Gmsh.y" -{ yyval.d = cos(yyvsp[-1].d); ; +#line 3183 "Gmsh.y" +{ yyval.d = sqrt(yyvsp[-1].d); ; break;} case 370: -#line 2809 "Gmsh.y" -{ yyval.d = acos(yyvsp[-1].d); ; +#line 3184 "Gmsh.y" +{ yyval.d = sin(yyvsp[-1].d); ; break;} case 371: -#line 2810 "Gmsh.y" -{ yyval.d = tan(yyvsp[-1].d); ; +#line 3185 "Gmsh.y" +{ yyval.d = asin(yyvsp[-1].d); ; break;} case 372: -#line 2811 "Gmsh.y" -{ yyval.d = atan(yyvsp[-1].d); ; +#line 3186 "Gmsh.y" +{ yyval.d = cos(yyvsp[-1].d); ; break;} case 373: -#line 2812 "Gmsh.y" -{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3187 "Gmsh.y" +{ yyval.d = acos(yyvsp[-1].d); ; break;} case 374: -#line 2813 "Gmsh.y" -{ yyval.d = sinh(yyvsp[-1].d); ; +#line 3188 "Gmsh.y" +{ yyval.d = tan(yyvsp[-1].d); ; break;} case 375: -#line 2814 "Gmsh.y" -{ yyval.d = cosh(yyvsp[-1].d); ; +#line 3189 "Gmsh.y" +{ yyval.d = atan(yyvsp[-1].d); ; break;} case 376: -#line 2815 "Gmsh.y" -{ yyval.d = tanh(yyvsp[-1].d); ; +#line 3190 "Gmsh.y" +{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);; break;} case 377: -#line 2816 "Gmsh.y" -{ yyval.d = fabs(yyvsp[-1].d); ; +#line 3191 "Gmsh.y" +{ yyval.d = sinh(yyvsp[-1].d); ; break;} case 378: -#line 2817 "Gmsh.y" -{ yyval.d = floor(yyvsp[-1].d); ; +#line 3192 "Gmsh.y" +{ yyval.d = cosh(yyvsp[-1].d); ; break;} case 379: -#line 2818 "Gmsh.y" -{ yyval.d = ceil(yyvsp[-1].d); ; +#line 3193 "Gmsh.y" +{ yyval.d = tanh(yyvsp[-1].d); ; break;} case 380: -#line 2819 "Gmsh.y" -{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3194 "Gmsh.y" +{ yyval.d = fabs(yyvsp[-1].d); ; break;} case 381: -#line 2820 "Gmsh.y" -{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3195 "Gmsh.y" +{ yyval.d = floor(yyvsp[-1].d); ; break;} case 382: -#line 2821 "Gmsh.y" -{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; +#line 3196 "Gmsh.y" +{ yyval.d = ceil(yyvsp[-1].d); ; break;} case 383: -#line 2822 "Gmsh.y" -{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; +#line 3197 "Gmsh.y" +{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; break;} case 384: -#line 2824 "Gmsh.y" -{ yyval.d = exp(yyvsp[-1].d); ; +#line 3198 "Gmsh.y" +{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; break;} case 385: -#line 2825 "Gmsh.y" -{ yyval.d = log(yyvsp[-1].d); ; +#line 3199 "Gmsh.y" +{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; break;} case 386: -#line 2826 "Gmsh.y" -{ yyval.d = log10(yyvsp[-1].d); ; +#line 3200 "Gmsh.y" +{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; break;} case 387: -#line 2827 "Gmsh.y" -{ yyval.d = sqrt(yyvsp[-1].d); ; +#line 3202 "Gmsh.y" +{ yyval.d = exp(yyvsp[-1].d); ; break;} case 388: -#line 2828 "Gmsh.y" -{ yyval.d = sin(yyvsp[-1].d); ; +#line 3203 "Gmsh.y" +{ yyval.d = log(yyvsp[-1].d); ; break;} case 389: -#line 2829 "Gmsh.y" -{ yyval.d = asin(yyvsp[-1].d); ; +#line 3204 "Gmsh.y" +{ yyval.d = log10(yyvsp[-1].d); ; break;} case 390: -#line 2830 "Gmsh.y" -{ yyval.d = cos(yyvsp[-1].d); ; +#line 3205 "Gmsh.y" +{ yyval.d = sqrt(yyvsp[-1].d); ; break;} case 391: -#line 2831 "Gmsh.y" -{ yyval.d = acos(yyvsp[-1].d); ; +#line 3206 "Gmsh.y" +{ yyval.d = sin(yyvsp[-1].d); ; break;} case 392: -#line 2832 "Gmsh.y" -{ yyval.d = tan(yyvsp[-1].d); ; +#line 3207 "Gmsh.y" +{ yyval.d = asin(yyvsp[-1].d); ; break;} case 393: -#line 2833 "Gmsh.y" -{ yyval.d = atan(yyvsp[-1].d); ; +#line 3208 "Gmsh.y" +{ yyval.d = cos(yyvsp[-1].d); ; break;} case 394: -#line 2834 "Gmsh.y" -{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3209 "Gmsh.y" +{ yyval.d = acos(yyvsp[-1].d); ; break;} case 395: -#line 2835 "Gmsh.y" -{ yyval.d = sinh(yyvsp[-1].d); ; +#line 3210 "Gmsh.y" +{ yyval.d = tan(yyvsp[-1].d); ; break;} case 396: -#line 2836 "Gmsh.y" -{ yyval.d = cosh(yyvsp[-1].d); ; +#line 3211 "Gmsh.y" +{ yyval.d = atan(yyvsp[-1].d); ; break;} case 397: -#line 2837 "Gmsh.y" -{ yyval.d = tanh(yyvsp[-1].d); ; +#line 3212 "Gmsh.y" +{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);; break;} case 398: -#line 2838 "Gmsh.y" -{ yyval.d = fabs(yyvsp[-1].d); ; +#line 3213 "Gmsh.y" +{ yyval.d = sinh(yyvsp[-1].d); ; break;} case 399: -#line 2839 "Gmsh.y" -{ yyval.d = floor(yyvsp[-1].d); ; +#line 3214 "Gmsh.y" +{ yyval.d = cosh(yyvsp[-1].d); ; break;} case 400: -#line 2840 "Gmsh.y" -{ yyval.d = ceil(yyvsp[-1].d); ; +#line 3215 "Gmsh.y" +{ yyval.d = tanh(yyvsp[-1].d); ; break;} case 401: -#line 2841 "Gmsh.y" -{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3216 "Gmsh.y" +{ yyval.d = fabs(yyvsp[-1].d); ; break;} case 402: -#line 2842 "Gmsh.y" -{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3217 "Gmsh.y" +{ yyval.d = floor(yyvsp[-1].d); ; break;} case 403: -#line 2843 "Gmsh.y" -{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; +#line 3218 "Gmsh.y" +{ yyval.d = ceil(yyvsp[-1].d); ; break;} case 404: -#line 2844 "Gmsh.y" -{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; +#line 3219 "Gmsh.y" +{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; break;} case 405: -#line 2853 "Gmsh.y" -{ yyval.d = yyvsp[0].d; ; +#line 3220 "Gmsh.y" +{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; break;} case 406: -#line 2854 "Gmsh.y" -{ yyval.d = 3.141592653589793; ; +#line 3221 "Gmsh.y" +{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; break;} case 407: -#line 2855 "Gmsh.y" -{ yyval.d = ParUtil::Instance()->rank(); ; +#line 3222 "Gmsh.y" +{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; break;} case 408: -#line 2856 "Gmsh.y" -{ yyval.d = ParUtil::Instance()->size(); ; +#line 3231 "Gmsh.y" +{ yyval.d = yyvsp[0].d; ; break;} case 409: -#line 2861 "Gmsh.y" +#line 3232 "Gmsh.y" +{ yyval.d = 3.141592653589793; ; + break;} +case 410: +#line 3233 "Gmsh.y" +{ yyval.d = ParUtil::Instance()->rank(); ; + break;} +case 411: +#line 3234 "Gmsh.y" +{ yyval.d = ParUtil::Instance()->size(); ; + break;} +case 412: +#line 3239 "Gmsh.y" { - TheSymbol.Name = yyvsp[0].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[0].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[0].c) ; - yyval.d = 0. ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[0].c); + yyval.d = 0.; } else - yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0) ; + yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0); ; break;} -case 410: -#line 2872 "Gmsh.y" +case 413: +#line 3251 "Gmsh.y" { - TheSymbol.Name = yyvsp[-3].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-3].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c) ; - yyval.d = 0. ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c); + yyval.d = 0.; } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-1].d))) - yyval.d = *pd ; + yyval.d = *pd; else{ - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-3].c, (int)yyvsp[-1].d) ; - yyval.d = 0. ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-3].c, (int)yyvsp[-1].d); + yyval.d = 0.; } } ; break;} -case 411: -#line 2889 "Gmsh.y" +case 414: +#line 3270 "Gmsh.y" { - TheSymbol.Name = yyvsp[-2].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-2].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ; - yyval.d = 0. ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c); + yyval.d = 0.; } else{ yyval.d = List_Nbr(pSymbol->val); } ; break;} -case 412: -#line 2901 "Gmsh.y" +case 415: +#line 3283 "Gmsh.y" { - TheSymbol.Name = yyvsp[-1].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-1].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-1].c) ; - yyval.d = 0. ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-1].c); + yyval.d = 0.; } else - yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i) ; + yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i); ; break;} -case 413: -#line 2912 "Gmsh.y" +case 416: +#line 3295 "Gmsh.y" { - TheSymbol.Name = yyvsp[-4].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-4].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-4].c) ; - yyval.d = 0. ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-4].c); + yyval.d = 0.; } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-2].d))) - yyval.d = (*pd += yyvsp[0].i) ; + yyval.d = (*pd += yyvsp[0].i); else{ - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-4].c, (int)yyvsp[-2].d) ; - yyval.d = 0. ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-4].c, (int)yyvsp[-2].d); + yyval.d = 0.; } } ; break;} -case 414: -#line 2931 "Gmsh.y" +case 417: +#line 3317 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){ yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-2].c); - yyval.d = 0. ; + yyval.d = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-2].c, yyvsp[0].c); - yyval.d = 0. ; + yyval.d = 0.; } else yyval.d = pNumOpt(0, GMSH_GET, 0); } ; break;} -case 415: -#line 2947 "Gmsh.y" +case 418: +#line 3334 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){ yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-5].c); - yyval.d = 0. ; + yyval.d = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-5].c, (int)yyvsp[-3].d, yyvsp[0].c); - yyval.d = 0. ; + yyval.d = 0.; } else yyval.d = pNumOpt((int)yyvsp[-3].d, GMSH_GET, 0); } ; break;} -case 416: -#line 2963 "Gmsh.y" +case 419: +#line 3351 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){ yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-3].c); - yyval.d = 0. ; + yyval.d = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c); - yyval.d = 0. ; + yyval.d = 0.; } else yyval.d = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[0].i); } ; break;} -case 417: -#line 2979 "Gmsh.y" +case 420: +#line 3368 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){ yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-6].c); - yyval.d = 0. ; + yyval.d = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c); - yyval.d = 0. ; + yyval.d = 0.; } else yyval.d = pNumOpt((int)yyvsp[-4].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-4].d, GMSH_GET, 0)+yyvsp[0].i); } ; break;} -case 418: -#line 2997 "Gmsh.y" -{ - memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ; - ; - break;} -case 419: -#line 3001 "Gmsh.y" -{ - for(i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i] ; - ; - break;} -case 420: -#line 3005 "Gmsh.y" -{ - for(i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i]; - ; - break;} case 421: -#line 3009 "Gmsh.y" -{ - for(i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ; +#line 3388 "Gmsh.y" +{ + memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)); ; break;} case 422: -#line 3013 "Gmsh.y" +#line 3392 "Gmsh.y" { - for(i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ; + for(int i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i]; ; break;} case 423: -#line 3020 "Gmsh.y" +#line 3396 "Gmsh.y" { - yyval.v[0] = yyvsp[-9].d; yyval.v[1] = yyvsp[-7].d; yyval.v[2] = yyvsp[-5].d; yyval.v[3] = yyvsp[-3].d; yyval.v[4] = yyvsp[-1].d; + for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i]; ; break;} case 424: -#line 3024 "Gmsh.y" +#line 3400 "Gmsh.y" { - yyval.v[0] = yyvsp[-7].d; yyval.v[1] = yyvsp[-5].d; yyval.v[2] = yyvsp[-3].d; yyval.v[3] = yyvsp[-1].d; yyval.v[4] = 1.0; + for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i]; ; break;} case 425: -#line 3028 "Gmsh.y" +#line 3404 "Gmsh.y" { - yyval.v[0] = yyvsp[-5].d; yyval.v[1] = yyvsp[-3].d; yyval.v[2] = yyvsp[-1].d; yyval.v[3] = 0.0; yyval.v[4] = 1.0; + for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i]; ; break;} case 426: -#line 3032 "Gmsh.y" -{ - yyval.v[0] = yyvsp[-5].d; yyval.v[1] = yyvsp[-3].d; yyval.v[2] = yyvsp[-1].d; yyval.v[3] = 0.0; yyval.v[4] = 1.0; +#line 3411 "Gmsh.y" +{ + yyval.v[0] = yyvsp[-9].d; yyval.v[1] = yyvsp[-7].d; yyval.v[2] = yyvsp[-5].d; yyval.v[3] = yyvsp[-3].d; yyval.v[4] = yyvsp[-1].d; ; break;} case 427: -#line 3039 "Gmsh.y" -{ +#line 3415 "Gmsh.y" +{ + yyval.v[0] = yyvsp[-7].d; yyval.v[1] = yyvsp[-5].d; yyval.v[2] = yyvsp[-3].d; yyval.v[3] = yyvsp[-1].d; yyval.v[4] = 1.0; ; break;} case 428: -#line 3042 "Gmsh.y" +#line 3419 "Gmsh.y" { + yyval.v[0] = yyvsp[-5].d; yyval.v[1] = yyvsp[-3].d; yyval.v[2] = yyvsp[-1].d; yyval.v[3] = 0.0; yyval.v[4] = 1.0; ; break;} case 429: -#line 3048 "Gmsh.y" +#line 3423 "Gmsh.y" { + yyval.v[0] = yyvsp[-5].d; yyval.v[1] = yyvsp[-3].d; yyval.v[2] = yyvsp[-1].d; yyval.v[3] = 0.0; yyval.v[4] = 1.0; ; break;} case 430: -#line 3051 "Gmsh.y" +#line 3430 "Gmsh.y" { ; break;} case 431: -#line 3057 "Gmsh.y" +#line 3433 "Gmsh.y" { ; break;} case 432: -#line 3060 "Gmsh.y" +#line 3439 "Gmsh.y" { - yyval.l = yyvsp[-1].l; ; break;} case 433: -#line 3064 "Gmsh.y" +#line 3442 "Gmsh.y" { - yyval.l = yyvsp[-1].l; ; break;} case 434: -#line 3071 "Gmsh.y" +#line 3448 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(List_T*)) ; - List_Add(yyval.l, &(yyvsp[0].l)) ; ; break;} case 435: -#line 3076 "Gmsh.y" +#line 3451 "Gmsh.y" { - List_Add(yyval.l, &(yyvsp[0].l)) ; + yyval.l = yyvsp[-1].l; ; break;} case 436: -#line 3084 "Gmsh.y" +#line 3455 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - List_Add(yyval.l, &(yyvsp[0].d)) ; + yyval.l = yyvsp[-1].l; ; break;} case 437: -#line 3089 "Gmsh.y" +#line 3462 "Gmsh.y" { - yyval.l = yyvsp[0].l ; + yyval.l = List_Create(2, 1, sizeof(List_T*)); + List_Add(yyval.l, &(yyvsp[0].l)); ; break;} case 438: -#line 3093 "Gmsh.y" +#line 3467 "Gmsh.y" { - yyval.l = yyvsp[-1].l; + List_Add(yyval.l, &(yyvsp[0].l)); ; break;} case 439: -#line 3097 "Gmsh.y" +#line 3475 "Gmsh.y" +{ + yyval.l = List_Create(2, 1, sizeof(double)); + List_Add(yyval.l, &(yyvsp[0].d)); + ; + break;} +case 440: +#line 3480 "Gmsh.y" +{ + yyval.l = yyvsp[0].l; + ; + break;} +case 441: +#line 3484 "Gmsh.y" +{ + yyval.l = yyvsp[-1].l; + ; + break;} +case 442: +#line 3488 "Gmsh.y" { yyval.l = yyvsp[-1].l; - for(i = 0; i < List_Nbr(yyval.l); i++){ + double *pd; + for(int i = 0; i < List_Nbr(yyval.l); i++){ pd = (double*)List_Pointer(yyval.l, i); (*pd) = - (*pd); } ; break;} -case 440: -#line 3108 "Gmsh.y" +case 443: +#line 3500 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - for(d = yyvsp[-2].d; (yyvsp[-2].d < yyvsp[0].d) ? (d <= yyvsp[0].d) : (d >= yyvsp[0].d); (yyvsp[-2].d < yyvsp[0].d) ? (d += 1.) : (d -= 1.)) - List_Add(yyval.l, &d) ; + yyval.l = List_Create(2, 1, sizeof(double)); + for(double d = yyvsp[-2].d; (yyvsp[-2].d < yyvsp[0].d) ? (d <= yyvsp[0].d) : (d >= yyvsp[0].d); (yyvsp[-2].d < yyvsp[0].d) ? (d += 1.) : (d -= 1.)) + List_Add(yyval.l, &d); ; break;} -case 441: -#line 3114 "Gmsh.y" +case 444: +#line 3506 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; + yyval.l = List_Create(2, 1, sizeof(double)); if(!yyvsp[0].d || (yyvsp[-4].d < yyvsp[-2].d && yyvsp[0].d < 0) || (yyvsp[-4].d > yyvsp[-2].d && yyvsp[0].d > 0)){ - yymsg(GERROR, "Wrong increment in '%g:%g:%g'", yyvsp[-4].d, yyvsp[-2].d, yyvsp[0].d) ; - List_Add(yyval.l, &(yyvsp[-4].d)) ; + yymsg(GERROR, "Wrong increment in '%g:%g:%g'", yyvsp[-4].d, yyvsp[-2].d, yyvsp[0].d); + List_Add(yyval.l, &(yyvsp[-4].d)); } else - for(d = yyvsp[-4].d; (yyvsp[0].d > 0) ? (d <= yyvsp[-2].d) : (d >= yyvsp[-2].d); d += yyvsp[0].d) - List_Add(yyval.l, &d) ; + for(double d = yyvsp[-4].d; (yyvsp[0].d > 0) ? (d <= yyvsp[-2].d) : (d >= yyvsp[-2].d); d += yyvsp[0].d) + List_Add(yyval.l, &d); ; break;} -case 442: -#line 3125 "Gmsh.y" +case 445: +#line 3517 "Gmsh.y" { // Returns the coordinates of a point and fills a list with it. // This allows to ensure e.g. that relative point positions are // always conserved Vertex *v = FindPoint((int)yyvsp[-1].d, THEM); - yyval.l = List_Create(3, 1, sizeof(double)) ; + yyval.l = List_Create(3, 1, sizeof(double)); if(!v) { - yymsg(GERROR, "Unknown point '%d'", (int) yyvsp[-1].d) ; - double d = 0.0 ; + yymsg(GERROR, "Unknown point '%d'", (int) yyvsp[-1].d); + double d = 0.0; List_Add(yyval.l, &d); List_Add(yyval.l, &d); List_Add(yyval.l, &d); } else{ - List_Add(yyval.l, &v->Pos.X) ; - List_Add(yyval.l, &v->Pos.Y) ; - List_Add(yyval.l, &v->Pos.Z) ; + List_Add(yyval.l, &v->Pos.X); + List_Add(yyval.l, &v->Pos.Y); + List_Add(yyval.l, &v->Pos.Z); } ; break;} -case 443: -#line 3145 "Gmsh.y" +case 446: +#line 3537 "Gmsh.y" { - yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)) ; + yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)); for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){ Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i); double d = s->Num; List_Add(yyval.l, &d); } + List_Delete(yyvsp[0].l); ; break;} -case 444: -#line 3154 "Gmsh.y" +case 447: +#line 3547 "Gmsh.y" { - yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)) ; + yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)); for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){ Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i); double d = s->Num; List_Add(yyval.l, &d); } + List_Delete(yyvsp[0].l); ; break;} -case 445: -#line 3163 "Gmsh.y" +case 448: +#line 3557 "Gmsh.y" { // FIXME: The syntax for this is ugly: we get double semi-colons // at the end of the line - yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)) ; + yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)); for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){ Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i); double d = s->Num; List_Add(yyval.l, &d); } + List_Delete(yyvsp[0].l); ; break;} -case 446: -#line 3174 "Gmsh.y" +case 449: +#line 3569 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = yyvsp[-2].c ; + yyval.l = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-2].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c); + double d = 0.0; List_Add(yyval.l, &d); } else{ - for(i = 0; i < List_Nbr(pSymbol->val); i++) - List_Add(yyval.l, (double*)List_Pointer_Fast(pSymbol->val, i)) ; + for(int i = 0; i < List_Nbr(pSymbol->val); i++) + List_Add(yyval.l, (double*)List_Pointer_Fast(pSymbol->val, i)); } ; break;} -case 447: -#line 3188 "Gmsh.y" +case 450: +#line 3585 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = yyvsp[-2].c ; + yyval.l = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-2].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c); + double d = 0.0; List_Add(yyval.l, &d); } else{ - for(i = 0; i < List_Nbr(pSymbol->val); i++){ - d = - *(double*)List_Pointer_Fast(pSymbol->val, i); - List_Add(yyval.l, &d) ; + for(int i = 0; i < List_Nbr(pSymbol->val); i++){ + double d = - *(double*)List_Pointer_Fast(pSymbol->val, i); + List_Add(yyval.l, &d); } } ; break;} -case 448: -#line 3204 "Gmsh.y" +case 451: +#line 3603 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = yyvsp[-5].c ; + yyval.l = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-5].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c); + double d = 0.0; List_Add(yyval.l, &d); } else{ - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ - j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i)); + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + int j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i)); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))) - List_Add(yyval.l, pd) ; + List_Add(yyval.l, pd); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j); } } List_Delete(yyvsp[-2].l); ; break;} -case 449: -#line 3224 "Gmsh.y" +case 452: +#line 3626 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = yyvsp[-5].c ; + yyval.l = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-5].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c); + double d = 0.0; List_Add(yyval.l, &d); } else{ - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ - j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i)); + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + int j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i)); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ - d = - *pd; - List_Add(yyval.l, &d) ; + double d = - *pd; + List_Add(yyval.l, &d); } else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j); } } List_Delete(yyvsp[-2].l); ; break;} -case 450: -#line 3249 "Gmsh.y" +case 453: +#line 3654 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - List_Add(yyval.l, &(yyvsp[0].d)) ; + yyval.l = List_Create(2, 1, sizeof(double)); + List_Add(yyval.l, &(yyvsp[0].d)); ; break;} -case 451: -#line 3254 "Gmsh.y" +case 454: +#line 3659 "Gmsh.y" { - yyval.l = yyvsp[0].l ; + yyval.l = yyvsp[0].l; ; break;} -case 452: -#line 3258 "Gmsh.y" +case 455: +#line 3663 "Gmsh.y" { - List_Add(yyval.l, &(yyvsp[0].d)) ; + List_Add(yyval.l, &(yyvsp[0].d)); ; break;} -case 453: -#line 3262 "Gmsh.y" +case 456: +#line 3667 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[0].l); i++){ - List_Read(yyvsp[0].l, i, &d) ; - List_Add(yyval.l, &d) ; + for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){ + double d; + List_Read(yyvsp[0].l, i, &d); + List_Add(yyval.l, &d); } List_Delete(yyvsp[0].l); ; break;} -case 454: -#line 3274 "Gmsh.y" +case 457: +#line 3680 "Gmsh.y" { yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d); ; break;} -case 455: -#line 3278 "Gmsh.y" +case 458: +#line 3684 "Gmsh.y" { yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255); ; break;} -case 456: -#line 3289 "Gmsh.y" +case 459: +#line 3696 "Gmsh.y" { + int flag; yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag); if(flag) yymsg(GERROR, "Unknown color '%s'", yyvsp[0].c); ; break;} -case 457: -#line 3294 "Gmsh.y" +case 460: +#line 3702 "Gmsh.y" { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){ yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-4].c); - yyval.u = 0 ; + yyval.u = 0; } else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[0].c, pColCat))){ yymsg(GERROR, "Unknown color option '%s.Color.%s'", yyvsp[-4].c, yyvsp[0].c); - yyval.u = 0 ; + yyval.u = 0; } else{ - yyval.u = pColOpt(0, GMSH_GET, 0) ; + yyval.u = pColOpt(0, GMSH_GET, 0); } } ; break;} -case 458: -#line 3313 "Gmsh.y" +case 461: +#line 3723 "Gmsh.y" { yyval.l = yyvsp[-1].l; ; break;} -case 459: -#line 3317 "Gmsh.y" +case 462: +#line 3727 "Gmsh.y" { - yyval.l = List_Create(256, 10, sizeof(unsigned int)) ; + yyval.l = List_Create(256, 10, sizeof(unsigned int)); GmshColorTable *ct = Get_ColorTable((int)yyvsp[-3].d); if(!ct) yymsg(GERROR, "View[%d] does not exist", (int)yyvsp[-3].d); else{ - for(i = 0; i < ct->size; i++) + for(int i = 0; i < ct->size; i++) List_Add(yyval.l, &ct->table[i]); } ; break;} -case 460: -#line 3331 "Gmsh.y" +case 463: +#line 3741 "Gmsh.y" { - yyval.l = List_Create(256, 10, sizeof(unsigned int)) ; - List_Add(yyval.l, &(yyvsp[0].u)) ; + yyval.l = List_Create(256, 10, sizeof(unsigned int)); + List_Add(yyval.l, &(yyvsp[0].u)); ; break;} -case 461: -#line 3336 "Gmsh.y" +case 464: +#line 3746 "Gmsh.y" { - List_Add(yyval.l, &(yyvsp[0].u)) ; + List_Add(yyval.l, &(yyvsp[0].u)); ; break;} -case 462: -#line 3343 "Gmsh.y" +case 465: +#line 3753 "Gmsh.y" { yyval.c = yyvsp[0].c; ; break;} -case 463: -#line 3347 "Gmsh.y" +case 466: +#line 3757 "Gmsh.y" { - yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)) ; - strcpy(yyval.c, yyvsp[-3].c) ; - strcat(yyval.c, yyvsp[-1].c) ; + yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)); + strcpy(yyval.c, yyvsp[-3].c); + strcat(yyval.c, yyvsp[-1].c); Free(yyvsp[-3].c); Free(yyvsp[-1].c); ; break;} -case 464: -#line 3355 "Gmsh.y" +case 467: +#line 3765 "Gmsh.y" { - yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)) ; + yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)); + int i; for(i = strlen(yyvsp[-1].c)-1; i >= 0; i--){ if(yyvsp[-1].c[i] == '.'){ strncpy(yyval.c, yyvsp[-1].c, i); @@ -8226,16 +8661,17 @@ case 464: Free(yyvsp[-1].c); ; break;} -case 465: -#line 3368 "Gmsh.y" +case 468: +#line 3779 "Gmsh.y" { yyval.c = yyvsp[-1].c; ; break;} -case 466: -#line 3372 "Gmsh.y" +case 469: +#line 3783 "Gmsh.y" { - i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring); + char tmpstring[1024]; + int i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring); if(i < 0){ yymsg(GERROR, "Too few arguments in Sprintf"); yyval.c = yyvsp[-3].c; @@ -8252,32 +8688,36 @@ case 466: List_Delete(yyvsp[-1].l); ; break;} -case 467: -#line 3390 "Gmsh.y" +case 470: +#line 3802 "Gmsh.y" { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c))) yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-3].c); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-1].c, pStrCat))) yymsg(GERROR, "Unknown string option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c); else{ - str = pStrOpt(0, GMSH_GET, NULL) ; + char *str = pStrOpt(0, GMSH_GET, NULL); yyval.c = (char*)Malloc((strlen(str)+1)*sizeof(char)); strcpy(yyval.c, str); } } ; break;} -case 468: -#line 3404 "Gmsh.y" +case 471: +#line 3818 "Gmsh.y" { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c))) yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-6].c); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-1].c, pStrCat))) yymsg(GERROR, "Unknown string option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c); else{ - str = pStrOpt((int)yyvsp[-4].d, GMSH_GET, NULL) ; + char *str = pStrOpt((int)yyvsp[-4].d, GMSH_GET, NULL); yyval.c = (char*)Malloc((strlen(str)+1)*sizeof(char)); strcpy(yyval.c, str); } @@ -8506,7 +8946,7 @@ yyerrhandle: } return 1; } -#line 3419 "Gmsh.y" +#line 3835 "Gmsh.y" void DeleteSymbol(void *a, void *b){ @@ -8528,14 +8968,14 @@ void InitSymbols(void){ } int PrintListOfDouble(char *format, List_T *list, char *buffer){ - int i, j, k; + int j, k; char tmp1[256], tmp2[256]; - j=0; + j = 0; while(j < (int)strlen(format) && format[j]!='%') j++; strncpy(buffer, format, j); buffer[j]='\0'; - for(i = 0; i < List_Nbr(list); i++){ + for(int i = 0; i < List_Nbr(list); i++){ k = j; j++; if(j < (int)strlen(format)){ @@ -8577,5 +9017,3 @@ void yymsg(int type, char *fmt, ...){ if(type == GERROR) yyerrorstate=1; } - - diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y index d7a9993904..b67061ef82 100644 --- a/Parser/Gmsh.y +++ b/Parser/Gmsh.y @@ -1,5 +1,5 @@ -%{ -// $Id: Gmsh.y,v 1.160 2004-02-07 01:40:23 geuzaine Exp $ +%{ +// $Id: Gmsh.y,v 1.161 2004-02-28 00:48:52 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -27,8 +27,9 @@ #include "Numeric.h" #include "Context.h" #include "Geo.h" +#include "GeoUtils.h" +#include "Nurbs.h" #include "CAD.h" -#include "DataBase.h" #include "Mesh.h" #include "Draw.h" #include "Create.h" @@ -46,32 +47,25 @@ #include "STL.h" #include "Visibility.h" +// FIXME: most tSTRING and tBIGSTRING are leaked: Free() them! + Tree_T *Symbol_T = NULL; extern Context_T CTX; extern Mesh *THEM; -static fpos_t yyposImbricatedLoopsTab[MAX_OPEN_FILES]; -static int yylinenoImbricatedLoopsTab[MAX_OPEN_FILES]; -static double LoopControlVariablesTab[MAX_OPEN_FILES][3]; -static char *LoopControlVariablesNameTab[MAX_OPEN_FILES]; -static char tmpstring[1024]; -static Symbol TheSymbol, *pSymbol; -static Surface *STL_Surf; -static Shape TheShape; -static int i, j, k, flag, ImbricatedLoop = 0; static int Last_NumberOfPoints = 0; -static double d, *pd; +static Surface *STL_Surf; static ExtrudeParams extr; -static char *str; -static StringXString *pStrCat; -static StringXNumber *pNumCat; -static StringXColor *pColCat; -static double (*pNumOpt)(int num, int action, double value); -static char* (*pStrOpt)(int num, int action, char *value); -static unsigned int (*pColOpt)(int num, int action, unsigned int value); static Post_View *View; +#define MAX_RECUR_LOOPS 100 +static int ImbricatedLoop = 0; +static fpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS]; +static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS]; +static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3]; +static char *LoopControlVariablesNameTab[MAX_RECUR_LOOPS]; + char *strsave (char *ptr); void yyerror (char *s); void yymsg (int type, char *fmt, ...); @@ -166,9 +160,9 @@ int PrintListOfDouble (char *format, List_T *list, char *buffer); All : StepFormatItems - | STLFormatItem - | GeomFormatList - | error tEND { yyerrok ; return 1; } + | StlFormatItems + | GeoFormatItems + | error tEND { yyerrok; return 1; } ; // S T E R E O L I T H O G R A P H Y ( S T L ) @@ -178,11 +172,16 @@ SignedDouble : | '-' tDOUBLE { $$ = -$2; } ; -STLFormatItem : +StlFormatItems : + // nothing + | StlFormatItems StlFormatItem +; + +StlFormatItem : tSolid { - yymsg(INFO, "STL file format"); - STL_Surf = Create_Surface(1, MSH_SURF_STL); + yymsg(INFO, "Reading STL solid"); + STL_Surf = Create_Surface(NEWSURFACE(), MSH_SURF_STL); STL_Surf->STL = new STL_Data; return 1; } @@ -197,21 +196,28 @@ STLFormatItem : { STL_Surf->STL->Add_Facet($9, $10, $11, $13, $14, $15, - $17, $18, $19); + $17, $18, $19, CTX.geom.stl_create_elementary); return 1; } | tEndSolid { - yymsg(INFO, "STL file format read"); - Tree_Add(THEM->Surfaces, &STL_Surf); + if(CTX.geom.stl_create_elementary){ + STL_Surf->STL->ReplaceDuplicate(); + if(CTX.geom.stl_create_physical) + STL_Surf->STL->CreatePhysicalSurface(); + } + else{ + Tree_Add(THEM->Surfaces, &STL_Surf); + } + yymsg(INFO, "Read STL solid"); return 1; } ; -// S T E P I S O - 1 0 3 0 3 - 2 1 F I L E F O R M A T +// S T E P I S O - 1 0 3 0 3 - 2 1 F I L E F O R M A T StepFormatItems : - /* nothing */ + // nothing | StepFormatItems StepFormatItem ; @@ -224,13 +230,13 @@ StepFormatItem : StepSpecial : tISO tEND { - yymsg(INFO, "Step Iso-10303-21 file format"); + yymsg(INFO, "Reading Step Iso-10303-21 data"); Create_Step_Solid_BRep(); } | tENDISO tEND { - yymsg(INFO, "Step Iso-10303-21 file format read"); Resolve_BREP (); + yymsg(INFO, "Read Step Iso-10303-21 data"); } | tDATA tEND | tENDSEC tEND @@ -382,28 +388,23 @@ StepDataItem : // G E O F I L E F O R M A T -GeomFormatList : - /* none*/ - { - } - | GeomFormatList GeomFormat - { - yymsg(INFO, "Gmsh file format read"); - } +GeoFormatItems : + // nothing + | GeoFormatItems GeoFormatItem ; -GeomFormat : +GeoFormatItem : View { return 1; } | Printf { return 1; } | Affectation { return 1; } | Shape { return 1; } - | Transform { return 1; } - | Duplicata { return 1; } + | Transform { List_Delete($1); return 1; } + | Duplicata { List_Delete($1); return 1; } | Delete { return 1; } | Colorify { return 1; } | Visibility { return 1; } - | Extrude { return 1; } - | Transfini { return 1; } + | Extrude { List_Delete($1); return 1; } + | Transfinite { return 1; } | Coherence { return 1; } | Loop { return 1; } | Command { return 1; } @@ -416,7 +417,8 @@ Printf : } | tPrintf '(' tBIGSTR ',' RecursiveListOfDouble ')' tEND { - i = PrintListOfDouble($3, $5, tmpstring); + char tmpstring[1024]; + int i = PrintListOfDouble($3, $5, tmpstring); if(i < 0) yymsg(GERROR, "Too few arguments in Printf"); else if(i > 0) @@ -441,7 +443,7 @@ View : ; Views : - /* none */ + // nothing { View = BeginView(1); } @@ -475,10 +477,10 @@ Views : ScalarPointValues : FExpr - { List_Add(View->SP, &$1) ; } + { List_Add(View->SP, &$1); } | ScalarPointValues ',' FExpr - { List_Add(View->SP, &$3) ; } - ; + { List_Add(View->SP, &$3); } +; ScalarPoint : tScalarPoint '(' FExpr ',' FExpr ',' FExpr ')' @@ -488,16 +490,16 @@ ScalarPoint : } '{' ScalarPointValues '}' tEND { - View->NbSP++ ; + View->NbSP++; } ; VectorPointValues : FExpr - { List_Add(View->VP, &$1) ; } + { List_Add(View->VP, &$1); } | VectorPointValues ',' FExpr - { List_Add(View->VP, &$3) ; } - ; + { List_Add(View->VP, &$3); } +; VectorPoint : tVectorPoint '(' FExpr ',' FExpr ',' FExpr ')' @@ -507,16 +509,16 @@ VectorPoint : } '{' VectorPointValues '}' tEND { - View->NbVP++ ; + View->NbVP++; } ; TensorPointValues : FExpr - { List_Add(View->TP, &$1) ; } + { List_Add(View->TP, &$1); } | TensorPointValues ',' FExpr - { List_Add(View->TP, &$3) ; } - ; + { List_Add(View->TP, &$3); } +; TensorPoint : tTensorPoint '(' FExpr ',' FExpr ',' FExpr ')' @@ -526,16 +528,16 @@ TensorPoint : } '{' TensorPointValues '}' tEND { - View->NbTP++ ; + View->NbTP++; } ; ScalarLineValues : FExpr - { List_Add(View->SL, &$1) ; } + { List_Add(View->SL, &$1); } | ScalarLineValues ',' FExpr - { List_Add(View->SL, &$3) ; } - ; + { List_Add(View->SL, &$3); } +; ScalarLine : tScalarLine '(' FExpr ',' FExpr ',' FExpr ',' @@ -547,16 +549,16 @@ ScalarLine : } '{' ScalarLineValues '}' tEND { - View->NbSL++ ; + View->NbSL++; } ; VectorLineValues : FExpr - { List_Add(View->VL, &$1) ; } + { List_Add(View->VL, &$1); } | VectorLineValues ',' FExpr - { List_Add(View->VL, &$3) ; } - ; + { List_Add(View->VL, &$3); } +; VectorLine : tVectorLine '(' FExpr ',' FExpr ',' FExpr ',' @@ -568,16 +570,16 @@ VectorLine : } '{' VectorLineValues '}' tEND { - View->NbVL++ ; + View->NbVL++; } ; TensorLineValues : FExpr - { List_Add(View->TL, &$1) ; } + { List_Add(View->TL, &$1); } | TensorLineValues ',' FExpr - { List_Add(View->TL, &$3) ; } - ; + { List_Add(View->TL, &$3); } +; TensorLine : tTensorLine '(' FExpr ',' FExpr ',' FExpr ',' @@ -589,16 +591,16 @@ TensorLine : } '{' TensorLineValues '}' tEND { - View->NbTL++ ; + View->NbTL++; } ; ScalarTriangleValues : FExpr - { List_Add(View->ST, &$1) ; } + { List_Add(View->ST, &$1); } | ScalarTriangleValues ',' FExpr - { List_Add(View->ST, &$3) ; } - ; + { List_Add(View->ST, &$3); } +; ScalarTriangle : tScalarTriangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -614,16 +616,16 @@ ScalarTriangle : } '{' ScalarTriangleValues '}' tEND { - View->NbST++ ; + View->NbST++; } ; VectorTriangleValues : FExpr - { List_Add(View->VT, &$1) ; } + { List_Add(View->VT, &$1); } | VectorTriangleValues ',' FExpr - { List_Add(View->VT, &$3) ; } - ; + { List_Add(View->VT, &$3); } +; VectorTriangle : tVectorTriangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -639,16 +641,16 @@ VectorTriangle : } '{' VectorTriangleValues '}' tEND { - View->NbVT++ ; + View->NbVT++; } ; TensorTriangleValues : FExpr - { List_Add(View->TT, &$1) ; } + { List_Add(View->TT, &$1); } | TensorTriangleValues ',' FExpr - { List_Add(View->TT, &$3) ; } - ; + { List_Add(View->TT, &$3); } +; TensorTriangle : tTensorTriangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -664,16 +666,16 @@ TensorTriangle : } '{' TensorTriangleValues '}' tEND { - View->NbTT++ ; + View->NbTT++; } ; ScalarQuadrangleValues : FExpr - { List_Add(View->SQ, &$1) ; } + { List_Add(View->SQ, &$1); } | ScalarQuadrangleValues ',' FExpr - { List_Add(View->SQ, &$3) ; } - ; + { List_Add(View->SQ, &$3); } +; ScalarQuadrangle : tScalarQuadrangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -690,16 +692,16 @@ ScalarQuadrangle : } '{' ScalarQuadrangleValues '}' tEND { - View->NbSQ++ ; + View->NbSQ++; } ; VectorQuadrangleValues : FExpr - { List_Add(View->VQ, &$1) ; } + { List_Add(View->VQ, &$1); } | VectorQuadrangleValues ',' FExpr - { List_Add(View->VQ, &$3) ; } - ; + { List_Add(View->VQ, &$3); } +; VectorQuadrangle : tVectorQuadrangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -716,16 +718,16 @@ VectorQuadrangle : } '{' VectorQuadrangleValues '}' tEND { - View->NbVQ++ ; + View->NbVQ++; } ; TensorQuadrangleValues : FExpr - { List_Add(View->TQ, &$1) ; } + { List_Add(View->TQ, &$1); } | TensorQuadrangleValues ',' FExpr - { List_Add(View->TQ, &$3) ; } - ; + { List_Add(View->TQ, &$3); } +; TensorQuadrangle : tTensorQuadrangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -742,16 +744,16 @@ TensorQuadrangle : } '{' TensorQuadrangleValues '}' tEND { - View->NbTQ++ ; + View->NbTQ++; } ; ScalarTetrahedronValues : FExpr - { List_Add(View->SS, &$1) ; } + { List_Add(View->SS, &$1); } | ScalarTetrahedronValues ',' FExpr - { List_Add(View->SS, &$3) ; } - ; + { List_Add(View->SS, &$3); } +; ScalarTetrahedron : tScalarTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -768,16 +770,16 @@ ScalarTetrahedron : } '{' ScalarTetrahedronValues '}' tEND { - View->NbSS++ ; + View->NbSS++; } ; VectorTetrahedronValues : FExpr - { List_Add(View->VS, &$1) ; } + { List_Add(View->VS, &$1); } | VectorTetrahedronValues ',' FExpr - { List_Add(View->VS, &$3) ; } - ; + { List_Add(View->VS, &$3); } +; VectorTetrahedron : tVectorTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -794,16 +796,16 @@ VectorTetrahedron : } '{' VectorTetrahedronValues '}' tEND { - View->NbVS++ ; + View->NbVS++; } ; TensorTetrahedronValues : FExpr - { List_Add(View->TS, &$1) ; } + { List_Add(View->TS, &$1); } | TensorTetrahedronValues ',' FExpr - { List_Add(View->TS, &$3) ; } - ; + { List_Add(View->TS, &$3); } +; TensorTetrahedron : tTensorTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -820,16 +822,16 @@ TensorTetrahedron : } '{' TensorTetrahedronValues '}' tEND { - View->NbTS++ ; + View->NbTS++; } ; ScalarHexahedronValues : FExpr - { List_Add(View->SH, &$1) ; } + { List_Add(View->SH, &$1); } | ScalarHexahedronValues ',' FExpr - { List_Add(View->SH, &$3) ; } - ; + { List_Add(View->SH, &$3); } +; ScalarHexahedron : tScalarHexahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -856,16 +858,16 @@ ScalarHexahedron : } '{' ScalarHexahedronValues '}' tEND { - View->NbSH++ ; + View->NbSH++; } ; VectorHexahedronValues : FExpr - { List_Add(View->VH, &$1) ; } + { List_Add(View->VH, &$1); } | VectorHexahedronValues ',' FExpr - { List_Add(View->VH, &$3) ; } - ; + { List_Add(View->VH, &$3); } +; VectorHexahedron : tVectorHexahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -892,16 +894,16 @@ VectorHexahedron : } '{' VectorHexahedronValues '}' tEND { - View->NbVH++ ; + View->NbVH++; } ; TensorHexahedronValues : FExpr - { List_Add(View->TH, &$1) ; } + { List_Add(View->TH, &$1); } | TensorHexahedronValues ',' FExpr - { List_Add(View->TH, &$3) ; } - ; + { List_Add(View->TH, &$3); } +; TensorHexahedron : tTensorHexahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -928,16 +930,16 @@ TensorHexahedron : } '{' TensorHexahedronValues '}' tEND { - View->NbTH++ ; + View->NbTH++; } ; ScalarPrismValues : FExpr - { List_Add(View->SI, &$1) ; } + { List_Add(View->SI, &$1); } | ScalarPrismValues ',' FExpr - { List_Add(View->SI, &$3) ; } - ; + { List_Add(View->SI, &$3); } +; ScalarPrism : tScalarPrism '(' FExpr ',' FExpr ',' FExpr ',' @@ -959,16 +961,16 @@ ScalarPrism : } '{' ScalarPrismValues '}' tEND { - View->NbSI++ ; + View->NbSI++; } ; VectorPrismValues : FExpr - { List_Add(View->VI, &$1) ; } + { List_Add(View->VI, &$1); } | VectorPrismValues ',' FExpr - { List_Add(View->VI, &$3) ; } - ; + { List_Add(View->VI, &$3); } +; VectorPrism : tVectorPrism '(' FExpr ',' FExpr ',' FExpr ',' @@ -990,16 +992,16 @@ VectorPrism : } '{' VectorPrismValues '}' tEND { - View->NbVI++ ; + View->NbVI++; } ; TensorPrismValues : FExpr - { List_Add(View->TI, &$1) ; } + { List_Add(View->TI, &$1); } | TensorPrismValues ',' FExpr - { List_Add(View->TI, &$3) ; } - ; + { List_Add(View->TI, &$3); } +; TensorPrism : tTensorPrism '(' FExpr ',' FExpr ',' FExpr ',' @@ -1021,16 +1023,16 @@ TensorPrism : } '{' TensorPrismValues '}' tEND { - View->NbTI++ ; + View->NbTI++; } ; ScalarPyramidValues : FExpr - { List_Add(View->SY, &$1) ; } + { List_Add(View->SY, &$1); } | ScalarPyramidValues ',' FExpr - { List_Add(View->SY, &$3) ; } - ; + { List_Add(View->SY, &$3); } +; ScalarPyramid : tScalarPyramid '(' FExpr ',' FExpr ',' FExpr ',' @@ -1051,16 +1053,16 @@ ScalarPyramid : } '{' ScalarPyramidValues '}' tEND { - View->NbSY++ ; + View->NbSY++; } ; VectorPyramidValues : FExpr - { List_Add(View->VY, &$1) ; } + { List_Add(View->VY, &$1); } | VectorPyramidValues ',' FExpr - { List_Add(View->VY, &$3) ; } - ; + { List_Add(View->VY, &$3); } +; VectorPyramid : tVectorPyramid '(' FExpr ',' FExpr ',' FExpr ',' @@ -1081,16 +1083,16 @@ VectorPyramid : } '{' VectorPyramidValues '}' tEND { - View->NbVY++ ; + View->NbVY++; } ; TensorPyramidValues : FExpr - { List_Add(View->TY, &$1) ; } + { List_Add(View->TY, &$1); } | TensorPyramidValues ',' FExpr - { List_Add(View->TY, &$3) ; } - ; + { List_Add(View->TY, &$3); } +; TensorPyramid : tTensorPyramid '(' FExpr ',' FExpr ',' FExpr ',' @@ -1111,61 +1113,61 @@ TensorPyramid : } '{' TensorPyramidValues '}' tEND { - View->NbTY++ ; + View->NbTY++; } ; Text2DValues : StringExpr { - for(i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T2C, &$1[i]) ; + for(int i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T2C, &$1[i]); Free($1); } | Text2DValues ',' StringExpr { - for(i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T2C, &$3[i]) ; + for(int i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T2C, &$3[i]); Free($3); } - ; +; Text2D : tText2D '(' FExpr ',' FExpr ',' FExpr ')' { List_Add(View->T2D, &$3); List_Add(View->T2D, &$5); List_Add(View->T2D, &$7); - d = List_Nbr(View->T2C); + double d = List_Nbr(View->T2C); List_Add(View->T2D, &d); } '{' Text2DValues '}' tEND { - View->NbT2++ ; + View->NbT2++; } ; Text3DValues : StringExpr { - for(i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T3C, &$1[i]) ; + for(int i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T3C, &$1[i]); Free($1); } | Text3DValues ',' StringExpr { - for(i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T3C, &$3[i]) ; + for(int i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T3C, &$3[i]); Free($3); } - ; +; Text3D : tText3D '(' FExpr ',' FExpr ',' FExpr ',' FExpr ')' { List_Add(View->T3D, &$3); List_Add(View->T3D, &$5); List_Add(View->T3D, &$7); List_Add(View->T3D, &$9); - d = List_Nbr(View->T3C); + double d = List_Nbr(View->T3C); List_Add(View->T3D, &d); } '{' Text3DValues '}' tEND { - View->NbT3++ ; + View->NbT3++; } ; @@ -1173,16 +1175,16 @@ Text3D : // A F F E C T A T I O N NumericAffectation : - tAFFECT { $$ = 0 ; } - | tAFFECTPLUS { $$ = 1 ; } - | tAFFECTMINUS { $$ = 2 ; } - | tAFFECTTIMES { $$ = 3 ; } - | tAFFECTDIVIDE { $$ = 4 ; } + tAFFECT { $$ = 0; } + | tAFFECTPLUS { $$ = 1; } + | tAFFECTMINUS { $$ = 2; } + | tAFFECTTIMES { $$ = 3; } + | tAFFECTDIVIDE { $$ = 4; } ; NumericIncrement : - tPLUSPLUS { $$ = 1 ; } - | tMINUSMINUS { $$ = -1 ; } + tPLUSPLUS { $$ = 1; } + | tMINUSMINUS { $$ = -1; } ; Affectation : @@ -1191,7 +1193,9 @@ Affectation : tSTRING NumericAffectation FExpr tEND { + Symbol TheSymbol; TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); if(!$2){ @@ -1199,26 +1203,27 @@ Affectation : Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", $1) ; + yymsg(GERROR, "Unknown variable '%s'", $1); } else{ - pd = (double*)List_Pointer_Fast(pSymbol->val, 0) ; + double *pd = (double*)List_Pointer_Fast(pSymbol->val, 0); switch($2){ - case 0 : *pd = $3; break ; - case 1 : *pd += $3 ; break ; - case 2 : *pd -= $3 ; break ; - case 3 : *pd *= $3 ; break ; + case 0 : *pd = $3; break; + case 1 : *pd += $3; break; + case 2 : *pd -= $3; break; + case 3 : *pd *= $3; break; case 4 : - if($3) *pd /= $3 ; + if($3) *pd /= $3; else yymsg(GERROR, "Division by zero in '%s /= %g'", $1, $3); break; } } } - | tSTRING '[' FExpr ']' NumericAffectation FExpr tEND { + Symbol TheSymbol; TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); if(!$5){ @@ -1226,17 +1231,18 @@ Affectation : Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", $1) ; + yymsg(GERROR, "Unknown variable '%s'", $1); } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))){ switch($5){ - case 0 : *pd = $6; break ; - case 1 : *pd += $6 ; break ; - case 2 : *pd -= $6 ; break ; - case 3 : *pd *= $6 ; break ; + case 0 : *pd = $6; break; + case 1 : *pd += $6; break; + case 2 : *pd -= $6; break; + case 3 : *pd *= $6; break; case 4 : - if($6) *pd /= $6 ; + if($6) *pd /= $6; else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", $1, (int)$3, $6); break; } @@ -1245,41 +1251,43 @@ Affectation : if(!$5) List_Put(pSymbol->val, (int)$3, &$6); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3); } } } - | tSTRING '[' '{' RecursiveListOfDouble '}' ']' NumericAffectation ListOfDouble tEND { if(List_Nbr($4) != List_Nbr($8)) yymsg(GERROR, "Incompatible array dimensions in affectation"); else{ + Symbol TheSymbol; TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); if(!$7){ - for(i = 0; i < List_Nbr($4); i++){ + for(int i = 0; i < List_Nbr($4); i++){ List_Put(TheSymbol.val, (int)(*(double*)List_Pointer($4, i)), (double*)List_Pointer($8, i)); } Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", $1) ; + yymsg(GERROR, "Unknown variable '%s'", $1); } else{ - for(i = 0; i < List_Nbr($4); i++){ - j = (int)(*(double*)List_Pointer($4, i)) ; - d = *(double*)List_Pointer($8, i) ; + for(int i = 0; i < List_Nbr($4); i++){ + int j = (int)(*(double*)List_Pointer($4, i)); + double d = *(double*)List_Pointer($8, i); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ switch($7){ - case 0 : *pd = d; break ; - case 1 : *pd += d ; break ; - case 2 : *pd -= d ; break ; - case 3 : *pd *= d ; break ; + case 0 : *pd = d; break; + case 1 : *pd += d; break; + case 2 : *pd -= d; break; + case 3 : *pd *= d; break; case 4 : - if($8) *pd /= d ; + if($8) *pd /= d; else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", $1, j, d); break; } @@ -1288,7 +1296,7 @@ Affectation : if(!$7) List_Put(pSymbol->val, j, &d); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j); } } } @@ -1296,10 +1304,11 @@ Affectation : List_Delete($4); List_Delete($8); } - | tSTRING '[' ']' tAFFECT ListOfDouble tEND { + Symbol TheSymbol; TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); List_Copy($5, TheSymbol.val); @@ -1311,26 +1320,29 @@ Affectation : } List_Delete($5); } - | tSTRING NumericIncrement tEND { + Symbol TheSymbol; TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) - yymsg(GERROR, "Unknown variable '%s'", $1) ; + yymsg(GERROR, "Unknown variable '%s'", $1); else *(double*)List_Pointer_Fast(pSymbol->val, 0) += $2; } - | tSTRING '[' FExpr ']' NumericIncrement tEND { - TheSymbol.Name = $1 ; + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) - yymsg(GERROR, "Unknown variable '%s'", $1) ; + yymsg(GERROR, "Unknown variable '%s'", $1); else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))) - *pd += $5 ; + *pd += $5; else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3); } } @@ -1338,25 +1350,28 @@ Affectation : | tSTRING '.' tSTRING tAFFECT StringExpr tEND { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory($1))) yymsg(GERROR, "Unknown string option class '%s'", $1); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($3, pStrCat))) yymsg(GERROR, "Unknown string option '%s.%s'", $1, $3); else - pStrOpt(0, GMSH_SET|GMSH_GUI, $5) ; + pStrOpt(0, GMSH_SET|GMSH_GUI, $5); } } - | tSTRING '[' FExpr ']' '.' tSTRING tAFFECT StringExpr tEND { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory($1))) yymsg(GERROR, "Unknown string option class '%s'", $1); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($6, pStrCat))) yymsg(GERROR, "Unknown string option '%s[%d].%s'", $1, (int)$3, $6); else - pStrOpt((int)$3, GMSH_SET|GMSH_GUI, $8) ; + pStrOpt((int)$3, GMSH_SET|GMSH_GUI, $8); } } @@ -1364,72 +1379,79 @@ Affectation : | tSTRING '.' tSTRING NumericAffectation FExpr tEND { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))) yymsg(GERROR, "Unknown numeric option class '%s'", $1); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3); else{ + double d = 0; switch($4){ - case 0 : d = $5 ; break ; - case 1 : d = pNumOpt(0, GMSH_GET, 0) + $5 ; break ; - case 2 : d = pNumOpt(0, GMSH_GET, 0) - $5 ; break ; - case 3 : d = pNumOpt(0, GMSH_GET, 0) * $5 ; break ; + case 0 : d = $5; break; + case 1 : d = pNumOpt(0, GMSH_GET, 0) + $5; break; + case 2 : d = pNumOpt(0, GMSH_GET, 0) - $5; break; + case 3 : d = pNumOpt(0, GMSH_GET, 0) * $5; break; case 4 : - if($5) d = pNumOpt(0, GMSH_GET, 0) / $5 ; + if($5) d = pNumOpt(0, GMSH_GET, 0) / $5; else yymsg(GERROR, "Division by zero in '%s.%s /= %g'", $1, $3, $5); break; } - pNumOpt(0, GMSH_SET|GMSH_GUI, d) ; + pNumOpt(0, GMSH_SET|GMSH_GUI, d); } } } - | tSTRING '[' FExpr ']' '.' tSTRING NumericAffectation FExpr tEND { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))) yymsg(GERROR, "Unknown numeric option class '%s'", $1); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); else{ + double d = 0; switch($7){ - case 0 : d = $8; break ; - case 1 : d = pNumOpt((int)$3, GMSH_GET, 0) + $8 ; break ; - case 2 : d = pNumOpt((int)$3, GMSH_GET, 0) - $8 ; break ; - case 3 : d = pNumOpt((int)$3, GMSH_GET, 0) * $8 ; break ; + case 0 : d = $8; break; + case 1 : d = pNumOpt((int)$3, GMSH_GET, 0) + $8; break; + case 2 : d = pNumOpt((int)$3, GMSH_GET, 0) - $8; break; + case 3 : d = pNumOpt((int)$3, GMSH_GET, 0) * $8; break; case 4 : - if($8) d = pNumOpt((int)$3, GMSH_GET, 0) / $8 ; + if($8) d = pNumOpt((int)$3, GMSH_GET, 0) / $8; else yymsg(GERROR, "Division by zero in '%s[%d].%s /= %g'", $1, (int)$3, $6, $8); break; } - pNumOpt((int)$3, GMSH_SET|GMSH_GUI, d) ; + pNumOpt((int)$3, GMSH_SET|GMSH_GUI, d); } } } - | tSTRING '.' tSTRING NumericIncrement tEND { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))) yymsg(GERROR, "Unknown numeric option class '%s'", $1); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3); else - pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4) ; + pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4); } } - | tSTRING '[' FExpr ']' '.' tSTRING NumericIncrement tEND { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))) yymsg(GERROR, "Unknown numeric option class '%s'", $1); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); else - pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7) ; + pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7); } } @@ -1437,25 +1459,28 @@ Affectation : | tSTRING '.' tColor '.' tSTRING tAFFECT ColorExpr tEND { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory($1))) yymsg(GERROR, "Unknown color option class '%s'", $1); else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption($5, pColCat))) yymsg(GERROR, "Unknown color option '%s.Color.%s'", $1, $5); else - pColOpt(0, GMSH_SET|GMSH_GUI, $7) ; + pColOpt(0, GMSH_SET|GMSH_GUI, $7); } } - | tSTRING '[' FExpr ']' '.' tColor '.' tSTRING tAFFECT ColorExpr tEND { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory($1))) yymsg(GERROR, "Unknown color option class '%s'", $1); else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption($8, pColCat))) yymsg(GERROR, "Unknown color option '%s[%d].Color.%s'", $1, (int)$3, $8); else - pColOpt((int)$3, GMSH_SET|GMSH_GUI, $10) ; + pColOpt((int)$3, GMSH_SET|GMSH_GUI, $10); } } @@ -1472,7 +1497,7 @@ Affectation : yymsg(GERROR, "Too many (%d>%d) colors in View[%d].ColorTable", ct->size, COLORTABLE_NBMAX_COLOR, 0); else - for(i = 0; i < ct->size; i++) List_Read($5, i, &ct->table[i]); + for(int i = 0; i < ct->size; i++) List_Read($5, i, &ct->table[i]); if(ct->size == 1){ ct->size = 2; ct->table[1] = ct->table[0]; @@ -1480,7 +1505,6 @@ Affectation : } List_Delete($5); } - | tSTRING '[' FExpr ']' '.' tColorTable tAFFECT ListOfColor tEND { GmshColorTable *ct = Get_ColorTable((int)$3); @@ -1492,7 +1516,7 @@ Affectation : yymsg(GERROR, "Too many (%d>%d) colors in View[%d].ColorTable", ct->size, COLORTABLE_NBMAX_COLOR, (int)$3); else - for(i = 0; i < ct->size; i++) List_Read($8, i, &ct->table[i]); + for(int i = 0; i < ct->size; i++) List_Read($8, i, &ct->table[i]); if(ct->size == 1){ ct->size = 2; ct->table[1] = ct->table[0]; @@ -1512,7 +1536,6 @@ Affectation : yymsg(WARNING, "Unknown option '%s' or plugin '%s'", $6, $3); } } - | tPlugin '(' tSTRING ')' '.' tSTRING tAFFECT StringExpr tEND { try { @@ -1533,39 +1556,59 @@ Shape : tPoint '(' FExpr ')' tAFFECT VExpr tEND { - Cdbpts101((int)$3, $6[0], $6[1], $6[2], $6[3], $6[4]); + int num = (int)$3; + if(FindPoint(num, THEM)){ + yymsg(GERROR, "Point %d already exists", num); + } + else{ + Vertex *v = Create_Vertex(num, CTX.geom.scaling_factor * $6[0], + CTX.geom.scaling_factor * $6[1], + CTX.geom.scaling_factor * $6[2], + CTX.geom.scaling_factor * $6[3], 1.0); + Tree_Add(THEM->Points, &v); + } $$.Type = MSH_POINT; - $$.Num = (int)$3; + $$.Num = num; } - | tPhysical tPoint '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$4, MSH_PHYSICAL_POINT, 0, 0, 0, 0, 0, NULL, $7, NULL); + int num = (int)$4; + if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT, THEM)){ + yymsg(GERROR, "Physical point %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete($7); $$.Type = MSH_PHYSICAL_POINT; - $$.Num = (int)$4; + $$.Num = num; } | tAttractor tPoint ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}' tEND { - Vertex *v; - Attractor *a; - double p; - int ip; for(int i = 0; i < List_Nbr($3); i++){ + double p; List_Read($3, i, &p); - ip = (int)p; - v = FindPoint(ip, THEM); + Vertex *v = FindPoint((int)p, THEM); if(!v) - yymsg(WARNING, "Unknown Point %d", ip); + yymsg(WARNING, "Unknown Point %d", (int)p); else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - $6, $8, $10, v, NULL, NULL); + Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, + $6, $8, $10, v, NULL, NULL); List_Add(THEM->Metric->Attractors, &a); } } + List_Delete($3); + // dummy values + $$.Type = 0; + $$.Num = 0; } | tCharacteristic tLength ListOfDouble tAFFECT FExpr tEND { - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); Vertex *v = FindPoint((int)d, THEM); if(!v) @@ -1573,234 +1616,502 @@ Shape : else v->lc = $5; } + List_Delete($3); + // dummy values + $$.Type = 0; + $$.Num = 0; } // Lines | tLine '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbseg101((int)$3, MSH_SEGM_LINE, 1, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete($6); $$.Type = MSH_SEGM_LINE; - $$.Num = (int)$3; + $$.Num = num; } | tSpline '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbseg101((int)$3, MSH_SEGM_SPLN, 3, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete($6); $$.Type = MSH_SEGM_SPLN; - $$.Num = (int)$3; + $$.Num = num; } - | tAttractor tLine ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}' tEND + | tCircle '(' FExpr ')' tAFFECT ListOfDouble tEND { - Curve *c; - Attractor *a; - double p; - int ip; - for(int i = 0; i < List_Nbr($3); i++){ - List_Read($3, i, &p); - ip = (int)p; - c = FindCurve(ip, THEM); - if(!c) - yymsg(WARNING, "Unknown Curve %d", ip); - else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - $6, $8, $10, NULL, c, NULL); - List_Add(THEM->Metric->Attractors, &a); - } + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); } + List_Delete($6); + $$.Type = MSH_SEGM_CIRC; + $$.Num = num; } - | tCircle '(' FExpr ')' tAFFECT ListOfDouble tEND + | tCircle '(' FExpr ')' tAFFECT ListOfDouble tPlane VExpr tEND { - Cdbseg101((int)$3, MSH_SEGM_CIRC, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - $$.Type = MSH_SEGM_CIRC ; - $$.Num = (int)$3; + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL, + -1, -1, 0., 1.); + c->Circle.n[0] = $8[0]; + c->Circle.n[1] = $8[1]; + c->Circle.n[2] = $8[2]; + End_Curve(c); + Tree_Add(THEM->Curves, &c); + Curve *rc = CreateReversedCurve(THEM, c); + rc->Circle.n[0] = $8[0]; + rc->Circle.n[1] = $8[1]; + rc->Circle.n[2] = $8[2]; + End_Curve(rc); + List_Delete(temp); + } + List_Delete($6); + $$.Type = MSH_SEGM_CIRC; + $$.Num = num; } | tEllipse '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbseg101((int)$3, MSH_SEGM_ELLI, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - $$.Type = MSH_SEGM_ELLI ; - $$.Num = (int)$3; - } - | tCircle '(' FExpr ')' tAFFECT ListOfDouble tPlane VExpr tEND - { - List_T *temp; - int i, j; - double d; - temp = List_Create(List_Nbr($6), 1, sizeof(int)); - for(i = 0; i < List_Nbr($6); i++){ - List_Read($6, i, &d); - j = (int)d; - List_Add(temp, &j); + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); } - AddCircleInDataBase ((int) $3, MSH_SEGM_CIRC, temp, $8); - List_Delete(temp); - $$.Type = MSH_SEGM_CIRC ; - $$.Num = (int)$3; + List_Delete($6); + $$.Type = MSH_SEGM_ELLI; + $$.Num = num; } | tParametric '(' FExpr ')' tAFFECT '{' FExpr ',' FExpr ',' tBIGSTR ',' tBIGSTR ',' tBIGSTR '}' tEND { - Cdbseg101((int)$3, MSH_SEGM_PARAMETRIC, 2, NULL, NULL, -1, -1, $7, $9, $11, $13, $15); - $$.Type = MSH_SEGM_PARAMETRIC ; - $$.Num = (int)$3; - } - | tPhysical tLine '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbz101((int)$4, MSH_PHYSICAL_LINE, 0, 0, 0, 0, 0, NULL, $7, NULL); - $$.Type = MSH_PHYSICAL_LINE; - $$.Num = (int)$4; - } - | tLine tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND - { - $$.Type = MSH_SEGM_LOOP; - Cdbz101((int)$4, $$.Type, 0, 0, 0, 0, 0, NULL, $7, NULL); - $$.Num = (int)$4; + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + Curve *c = Create_Curve(num, MSH_SEGM_PARAMETRIC, 2, NULL, NULL, + -1, -1, $7, $9); + strcpy(c->functu, $11); + strcpy(c->functv, $13); + strcpy(c->functw, $15); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + } + $$.Type = MSH_SEGM_PARAMETRIC; + $$.Num = num; } | tBSpline '(' FExpr ')' tAFFECT ListOfDouble tEND { - if(List_Nbr($6) > 3){ - Cdbseg101((int)$3, MSH_SEGM_BSPLN, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - $$.Type = MSH_SEGM_BSPLN; - $$.Num = (int)$3; - } - else - yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", (int)$3, + int num = (int)$3; + if(List_Nbr($6) < 4){ + yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", num, List_Nbr($6)); + } + else{ + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + } + List_Delete($6); + $$.Type = MSH_SEGM_BSPLN; + $$.Num = num; } | tBezier '(' FExpr ')' tAFFECT ListOfDouble tEND { - if(List_Nbr($6) > 3){ - Cdbseg101((int)$3, MSH_SEGM_BEZIER, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - $$.Type = MSH_SEGM_BSPLN; - $$.Num = (int)$3; - } - else - yymsg(GERROR, "Too few control points for Bezier %d (%d < 4)", (int)$3, + int num = (int)$3; + if(List_Nbr($6) < 4){ + yymsg(GERROR, "Too few control points for Bezier curve %d (%d < 4)", num, List_Nbr($6)); + } + else{ + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + } + List_Delete($6); + $$.Type = MSH_SEGM_BEZIER; + $$.Num = num; } | tNurbs '(' FExpr ')' tAFFECT ListOfDouble tKnots ListOfDouble tOrder FExpr tEND { - List_T *Temp; - int i; - double d; + int num = (int)$3; if(List_Nbr($6) + (int)$10 + 1 != List_Nbr($8)){ yymsg(GERROR, "Wrong definition of Nurbs Curve %d: " - "got %d Knots, need N + D + 1 = %d + %d + 1 = %d", - (int)$3, - List_Nbr($8), List_Nbr($6), (int)$10, List_Nbr($6) + (int)$10 + 1); + "got %d knots, need N + D + 1 = %d + %d + 1 = %d", + (int)$3, List_Nbr($8), List_Nbr($6), (int)$10, List_Nbr($6) + (int)$10 + 1); } else{ - Temp = List_Create(List_Nbr($6), 1, sizeof(int)); - for(i = 0; i < List_Nbr($6); i++) { - List_Read($6, i, &d); - j = (int)d; - List_Add(Temp, &j); + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)$10, temp, $8, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); } - AddCurveInDataBase ((int)$3, MSH_SEGM_NURBS, (int)$10, Temp, $8, -1, -1, 0., 1.); - List_Delete(Temp); } + List_Delete($6); + List_Delete($8); + $$.Type = MSH_SEGM_NURBS; + $$.Num = num; + } + | tLine tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND + { + int num = (int)$4; + if(FindEdgeLoop(num, THEM)){ + yymsg(GERROR, "Line loop %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + sortEdgesInLoop(num, temp); + EdgeLoop *l = Create_EdgeLoop(num, temp); + Tree_Add(THEM->EdgeLoops, &l); + List_Delete(temp); + } + List_Delete($7); + $$.Type = MSH_SEGM_LOOP; + $$.Num = num; + } + | tAttractor tLine ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}' tEND + { + for(int i = 0; i < List_Nbr($3); i++){ + double p; + List_Read($3, i, &p); + Curve *c = FindCurve((int)p, THEM); + if(!c) + yymsg(WARNING, "Unknown Curve %d", (int)p); + else{ + Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, + $6, $8, $10, NULL, c, NULL); + List_Add(THEM->Metric->Attractors, &a); + } + } + // dummy values + $$.Type = 0; + $$.Num = 0; + } + | tPhysical tLine '(' FExpr ')' tAFFECT ListOfDouble tEND + { + int num = (int)$4; + if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE, THEM)){ + yymsg(GERROR, "Physical line %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete($7); + $$.Type = MSH_PHYSICAL_LINE; + $$.Num = num; } // Surfaces | tPlane tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$4, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, $7, NULL); + int num = (int)$4; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + Surface *s = Create_Surface(num, MSH_SURF_PLAN); + List_T *temp = ListOfDouble2ListOfInt($7); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + } + List_Delete($7); $$.Type = MSH_SURF_PLAN; - $$.Num = (int)$4; + $$.Num = num; + } + | tRuled tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND + { + int num = (int)$4, type = 0; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + double d; + List_Read($7, 0, &d); + EdgeLoop *el = FindEdgeLoop((int)d, THEM); + if(!el){ + yymsg(GERROR, "Unknown Line Loop %d", (int)d); + } + else{ + int j = List_Nbr(el->Curves); + if(j == 4){ + type = MSH_SURF_REGL; + } + else if(j == 3){ + type = MSH_SURF_TRIC; + } + else{ + yymsg(GERROR, "Wrong definition of Ruled Surface %d: " + "%d borders instead of 3 or 4", num, j); + type = MSH_SURF_PLAN; + } + Surface *s = Create_Surface(num, type); + List_T *temp = ListOfDouble2ListOfInt($7); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + } + } + List_Delete($7); + $$.Type = type; + $$.Num = num; } | tTrimmed tSurface '(' FExpr ')' tAFFECT '{' FExpr ',' ListOfDouble '}' tEND { - Surface *s,*support; - support = FindSurface((int)$8, THEM); - if(!support) - yymsg(GERROR, "Unknown Surface %d", (int)$8); + int num = (int)$4; + Surface *support = FindSurface((int)$8, THEM); + if(!support){ + yymsg(GERROR, "Unknown support surface %d", (int)$8); + } else{ - Cdbz101((int)$4, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, $10, NULL); - s = FindSurface((int)$4, THEM); - if(!s) - yymsg(GERROR, "Unknown Surface %d", (int)$4); + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } else{ - s->Typ = MSH_SURF_TRIMMED; + Surface *s = Create_Surface(num, MSH_SURF_TRIMMED); + List_T *temp = ListOfDouble2ListOfInt($10); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); s->Support = support; - $$.Type = MSH_SURF_TRIMMED; - $$.Num = (int)$4; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); } } + List_Delete($10); + $$.Type = MSH_SURF_TRIMMED; + $$.Num = num; } - | tRuled tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND + | tTriangulation tSurface '{' FExpr '}' tAFFECT '(' FExpr ',' FExpr ')' + ListOfDouble ListOfDouble tEND { - List_Read($7, 0, &d); - i = (int)d; - EdgeLoop *el = FindEdgeLoop(i, THEM); - if(!el) - yymsg(GERROR, "Unknown Line Loop %d", i); - else{ - j = List_Nbr(el->Curves); - if(j==4) - $$.Type = MSH_SURF_REGL; - else if(j==3) - $$.Type = MSH_SURF_TRIC; - else - yymsg(GERROR, "Wrong definition of Ruled Surface %d: " - "%d borders instead of 3 or 4", - (int)$4, j); - Cdbz101((int)$4, $$.Type, 0, 0, 0, 0, 0, NULL, $7, NULL); - $$.Num = (int)$4; + int num = (int)$4, type = 0; + Surface *s = FindSurface(num, THEM); + if(!s) { + yymsg(GERROR, "Unknown surface %d", num); } + else{ + // FIXME: parameters not used; undocumented + POLY_rep *rep = new POLY_rep($12, $13); + s->thePolyRep = rep; + type = s->Typ; + } + //FIXME: do you copy the data? + //List_Delete($12); + //List_Delete($13); + $$.Type = type; + $$.Num = (int)$4; + } + // for backward compatibility only: when we don't create a new entity, + // we should use braces (and not parentheses) + | tTriangulation tSurface '(' FExpr ')' tAFFECT '(' FExpr ',' FExpr ')' + ListOfDouble ListOfDouble tEND + { + int num = (int)$4, type = 0; + Surface *s = FindSurface(num, THEM); + if(!s) { + yymsg(GERROR, "Unknown surface %d", num); + } + else{ + POLY_rep *rep = new POLY_rep($12, $13); + s->thePolyRep = rep; + type = s->Typ; + } + $$.Type = type; + $$.Num = (int)$4; } - - | tTriangulation tSurface '(' FExpr ')' tAFFECT '(' FExpr ',' FExpr ')' ListOfDouble ListOfDouble tEND - { - AddTriangulationToSurface ((int) $4, (int) $8, (int) $10, $12, $13); - $$.Num = (int)$4; - } - | tNurbs tSurface tWith tBounds '(' FExpr ')' tAFFECT - ListOfListOfDouble tKnots '{' ListOfDouble ',' ListOfDouble '}' - tOrder '{' FExpr ',' FExpr '}' tEND + ListOfListOfDouble tKnots '{' ListOfDouble ',' ListOfDouble '}' + tOrder '{' FExpr ',' FExpr '}' tEND { - CreateNurbsSurface ((int) $6 , (int)$18 , (int)$20 , $9, $12, $14); + int num = (int)$6; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + CreateNurbsSurface(num, (int)$18, (int)$20, $9, $12, $14); + } + for(int i = 0; i < List_Nbr($9); i++) + List_Delete((List_T*)List_Pointer($9, i)); + List_Delete($9); + List_Delete($12); + List_Delete($14); $$.Type = MSH_SURF_NURBS; - $$.Num = (int)$6; + $$.Num = num; } | tNurbs tSurface '(' FExpr ')' tAFFECT - ListOfListOfDouble tKnots '{' ListOfDouble ',' ListOfDouble '}' - tOrder '{' FExpr ',' FExpr '}' tEND - { - CreateNurbsSurfaceSupport ((int)$4, (int) $16 , (int) $18 , $7, $10, $12); - } - | tPhysical tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND + ListOfListOfDouble tKnots '{' ListOfDouble ',' ListOfDouble '}' + tOrder '{' FExpr ',' FExpr '}' tEND { - Cdbz101((int)$4, MSH_PHYSICAL_SURFACE, 0, 0, 0, 0, 0, NULL, $7, NULL); - $$.Type = MSH_PHYSICAL_SURFACE; - $$.Num = (int)$4; + int num = (int)$4; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + CreateNurbsSurfaceSupport(num, (int)$16, (int)$18, $7, $10, $12); + } + for(int i = 0; i < List_Nbr($7); i++) + List_Delete((List_T*)List_Pointer($7, i)); + List_Delete($7); + List_Delete($10); + List_Delete($12); + $$.Type = MSH_SURF_NURBS; + $$.Num = num; } | tSurface tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$4, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, $7, NULL); + int num = (int)$4; + if(FindSurfaceLoop(num, THEM)){ + yymsg(GERROR, "Surface loop %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + SurfaceLoop *l = Create_SurfaceLoop(num, temp); + Tree_Add(THEM->SurfaceLoops, &l); + List_Delete(temp); + } + List_Delete($7); $$.Type = MSH_SURF_LOOP; - $$.Num = (int)$4; + $$.Num = num; + } + | tPhysical tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND + { + int num = (int)$4; + if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE, THEM)){ + yymsg(GERROR, "Physical surface %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete($7); + $$.Type = MSH_PHYSICAL_SURFACE; + $$.Num = num; } // Volumes | tComplex tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$4, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, $7, NULL); + int num = (int)$4; + if(FindVolume(num, THEM)){ + yymsg(GERROR, "Volume %d already exists", num); + } + else{ + Volume *v = Create_Volume(num, MSH_VOLUME); + List_T *temp = ListOfDouble2ListOfInt($7); + setVolumeSurfaces(v, temp); + List_Delete(temp); + Tree_Add(THEM->Volumes, &v); + } + List_Delete($7); $$.Type = MSH_VOLUME; - $$.Num = (int)$4; + $$.Num = num; } | tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$3, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, $6, NULL); + int num = (int)$3; + if(FindVolume(num, THEM)){ + yymsg(GERROR, "Volume %d already exists", num); + } + else{ + Volume *v = Create_Volume(num, MSH_VOLUME); + List_T *temp = ListOfDouble2ListOfInt($6); + setVolumeSurfaces(v, temp); + List_Delete(temp); + Tree_Add(THEM->Volumes, &v); + } + List_Delete($6); $$.Type = MSH_VOLUME; - $$.Num = (int)$3; + $$.Num = num; } | tPhysical tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$4, MSH_PHYSICAL_VOLUME, 0, 0, 0, 0, 0, NULL, $7, NULL); + int num = (int)$4; + if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME, THEM)){ + yymsg(GERROR, "Physical volume %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete($7); $$.Type = MSH_PHYSICAL_VOLUME; - $$.Num = (int)$4; + $$.Num = num; } ; @@ -1809,7 +2120,7 @@ Shape : Transform : tTranslate VExpr '{' MultipleShape '}' { - TranslateShapes ($2[0], $2[1], $2[2], $4, 1); + TranslateShapes($2[0], $2[1], $2[2], $4, 1); $$ = $4; } | tRotate '{' VExpr ',' VExpr ',' FExpr '}' '{' MultipleShape '}' @@ -1836,7 +2147,7 @@ MultipleShape : ; ListOfShapes : - /* none */ + // nothing { $$ = List_Create(3, 3, sizeof(Shape)); } @@ -1846,8 +2157,10 @@ ListOfShapes : } | ListOfShapes tPoint '{' RecursiveListOfDouble '}' tEND { - for(i = 0; i < List_Nbr($4); i++){ + for(int i = 0; i < List_Nbr($4); i++){ + double d; List_Read($4, i, &d); + Shape TheShape; TheShape.Num = (int)d; Vertex *v = FindPoint(TheShape.Num, THEM); if(!v) @@ -1860,8 +2173,10 @@ ListOfShapes : } | ListOfShapes tLine '{' RecursiveListOfDouble '}' tEND { - for(i = 0; i < List_Nbr($4); i++){ + for(int i = 0; i < List_Nbr($4); i++){ + double d; List_Read($4, i, &d); + Shape TheShape; TheShape.Num = (int)d; Curve *c = FindCurve(TheShape.Num, THEM); if(!c) @@ -1874,8 +2189,10 @@ ListOfShapes : } | ListOfShapes tSurface '{' RecursiveListOfDouble '}' tEND { - for(i = 0; i < List_Nbr($4); i++){ + for(int i = 0; i < List_Nbr($4); i++){ + double d; List_Read($4, i, &d); + Shape TheShape; TheShape.Num = (int)d; Surface *s = FindSurface(TheShape.Num, THEM); if(!s) @@ -1888,8 +2205,10 @@ ListOfShapes : } | ListOfShapes tVolume '{' RecursiveListOfDouble '}' tEND { - for(i = 0; i < List_Nbr($4); i++){ + for(int i = 0; i < List_Nbr($4); i++){ + double d; List_Read($4, i, &d); + Shape TheShape; TheShape.Num = (int)d; Volume *v = FindVolume(TheShape.Num, THEM); if(!v) @@ -1908,12 +2227,15 @@ Duplicata : tDuplicata '{' ListOfShapes '}' { $$ = List_Create(3, 3, sizeof(Shape)); - for(i = 0; i < List_Nbr($3); i++){ - List_Read ($3, i, &TheShape); + for(int i = 0; i < List_Nbr($3); i++){ + Shape TheShape; + List_Read($3, i, &TheShape); + int j; CopyShape(TheShape.Type, TheShape.Num, &j); TheShape.Num = j; List_Add($$, &TheShape); } + List_Delete($3); } | tDuplicata tSTRING '[' FExpr ']' tEND { @@ -1928,10 +2250,12 @@ Duplicata : Delete : tDelete '{' ListOfShapes '}' { - for(i = 0; i < List_Nbr($3); i++){ - List_Read ($3, i, &TheShape); + for(int i = 0; i < List_Nbr($3); i++){ + Shape TheShape; + List_Read($3, i, &TheShape); DeleteShape(TheShape.Type, TheShape.Num); } + List_Delete($3); } | tDelete tSTRING '[' FExpr ']' tEND { @@ -1949,10 +2273,12 @@ Delete : Colorify : tColor ColorExpr '{' ListOfShapes '}' { - for(i = 0; i < List_Nbr($4); i++){ - List_Read ($4, i, &TheShape); + for(int i = 0; i < List_Nbr($4); i++){ + Shape TheShape; + List_Read($4, i, &TheShape); ColorShape(TheShape.Type, TheShape.Num, $2); } + List_Delete($4); } ; @@ -1963,29 +2289,33 @@ Visibility : { int m = (CTX.visibility_mode == 2) ? VIS_MESH : ((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH); - for(i = 2; i < 6; i++) + for(int i = 2; i < 6; i++) SetVisibilityByNumber($2, i, m); } | tHide StringExpr tEND { - for(i = 2; i < 6; i++) + for(int i = 2; i < 6; i++) SetVisibilityByNumber($2, i, 0); } | tShow '{' ListOfShapes '}' { int m = (CTX.visibility_mode == 2) ? VIS_MESH : ((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH); - for(i = 0; i < List_Nbr($3); i++){ - List_Read ($3, i, &TheShape); + for(int i = 0; i < List_Nbr($3); i++){ + Shape TheShape; + List_Read($3, i, &TheShape); VisibilityShape(TheShape.Type, TheShape.Num, m); } + List_Delete($3); } | tHide '{' ListOfShapes '}' { - for(i = 0; i < List_Nbr($3); i++){ - List_Read ($3, i, &TheShape); + for(int i = 0; i < List_Nbr($3); i++){ + Shape TheShape; + List_Read($3, i, &TheShape); VisibilityShape(TheShape.Type, TheShape.Num, 0); } + List_Delete($3); } ; @@ -1995,12 +2325,18 @@ Command : tSTRING StringExpr tEND { if(!strcmp($1, "Include")){ + char tmpstring[1024]; FixRelativePath($2, tmpstring); + // Warning: we *don't* close included files. If you need to + // include many files, use "Merge" instead: some OSes limit + // the number of files a process can open simultaneously (500 + // for OS X) ParseFile(tmpstring, 0, 0); } else if(!strcmp($1, "Print")){ #if defined(HAVE_FLTK) if(!CTX.batch){ + char tmpstring[1024]; FixRelativePath($2, tmpstring); CreateOutputFile(tmpstring, CTX.print.format); } @@ -2008,15 +2344,18 @@ Command : } else if(!strcmp($1, "Save")){ #if defined(HAVE_FLTK) + char tmpstring[1024]; FixRelativePath($2, tmpstring); CreateOutputFile(tmpstring, CTX.mesh.format); #endif } else if(!strcmp($1, "Merge")){ + char tmpstring[1024]; FixRelativePath($2, tmpstring); MergeProblem(tmpstring); } else if(!strcmp($1, "MergeWithBoundingBox")){ + char tmpstring[1024]; FixRelativePath($2, tmpstring); MergeProblemWithBoundingBox(tmpstring); } @@ -2032,6 +2371,7 @@ Command : if(!strcmp($1, "Save") && !strcmp($2, "View")){ Post_View *v = (Post_View *)List_Pointer_Test(CTX.post.list, (int)$4); if(v){ + char tmpstring[1024]; FixRelativePath($6, tmpstring); WriteView(v, tmpstring, 0, 0); } @@ -2049,8 +2389,6 @@ Command : } } else if(!strcmp($1, "Mesh")){ - //Maillage_Dimension_0(THEM); - //mai3d(THEM, (int)$2); yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts"); } else{ @@ -2062,7 +2400,7 @@ Command : try { GMSH_PluginManager::instance()->action($3, $6, 0); } - catch (...) { + catch(...) { yymsg(WARNING, "Unknown action '%s' or plugin '%s'", $6, $3); } } @@ -2103,32 +2441,41 @@ Loop : tFor '(' FExpr tDOTS FExpr ')' { - LoopControlVariablesTab[ImbricatedLoop][0] = $3 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; + LoopControlVariablesTab[ImbricatedLoop][0] = $3; + LoopControlVariablesTab[ImbricatedLoop][1] = $5; + LoopControlVariablesTab[ImbricatedLoop][2] = 1.0; + LoopControlVariablesNameTab[ImbricatedLoop] = ""; fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } } | tFor '(' FExpr tDOTS FExpr tDOTS FExpr ')' { - LoopControlVariablesTab[ImbricatedLoop][0] = $3 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][2] = $7 ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; + LoopControlVariablesTab[ImbricatedLoop][0] = $3; + LoopControlVariablesTab[ImbricatedLoop][1] = $5; + LoopControlVariablesTab[ImbricatedLoop][2] = $7; + LoopControlVariablesNameTab[ImbricatedLoop] = ""; fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } } | tFor tSTRING tIn '{' FExpr tDOTS FExpr '}' { - LoopControlVariablesTab[ImbricatedLoop][0] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $7 ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = $2 ; - + LoopControlVariablesTab[ImbricatedLoop][0] = $5; + LoopControlVariablesTab[ImbricatedLoop][1] = $7; + LoopControlVariablesTab[ImbricatedLoop][2] = 1.0; + LoopControlVariablesNameTab[ImbricatedLoop] = $2; + Symbol TheSymbol; TheSymbol.Name = $2; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); List_Put(TheSymbol.val, 0, &$5); @@ -2137,19 +2484,23 @@ Loop : else{ List_Write(pSymbol->val, 0, &$5); } - fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } } | tFor tSTRING tIn '{' FExpr tDOTS FExpr tDOTS FExpr '}' { - LoopControlVariablesTab[ImbricatedLoop][0] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $7 ; - LoopControlVariablesTab[ImbricatedLoop][2] = $9 ; - LoopControlVariablesNameTab[ImbricatedLoop] = $2 ; - + LoopControlVariablesTab[ImbricatedLoop][0] = $5; + LoopControlVariablesTab[ImbricatedLoop][1] = $7; + LoopControlVariablesTab[ImbricatedLoop][2] = $9; + LoopControlVariablesNameTab[ImbricatedLoop] = $2; + Symbol TheSymbol; TheSymbol.Name = $2; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); List_Put(TheSymbol.val, 0, &$5); @@ -2158,10 +2509,13 @@ Loop : else{ List_Write(pSymbol->val, 0, &$5); } - fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } } | tEndFor { @@ -2169,19 +2523,25 @@ Loop : LoopControlVariablesTab[ImbricatedLoop-1][0]){ LoopControlVariablesTab[ImbricatedLoop-1][0] += LoopControlVariablesTab[ImbricatedLoop-1][2]; - if(strlen(LoopControlVariablesNameTab[ImbricatedLoop-1])){ + Symbol TheSymbol; TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1]; - pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol); - *(double*)List_Pointer_Fast(pSymbol->val, 0) += - LoopControlVariablesTab[ImbricatedLoop-1][2] ; + Symbol *pSymbol; + if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) + yymsg(GERROR, "Unknown loop variable"); + else + *(double*)List_Pointer_Fast(pSymbol->val, 0) += + LoopControlVariablesTab[ImbricatedLoop-1][2]; } - fsetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop-1]); yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop-1]; } else{ ImbricatedLoop--; + if(ImbricatedLoop < 0){ + yymsg(GERROR, "Problem with imbricated loops"); + ImbricatedLoop = 0; + } } } | tFunction tSTRING @@ -2218,6 +2578,7 @@ Extrude : tExtrude tPoint '{' FExpr ',' VExpr '}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., &pc, &prc, 1, NULL); @@ -2228,6 +2589,7 @@ Extrude : | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, &pc, &prc, 1, NULL); @@ -2238,6 +2600,7 @@ Extrude : | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr'}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, &pc, &prc, 1, NULL); @@ -2253,6 +2616,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., &pc, &prc, 1, &extr); @@ -2268,6 +2632,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, &pc, &prc, 1, &extr); @@ -2283,6 +2648,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, &pc, &prc, 1, &extr); @@ -2295,6 +2661,7 @@ Extrude : | tExtrude tLine '{' FExpr ',' VExpr '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., &ps, 1, NULL); @@ -2312,6 +2679,7 @@ Extrude : | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, &ps, 1, NULL); @@ -2329,6 +2697,7 @@ Extrude : | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, &ps, 1, NULL); @@ -2351,6 +2720,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., &ps, 1, &extr); @@ -2373,6 +2743,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, &ps, 1, &extr); @@ -2395,6 +2766,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, &ps, 1, &extr); @@ -2414,6 +2786,7 @@ Extrude : | tExtrude tSurface '{' FExpr ',' VExpr '}' tEND { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., 0, NULL); @@ -2430,6 +2803,7 @@ Extrude : } | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, 0, NULL); @@ -2446,6 +2820,7 @@ Extrude : } | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, 0, NULL); @@ -2467,10 +2842,10 @@ Extrude : } '{' ExtrudeParameters '}' tEND { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -2490,10 +2865,10 @@ Extrude : '{' ExtrudeParameters '}' tEND { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -2513,10 +2888,10 @@ Extrude : '{' ExtrudeParameters '}' tEND { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -2596,16 +2971,16 @@ ExtrudeParameter : } ; -// T R A N S F I N I +// T R A N S F I N I T E -Transfini : +Transfinite : tTransfinite tLine ListOfDouble tAFFECT FExpr tEND { - Curve *c; - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -2619,11 +2994,11 @@ Transfini : } | tTransfinite tLine ListOfDouble tAFFECT FExpr tUsing tProgression FExpr tEND { - Curve *c; - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -2637,11 +3012,11 @@ Transfini : } | tTransfinite tLine ListOfDouble tAFFECT FExpr tUsing tBump FExpr tEND { - Curve *c; - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -2660,15 +3035,16 @@ Transfini : yymsg(WARNING, "Unknown Surface %d", (int)$4); else{ s->Method = TRANSFINI; - k = List_Nbr($7); - if(k!=3 && k!=4){ + int k = List_Nbr($7); + if(k != 3 && k != 4){ yymsg(GERROR, "Wrong definition of Transfinite Surface %d: " - "%d points instead of 3 or 4" , $4, k) ; + "%d points instead of 3 or 4" , $4, k); } else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read($7, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); s->ipar[i] = j; } } @@ -2682,14 +3058,15 @@ Transfini : yymsg(WARNING, "Unknown Surface %d", (int)$4); else{ s->Method = ELLIPTIC; - k = List_Nbr($7); + int k = List_Nbr($7); if(k != 4) yymsg(GERROR, "Wrong definition of Elliptic Surface %d: " - "%d points instead of 4" , $4, k) ; + "%d points instead of 4" , $4, k); else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read($7, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); s->ipar[i] = j; } } @@ -2703,14 +3080,15 @@ Transfini : yymsg(WARNING, "Unknown Volume %d", (int)$4); else{ v->Method = TRANSFINI; - k = List_Nbr($7); + int k = List_Nbr($7); if(k != 6 && k != 8) yymsg(GERROR, "Wrong definition of Transfinite Volume %d: " - "%d points instead of 6 or 8" , $4, k) ; + "%d points instead of 6 or 8" , $4, k); else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read($7, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); v->ipar[i] = j; } } @@ -2719,11 +3097,11 @@ Transfini : } | tRecombine tSurface ListOfDouble tAFFECT FExpr tEND { - Surface *s; - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); - j = (int)d; - s = FindSurface(j, THEM); + int j = (int)d; + Surface *s = FindSurface(j, THEM); if(s){ s->Recombine = 1; s->RecombineAngle = ($5 > 0 && $5 < 90) ? $5 : 90; @@ -2733,11 +3111,11 @@ Transfini : } | tRecombine tSurface ListOfDouble tEND { - Surface *s; - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); - j = (int)d; - s = FindSurface(j, THEM); + int j = (int)d; + Surface *s = FindSurface(j, THEM); if(s){ s->Recombine = 1; s->RecombineAngle = 30.; @@ -2770,35 +3148,35 @@ BoolExpr : | tUNSPECIFIED {$$ = -1;} | tU {$$ = -1;} | tV {$$ = -1;} - ; +; FExpr : FExpr_Single { $$ = $1; } - | '(' FExpr ')' { $$ = $2 ; } - | '-' FExpr %prec UNARYPREC { $$ = -$2 ; } + | '(' FExpr ')' { $$ = $2; } + | '-' FExpr %prec UNARYPREC { $$ = -$2; } | '+' FExpr %prec UNARYPREC { $$ = $2; } - | '!' FExpr { $$ = !$2 ; } - | FExpr '-' FExpr { $$ = $1 - $3 ; } - | FExpr '+' FExpr { $$ = $1 + $3 ; } - | FExpr '*' FExpr { $$ = $1 * $3 ; } + | '!' FExpr { $$ = !$2; } + | FExpr '-' FExpr { $$ = $1 - $3; } + | FExpr '+' FExpr { $$ = $1 + $3; } + | FExpr '*' FExpr { $$ = $1 * $3; } | FExpr '/' FExpr { if(!$3) yymsg(GERROR, "Division by zero in '%g / %g'", $1, $3); else - $$ = $1 / $3 ; - } - | FExpr '%' FExpr { $$ = (int)$1 % (int)$3 ; } - | FExpr '^' FExpr { $$ = pow($1, $3) ; } - | FExpr '<' FExpr { $$ = $1 < $3 ; } - | FExpr '>' FExpr { $$ = $1 > $3 ; } - | FExpr tLESSOREQUAL FExpr { $$ = $1 <= $3 ; } - | FExpr tGREATEROREQUAL FExpr { $$ = $1 >= $3 ; } - | FExpr tEQUAL FExpr { $$ = $1 == $3 ; } - | FExpr tNOTEQUAL FExpr { $$ = $1 != $3 ; } - | FExpr tAND FExpr { $$ = $1 && $3 ; } - | FExpr tOR FExpr { $$ = $1 || $3 ; } - | FExpr '?' FExpr tDOTS FExpr { $$ = $1? $3 : $5 ; } + $$ = $1 / $3; + } + | FExpr '%' FExpr { $$ = (int)$1 % (int)$3; } + | FExpr '^' FExpr { $$ = pow($1, $3); } + | FExpr '<' FExpr { $$ = $1 < $3; } + | FExpr '>' FExpr { $$ = $1 > $3; } + | FExpr tLESSOREQUAL FExpr { $$ = $1 <= $3; } + | FExpr tGREATEROREQUAL FExpr { $$ = $1 >= $3; } + | FExpr tEQUAL FExpr { $$ = $1 == $3; } + | FExpr tNOTEQUAL FExpr { $$ = $1 != $3; } + | FExpr tAND FExpr { $$ = $1 && $3; } + | FExpr tOR FExpr { $$ = $1 || $3; } + | FExpr '?' FExpr tDOTS FExpr { $$ = $1? $3 : $5; } | tExp '(' FExpr ')' { $$ = exp($3); } | tLog '(' FExpr ')' { $$ = log($3); } | tLog10 '(' FExpr ')' { $$ = log10($3); } @@ -2809,15 +3187,15 @@ FExpr : | tAcos '(' FExpr ')' { $$ = acos($3); } | tTan '(' FExpr ')' { $$ = tan($3); } | tAtan '(' FExpr ')' { $$ = atan($3); } - | tAtan2 '(' FExpr ',' FExpr ')' { $$ = atan2($3, $5); } + | tAtan2 '(' FExpr ',' FExpr ')' { $$ = atan2($3, $5);} | tSinh '(' FExpr ')' { $$ = sinh($3); } | tCosh '(' FExpr ')' { $$ = cosh($3); } | tTanh '(' FExpr ')' { $$ = tanh($3); } | tFabs '(' FExpr ')' { $$ = fabs($3); } | tFloor '(' FExpr ')' { $$ = floor($3); } | tCeil '(' FExpr ')' { $$ = ceil($3); } - | tFmod '(' FExpr ',' FExpr ')' { $$ = fmod($3, $5); } - | tModulo '(' FExpr ',' FExpr ')' { $$ = fmod($3, $5); } + | tFmod '(' FExpr ',' FExpr ')' { $$ = fmod($3, $5); } + | tModulo '(' FExpr ',' FExpr ')' { $$ = fmod($3, $5); } | tHypot '(' FExpr ',' FExpr ')' { $$ = sqrt($3*$3+$5*$5); } | tRand '(' FExpr ')' { $$ = $3*(double)rand()/(double)RAND_MAX; } // The following is for GetDP compatibility @@ -2831,15 +3209,15 @@ FExpr : | tAcos '[' FExpr ']' { $$ = acos($3); } | tTan '[' FExpr ']' { $$ = tan($3); } | tAtan '[' FExpr ']' { $$ = atan($3); } - | tAtan2 '[' FExpr ',' FExpr ']' { $$ = atan2($3, $5); } + | tAtan2 '[' FExpr ',' FExpr ']' { $$ = atan2($3, $5);} | tSinh '[' FExpr ']' { $$ = sinh($3); } | tCosh '[' FExpr ']' { $$ = cosh($3); } | tTanh '[' FExpr ']' { $$ = tanh($3); } | tFabs '[' FExpr ']' { $$ = fabs($3); } | tFloor '[' FExpr ']' { $$ = floor($3); } | tCeil '[' FExpr ']' { $$ = ceil($3); } - | tFmod '[' FExpr ',' FExpr ']' { $$ = fmod($3, $5); } - | tModulo '[' FExpr ',' FExpr ']' { $$ = fmod($3, $5); } + | tFmod '[' FExpr ',' FExpr ']' { $$ = fmod($3, $5); } + | tModulo '[' FExpr ',' FExpr ']' { $$ = fmod($3, $5); } | tHypot '[' FExpr ',' FExpr ']' { $$ = sqrt($3*$3+$5*$5); } | tRand '[' FExpr ']' { $$ = $3*(double)rand()/(double)RAND_MAX; } ; @@ -2859,68 +3237,76 @@ FExpr_Single : | tSTRING { - TheSymbol.Name = $1 ; + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - $$ = 0. ; + yymsg(GERROR, "Unknown variable '%s'", $1); + $$ = 0.; } else - $$ = *(double*)List_Pointer_Fast(pSymbol->val, 0) ; + $$ = *(double*)List_Pointer_Fast(pSymbol->val, 0); } - | tSTRING '[' FExpr ']' { - TheSymbol.Name = $1 ; + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - $$ = 0. ; + yymsg(GERROR, "Unknown variable '%s'", $1); + $$ = 0.; } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))) - $$ = *pd ; + $$ = *pd; else{ - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ; - $$ = 0. ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3); + $$ = 0.; } } } - | '#' tSTRING '[' ']' { - TheSymbol.Name = $2 ; + Symbol TheSymbol; + TheSymbol.Name = $2; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $2) ; - $$ = 0. ; + yymsg(GERROR, "Unknown variable '%s'", $2); + $$ = 0.; } else{ $$ = List_Nbr(pSymbol->val); } } - | tSTRING NumericIncrement { - TheSymbol.Name = $1 ; + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - $$ = 0. ; + yymsg(GERROR, "Unknown variable '%s'", $1); + $$ = 0.; } else - $$ = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += $2) ; + $$ = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += $2); } - | tSTRING '[' FExpr ']' NumericIncrement { - TheSymbol.Name = $1 ; + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - $$ = 0. ; + yymsg(GERROR, "Unknown variable '%s'", $1); + $$ = 0.; } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))) - $$ = (*pd += $5) ; + $$ = (*pd += $5); else{ - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ; - $$ = 0. ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3); + $$ = 0.; } } } @@ -2929,62 +3315,67 @@ FExpr_Single : | tSTRING '.' tSTRING { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))){ yymsg(GERROR, "Unknown numeric option class '%s'", $1); - $$ = 0. ; + $$ = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3); - $$ = 0. ; + $$ = 0.; } else $$ = pNumOpt(0, GMSH_GET, 0); } } - | tSTRING '[' FExpr ']' '.' tSTRING { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))){ yymsg(GERROR, "Unknown numeric option class '%s'", $1); - $$ = 0. ; + $$ = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); - $$ = 0. ; + $$ = 0.; } else $$ = pNumOpt((int)$3, GMSH_GET, 0); } } - | tSTRING '.' tSTRING NumericIncrement { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))){ yymsg(GERROR, "Unknown numeric option class '%s'", $1); - $$ = 0. ; + $$ = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3); - $$ = 0. ; + $$ = 0.; } else $$ = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4); } } - | tSTRING '[' FExpr ']' '.' tSTRING NumericIncrement { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))){ yymsg(GERROR, "Unknown numeric option class '%s'", $1); - $$ = 0. ; + $$ = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); - $$ = 0. ; + $$ = 0.; } else $$ = pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7); @@ -2995,23 +3386,23 @@ FExpr_Single : VExpr : VExpr_Single { - memcpy($$, $1, 5*sizeof(double)) ; + memcpy($$, $1, 5*sizeof(double)); } | '-' VExpr %prec UNARYPREC { - for(i = 0; i < 5; i++) $$[i] = -$2[i] ; + for(int i = 0; i < 5; i++) $$[i] = -$2[i]; } | '+' VExpr %prec UNARYPREC { - for(i = 0; i < 5; i++) $$[i] = $2[i]; + for(int i = 0; i < 5; i++) $$[i] = $2[i]; } | VExpr '-' VExpr { - for(i = 0; i < 5; i++) $$[i] = $1[i] - $3[i] ; + for(int i = 0; i < 5; i++) $$[i] = $1[i] - $3[i]; } | VExpr '+' VExpr { - for(i = 0; i < 5; i++) $$[i] = $1[i] + $3[i] ; + for(int i = 0; i < 5; i++) $$[i] = $1[i] + $3[i]; } ; @@ -3035,7 +3426,7 @@ VExpr_Single : ; ListOfStrings : - /* none */ + // nothing { } | '(' RecursiveListOfStrings ')' @@ -3053,7 +3444,7 @@ RecursiveListOfStrings : ; ListOfListOfDouble : - /* none */ + // nothing { } | '{' RecursiveListOfListOfDouble '}' @@ -3069,12 +3460,12 @@ ListOfListOfDouble : RecursiveListOfListOfDouble : ListOfDouble { - $$ = List_Create(2, 1, sizeof(List_T*)) ; - List_Add($$, &($1)) ; + $$ = List_Create(2, 1, sizeof(List_T*)); + List_Add($$, &($1)); } | RecursiveListOfListOfDouble ',' ListOfDouble { - List_Add($$, &($3)) ; + List_Add($$, &($3)); } ; @@ -3082,12 +3473,12 @@ RecursiveListOfListOfDouble : ListOfDouble : FExpr { - $$ = List_Create(2, 1, sizeof(double)) ; - List_Add($$, &($1)) ; + $$ = List_Create(2, 1, sizeof(double)); + List_Add($$, &($1)); } | FExpr_Multi { - $$ = $1 ; + $$ = $1; } | '{' RecursiveListOfDouble '}' { @@ -3096,7 +3487,8 @@ ListOfDouble : | '-' '{' RecursiveListOfDouble '}' { $$ = $3; - for(i = 0; i < List_Nbr($$); i++){ + double *pd; + for(int i = 0; i < List_Nbr($$); i++){ pd = (double*)List_Pointer($$, i); (*pd) = - (*pd); } @@ -3106,20 +3498,20 @@ ListOfDouble : FExpr_Multi : FExpr tDOTS FExpr { - $$ = List_Create(2, 1, sizeof(double)) ; - for(d = $1; ($1 < $3) ? (d <= $3) : (d >= $3); ($1 < $3) ? (d += 1.) : (d -= 1.)) - List_Add($$, &d) ; + $$ = List_Create(2, 1, sizeof(double)); + for(double d = $1; ($1 < $3) ? (d <= $3) : (d >= $3); ($1 < $3) ? (d += 1.) : (d -= 1.)) + List_Add($$, &d); } | FExpr tDOTS FExpr tDOTS FExpr { - $$ = List_Create(2, 1, sizeof(double)) ; + $$ = List_Create(2, 1, sizeof(double)); if(!$5 || ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)){ - yymsg(GERROR, "Wrong increment in '%g:%g:%g'", $1, $3, $5) ; - List_Add($$, &($1)) ; + yymsg(GERROR, "Wrong increment in '%g:%g:%g'", $1, $3, $5); + List_Add($$, &($1)); } else - for(d = $1; ($5 > 0) ? (d <= $3) : (d >= $3); d += $5) - List_Add($$, &d) ; + for(double d = $1; ($5 > 0) ? (d <= $3) : (d >= $3); d += $5) + List_Add($$, &d); } | tPoint '{' FExpr '}' { @@ -3127,117 +3519,130 @@ FExpr_Multi : // This allows to ensure e.g. that relative point positions are // always conserved Vertex *v = FindPoint((int)$3, THEM); - $$ = List_Create(3, 1, sizeof(double)) ; + $$ = List_Create(3, 1, sizeof(double)); if(!v) { - yymsg(GERROR, "Unknown point '%d'", (int) $3) ; - double d = 0.0 ; + yymsg(GERROR, "Unknown point '%d'", (int) $3); + double d = 0.0; List_Add($$, &d); List_Add($$, &d); List_Add($$, &d); } else{ - List_Add($$, &v->Pos.X) ; - List_Add($$, &v->Pos.Y) ; - List_Add($$, &v->Pos.Z) ; + List_Add($$, &v->Pos.X); + List_Add($$, &v->Pos.Y); + List_Add($$, &v->Pos.Z); } } | Transform { - $$ = List_Create(List_Nbr($1), 1, sizeof(double)) ; + $$ = List_Create(List_Nbr($1), 1, sizeof(double)); for(int i = 0; i < List_Nbr($1); i++){ Shape *s = (Shape*) List_Pointer($1, i); double d = s->Num; List_Add($$, &d); } + List_Delete($1); } | Duplicata { - $$ = List_Create(List_Nbr($1), 1, sizeof(double)) ; + $$ = List_Create(List_Nbr($1), 1, sizeof(double)); for(int i = 0; i < List_Nbr($1); i++){ Shape *s = (Shape*) List_Pointer($1, i); double d = s->Num; List_Add($$, &d); } + List_Delete($1); } | Extrude { // FIXME: The syntax for this is ugly: we get double semi-colons // at the end of the line - $$ = List_Create(List_Nbr($1), 1, sizeof(double)) ; + $$ = List_Create(List_Nbr($1), 1, sizeof(double)); for(int i = 0; i < List_Nbr($1); i++){ Shape *s = (Shape*) List_Pointer($1, i); double d = s->Num; List_Add($$, &d); } + List_Delete($1); } | tSTRING '[' ']' { - $$ = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = $1 ; + $$ = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", $1); + double d = 0.0; List_Add($$, &d); } else{ - for(i = 0; i < List_Nbr(pSymbol->val); i++) - List_Add($$, (double*)List_Pointer_Fast(pSymbol->val, i)) ; + for(int i = 0; i < List_Nbr(pSymbol->val); i++) + List_Add($$, (double*)List_Pointer_Fast(pSymbol->val, i)); } } | '-' tSTRING '[' ']' { - $$ = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = $2 ; + $$ = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = $2; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $2) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", $2); + double d = 0.0; List_Add($$, &d); } else{ - for(i = 0; i < List_Nbr(pSymbol->val); i++){ - d = - *(double*)List_Pointer_Fast(pSymbol->val, i); - List_Add($$, &d) ; + for(int i = 0; i < List_Nbr(pSymbol->val); i++){ + double d = - *(double*)List_Pointer_Fast(pSymbol->val, i); + List_Add($$, &d); } } } | tSTRING '[' '{' RecursiveListOfDouble '}' ']' { - $$ = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = $1 ; + $$ = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", $1); + double d = 0.0; List_Add($$, &d); } else{ - for(i = 0; i < List_Nbr($4); i++){ - j = (int)(*(double*)List_Pointer_Fast($4, i)); + for(int i = 0; i < List_Nbr($4); i++){ + int j = (int)(*(double*)List_Pointer_Fast($4, i)); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))) - List_Add($$, pd) ; + List_Add($$, pd); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j); } } List_Delete($4); } | '-' tSTRING '[' '{' RecursiveListOfDouble '}' ']' { - $$ = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = $2 ; + $$ = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = $2; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $2) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", $2); + double d = 0.0; List_Add($$, &d); } else{ - for(i = 0; i < List_Nbr($5); i++){ - j = (int)(*(double*)List_Pointer_Fast($5, i)); + for(int i = 0; i < List_Nbr($5); i++){ + int j = (int)(*(double*)List_Pointer_Fast($5, i)); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ - d = - *pd; - List_Add($$, &d) ; + double d = - *pd; + List_Add($$, &d); } else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $2, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $2, j); } } List_Delete($5); @@ -3247,22 +3652,23 @@ FExpr_Multi : RecursiveListOfDouble : FExpr { - $$ = List_Create(2, 1, sizeof(double)) ; - List_Add($$, &($1)) ; + $$ = List_Create(2, 1, sizeof(double)); + List_Add($$, &($1)); } | FExpr_Multi { - $$ = $1 ; + $$ = $1; } | RecursiveListOfDouble ',' FExpr { - List_Add($$, &($3)) ; + List_Add($$, &($3)); } | RecursiveListOfDouble ',' FExpr_Multi { - for(i = 0; i < List_Nbr($3); i++){ - List_Read($3, i, &d) ; - List_Add($$, &d) ; + for(int i = 0; i < List_Nbr($3); i++){ + double d; + List_Read($3, i, &d); + List_Add($$, &d); } List_Delete($3); } @@ -3281,28 +3687,32 @@ ColorExpr : /* shift/reduce conflict | '{' tSTRING ',' FExpr '}' { + int flag; $$ = Get_ColorForString(ColorString, (int)$4, $2, &flag); if(flag) yymsg(GERROR, "Unknown color '%s'", $2); } */ | tSTRING { + int flag; $$ = Get_ColorForString(ColorString, -1, $1, &flag); if(flag) yymsg(GERROR, "Unknown color '%s'", $1); } | tSTRING '.' tColor '.' tSTRING { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory($1))){ yymsg(GERROR, "Unknown color option class '%s'", $1); - $$ = 0 ; + $$ = 0; } else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption($5, pColCat))){ yymsg(GERROR, "Unknown color option '%s.Color.%s'", $1, $5); - $$ = 0 ; + $$ = 0; } else{ - $$ = pColOpt(0, GMSH_GET, 0) ; + $$ = pColOpt(0, GMSH_GET, 0); } } } @@ -3315,12 +3725,12 @@ ListOfColor : } | tSTRING '[' FExpr ']' '.' tColorTable { - $$ = List_Create(256, 10, sizeof(unsigned int)) ; + $$ = List_Create(256, 10, sizeof(unsigned int)); GmshColorTable *ct = Get_ColorTable((int)$3); if(!ct) yymsg(GERROR, "View[%d] does not exist", (int)$3); else{ - for(i = 0; i < ct->size; i++) + for(int i = 0; i < ct->size; i++) List_Add($$, &ct->table[i]); } } @@ -3329,12 +3739,12 @@ ListOfColor : RecursiveListOfColor : ColorExpr { - $$ = List_Create(256, 10, sizeof(unsigned int)) ; - List_Add($$, &($1)) ; + $$ = List_Create(256, 10, sizeof(unsigned int)); + List_Add($$, &($1)); } | RecursiveListOfColor ',' ColorExpr { - List_Add($$, &($3)) ; + List_Add($$, &($3)); } ; @@ -3345,15 +3755,16 @@ StringExpr : } | tStrCat '(' StringExpr ',' StringExpr ')' { - $$ = (char *)Malloc((strlen($3)+strlen($5)+1)*sizeof(char)) ; - strcpy($$, $3) ; - strcat($$, $5) ; + $$ = (char *)Malloc((strlen($3)+strlen($5)+1)*sizeof(char)); + strcpy($$, $3); + strcat($$, $5); Free($3); Free($5); } | tStrPrefix '(' StringExpr ')' { - $$ = (char *)Malloc((strlen($3)+1)*sizeof(char)) ; + $$ = (char *)Malloc((strlen($3)+1)*sizeof(char)); + int i; for(i = strlen($3)-1; i >= 0; i--){ if($3[i] == '.'){ strncpy($$, $3, i); @@ -3370,7 +3781,8 @@ StringExpr : } | tSprintf '(' StringExpr ',' RecursiveListOfDouble ')' { - i = PrintListOfDouble($3, $5, tmpstring); + char tmpstring[1024]; + int i = PrintListOfDouble($3, $5, tmpstring); if(i < 0){ yymsg(GERROR, "Too few arguments in Sprintf"); $$ = $3; @@ -3388,13 +3800,15 @@ StringExpr : } | tSprintf '(' tSTRING '.' tSTRING ')' { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory($3))) yymsg(GERROR, "Unknown string option class '%s'", $3); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($5, pStrCat))) yymsg(GERROR, "Unknown string option '%s.%s'", $3, $5); else{ - str = pStrOpt(0, GMSH_GET, NULL) ; + char *str = pStrOpt(0, GMSH_GET, NULL); $$ = (char*)Malloc((strlen(str)+1)*sizeof(char)); strcpy($$, str); } @@ -3402,13 +3816,15 @@ StringExpr : } | tSprintf '(' tSTRING '[' FExpr ']' '.' tSTRING ')' { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory($3))) yymsg(GERROR, "Unknown string option class '%s'", $3); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($8, pStrCat))) yymsg(GERROR, "Unknown string option '%s[%d].%s'", $3, (int)$5, $8); else{ - str = pStrOpt((int)$5, GMSH_GET, NULL) ; + char *str = pStrOpt((int)$5, GMSH_GET, NULL); $$ = (char*)Malloc((strlen(str)+1)*sizeof(char)); strcpy($$, str); } @@ -3437,14 +3853,14 @@ void InitSymbols(void){ } int PrintListOfDouble(char *format, List_T *list, char *buffer){ - int i, j, k; + int j, k; char tmp1[256], tmp2[256]; - j=0; + j = 0; while(j < (int)strlen(format) && format[j]!='%') j++; strncpy(buffer, format, j); buffer[j]='\0'; - for(i = 0; i < List_Nbr(list); i++){ + for(int i = 0; i < List_Nbr(list); i++){ k = j; j++; if(j < (int)strlen(format)){ @@ -3486,5 +3902,3 @@ void yymsg(int type, char *fmt, ...){ if(type == GERROR) yyerrorstate=1; } - - diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp index 3fe55afa1b..f65103ed55 100644 --- a/Parser/Gmsh.yy.cpp +++ b/Parser/Gmsh.yy.cpp @@ -2,7 +2,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.180 2004-02-07 01:40:26 geuzaine Exp $ + * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.181 2004-02-28 00:48:55 geuzaine Exp $ */ #define FLEX_SCANNER @@ -1014,8 +1014,7 @@ char *yytext; #line 1 "Gmsh.l" #define INITIAL 0 #line 2 "Gmsh.l" - -// $Id: Gmsh.yy.cpp,v 1.180 2004-02-07 01:40:26 geuzaine Exp $ +// $Id: Gmsh.yy.cpp,v 1.181 2004-02-28 00:48:55 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -1077,7 +1076,7 @@ void skipline(void); && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); -#line 1081 "Gmsh.yy.cpp" +#line 1080 "Gmsh.yy.cpp" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1228,10 +1227,10 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 82 "Gmsh.l" +#line 81 "Gmsh.l" -#line 1235 "Gmsh.yy.cpp" +#line 1234 "Gmsh.yy.cpp" if ( yy_init ) { @@ -1316,1036 +1315,1036 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 84 "Gmsh.l" +#line 83 "Gmsh.l" /* none */; YY_BREAK case 2: YY_RULE_SETUP -#line 85 "Gmsh.l" +#line 84 "Gmsh.l" return tEND; YY_BREAK case 3: YY_RULE_SETUP -#line 86 "Gmsh.l" +#line 85 "Gmsh.l" skipcomments(); YY_BREAK case 4: YY_RULE_SETUP -#line 87 "Gmsh.l" +#line 86 "Gmsh.l" skipline(); YY_BREAK case 5: YY_RULE_SETUP -#line 88 "Gmsh.l" +#line 87 "Gmsh.l" {parsestring('\"'); return tBIGSTR;} YY_BREAK case 6: YY_RULE_SETUP -#line 89 "Gmsh.l" +#line 88 "Gmsh.l" {parsestring('\''); return tBIGSTR;} YY_BREAK case 7: YY_RULE_SETUP -#line 90 "Gmsh.l" +#line 89 "Gmsh.l" {yylval.d = NEWREG(); return tDOUBLE;} YY_BREAK case 8: YY_RULE_SETUP -#line 91 "Gmsh.l" +#line 90 "Gmsh.l" {yylval.d = NEWPOINT(); return tDOUBLE;} YY_BREAK case 9: YY_RULE_SETUP -#line 92 "Gmsh.l" +#line 91 "Gmsh.l" {yylval.d = NEWLINE(); return tDOUBLE;} YY_BREAK case 10: YY_RULE_SETUP -#line 93 "Gmsh.l" +#line 92 "Gmsh.l" {yylval.d = NEWLINE(); return tDOUBLE;} YY_BREAK case 11: YY_RULE_SETUP -#line 94 "Gmsh.l" +#line 93 "Gmsh.l" {yylval.d = NEWSURFACE(); return tDOUBLE;} YY_BREAK case 12: YY_RULE_SETUP -#line 95 "Gmsh.l" +#line 94 "Gmsh.l" {yylval.d = NEWVOLUME(); return tDOUBLE;} YY_BREAK case 13: YY_RULE_SETUP -#line 96 "Gmsh.l" +#line 95 "Gmsh.l" return tAFFECT; YY_BREAK case 14: YY_RULE_SETUP -#line 97 "Gmsh.l" +#line 96 "Gmsh.l" return tAFFECTPLUS; YY_BREAK case 15: YY_RULE_SETUP -#line 98 "Gmsh.l" +#line 97 "Gmsh.l" return tAFFECTMINUS; YY_BREAK case 16: YY_RULE_SETUP -#line 99 "Gmsh.l" +#line 98 "Gmsh.l" return tAFFECTTIMES; YY_BREAK case 17: YY_RULE_SETUP -#line 100 "Gmsh.l" +#line 99 "Gmsh.l" return tAFFECTDIVIDE; YY_BREAK case 18: YY_RULE_SETUP -#line 101 "Gmsh.l" +#line 100 "Gmsh.l" return tDOTS; YY_BREAK case 19: YY_RULE_SETUP -#line 102 "Gmsh.l" +#line 101 "Gmsh.l" return tDOTS; YY_BREAK case 20: YY_RULE_SETUP -#line 103 "Gmsh.l" +#line 102 "Gmsh.l" return tCROSSPRODUCT; YY_BREAK case 21: YY_RULE_SETUP -#line 104 "Gmsh.l" +#line 103 "Gmsh.l" return tOR; YY_BREAK case 22: YY_RULE_SETUP -#line 105 "Gmsh.l" +#line 104 "Gmsh.l" return tAND; YY_BREAK case 23: YY_RULE_SETUP -#line 106 "Gmsh.l" +#line 105 "Gmsh.l" return tPLUSPLUS; YY_BREAK case 24: YY_RULE_SETUP -#line 107 "Gmsh.l" +#line 106 "Gmsh.l" return tMINUSMINUS; YY_BREAK case 25: YY_RULE_SETUP -#line 108 "Gmsh.l" +#line 107 "Gmsh.l" return tEQUAL; YY_BREAK case 26: YY_RULE_SETUP -#line 109 "Gmsh.l" +#line 108 "Gmsh.l" return tNOTEQUAL; YY_BREAK case 27: YY_RULE_SETUP -#line 110 "Gmsh.l" +#line 109 "Gmsh.l" return tAPPROXEQUAL; YY_BREAK case 28: YY_RULE_SETUP -#line 111 "Gmsh.l" +#line 110 "Gmsh.l" return tLESSOREQUAL; YY_BREAK case 29: YY_RULE_SETUP -#line 112 "Gmsh.l" +#line 111 "Gmsh.l" return tGREATEROREQUAL; YY_BREAK case 30: YY_RULE_SETUP -#line 114 "Gmsh.l" +#line 113 "Gmsh.l" return tAcos; YY_BREAK case 31: YY_RULE_SETUP -#line 115 "Gmsh.l" +#line 114 "Gmsh.l" return tAcos; YY_BREAK case 32: YY_RULE_SETUP -#line 116 "Gmsh.l" +#line 115 "Gmsh.l" return tAsin; YY_BREAK case 33: YY_RULE_SETUP -#line 117 "Gmsh.l" +#line 116 "Gmsh.l" return tAsin; YY_BREAK case 34: YY_RULE_SETUP -#line 118 "Gmsh.l" +#line 117 "Gmsh.l" return tAtan; YY_BREAK case 35: YY_RULE_SETUP -#line 119 "Gmsh.l" +#line 118 "Gmsh.l" return tAtan; YY_BREAK case 36: YY_RULE_SETUP -#line 120 "Gmsh.l" +#line 119 "Gmsh.l" return tAtan2; YY_BREAK case 37: YY_RULE_SETUP -#line 121 "Gmsh.l" +#line 120 "Gmsh.l" return tAtan2; YY_BREAK case 38: YY_RULE_SETUP -#line 122 "Gmsh.l" +#line 121 "Gmsh.l" return tAttractor; YY_BREAK case 39: YY_RULE_SETUP -#line 124 "Gmsh.l" +#line 123 "Gmsh.l" return tBezier; YY_BREAK case 40: YY_RULE_SETUP -#line 125 "Gmsh.l" +#line 124 "Gmsh.l" return tBump; YY_BREAK case 41: YY_RULE_SETUP -#line 126 "Gmsh.l" +#line 125 "Gmsh.l" return tBSpline; YY_BREAK case 42: YY_RULE_SETUP -#line 127 "Gmsh.l" +#line 126 "Gmsh.l" return tBounds; YY_BREAK case 43: YY_RULE_SETUP -#line 129 "Gmsh.l" +#line 128 "Gmsh.l" return tCeil; YY_BREAK case 44: YY_RULE_SETUP -#line 130 "Gmsh.l" +#line 129 "Gmsh.l" return tCombine; YY_BREAK case 45: YY_RULE_SETUP -#line 131 "Gmsh.l" +#line 130 "Gmsh.l" return tCosh; YY_BREAK case 46: YY_RULE_SETUP -#line 132 "Gmsh.l" +#line 131 "Gmsh.l" return tCos; YY_BREAK case 47: YY_RULE_SETUP -#line 133 "Gmsh.l" +#line 132 "Gmsh.l" return tCharacteristic; YY_BREAK case 48: YY_RULE_SETUP -#line 134 "Gmsh.l" +#line 133 "Gmsh.l" return tCircle; YY_BREAK case 49: YY_RULE_SETUP -#line 135 "Gmsh.l" +#line 134 "Gmsh.l" return tCoherence; YY_BREAK case 50: YY_RULE_SETUP -#line 136 "Gmsh.l" +#line 135 "Gmsh.l" return tComplex; YY_BREAK case 51: YY_RULE_SETUP -#line 137 "Gmsh.l" +#line 136 "Gmsh.l" return tColor; YY_BREAK case 52: YY_RULE_SETUP -#line 138 "Gmsh.l" +#line 137 "Gmsh.l" return tColorTable; YY_BREAK case 53: YY_RULE_SETUP -#line 139 "Gmsh.l" +#line 138 "Gmsh.l" return tSpline; YY_BREAK case 54: YY_RULE_SETUP -#line 140 "Gmsh.l" +#line 139 "Gmsh.l" return tCall; YY_BREAK case 55: YY_RULE_SETUP -#line 142 "Gmsh.l" +#line 141 "Gmsh.l" return tDelete; YY_BREAK case 56: YY_RULE_SETUP -#line 143 "Gmsh.l" +#line 142 "Gmsh.l" return tDilate; YY_BREAK case 57: YY_RULE_SETUP -#line 144 "Gmsh.l" +#line 143 "Gmsh.l" return tDuplicata; YY_BREAK case 58: YY_RULE_SETUP -#line 145 "Gmsh.l" +#line 144 "Gmsh.l" return tDraw; YY_BREAK case 59: YY_RULE_SETUP -#line 147 "Gmsh.l" +#line 146 "Gmsh.l" return tExp; YY_BREAK case 60: YY_RULE_SETUP -#line 148 "Gmsh.l" +#line 147 "Gmsh.l" return tEllipse; YY_BREAK case 61: YY_RULE_SETUP -#line 149 "Gmsh.l" +#line 148 "Gmsh.l" return tEllipse; YY_BREAK case 62: YY_RULE_SETUP -#line 150 "Gmsh.l" +#line 149 "Gmsh.l" return tExtrude; YY_BREAK case 63: YY_RULE_SETUP -#line 151 "Gmsh.l" +#line 150 "Gmsh.l" return tElliptic; YY_BREAK case 64: YY_RULE_SETUP -#line 152 "Gmsh.l" +#line 151 "Gmsh.l" return tEndFor; YY_BREAK case 65: YY_RULE_SETUP -#line 153 "Gmsh.l" +#line 152 "Gmsh.l" return tEndIf; YY_BREAK case 66: YY_RULE_SETUP -#line 154 "Gmsh.l" +#line 153 "Gmsh.l" return tExit; YY_BREAK case 67: YY_RULE_SETUP -#line 156 "Gmsh.l" +#line 155 "Gmsh.l" return tFabs; YY_BREAK case 68: YY_RULE_SETUP -#line 157 "Gmsh.l" +#line 156 "Gmsh.l" return tFloor; YY_BREAK case 69: YY_RULE_SETUP -#line 158 "Gmsh.l" +#line 157 "Gmsh.l" return tFmod; YY_BREAK case 70: YY_RULE_SETUP -#line 159 "Gmsh.l" +#line 158 "Gmsh.l" return tFor; YY_BREAK case 71: YY_RULE_SETUP -#line 160 "Gmsh.l" +#line 159 "Gmsh.l" return tFunction; YY_BREAK case 72: YY_RULE_SETUP -#line 162 "Gmsh.l" +#line 161 "Gmsh.l" return tHide; YY_BREAK case 73: YY_RULE_SETUP -#line 163 "Gmsh.l" +#line 162 "Gmsh.l" return tHypot; YY_BREAK case 74: YY_RULE_SETUP -#line 165 "Gmsh.l" +#line 164 "Gmsh.l" return tIn; YY_BREAK case 75: YY_RULE_SETUP -#line 166 "Gmsh.l" +#line 165 "Gmsh.l" return tIf; YY_BREAK case 76: YY_RULE_SETUP -#line 167 "Gmsh.l" +#line 166 "Gmsh.l" return tIntersect; YY_BREAK case 77: YY_RULE_SETUP -#line 169 "Gmsh.l" +#line 168 "Gmsh.l" return tKnots; YY_BREAK case 78: YY_RULE_SETUP -#line 171 "Gmsh.l" +#line 170 "Gmsh.l" return tLength; YY_BREAK case 79: YY_RULE_SETUP -#line 172 "Gmsh.l" +#line 171 "Gmsh.l" return tLine; YY_BREAK case 80: YY_RULE_SETUP -#line 173 "Gmsh.l" +#line 172 "Gmsh.l" return tLoop; YY_BREAK case 81: YY_RULE_SETUP -#line 174 "Gmsh.l" +#line 173 "Gmsh.l" return tLog; YY_BREAK case 82: YY_RULE_SETUP -#line 175 "Gmsh.l" +#line 174 "Gmsh.l" return tLog10; YY_BREAK case 83: YY_RULE_SETUP -#line 176 "Gmsh.l" +#line 175 "Gmsh.l" return tLayers; YY_BREAK case 84: YY_RULE_SETUP -#line 178 "Gmsh.l" +#line 177 "Gmsh.l" return tModulo; YY_BREAK case 85: YY_RULE_SETUP -#line 179 "Gmsh.l" +#line 178 "Gmsh.l" return tMPI_Rank; YY_BREAK case 86: YY_RULE_SETUP -#line 180 "Gmsh.l" +#line 179 "Gmsh.l" return tMPI_Size; YY_BREAK case 87: YY_RULE_SETUP -#line 182 "Gmsh.l" +#line 181 "Gmsh.l" return tNurbs; YY_BREAK case 88: YY_RULE_SETUP -#line 184 "Gmsh.l" +#line 183 "Gmsh.l" return tOrder; YY_BREAK case 89: YY_RULE_SETUP -#line 186 "Gmsh.l" +#line 185 "Gmsh.l" return tPhysical; YY_BREAK case 90: YY_RULE_SETUP -#line 187 "Gmsh.l" +#line 186 "Gmsh.l" return tPi; YY_BREAK case 91: YY_RULE_SETUP -#line 188 "Gmsh.l" +#line 187 "Gmsh.l" return tPlane; YY_BREAK case 92: YY_RULE_SETUP -#line 189 "Gmsh.l" +#line 188 "Gmsh.l" return tPoint; YY_BREAK case 93: YY_RULE_SETUP -#line 190 "Gmsh.l" +#line 189 "Gmsh.l" return tProgression; YY_BREAK case 94: YY_RULE_SETUP -#line 191 "Gmsh.l" +#line 190 "Gmsh.l" return tProgression; YY_BREAK case 95: YY_RULE_SETUP -#line 192 "Gmsh.l" +#line 191 "Gmsh.l" return tParametric; YY_BREAK case 96: YY_RULE_SETUP -#line 193 "Gmsh.l" +#line 192 "Gmsh.l" return tPrintf; YY_BREAK case 97: YY_RULE_SETUP -#line 194 "Gmsh.l" +#line 193 "Gmsh.l" return tPlugin; YY_BREAK case 98: YY_RULE_SETUP -#line 196 "Gmsh.l" +#line 195 "Gmsh.l" return tRecombine; YY_BREAK case 99: YY_RULE_SETUP -#line 197 "Gmsh.l" +#line 196 "Gmsh.l" return tRotate; YY_BREAK case 100: YY_RULE_SETUP -#line 198 "Gmsh.l" +#line 197 "Gmsh.l" return tRuled; YY_BREAK case 101: YY_RULE_SETUP -#line 199 "Gmsh.l" +#line 198 "Gmsh.l" return tRand; YY_BREAK case 102: YY_RULE_SETUP -#line 200 "Gmsh.l" +#line 199 "Gmsh.l" return tReturn; YY_BREAK case 103: YY_RULE_SETUP -#line 202 "Gmsh.l" +#line 201 "Gmsh.l" return tSqrt; YY_BREAK case 104: YY_RULE_SETUP -#line 203 "Gmsh.l" +#line 202 "Gmsh.l" return tSin; YY_BREAK case 105: YY_RULE_SETUP -#line 204 "Gmsh.l" +#line 203 "Gmsh.l" return tSinh; YY_BREAK case 106: YY_RULE_SETUP -#line 205 "Gmsh.l" +#line 204 "Gmsh.l" return tSpline; YY_BREAK case 107: YY_RULE_SETUP -#line 206 "Gmsh.l" +#line 205 "Gmsh.l" return tSurface; YY_BREAK case 108: YY_RULE_SETUP -#line 207 "Gmsh.l" +#line 206 "Gmsh.l" return tSymmetry; YY_BREAK case 109: YY_RULE_SETUP -#line 208 "Gmsh.l" +#line 207 "Gmsh.l" return tSprintf; YY_BREAK case 110: YY_RULE_SETUP -#line 209 "Gmsh.l" +#line 208 "Gmsh.l" return tStrCat; YY_BREAK case 111: YY_RULE_SETUP -#line 210 "Gmsh.l" +#line 209 "Gmsh.l" return tStrPrefix; YY_BREAK case 112: YY_RULE_SETUP -#line 211 "Gmsh.l" +#line 210 "Gmsh.l" return tShow; YY_BREAK case 113: YY_RULE_SETUP -#line 213 "Gmsh.l" +#line 212 "Gmsh.l" return tTriangulation; YY_BREAK case 114: YY_RULE_SETUP -#line 214 "Gmsh.l" +#line 213 "Gmsh.l" return tTransfinite; YY_BREAK case 115: YY_RULE_SETUP -#line 215 "Gmsh.l" +#line 214 "Gmsh.l" return tTranslate; YY_BREAK case 116: YY_RULE_SETUP -#line 216 "Gmsh.l" +#line 215 "Gmsh.l" return tTanh; YY_BREAK case 117: YY_RULE_SETUP -#line 217 "Gmsh.l" +#line 216 "Gmsh.l" return tTan; YY_BREAK case 118: YY_RULE_SETUP -#line 218 "Gmsh.l" +#line 217 "Gmsh.l" return tTrimmed; YY_BREAK case 119: YY_RULE_SETUP -#line 220 "Gmsh.l" +#line 219 "Gmsh.l" return tUsing; YY_BREAK case 120: YY_RULE_SETUP -#line 222 "Gmsh.l" +#line 221 "Gmsh.l" return tVolume; YY_BREAK case 121: YY_RULE_SETUP -#line 224 "Gmsh.l" +#line 223 "Gmsh.l" return tWith; YY_BREAK case 122: YY_RULE_SETUP -#line 226 "Gmsh.l" +#line 225 "Gmsh.l" return tScalarPoint; YY_BREAK case 123: YY_RULE_SETUP -#line 227 "Gmsh.l" +#line 226 "Gmsh.l" return tVectorPoint; YY_BREAK case 124: YY_RULE_SETUP -#line 228 "Gmsh.l" +#line 227 "Gmsh.l" return tTensorPoint; YY_BREAK case 125: YY_RULE_SETUP -#line 229 "Gmsh.l" +#line 228 "Gmsh.l" return tScalarLine; YY_BREAK case 126: YY_RULE_SETUP -#line 230 "Gmsh.l" +#line 229 "Gmsh.l" return tVectorLine; YY_BREAK case 127: YY_RULE_SETUP -#line 231 "Gmsh.l" +#line 230 "Gmsh.l" return tTensorLine; YY_BREAK case 128: YY_RULE_SETUP -#line 232 "Gmsh.l" +#line 231 "Gmsh.l" return tScalarTriangle; YY_BREAK case 129: YY_RULE_SETUP -#line 233 "Gmsh.l" +#line 232 "Gmsh.l" return tVectorTriangle; YY_BREAK case 130: YY_RULE_SETUP -#line 234 "Gmsh.l" +#line 233 "Gmsh.l" return tTensorTriangle; YY_BREAK case 131: YY_RULE_SETUP -#line 235 "Gmsh.l" +#line 234 "Gmsh.l" return tScalarQuadrangle; YY_BREAK case 132: YY_RULE_SETUP -#line 236 "Gmsh.l" +#line 235 "Gmsh.l" return tVectorQuadrangle; YY_BREAK case 133: YY_RULE_SETUP -#line 237 "Gmsh.l" +#line 236 "Gmsh.l" return tTensorQuadrangle; YY_BREAK case 134: YY_RULE_SETUP -#line 238 "Gmsh.l" +#line 237 "Gmsh.l" return tScalarTetrahedron; YY_BREAK case 135: YY_RULE_SETUP -#line 239 "Gmsh.l" +#line 238 "Gmsh.l" return tVectorTetrahedron; YY_BREAK case 136: YY_RULE_SETUP -#line 240 "Gmsh.l" +#line 239 "Gmsh.l" return tTensorTetrahedron; YY_BREAK case 137: YY_RULE_SETUP -#line 241 "Gmsh.l" +#line 240 "Gmsh.l" return tScalarHexahedron; YY_BREAK case 138: YY_RULE_SETUP -#line 242 "Gmsh.l" +#line 241 "Gmsh.l" return tVectorHexahedron; YY_BREAK case 139: YY_RULE_SETUP -#line 243 "Gmsh.l" +#line 242 "Gmsh.l" return tTensorHexahedron; YY_BREAK case 140: YY_RULE_SETUP -#line 244 "Gmsh.l" +#line 243 "Gmsh.l" return tScalarPrism; YY_BREAK case 141: YY_RULE_SETUP -#line 245 "Gmsh.l" +#line 244 "Gmsh.l" return tVectorPrism; YY_BREAK case 142: YY_RULE_SETUP -#line 246 "Gmsh.l" +#line 245 "Gmsh.l" return tTensorPrism; YY_BREAK case 143: YY_RULE_SETUP -#line 247 "Gmsh.l" +#line 246 "Gmsh.l" return tScalarPyramid; YY_BREAK case 144: YY_RULE_SETUP -#line 248 "Gmsh.l" +#line 247 "Gmsh.l" return tVectorPyramid; YY_BREAK case 145: YY_RULE_SETUP -#line 249 "Gmsh.l" +#line 248 "Gmsh.l" return tTensorPyramid; YY_BREAK case 146: YY_RULE_SETUP -#line 250 "Gmsh.l" +#line 249 "Gmsh.l" return tText2D; YY_BREAK case 147: YY_RULE_SETUP -#line 251 "Gmsh.l" +#line 250 "Gmsh.l" return tText3D; YY_BREAK case 148: YY_RULE_SETUP -#line 254 "Gmsh.l" +#line 253 "Gmsh.l" return tCARTESIAN_POINT; YY_BREAK case 149: YY_RULE_SETUP -#line 255 "Gmsh.l" +#line 254 "Gmsh.l" return tB_SPLINE_SURFACE_WITH_KNOTS; YY_BREAK case 150: YY_RULE_SETUP -#line 256 "Gmsh.l" +#line 255 "Gmsh.l" return tB_SPLINE_CURVE_WITH_KNOTS; YY_BREAK case 151: YY_RULE_SETUP -#line 257 "Gmsh.l" +#line 256 "Gmsh.l" return tUNSPECIFIED; YY_BREAK case 152: YY_RULE_SETUP -#line 258 "Gmsh.l" +#line 257 "Gmsh.l" return tCONTINUOUS; YY_BREAK case 153: YY_RULE_SETUP -#line 259 "Gmsh.l" +#line 258 "Gmsh.l" return tFALSE; YY_BREAK case 154: YY_RULE_SETUP -#line 260 "Gmsh.l" +#line 259 "Gmsh.l" return tTRUE; YY_BREAK case 155: YY_RULE_SETUP -#line 261 "Gmsh.l" +#line 260 "Gmsh.l" return tU; YY_BREAK case 156: YY_RULE_SETUP -#line 262 "Gmsh.l" +#line 261 "Gmsh.l" return tV; YY_BREAK case 157: YY_RULE_SETUP -#line 263 "Gmsh.l" +#line 262 "Gmsh.l" return tORIENTED_EDGE; YY_BREAK case 158: YY_RULE_SETUP -#line 264 "Gmsh.l" +#line 263 "Gmsh.l" return tEDGE_CURVE; YY_BREAK case 159: YY_RULE_SETUP -#line 265 "Gmsh.l" +#line 264 "Gmsh.l" return tEDGE_LOOP; YY_BREAK case 160: YY_RULE_SETUP -#line 266 "Gmsh.l" +#line 265 "Gmsh.l" return tELLIPSE; YY_BREAK case 161: YY_RULE_SETUP -#line 267 "Gmsh.l" +#line 266 "Gmsh.l" return tVERTEX_POINT; YY_BREAK case 162: YY_RULE_SETUP -#line 268 "Gmsh.l" +#line 267 "Gmsh.l" return tFACE_OUTER_BOUND; YY_BREAK case 163: YY_RULE_SETUP -#line 269 "Gmsh.l" +#line 268 "Gmsh.l" return tFACE_BOUND; YY_BREAK case 164: YY_RULE_SETUP -#line 270 "Gmsh.l" +#line 269 "Gmsh.l" return tADVANCED_FACE; YY_BREAK case 165: YY_RULE_SETUP -#line 271 "Gmsh.l" +#line 270 "Gmsh.l" return tLine; YY_BREAK case 166: YY_RULE_SETUP -#line 272 "Gmsh.l" +#line 271 "Gmsh.l" return tVECTOR; YY_BREAK case 167: YY_RULE_SETUP -#line 273 "Gmsh.l" +#line 272 "Gmsh.l" return tDIRECTION; YY_BREAK case 168: YY_RULE_SETUP -#line 274 "Gmsh.l" +#line 273 "Gmsh.l" return tAXIS2_PLACEMENT_3D; YY_BREAK case 169: YY_RULE_SETUP -#line 275 "Gmsh.l" +#line 274 "Gmsh.l" return tPLANE; YY_BREAK case 170: YY_RULE_SETUP -#line 276 "Gmsh.l" +#line 275 "Gmsh.l" return tHEADER; YY_BREAK case 171: YY_RULE_SETUP -#line 277 "Gmsh.l" +#line 276 "Gmsh.l" return tDATA; YY_BREAK case 172: YY_RULE_SETUP -#line 278 "Gmsh.l" +#line 277 "Gmsh.l" return tFILE_SCHEMA; YY_BREAK case 173: YY_RULE_SETUP -#line 279 "Gmsh.l" +#line 278 "Gmsh.l" return tFILE_NAME; YY_BREAK case 174: YY_RULE_SETUP -#line 280 "Gmsh.l" +#line 279 "Gmsh.l" return tFILE_DESCRIPTION; YY_BREAK case 175: YY_RULE_SETUP -#line 281 "Gmsh.l" +#line 280 "Gmsh.l" return tISO; YY_BREAK case 176: YY_RULE_SETUP -#line 282 "Gmsh.l" +#line 281 "Gmsh.l" return tENDISO; YY_BREAK case 177: YY_RULE_SETUP -#line 283 "Gmsh.l" +#line 282 "Gmsh.l" return tENDSEC; YY_BREAK case 178: YY_RULE_SETUP -#line 284 "Gmsh.l" +#line 283 "Gmsh.l" return tCLOSED_SHELL; YY_BREAK case 179: YY_RULE_SETUP -#line 285 "Gmsh.l" +#line 284 "Gmsh.l" return tADVANCED_BREP_SHAPE_REPRESENTATION; YY_BREAK case 180: YY_RULE_SETUP -#line 286 "Gmsh.l" +#line 285 "Gmsh.l" return tMANIFOLD_SOLID_BREP; YY_BREAK case 181: YY_RULE_SETUP -#line 287 "Gmsh.l" +#line 286 "Gmsh.l" return tCYLINDRICAL_SURFACE; YY_BREAK case 182: YY_RULE_SETUP -#line 288 "Gmsh.l" +#line 287 "Gmsh.l" return tCONICAL_SURFACE; YY_BREAK case 183: YY_RULE_SETUP -#line 289 "Gmsh.l" +#line 288 "Gmsh.l" return tTOROIDAL_SURFACE; YY_BREAK case 184: YY_RULE_SETUP -#line 290 "Gmsh.l" +#line 289 "Gmsh.l" return tCIRCLE; YY_BREAK case 185: YY_RULE_SETUP -#line 291 "Gmsh.l" +#line 290 "Gmsh.l" return tTRIMMED_CURVE; YY_BREAK case 186: YY_RULE_SETUP -#line 292 "Gmsh.l" +#line 291 "Gmsh.l" return tGEOMETRIC_SET; YY_BREAK case 187: YY_RULE_SETUP -#line 293 "Gmsh.l" +#line 292 "Gmsh.l" return tCOMPOSITE_CURVE_SEGMENT; YY_BREAK case 188: YY_RULE_SETUP -#line 294 "Gmsh.l" +#line 293 "Gmsh.l" return tCOMPOSITE_CURVE; YY_BREAK case 189: YY_RULE_SETUP -#line 295 "Gmsh.l" +#line 294 "Gmsh.l" return tPRODUCT_DEFINITION; YY_BREAK case 190: YY_RULE_SETUP -#line 296 "Gmsh.l" +#line 295 "Gmsh.l" return tPRODUCT_DEFINITION_SHAPE; YY_BREAK case 191: YY_RULE_SETUP -#line 297 "Gmsh.l" +#line 296 "Gmsh.l" return tSHAPE_DEFINITION_REPRESENTATION; YY_BREAK case 192: YY_RULE_SETUP -#line 299 "Gmsh.l" +#line 298 "Gmsh.l" return tVertex; YY_BREAK case 193: YY_RULE_SETUP -#line 300 "Gmsh.l" +#line 299 "Gmsh.l" return tFacet; YY_BREAK case 194: YY_RULE_SETUP -#line 301 "Gmsh.l" +#line 300 "Gmsh.l" return tNormal; YY_BREAK case 195: YY_RULE_SETUP -#line 302 "Gmsh.l" +#line 301 "Gmsh.l" return tOuter; YY_BREAK case 196: YY_RULE_SETUP -#line 303 "Gmsh.l" +#line 302 "Gmsh.l" return tLoopSTL; YY_BREAK case 197: YY_RULE_SETUP -#line 304 "Gmsh.l" +#line 303 "Gmsh.l" return tEndLoop; YY_BREAK case 198: YY_RULE_SETUP -#line 305 "Gmsh.l" +#line 304 "Gmsh.l" return tEndFacet; YY_BREAK case 199: YY_RULE_SETUP -#line 306 "Gmsh.l" +#line 305 "Gmsh.l" {skipline();return tEndSolid;} YY_BREAK case 200: YY_RULE_SETUP -#line 307 "Gmsh.l" +#line 306 "Gmsh.l" {skipline();return tSolid;} YY_BREAK case 201: YY_RULE_SETUP -#line 309 "Gmsh.l" +#line 308 "Gmsh.l" {yylval.d = (double)atoi((char*)(yytext+1)); return tDOUBLE;} YY_BREAK case 202: -#line 312 "Gmsh.l" +#line 311 "Gmsh.l" case 203: -#line 313 "Gmsh.l" +#line 312 "Gmsh.l" case 204: -#line 314 "Gmsh.l" +#line 313 "Gmsh.l" case 205: YY_RULE_SETUP -#line 314 "Gmsh.l" +#line 313 "Gmsh.l" {yylval.d = atof((char *)yytext); return tDOUBLE;} YY_BREAK case 206: YY_RULE_SETUP -#line 316 "Gmsh.l" +#line 315 "Gmsh.l" {yylval.c = strsave((char*)yytext); return tSTRING;} YY_BREAK case 207: YY_RULE_SETUP -#line 318 "Gmsh.l" +#line 317 "Gmsh.l" return yytext[0]; YY_BREAK case 208: YY_RULE_SETUP -#line 320 "Gmsh.l" +#line 319 "Gmsh.l" ECHO; YY_BREAK -#line 2349 "Gmsh.yy.cpp" +#line 2348 "Gmsh.yy.cpp" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -3231,7 +3230,7 @@ int main() return 0; } #endif -#line 320 "Gmsh.l" +#line 319 "Gmsh.l" #undef yywrap diff --git a/Parser/Makefile b/Parser/Makefile index 92f568f360..15ace3f279 100644 --- a/Parser/Makefile +++ b/Parser/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.54 2004-02-07 01:40:26 geuzaine Exp $ +# $Id: Makefile,v 1.55 2004-02-28 00:48:55 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -73,12 +73,13 @@ Gmsh.tab.o: Gmsh.tab.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \ ../Common/ColorTable.h ../DataStr/List.h ../Parallel/ParUtil.h \ ../Common/Gmsh.h ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \ ../DataStr/Tools.h ../Numeric/Numeric.h ../Common/Context.h \ - ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ + ../Geo/Geo.h ../Geo/GeoUtils.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h ../Geo/DataBase.h ../Graphics/Draw.h \ - ../Mesh/Create.h ../Geo/StepGeomDatabase.h ../Common/Colors.h Parser.h \ - OpenFile.h ../Common/CommandLine.h FunctionManager.h ../Common/Timer.h \ - ../Graphics/CreateFile.h ../Common/Visibility.h + ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Nurbs.h ../Geo/CAD.h \ + ../Graphics/Draw.h ../Mesh/Create.h ../Geo/StepGeomDatabase.h \ + ../Common/Colors.h Parser.h OpenFile.h ../Common/CommandLine.h \ + FunctionManager.h ../Common/Timer.h ../Graphics/CreateFile.h \ + ../Common/Visibility.h OpenFile.o: OpenFile.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h \ diff --git a/TODO b/TODO index 46254647dc..e6c819dc86 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,9 @@ -$Id: TODO,v 1.32 2004-02-20 17:57:58 geuzaine Exp $ +$Id: TODO,v 1.33 2004-02-28 00:48:47 geuzaine Exp $ + +should save only those options that differ from the default values (or +at least make this behaviour optional) + +******************************************************************** degre2: remove from after each 1d/2d/3d step, and add a global "add_degre2_nodes" and "remove_degre2_nodes" menu @@ -39,20 +44,16 @@ The "Symmetry" operation should be renamed "Reflection" ******************************************************************** -We sould somehow keep track (or compute) the min/max for each time -step. - -******************************************************************** - Memory leaks, memory leaks - start with mesh_domain() and the parser - check all calls to Tree_Replace: we shouldn't use it with trees of -pointers, since we loose the original pointer when we actually do a -'replace' + pointers, since we loose the original pointer when we actually do a + 'replace' -- check all calls to Tree_Insert, and test the return value +- check all calls to Tree_Insert, and test the return value (if we + don't do the insert, free the data!) ******************************************************************** diff --git a/benchmarks/2d/machine/Rotor.geo b/benchmarks/2d/machine/Rotor.geo index ed8c11cdd1..24fbe473cb 100644 --- a/benchmarks/2d/machine/Rotor.geo +++ b/benchmarks/2d/machine/Rotor.geo @@ -5,8 +5,8 @@ NbrSect_ = NbrSect; NbrLine_ = NbrLine; L_[]=L[]; Printf("Copy lines"); Call CopyLines; -LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = RotorSlotOpening; dPhysNum_ = 0; -Printf("Rotor slot openings : physical surface %g", PhysNum_); +LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = RotorSlotOpening; dPhysNum_ = 1; +Printf("Rotor slot openings"); Call CopySlot; geuz1[{0:NbrSect_-1}] = geuz[{0:NbrSect_-1}]; diff --git a/benchmarks/2d/machine/Rotor3kW.geo b/benchmarks/2d/machine/Rotor3kW.geo index a064cfa4ea..9b62c47262 100644 --- a/benchmarks/2d/machine/Rotor3kW.geo +++ b/benchmarks/2d/machine/Rotor3kW.geo @@ -49,8 +49,7 @@ RR = (h2-Rsl*(1+1/Sin(Pi/NbrSect)))/(1-1/Sin(Pi/NbrSect)); RX2 = RR*Cos(Pi/NbrSect) ; RY2 = RR*Sin(Pi/NbrSect) ; - -Point(0) = {0,0,0,p}; +//Point(0) = {0,0,0,p}; dP=newp-1; Point(dP+1) = {d1/2,Y1,0,pslo}; diff --git a/benchmarks/2d/machine/Stator.geo b/benchmarks/2d/machine/Stator.geo index 06b1cb8135..c64f774958 100644 --- a/benchmarks/2d/machine/Stator.geo +++ b/benchmarks/2d/machine/Stator.geo @@ -10,8 +10,8 @@ Printf("Stator conductors : physical ssurfaces %g to %g", PhysNum_, PhysNum_+(Nb Call CopySlot; -LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = StatorSlotOpening; dPhysNum_ = 0; -Printf("Stator slot openings : physical surface %g", PhysNum_); +LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = StatorSlotOpening; dPhysNum_ = 1; +Printf("Stator slot openings"); Call CopySlot; diff --git a/benchmarks/2d/machine2/Stator1.geo b/benchmarks/2d/machine2/Stator1.geo index ccc87ef7f5..887cc0b364 100644 --- a/benchmarks/2d/machine2/Stator1.geo +++ b/benchmarks/2d/machine2/Stator1.geo @@ -36,7 +36,7 @@ R_=54.9; //R_=54.3; -Point(0) = {0,0,0,psl}; +//Point(0) = {0,0,0,psl}; For i In {0:NbrSect-1} For j In {0:1} diff --git a/benchmarks/3d/p19.geo b/benchmarks/3d/p19.geo index e8946cf4d6..ac2e2e30d7 100644 --- a/benchmarks/3d/p19.geo +++ b/benchmarks/3d/p19.geo @@ -1,6 +1,6 @@ // This factor has to be modified in // order to control mesh size -fact = .1 ; +fact = 0.5 ; rondelle = fact * 0.01; iris = fact * 0.004; @@ -108,7 +108,7 @@ Coherence; //Characteristic Length {58,71} = 0.01; -Point(85) = {0.0,0.0,0.0,1.0}; +//Point(85) = {0.0,0.0,0.0,1.0}; Surface Loop(158) = {67,27,43,47,51,55,59,63,68}; Volume(159) = {158}; Surface Loop(159) = {112,29,84,67,125,92,96,100,104,108,116,120,124}; diff --git a/benchmarks/3d/solid1.geo b/benchmarks/3d/solid1.geo index 4f90879d24..9d223ba2f7 100644 --- a/benchmarks/3d/solid1.geo +++ b/benchmarks/3d/solid1.geo @@ -2761,7 +2761,7 @@ Line Loop (72) = {5353,5348,-5352,-5368}; Plane Surface (5316) = {72}; Line Loop (73) = {5364,5349,-5353,-5369}; Plane Surface (5321) = {73}; -Triangulation Surface (6477) = (120,40) +Triangulation Surface {6477} = (120,40) { -1.04534E+00, 6.28618E-02, 1.20650E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00, -9.70797E-01, 1.37391E-01, 1.20650E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00, @@ -2926,7 +2926,7 @@ Triangulation Surface (6477) = (120,40) 3,114,115,116, 3,117,118,119 }; -Triangulation Surface (6487) = (237,79) +Triangulation Surface {6487} = (237,79) { -1.12851E+00, 1.93246E-01, 9.93140E-01, 1.04528E-01,-9.94522E-01,-0.00000E+00, -1.10820E+00, 1.94310E-01, 9.93140E-01,-0.00000E+00,-1.00000E+00,-0.00000E+00, @@ -3247,7 +3247,7 @@ Triangulation Surface (6487) = (237,79) 3,231,232,233, 3,234,235,236 }; -Triangulation Surface (6338) = (216,72) +Triangulation Surface {6338} = (216,72) { -1.19710E+00, 2.77556E-17, 1.20650E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.19033E+00, 3.40206E-02, 1.20650E+00, 9.23880E-01,-3.82683E-01,-0.00000E+00, @@ -3540,7 +3540,7 @@ Triangulation Surface (6338) = (216,72) 3,210,211,212, 3,213,214,215 }; -Triangulation Surface (6207) = (240,80) +Triangulation Surface {6207} = (240,80) { -2.07293E-01, 1.42240E-01, 1.12395E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, 1.27000E-01, 1.42240E-01, 1.12395E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, @@ -3865,7 +3865,7 @@ Triangulation Surface (6207) = (240,80) 3,234,235,236, 3,237,238,239 }; -Triangulation Surface (6200) = (168,56) +Triangulation Surface {6200} = (168,56) { -9.14406E-01, 1.09649E-01, 1.22805E+00,-1.88488E-16, 5.70204E-01,-8.21503E-01, -9.33188E-01, 8.44194E-02, 1.20650E+00,-2.39940E-01, 7.89082E-01,-5.65489E-01, @@ -4094,7 +4094,7 @@ Triangulation Surface (6200) = (168,56) 3,162,163,164, 3,165,166,167 }; -Triangulation Surface (6204) = (42,14) +Triangulation Surface {6204} = (42,14) { 1.27000E-01, 1.64110E-01, 1.12830E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00, 1.27000E-01, 8.94403E-02, 1.20297E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00, @@ -4155,7 +4155,7 @@ Triangulation Surface (6204) = (42,14) 3,36,37,38, 3,39,40,41 }; -Triangulation Surface (5444) = (498,166) +Triangulation Surface {5444} = (498,166) { -1.35255E-01, 0.00000E+00, 7.93064E-02, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.35255E-01, 0.00000E+00, 0.00000E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, @@ -4824,7 +4824,7 @@ Triangulation Surface (5444) = (498,166) 3,492,493,494, 3,495,496,497 }; -Triangulation Surface (6158) = (204,68) +Triangulation Surface {6158} = (204,68) { -7.11640E-01,-2.92913E-02, 1.29383E+00,-3.11752E-01, 7.81831E-01,-5.39954E-01, -7.27489E-01,-3.65257E-02, 1.26638E+00, 1.11263E-01, 9.74928E-01, 1.92707E-01, @@ -5101,7 +5101,7 @@ Triangulation Surface (6158) = (204,68) 3,198,199,200, 3,201,202,203 }; -Triangulation Surface (6111) = (120,40) +Triangulation Surface {6111} = (120,40) { -1.51714E+00,-6.81022E-17, 9.93140E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, -1.30251E+00,-3.23591E-17, 9.93140E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, @@ -5266,7 +5266,7 @@ Triangulation Surface (6111) = (120,40) 3,114,115,116, 3,117,118,119 }; -Triangulation Surface (6117) = (216,72) +Triangulation Surface {6117} = (216,72) { -6.99262E-01, 0.00000E+00, 9.93140E-01,-1.00000E+00,-0.00000E+00,-0.00000E+00, -7.15827E-01, 1.15212E-01, 9.93140E-01,-9.59493E-01,-2.81733E-01,-0.00000E+00, @@ -5559,7 +5559,7 @@ Triangulation Surface (6117) = (216,72) 3,210,211,212, 3,213,214,215 }; -Triangulation Surface (6078) = (96,32) +Triangulation Surface {6078} = (96,32) { -1.02655E+00, 1.97119E-01, 1.63830E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, -1.07418E+00, 8.21329E-02, 1.63830E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, @@ -5692,7 +5692,7 @@ Triangulation Surface (6078) = (96,32) 3,90,91,92, 3,93,94,95 }; -Triangulation Surface (6084) = (96,32) +Triangulation Surface {6084} = (96,32) { -1.32156E+00, 0.00000E+00, 1.63830E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.30532E+00, 8.16493E-02, 1.63830E+00, 9.23880E-01,-3.82683E-01,-0.00000E+00, @@ -5825,7 +5825,7 @@ Triangulation Surface (6084) = (96,32) 3,90,91,92, 3,93,94,95 }; -Triangulation Surface (5499) = (96,32) +Triangulation Surface {5499} = (96,32) { -1.89551E-01, 7.85146E-02, 1.49352E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, -1.24959E-01, 5.17598E-02, 1.49352E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, @@ -5958,7 +5958,7 @@ Triangulation Surface (5499) = (96,32) 3,90,91,92, 3,93,94,95 }; -Triangulation Surface (5505) = (192,64) +Triangulation Surface {5505} = (192,64) { -2.05169E-01, 0.00000E+00, 1.49352E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.89551E-01, 7.85146E-02, 1.49352E+00, 9.23880E-01,-3.82683E-01,-0.00000E+00, @@ -6219,7 +6219,7 @@ Triangulation Surface (5505) = (192,64) 3,186,187,188, 3,189,190,191 }; -Triangulation Surface (1) = (138,46) +Triangulation Surface {1} = (138,46) { 2.81940E-01,-6.37540E-01, 1.45034E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, 4.53523E-01,-4.73034E-01, 1.45034E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, @@ -6408,7 +6408,7 @@ Triangulation Surface (1) = (138,46) 3,132,133,134, 3,135,136,137 }; -Triangulation Surface (114) = (75,25) +Triangulation Surface {114} = (75,25) { -5.49570E-01,-3.56956E-01, 8.50900E-01,-8.38628E-01,-5.44705E-01, 0.00000E+00, -4.53523E-01,-4.73034E-01, 8.50900E-01,-6.92064E-01,-7.21836E-01,-0.00000E+00, @@ -6513,7 +6513,7 @@ Triangulation Surface (114) = (75,25) 3,69,70,71, 3,72,73,74 }; -Triangulation Surface (374) = (318,106) +Triangulation Surface {374} = (318,106) { -3.11150E-01, 0.00000E+00, 2.71272E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00, -2.94291E-01, 1.01030E-01, 2.71272E+00,-9.45817E-01, 3.24699E-01, 0.00000E+00, @@ -6942,7 +6942,7 @@ Triangulation Surface (374) = (318,106) 3,312,313,314, 3,315,316,317 }; -Triangulation Surface (380) = (96,32) +Triangulation Surface {380} = (96,32) { 8.63615E-17,-3.11150E-01, 2.71272E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, 1.19072E-01,-2.87465E-01, 2.71272E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, @@ -7075,7 +7075,7 @@ Triangulation Surface (380) = (96,32) 3,90,91,92, 3,93,94,95 }; -Triangulation Surface (333) = (96,32) +Triangulation Surface {333} = (96,32) { 2.42018E-01, 2.42018E-01, 1.60274E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, 2.20016E-01, 2.20016E-01, 1.60274E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, @@ -7208,7 +7208,7 @@ Triangulation Surface (333) = (96,32) 3,90,91,92, 3,93,94,95 }; -Triangulation Surface (327) = (192,64) +Triangulation Surface {327} = (192,64) { -3.42265E-01, 0.00000E+00, 1.60274E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00, -3.25513E-01, 1.05766E-01, 1.60274E+00,-9.51057E-01, 3.09017E-01, 0.00000E+00, @@ -7469,7 +7469,7 @@ Triangulation Surface (327) = (192,64) 3,186,187,188, 3,189,190,191 }; -Triangulation Surface (283) = (120,40) +Triangulation Surface {283} = (120,40) { -3.79571E-01, 1.57224E-01, 5.46100E-01, 0.00000E+00, 0.00000E+00, 1.00000E+00, -3.12880E-01, 2.57034E-01, 5.46100E-01, 0.00000E+00, 0.00000E+00, 1.00000E+00, @@ -7634,7 +7634,7 @@ Triangulation Surface (283) = (120,40) 3,114,115,116, 3,117,118,119 }; -Triangulation Surface (272) = (120,40) +Triangulation Surface {272} = (120,40) { -4.07731E-01,-1.68888E-01, 0.00000E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00, -1.24959E-01,-5.17598E-02, 0.00000E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00, @@ -7799,7 +7799,7 @@ Triangulation Surface (272) = (120,40) 3,114,115,116, 3,117,118,119 }; -Triangulation Surface (277) = (228,76) +Triangulation Surface {277} = (228,76) { -4.41325E-01, 0.00000E+00, 5.46100E-01,-1.00000E+00, 0.00000E+00, 0.00000E+00, -4.24959E-01, 1.19068E-01, 5.46100E-01,-9.62917E-01, 2.69797E-01, 0.00000E+00, @@ -8108,7 +8108,7 @@ Triangulation Surface (277) = (228,76) 3,222,223,224, 3,225,226,227 }; -Triangulation Surface (76) = (114,38) +Triangulation Surface {76} = (114,38) { 6.46815E-01, 1.05239E-01, 8.50900E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, 3.97007E-01, 6.95668E-02, 8.50900E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, @@ -8265,7 +8265,7 @@ Triangulation Surface (76) = (114,38) 3,108,109,110, 3,111,112,113 }; -Triangulation Surface (132) = (6,2) +Triangulation Surface {132} = (6,2) { -2.81940E-01,-6.37540E-01, 1.45034E+00, 0.00000E+00,-1.00000E+00, 0.00000E+00, -2.81940E-01,-6.37540E-01, 8.50900E-01, 0.00000E+00,-1.00000E+00, 0.00000E+00, @@ -8278,7 +8278,7 @@ Triangulation Surface (132) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (129) = (6,2) +Triangulation Surface {129} = (6,2) { 2.81940E-01,-6.37540E-01, 8.50900E-01, 6.92064E-01,-7.21836E-01, 0.00000E+00, 4.53523E-01,-4.73034E-01, 8.50900E-01, 6.92064E-01,-7.21836E-01, 0.00000E+00, @@ -8291,7 +8291,7 @@ Triangulation Surface (129) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (126) = (66,22) +Triangulation Surface {126} = (66,22) { 4.53523E-01, 4.73034E-01, 1.45034E+00, 6.92064E-01, 7.21836E-01, 0.00000E+00, 5.49570E-01, 3.56956E-01, 1.45034E+00, 8.38628E-01, 5.44705E-01, 0.00000E+00, @@ -8384,7 +8384,7 @@ Triangulation Surface (126) = (66,22) 3,60,61,62, 3,63,64,65 }; -Triangulation Surface (123) = (6,2) +Triangulation Surface {123} = (6,2) { 4.53523E-01, 4.73034E-01, 8.50900E-01, 6.92064E-01, 7.21836E-01, 0.00000E+00, 2.81940E-01, 6.37540E-01, 8.50900E-01, 6.92064E-01, 7.21836E-01, 0.00000E+00, @@ -8397,7 +8397,7 @@ Triangulation Surface (123) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (120) = (6,2) +Triangulation Surface {120} = (6,2) { -2.81940E-01, 6.37540E-01, 8.50900E-01, 0.00000E+00, 1.00000E+00, 0.00000E+00, -2.81940E-01, 6.37540E-01, 1.45034E+00, 0.00000E+00, 1.00000E+00, 0.00000E+00, @@ -8410,7 +8410,7 @@ Triangulation Surface (120) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (117) = (6,2) +Triangulation Surface {117} = (6,2) { -2.81940E-01, 6.37540E-01, 8.50900E-01,-6.92064E-01, 7.21836E-01, 0.00000E+00, -4.53523E-01, 4.73034E-01, 8.50900E-01,-6.92064E-01, 7.21836E-01, 0.00000E+00, @@ -8423,7 +8423,7 @@ Triangulation Surface (117) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (71) = (6,2) +Triangulation Surface {71} = (6,2) { -4.53523E-01,-4.73034E-01, 8.50900E-01,-6.92064E-01,-7.21836E-01, 0.00000E+00, -2.81940E-01,-6.37540E-01, 8.50900E-01,-6.92064E-01,-7.21836E-01, 0.00000E+00, @@ -8436,7 +8436,7 @@ Triangulation Surface (71) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (229) = (216,72) +Triangulation Surface {229} = (216,72) { -4.10845E-01, 0.00000E+00, 8.50900E-01,-1.00000E+00, 0.00000E+00, 0.00000E+00, -3.94203E-01, 1.15748E-01, 8.50900E-01,-9.59493E-01, 2.81733E-01, 0.00000E+00, @@ -8729,7 +8729,7 @@ Triangulation Surface (229) = (216,72) 3,210,211,212, 3,213,214,215 }; -Triangulation Surface (5266) = (105,35) +Triangulation Surface {5266} = (105,35) { -1.06301E+00, 4.26720E-01, 9.01700E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, -4.97347E-01, 4.26720E-01, 9.01700E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, @@ -8874,7 +8874,7 @@ Triangulation Surface (5266) = (105,35) 3,99,100,101, 3,102,103,104 }; -Triangulation Surface (5271) = (6,2) +Triangulation Surface {5271} = (6,2) { -4.95300E-01,-4.26720E-01, 1.45034E+00, 9.51597E-01,-3.07347E-01, 0.00000E+00, -4.49983E-01,-2.86411E-01, 1.45034E+00, 9.51597E-01,-3.07347E-01, 0.00000E+00, @@ -8887,7 +8887,7 @@ Triangulation Surface (5271) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (5276) = (6,2) +Triangulation Surface {5276} = (6,2) { -4.49983E-01, 2.86411E-01, 1.45034E+00, 9.51597E-01, 3.07347E-01, 0.00000E+00, -4.95300E-01, 4.26720E-01, 1.45034E+00, 9.51597E-01, 3.07347E-01, 0.00000E+00, @@ -8900,7 +8900,7 @@ Triangulation Surface (5276) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (5281) = (42,14) +Triangulation Surface {5281} = (42,14) { -4.49983E-01,-2.86411E-01, 1.45034E+00, 8.43612E-01, 5.36953E-01, 0.00000E+00, -5.02849E-01,-1.77928E-01, 1.45034E+00, 9.42724E-01, 3.33574E-01,-0.00000E+00, @@ -8961,7 +8961,7 @@ Triangulation Surface (5281) = (42,14) 3,36,37,38, 3,39,40,41 }; -Triangulation Surface (5286) = (30,10) +Triangulation Surface {5286} = (30,10) { -5.45113E-01,-4.26720E-01, 9.01700E-01,-0.00000E+00,-1.00000E+00,-0.00000E+00, -5.45113E-01,-4.26720E-01, 1.40970E+00,-0.00000E+00,-1.00000E+00,-0.00000E+00, @@ -9006,7 +9006,7 @@ Triangulation Surface (5286) = (30,10) 3,24,25,26, 3,27,28,29 }; -Triangulation Surface (5291) = (30,10) +Triangulation Surface {5291} = (30,10) { -5.45113E-01, 4.26720E-01, 1.91770E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00, -5.45113E-01, 4.26720E-01, 1.40970E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00, @@ -9051,7 +9051,7 @@ Triangulation Surface (5291) = (30,10) 3,24,25,26, 3,27,28,29 }; -Triangulation Surface (5296) = (108,36) +Triangulation Surface {5296} = (108,36) { -4.95300E-01,-4.26720E-01, 1.91770E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, -9.57334E-01,-1.50868E-01, 1.91770E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, @@ -9200,7 +9200,7 @@ Triangulation Surface (5296) = (108,36) 3,102,103,104, 3,105,106,107 }; -Triangulation Surface (5301) = (12,4) +Triangulation Surface {5301} = (12,4) { -1.25222E+00,-4.26720E-01, 9.01700E-01, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.25222E+00,-4.26720E-01, 1.40970E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, @@ -9221,7 +9221,7 @@ Triangulation Surface (5301) = (12,4) 3,6,7,8, 3,9,10,11 }; -Triangulation Surface (5306) = (12,4) +Triangulation Surface {5306} = (12,4) { -1.25222E+00,-5.35940E-01, 9.01700E-01,-0.00000E+00,-1.00000E+00,-0.00000E+00, -1.25222E+00,-5.35940E-01, 1.40970E+00,-0.00000E+00,-1.00000E+00,-0.00000E+00, @@ -9242,7 +9242,7 @@ Triangulation Surface (5306) = (12,4) 3,6,7,8, 3,9,10,11 }; -Triangulation Surface (5311) = (24,8) +Triangulation Surface {5311} = (24,8) { -1.63551E+00, 5.35940E-01, 1.91770E+00,-1.00000E+00,-0.00000E+00,-0.00000E+00, -1.63551E+00, 5.35940E-01, 1.40970E+00,-1.00000E+00,-0.00000E+00,-0.00000E+00, @@ -9279,7 +9279,7 @@ Triangulation Surface (5311) = (24,8) 3,18,19,20, 3,21,22,23 }; -Triangulation Surface (5316) = (12,4) +Triangulation Surface {5316} = (12,4) { -1.25222E+00, 5.35940E-01, 1.91770E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00, -1.25222E+00, 5.35940E-01, 1.40970E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00, @@ -9300,7 +9300,7 @@ Triangulation Surface (5316) = (12,4) 3,6,7,8, 3,9,10,11 }; -Triangulation Surface (5321) = (12,4) +Triangulation Surface {5321} = (12,4) { -1.25222E+00, 5.35940E-01, 9.01700E-01, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.25222E+00, 5.35940E-01, 1.40970E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, diff --git a/benchmarks/3d/solid2.geo b/benchmarks/3d/solid2.geo index 8a9496ff81..568524e23d 100644 --- a/benchmarks/3d/solid2.geo +++ b/benchmarks/3d/solid2.geo @@ -359,7 +359,7 @@ Plane Surface (92) = {13,14}; Line Loop (15) = {61}; Line Loop (16) = {62}; Plane Surface (104) = {15,16}; -Triangulation Surface (2) = (11592,3864) +Triangulation Surface {2} = (11592,3864) { 4.53788E-01, 2.09945E-01,-6.12303E-17,-9.07575E-01,-4.19889E-01,-1.22461E-16, 4.28429E-01, 2.57777E-01,-6.12303E-17,-8.56857E-01,-5.15554E-01,-1.22461E-16, @@ -15820,7 +15820,7 @@ Triangulation Surface (2) = (11592,3864) 3,11586,11587,11588, 3,11589,11590,11591 }; -Triangulation Surface (122) = (303,101) +Triangulation Surface {122} = (303,101) { 1.15853E+00,-1.98904E-01, 2.09057E-02,-0.00000E+00, 9.94522E-01,-1.04528E-01, 1.15853E+00,-1.90211E-01,-6.18034E-02,-0.00000E+00, 9.51057E-01, 3.09017E-01, @@ -16229,7 +16229,7 @@ Triangulation Surface (122) = (303,101) 3,297,298,299, 3,300,301,302 }; -Triangulation Surface (116) = (360,120) +Triangulation Surface {116} = (360,120) { -2.20717E-01, 1.09959E+00,-2.03184E-01, 7.35724E-01,-0.00000E+00, 6.77282E-01, -1.83178E-01, 5.29249E-01,-2.37583E-01, 6.10593E-01,-0.00000E+00, 7.91944E-01, @@ -16714,7 +16714,7 @@ Triangulation Surface (116) = (360,120) 3,354,355,356, 3,357,358,359 }; -Triangulation Surface (92) = (360,120) +Triangulation Surface {92} = (360,120) { -1.42784E-01,-7.69678E-01,-2.63842E-01, 4.75947E-01,-0.00000E+00, 8.79474E-01, -1.26073E-01,-1.41379E+00,-2.72223E-01, 4.20245E-01,-0.00000E+00, 9.07411E-01, @@ -17199,7 +17199,7 @@ Triangulation Surface (92) = (360,120) 3,354,355,356, 3,357,358,359 }; -Triangulation Surface (104) = (303,101) +Triangulation Surface {104} = (303,101) { -7.85971E-01,-1.90211E-01,-6.18034E-02,-0.00000E+00, 9.51057E-01, 3.09017E-01, -7.85971E-01,-1.48629E-01,-1.33826E-01,-0.00000E+00, 7.43145E-01, 6.69131E-01, diff --git a/benchmarks/3d/surface3113.geo b/benchmarks/3d/surface3113.geo index e57c0588d5..b28d8680fd 100644 --- a/benchmarks/3d/surface3113.geo +++ b/benchmarks/3d/surface3113.geo @@ -108,5 +108,3 @@ Circle (2214) = {2213,2211,2214} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; Circle (2215) = {2214,2211,2215} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; Line Loop (1003113) = {-26, -6, 25, 16,216,213,214,215,416,413,414,415,616,613,614,615,816,813,814,815,1016,1013,1014,1015,1216,1213,1214,1215,1416,1413,1414,1415,1616,1613,1614,1615,1816,1813,1814,1815,2016,2013,2014,2015,2216,2213,2214,2215}; Plane Surface (3113) = {1003113}; -Line Loop (1003113) = {-26, -6, 25, 16,216,213,214,215,416,413,414,415,616,613,614,615,816,813,814,815,1016,1013,1014,1015,1216,1213,1214,1215,1416,1413,1414,1415,1616,1613,1614,1615,1816,1813,1814,1815,2016,2013,2014,2015,2216,2213,2214,2215}; -Plane Surface (3113) = {1003113}; diff --git a/benchmarks/misc/500views.geo b/benchmarks/misc/500views.geo index 233757d778..e1601849ba 100644 --- a/benchmarks/misc/500views.geo +++ b/benchmarks/misc/500views.geo @@ -6,7 +6,8 @@ View.Visible = 0; For i In {1:250} -Include "../../tutorial/view1.pos" ; -Include "../../tutorial/view2.pos" ; +Printf("i=%g", i); +Merge "../../tutorial/view1.pos" ; +Merge "../../tutorial/view2.pos" ; EndFor diff --git a/benchmarks/stl/Coupe.stl.gz b/benchmarks/stl/Coupe.stl.gz new file mode 100644 index 0000000000000000000000000000000000000000..8a93b20ce0a723107282f8ece9adf44ac27aa52b GIT binary patch literal 23465 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 literal 0 HcmV?d00001 diff --git a/benchmarks/stl/TwoObjects.stl.gz b/benchmarks/stl/TwoObjects.stl.gz new file mode 100644 index 0000000000000000000000000000000000000000..510ba10412c285527e3c4aa213cf2b4ab4a1e523 GIT binary patch literal 44937 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 literal 0 HcmV?d00001 diff --git a/doc/CREDITS b/doc/CREDITS index 2d89cbd527..bc8b93bcfb 100644 --- a/doc/CREDITS +++ b/doc/CREDITS @@ -1,4 +1,4 @@ -$Id: CREDITS,v 1.10 2004-02-20 17:58:01 geuzaine Exp $ +$Id: CREDITS,v 1.11 2004-02-28 00:48:57 geuzaine Exp $ Gmsh is copyright (C) 1997-2004 @@ -54,9 +54,10 @@ Special thanks to David Colignon <David.Colignon at univ.u-3mrs.fr> for new colormaps; Patrick Dular <patrick.dular at ulg.ac.be> for transfinite mesh bug fixes; Laurent Stainier <l.stainier at ulg.ac.be> for the Mac OS port and the tensor display code; Nicolas Tardieu -<nicolas.tardieu at edf.fr> and Pierre Badel <badel at freesurf.fr> -for help with the GSL integration and Marc Ume <Marc.Ume at -digitalgraphics.be> for the original list code. +<nicolas.tardieu at edf.fr> for help with the GSL integration and the +new STL to elementary geometry interface; Pierre Badel <badel at +freesurf.fr> for help with the GSL integration; and Marc Ume <Marc.Ume +at digitalgraphics.be> for the original list code. Special thanks also to Bill Spitzak <spitzak at users.sourceforge.net>, Michael Sweet <easysw at diff --git a/doc/VERSIONS b/doc/VERSIONS index b347d4a3a6..c6040da26c 100644 --- a/doc/VERSIONS +++ b/doc/VERSIONS @@ -1,4 +1,4 @@ -$Id: VERSIONS,v 1.185 2004-02-20 17:58:01 geuzaine Exp $ +$Id: VERSIONS,v 1.186 2004-02-28 00:48:57 geuzaine Exp $ New in 1.51: initial support for visualizing mesh partitions; integrated version 2.0 of the MSH mesh file format; new option to @@ -6,8 +6,11 @@ compute post-processing ranges (min/max) per time step; Multiple views can now be combined into multi time step ones (e.g. for programs that generate data one time step at a time); new syntax: #var[] returns the size of the list var[]; enhanced "gmsh -convert"; temporary and error -files are now created in home directory to avoid file permission -issues; new 3D arrows; better lighting support; +files are now created in the home directory to avoid file permission +issues; new 3D arrows; better lighting support; STL facets can now be +converted into individual geometrical surfaces; many other small +improvements and bug fixes (multi timestep tensors, color by physical +entity, parser cleanup, etc.); New in 1.50: small changes to the visibility browser + made visibility scriptable (new Show/Hide commands); fixed (rare) crash when deleting diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi index 5a8ebd42b0..1b1878704e 100644 --- a/doc/texinfo/gmsh.texi +++ b/doc/texinfo/gmsh.texi @@ -1,5 +1,5 @@ \input texinfo.tex @c -*-texinfo-*- -@c $Id: gmsh.texi,v 1.98 2004-02-07 01:40:34 geuzaine Exp $ +@c $Id: gmsh.texi,v 1.99 2004-02-28 00:48:57 geuzaine Exp $ @c @c Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle @c @@ -1512,12 +1512,8 @@ the ruled surface's identification number; the @var{expression-list} on the right hand side should the identification number of a single line loop, composed of either three or four elementary lines. -@c todo: -@c @item Triangulation Surface ( @var{expression} ) = ( @var{expression}, @var{expression} ) @{ @var{expression-list} @} @{ @var{expression-list} @}; - @c todo: @c @item Trimmed Surface ( @var{expression} ) = @{ @var{expression}, @{ @var{expression-list} @} @}; - @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 @@ -1704,6 +1700,12 @@ Show the entity @var{char-expression}, if @code{General.VisibilityMode} is set to @code{0} or @code{1} (@var{char-expression} can for example be @code{"*"}). +@c @item Triangulation Surface @{ @var{expression} @} = ( @var{expression}, @var{expression} ) @{ @var{expression-list} @} @{ @var{expression-list} @}; +@c Adds a triangulation to the surface @var{expression}, originally defined by +@c a list of edge loops (see @ref{Surfaces}; the surface may be planar or +@c anything else). The triangulation is used to represent the shape of the +@c surface. + @c todo: @c @item Intersect; @c Intersects all lines. diff --git a/doc/texinfo/opt_geometry.texi b/doc/texinfo/opt_geometry.texi index 4f84c1600c..67a8e3a298 100644 --- a/doc/texinfo/opt_geometry.texi +++ b/doc/texinfo/opt_geometry.texi @@ -104,6 +104,16 @@ Global geometry scaling factor@* Default value: @code{1}@* Saved in: @code{General.OptionsFileName} +@item Geometry.StlCreateElementary +Treat each STL input face as a new geometrical surface@* +Default value: @code{1}@* +Saved in: @code{General.OptionsFileName} + +@item Geometry.StlCreatePhysical +Automatically create physical entities when importing STL faces as geometrical surfaces@* +Default value: @code{1}@* +Saved in: @code{General.OptionsFileName} + @item Geometry.Surfaces Display geometry surfaces?@* Default value: @code{0}@* diff --git a/doc/texinfo/opt_mesh.texi b/doc/texinfo/opt_mesh.texi index 2d4d75f6dc..4960961986 100644 --- a/doc/texinfo/opt_mesh.texi +++ b/doc/texinfo/opt_mesh.texi @@ -20,7 +20,7 @@ Default value: @code{1}@* Saved in: @code{General.OptionsFileName} @item Mesh.ColorCarousel -Use a `color by region' coloring scheme (0=no, 1=by geometrical entity, 2=by partition)@* +Color mesh by region? (0=no, 1=by elementary entity, 2=by physical entity, 3=by partition)@* Default value: @code{1}@* Saved in: @code{General.OptionsFileName} -- GitLab