diff --git a/Common/Context.h b/Common/Context.h
index f607e15cecf7b96dbadbc846e7eae5ab0e6bbc1e..4f4cad68fdcf3db95915f49516592ffdc3b25be5 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -70,6 +70,8 @@ class Context_T {
   int solver_position[2]; // position of the solver windows on the screen
   int plugin_position[2]; // position of the plugin window on the screen
   int plugin_size[2]; // size of the plugin window on the screen
+  int field_position[2]; // position of the field window on the screen
+  int field_size[2]; // size of the field window on the screen
   int file_chooser_position[2]; // position of the file chooser window on the screen
   int system_menu_bar; // use the system menu bar on MacOS?
   int batch; // 0=full gfx; -1=just parse; 1,2,3=batch 1D, 2D, 3D mesh 
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index c130d8673e652f78b810933cf2f3bf62622b081d..2dccb4358f60402c4d6b5a62e24776bf4d763116 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -693,6 +693,15 @@ StringXNumber GeneralOptions_Number[] = {
   { F|S, "PluginHeight" , opt_general_plugin_size1 , 100. , 
     "Height (in pixels) of the plugin window" }, 
 
+  { F|S, "FieldPositionX" , opt_general_field_position0 , 650. , 
+    "Horizontal position (in pixels) of the upper left corner of the field window" }, 
+  { F|S, "FieldPositionY" , opt_general_field_position1 , 550. , 
+    "Vertical position (in pixels) of the upper left corner of the field window" }, 
+  { F|S, "FieldWidth" , opt_general_field_size0 , 100. , 
+    "Width (in pixels) of the field window" }, 
+  { F|S, "FieldHeight" , opt_general_field_size1 , 100. , 
+    "Height (in pixels) of the field window" }, 
+
   { F|O, "PointSize" , opt_general_point_size , 3. , 
     "Display size of points (in pixels)" },
   { F|O, "PolygonOffsetAlwaysOn" , opt_general_polygon_offset_always , 0. , 
diff --git a/Common/Makefile b/Common/Makefile
index 7528f3b2bfb68f69111bb2e6d28f8b373201df22..3e64eb5d99108898d0aeced365bd44d11cfb5aee 100644
--- a/Common/Makefile
+++ b/Common/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.162 2008-03-11 22:30:31 geuzaine Exp $
+# $Id: Makefile,v 1.163 2008-03-18 08:41:20 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -73,47 +73,56 @@ Octree.o: Octree.cpp Octree.h OctreeInternals.h
 OctreeInternals.o: OctreeInternals.cpp Message.h OctreeInternals.h
 Options.o: Options.cpp GmshUI.h GmshDefines.h Message.h \
   ../Graphics/Draw.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Post/PView.h ../Post/PViewData.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Mesh/Generator.h Context.h Options.h \
-  ../Mesh/BackgroundMesh.h ../Plugin/PluginManager.h ../Plugin/Plugin.h \
-  ../Common/Options.h ../Common/Message.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Mesh/Generator.h \
+  Context.h Options.h ../Post/ColorTable.h ../Mesh/BackgroundMesh.h \
+  ../Plugin/PluginManager.h ../Plugin/Plugin.h ../Common/Options.h \
+  ../Common/Message.h ../Post/PView.h ../Post/PViewDataList.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Fltk/Solvers.h ../Fltk/GUI.h \
   ../Fltk/Opengl_Window.h ../Fltk/Colorbar_Window.h ../Common/GmshUI.h \
-  ../Fltk/Popup_Button.h ../Fltk/SpherePosition_Widget.h
+  ../Post/ColorTable.h ../Fltk/Popup_Button.h \
+  ../Fltk/SpherePosition_Widget.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h
 CommandLine.o: CommandLine.cpp GmshUI.h GmshDefines.h GmshVersion.h \
   Message.h ../Parser/OpenFile.h CommandLine.h Context.h Options.h \
   ../Post/ColorTable.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
-  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SBoundingBox3d.h ../Post/PView.h ../Post/PViewData.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h ../Parser/CreateFile.h OS.h
+  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/SVector3.h ../Geo/GFace.h \
+  ../Geo/GEdgeLoop.h ../Geo/Pair.h ../Geo/GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h \
+  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Post/PView.h ../Parser/CreateFile.h OS.h
 Gmsh.o: Gmsh.cpp ../Parser/Parser.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h Options.h ../Post/ColorTable.h CommandLine.h OS.h \
   ../Plugin/PluginManager.h ../Plugin/Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Post/PView.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/PViewData.h \
-  ../Post/AdaptiveViews.h ../Common/GmshMatrix.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h
+  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/AdaptiveViews.h \
+  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/GmshMatrix.h \
+  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h
 OS.o: OS.cpp Message.h
 Visibility.o: Visibility.cpp Visibility.h GmshDefines.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/GModel.h ../Geo/GVertex.h \
-  ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GRegion.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h ../Parser/Parser.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h \
+  ../Geo/GEdge.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GModel.h \
+  ../Geo/GFace.h ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Geo/MElement.h \
+  ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h ../Parser/Parser.h \
+  ../DataStr/List.h ../DataStr/Tree.h
 Trackball.o: Trackball.cpp Trackball.h
 VertexArray.o: VertexArray.cpp VertexArray.h ../Geo/SVector3.h \
   ../Geo/SPoint3.h Context.h ../Numeric/Numeric.h \
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 0e1ff2447342ee1602769ad28ae269ecf54b2069..48cfb649728c8f1839faa87393d0ae398b91c7de 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.387 2008-03-11 20:24:30 geuzaine Exp $
+// $Id: Options.cpp,v 1.388 2008-03-18 08:41:20 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -2447,6 +2447,34 @@ double opt_general_plugin_size1(OPT_ARGS_NUM)
   return CTX.plugin_size[1];
 }
 
+double opt_general_field_position0(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.field_position[0] = (int)val;
+  return CTX.field_position[0];
+}
+
+double opt_general_field_position1(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.field_position[1] = (int)val;
+  return CTX.field_position[1];
+}
+
+double opt_general_field_size0(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.field_size[0] = (int)val;
+  return CTX.field_size[0];
+}
+
+double opt_general_field_size1(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.field_size[1] = (int)val;
+  return CTX.field_size[1];
+}
+
 double opt_general_statistics_position0(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
diff --git a/Common/Options.h b/Common/Options.h
index 22a08795da885f134ba84b63950daae066feedd3..ce63a6ef56f094338a8fd066c817e0b2e858874b 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -254,6 +254,10 @@ double opt_general_plugin_position0(OPT_ARGS_NUM);
 double opt_general_plugin_position1(OPT_ARGS_NUM);
 double opt_general_plugin_size0(OPT_ARGS_NUM);
 double opt_general_plugin_size1(OPT_ARGS_NUM);
+double opt_general_field_position0(OPT_ARGS_NUM);
+double opt_general_field_position1(OPT_ARGS_NUM);
+double opt_general_field_size0(OPT_ARGS_NUM);
+double opt_general_field_size1(OPT_ARGS_NUM);
 double opt_general_statistics_position0(OPT_ARGS_NUM);
 double opt_general_statistics_position1(OPT_ARGS_NUM);
 double opt_general_visibility_position0(OPT_ARGS_NUM);
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index ead665a313df941b7ab1af47ea6fb35d15d7681f..01be3a1fa9ce1a35c7e86a4bd37df0ba209bf31a 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.566 2008-03-11 20:03:09 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.567 2008-03-18 08:41:20 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -24,6 +24,7 @@
 #include <time.h>
 #include <map>
 #include <string>
+#include <sstream>
 
 #include "GmshUI.h"
 #include "Message.h"
@@ -137,6 +138,7 @@ void window_cb(CALLBACK_ARGS)
     WID->g_window->iconize();
     if(WID->opt_window->shown()) WID->opt_window->iconize();
     if(WID->plugin_window->shown()) WID->plugin_window->iconize();
+    if(WID->field_window->shown()) WID->field_window->iconize();
     if(WID->vis_window->shown()) WID->vis_window->iconize();
     if(WID->clip_window->shown()) WID->clip_window->iconize();
     if(WID->manip_window->shown()) WID->manip_window->iconize();
@@ -165,6 +167,7 @@ void window_cb(CALLBACK_ARGS)
     WID->g_window->show();
     if(WID->opt_window->shown()) WID->opt_window->show();
     if(WID->plugin_window->shown()) WID->plugin_window->show();
+    if(WID->field_window->shown()) WID->field_window->show();
     if(WID->context_geometry_window->shown()) WID->context_geometry_window->show();
     if(WID->context_mesh_window->shown()) WID->context_mesh_window->show();
     for(int i = 0; i < MAXSOLVERS; i++) {
@@ -4492,13 +4495,13 @@ void view_all_visible_cb(CALLBACK_ARGS)
 
 void view_applybgmesh_cb(CALLBACK_ARGS)
 {
-  int index =  (int)(long)data;
+  /*int index =  (int)(long)data;
   if(index >= 0 && index < (int)PView::list.size()){
     Field *field = new PostViewField(PView::list[index]);
     BGMReset();
     BGMAddField(field);
-    fields.insert(field);
-  }
+    GModel::current()->fields.insert(field);
+  }*/
 }
 
 void view_plugin_cb(CALLBACK_ARGS)
@@ -4506,6 +4509,103 @@ void view_plugin_cb(CALLBACK_ARGS)
   WID->create_plugin_window((int)(long)data);
 }
 
+void view_field_cb(CALLBACK_ARGS)
+{
+  WID->create_field_window((int)(long)data);
+}
+
+void view_field_cancel_cb(CALLBACK_ARGS)
+{
+  WID->field_window->hide();
+}
+void view_field_delete_cb(CALLBACK_ARGS)
+{
+	FieldDialogBox *fdb=(FieldDialogBox*)data;
+	fdb->group->hide();
+	delete_field(fdb->current_field->id,CTX.filename);
+	WID->create_field_window(0);
+}
+void view_field_set_size_btn_cb(CALLBACK_ARGS){
+	FieldDialogBox *fdb=(FieldDialogBox*)data;
+	fdb->group->hide();
+	int v=((Fl_Check_Button*)w)->value();
+	if(v)
+		set_background_field(fdb->current_field->id,CTX.filename);
+	else
+		set_background_field(-1,CTX.filename);
+	WID->create_field_window(fdb->current_field->id);
+}
+void view_field_new_cb(CALLBACK_ARGS)
+{
+	Fl_Menu_Button* mb=((Fl_Menu_Button*)w);
+	int id=GModel::current()->fields.new_id();
+	add_field(id,mb->text(),CTX.filename);
+	WID->create_field_window(id);
+}
+void view_field_apply_cb(CALLBACK_ARGS){
+	FieldDialogBox *fdb=(FieldDialogBox*)data;
+	fdb->save_values();
+	int selected=WID->field_browser->value();
+		std::ostringstream sstream("");
+		sstream<<fdb->current_field->id;
+		sstream<<" "<<fdb->current_field->get_name();
+	WID->field_browser->text(selected,sstream.str().c_str());
+}
+void view_field_revert_cb(CALLBACK_ARGS){
+	FieldDialogBox *fdb=(FieldDialogBox*)data;
+	fdb->load_field(fdb->current_field);
+}
+void view_field_browser_cb(CALLBACK_ARGS)
+{
+	int selected=WID->field_browser->value();
+	if(WID->selected_field_dialog_box){
+		WID->selected_field_dialog_box->group->hide();
+	}
+	if(!selected)return;
+	Field *f=(Field*)WID->field_browser->data(selected);
+	f->dialog_box()->load_field(f);
+	WID->selected_field_dialog_box=f->dialog_box();
+  f->dialog_box()->group->show();
+}
+void view_field_put_on_view_cb(CALLBACK_ARGS){
+	Fl_Menu_Button* mb=((Fl_Menu_Button*)w);
+	Field *field=((FieldDialogBox*)data)->current_field;
+	int iView;
+	sscanf(mb->text(),"View [%i]",&iView);
+	field->put_on_view(PView::list[iView]);
+	Draw();
+}
+
+void view_field_select_node_cb(CALLBACK_ARGS){
+	const char *mode="select";
+	const char *help="vertices";
+  CTX.pick_elements = 1;
+  Draw();  
+  std::vector<GVertex*> vertices, vertices_old;
+  std::vector<GEdge*> edges, edges_old;
+  std::vector<GFace*> faces, faces_old;
+  std::vector<GRegion*> regions, regions_old;
+  std::vector<MElement*> elements, elements_old;
+	opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1);
+  while(1) {
+    Msg(ONSCREEN, "Select %s\n[Press %s'q' to abort]", 
+	help, mode ? "" : "'u' to undo or ");
+
+    char ib = SelectEntity(ENT_POINT, vertices, edges, faces, regions, elements);
+		printf("char = %c\n",ib);
+    if(ib == 'q'){
+			for(std::vector<GVertex*>::iterator it=vertices.begin();it!=vertices.end();it++){
+				printf("%i\n",*it);
+			}
+      break;
+    }
+  }
+  CTX.mesh.changed = ENT_ALL;
+  CTX.pick_elements = 0;
+  Msg(ONSCREEN, "");
+  Draw();  
+}
+
 void view_plugin_input_value_cb(CALLBACK_ARGS)
 {
   double (*f)(int, int, double) = (double (*)(int, int, double)) data;
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index 78dfc83a32df07734df31d73a23ac1671513b2d9..462eaf79059595f7f6b2f221e22b358b1c8e9f1c 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -133,6 +133,16 @@ void view_combine_time_visible_cb(CALLBACK_ARGS);
 void view_combine_time_by_name_cb(CALLBACK_ARGS);
 void view_all_visible_cb(CALLBACK_ARGS);
 void view_applybgmesh_cb(CALLBACK_ARGS);
+void view_field_cb(CALLBACK_ARGS);
+void view_field_new_cb(CALLBACK_ARGS);
+void view_field_apply_cb(CALLBACK_ARGS);
+void view_field_revert_cb(CALLBACK_ARGS);
+void view_field_cancel_cb(CALLBACK_ARGS);
+void view_field_browser_cb(CALLBACK_ARGS);
+void view_field_delete_cb(CALLBACK_ARGS);
+void view_field_set_size_btn_cb(CALLBACK_ARGS);
+void view_field_put_on_view_cb(CALLBACK_ARGS);
+void view_field_select_node_cb(CALLBACK_ARGS);
 void view_plugin_cb(CALLBACK_ARGS);
 void view_plugin_browser_cb(CALLBACK_ARGS);
 void view_plugin_run_cb(CALLBACK_ARGS);
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 35bb2d7d60e1735c0d5b4567c462e33569d8d140..90e588a0921b5253150a75cd0f6f47fa45c6dd4c 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.661 2008-03-01 20:01:37 geuzaine Exp $
+// $Id: GUI.cpp,v 1.662 2008-03-18 08:41:21 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -19,7 +19,8 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
-#include <string.h>
+#include <string>
+#include <sstream>
 #include "GmshUI.h"
 #include "GmshDefines.h"
 #include "Message.h"
@@ -37,6 +38,13 @@
 #include "PluginManager.h"
 #include "Shortcut_Window.h"
 #include "PView.h"
+#include "Field.h"
+#include "GModel.h"
+
+#include "GeoStringInterface.h"
+
+#include "FL/Fl_Int_Input.H"
+#include "FL/Fl_Float_Input.H"
 
 #define NB_BUTT_SCROLL 25
 #define NB_HISTORY_MAX 1000
@@ -64,6 +72,7 @@ Fl_Menu_Item m_menubar_table[] = {
   {"&Tools", 0, 0, 0, FL_SUBMENU},
     {"&Options...",      FL_CTRL+FL_SHIFT+'n', (Fl_Callback *)options_cb, 0},
     {"Pl&ugins...",      FL_CTRL+FL_SHIFT+'u', (Fl_Callback *)view_plugin_cb, (void*)(-1)},
+    {"&Fields...",      FL_CTRL+FL_SHIFT+'f', (Fl_Callback *)view_field_cb, (void*)(-1)},
     {"&Visibility",      FL_CTRL+FL_SHIFT+'v', (Fl_Callback *)visibility_cb, 0},
     {"&Clipping Planes", FL_CTRL+FL_SHIFT+'c', (Fl_Callback *)clip_cb, 0},
     {"&Manipulator",     FL_CTRL+FL_SHIFT+'m', (Fl_Callback *)manip_cb, 0, FL_MENU_DIVIDER},
@@ -105,6 +114,7 @@ Fl_Menu_Item m_sys_menubar_table[] = {
   {"Tools", 0, 0, 0, FL_SUBMENU},
     {"Options...",      FL_META+FL_SHIFT+'n', (Fl_Callback *)options_cb, 0},
     {"Plugins...",      FL_META+FL_SHIFT+'u', (Fl_Callback *)view_plugin_cb, (void*)(-1)},
+    {"Fields...",      FL_META+FL_SHIFT+'f', (Fl_Callback *)view_field_cb, (void*)(-1)},
     {"Visibility",      FL_META+FL_SHIFT+'v', (Fl_Callback *)visibility_cb, 0},
     {"Clipping Planes", FL_META+FL_SHIFT+'c', (Fl_Callback *)clip_cb, 0},
     {"Manipulator",     FL_META+FL_SHIFT+'m', (Fl_Callback *)manip_cb, 0, FL_MENU_DIVIDER},
@@ -860,6 +870,7 @@ GUI::GUI(int argc, char **argv)
   g_window = NULL;
   opt_window = NULL;
   plugin_window = NULL;
+  field_window = NULL;
   stat_window = NULL;
   msg_window = NULL;
   vis_window = NULL;
@@ -953,6 +964,7 @@ GUI::GUI(int argc, char **argv)
   
   create_option_window();
   create_plugin_window(0);
+  create_field_window(0);
   create_message_window();
   create_statistics_window();
   create_visibility_window();
@@ -1309,6 +1321,8 @@ void GUI::set_context(Context_Item * menu_asked, int flag)
 		  (Fl_Callback *) view_options_cb, (void *)nb, 0);
 	p[j]->add("Plugins...", 'p', 
 		  (Fl_Callback *) view_plugin_cb, (void *)nb, 0);
+	p[j]->add("Fields...", 'p', 
+		  (Fl_Callback *) view_field_cb, (void *)nb, 0);
       }
 
       m_toggle_butt.push_back(b1);
@@ -3810,6 +3824,242 @@ void GUI::create_plugin_window(int numview)
   plugin_window->end();
 }
 
+void FieldDialogBox::save_values()
+{
+	std::list<Fl_Widget*>::iterator input=inputs.begin();
+	Field *f=current_field;
+	std::ostringstream sstream;
+	std::istringstream istream;
+	int i;
+	char a;
+	sstream.precision(16);
+	for(std::map<const char*,FieldOption*>::iterator it=f->options.begin();it!=f->options.end();it++){
+		FieldOption *option=it->second;
+		sstream.str("");
+		switch(option->get_type()){
+			case FIELD_OPTION_STRING:
+			case FIELD_OPTION_PATH:
+				sstream<<"\""<<((Fl_Input*)*input)->value()<<"\"";
+			break;
+			case FIELD_OPTION_INT:
+				sstream<<(int)((Fl_Value_Input*)*input)->value();
+			break;
+			case FIELD_OPTION_DOUBLE:
+				sstream<<((Fl_Value_Input*)*input)->value();
+			break;
+			case FIELD_OPTION_BOOL:
+				sstream<<(bool)((Fl_Check_Button*)*input)->value();
+			break;
+			case FIELD_OPTION_LIST:
+				sstream<<"{";
+				istream.str(((Fl_Input*)*input)->value());
+				while(istream>>i){
+					sstream<<i;
+					if(istream>>a){
+						if(a!=',')
+							Msg(GERROR, "Unexpected character \'%c\' while parsing option '%s' of field \'%s\'",a,it->first,f->id);
+						sstream<<", ";
+					}
+				}
+				sstream<<"}";
+			break;
+		}
+		if((*input)->changed()){
+			add_field_option(f->id,it->first,sstream.str().c_str(),CTX.filename);
+			(*input)->clear_changed();
+		}
+		input++;
+	}
+}
+
+void FieldDialogBox::load_field(Field *f){
+	current_field=f;
+	std::list<Fl_Widget*>::iterator input=inputs.begin();
+	for(std::map<const char*,FieldOption*>::iterator it=f->options.begin();it!=f->options.end();it++){
+		FieldOption *option=it->second;
+		std::ostringstream vstr;
+		std::list<int>::iterator list_it;;
+		switch(option->get_type()){
+			case FIELD_OPTION_STRING:
+			case FIELD_OPTION_PATH:
+				((Fl_Input*)(*input))->value(option->string().c_str());
+			break;
+			case FIELD_OPTION_INT:
+			case FIELD_OPTION_DOUBLE:
+				((Fl_Value_Input*)(*input))->value(option->numerical_value());
+			break;
+			case FIELD_OPTION_BOOL:
+				((Fl_Check_Button*)(*input))->value(option->numerical_value());
+			break;
+			case FIELD_OPTION_LIST:
+				vstr.str("");
+				for(list_it=option->list().begin();list_it!=option->list().end();list_it++){
+					if(list_it!=option->list().begin())
+						vstr<<", ";
+					vstr<<*list_it;
+				}
+				((Fl_Input*)(*input))->value(vstr.str().c_str());
+			break;
+		}
+		input++;
+	}
+  if(PView::list.size()){
+    put_on_view_btn->activate();
+    for(unsigned int i = 0; i < PView::list.size(); i++) {
+			std::ostringstream s;
+			s<<"View ["<<i<<"]";
+      put_on_view_btn->add(s.str().c_str());
+    }
+  }else{
+		put_on_view_btn->deactivate();
+	}
+	set_size_btn->value(GModel::current()->fields.background_field==f->id);
+}
+
+FieldDialogBox::FieldDialogBox(Field *f, int x, int y, int width, int height,int fontsize)
+{
+	current_field=NULL;
+	group=new Fl_Group(x, y, width, height);
+  {
+		Fl_Box *b = new Fl_Box(x, y, width, BH,f->get_name());
+		b->labelfont(FL_BOLD);
+    Fl_Tabs *o = new Fl_Tabs(x, y + BH + WB, width, height-2*BH-2*WB);
+		group->resizable(o);
+    {
+      Fl_Group *g = new Fl_Group(x, y + 2*BH + WB, width, height - 2*BH-3*WB, "Options");
+			apply_btn = new Fl_Return_Button(x+width - BB-WB ,y+ height - 2*BH -2*WB, BB, BH, "Apply");
+			apply_btn->callback(view_field_apply_cb,this);
+			revert_btn = new Fl_Button(x+width - 2*BB-2*WB ,y+ height - 2*BH -2*WB, BB, BH, "Revert");
+			revert_btn->callback(view_field_revert_cb,this);
+      Fl_Scroll *s = new Fl_Scroll(x + WB, y + 2*WB + 2*BH, width - 2 * WB, height - 4*BH - 5 * WB);
+			double yy=y+3*WB+2*BH;
+			for(std::map<const char*,FieldOption*>::iterator it=f->options.begin();it!=f->options.end();it++){
+				Fl_Widget *input;
+				switch(it->second->get_type()){
+					case FIELD_OPTION_INT:
+					case FIELD_OPTION_DOUBLE:
+						input=new Fl_Value_Input(x+WB,yy,IW,BH,it->first);
+						break;
+					case FIELD_OPTION_BOOL:
+						input=new Fl_Check_Button(x+WB,yy,BH,BH,it->first);
+						break;
+					case FIELD_OPTION_PATH:
+					case FIELD_OPTION_STRING:
+						input=new Fl_Input(x+WB,yy,IW,BH,it->first);
+					break;
+					case FIELD_OPTION_LIST:
+					/*{
+							Fl_Button *b=new Fl_Button(x+WB,yy,BH,BH);
+							b->label("@+");
+							b->callback(view_field_select_node_cb);
+						}
+						input=new Fl_Input(x+WB+2*BH,yy,IW-2*BH,BH,it->first);*/
+						input=new Fl_Input(x+WB,yy,IW,BH,it->first);
+						break;
+				}
+				input->align(FL_ALIGN_RIGHT);
+				inputs.push_back(input);
+				yy+=WB+BH;
+			}
+      o->resizable(g); // to avoid ugly resizing of tab labels
+			g->resizable(s);
+      s->end();
+      g->end();
+    }
+    {
+      Fl_Group *g = new Fl_Group(x, y + 2*BH + WB, width, height - 2*BH-3*WB, "Help");
+      Fl_Browser *o = new Fl_Browser(x + WB, y + 2*WB + 2*BH, width - 2 * WB, height - 4 * WB - 3 * BH);
+
+  //    char name[1024], copyright[256], author[256], help[4096];
+  //    p->getName(name);
+  //    p->getInfos(author, copyright, help);
+
+      o->add(" ");
+   //   add_multiline_in_browser(o, "@c@b@.", name);
+      o->add(" ");
+    //  add_multiline_in_browser(o, "", help);
+      o->add(" ");
+      //add_multiline_in_browser(o, "Author: ", author);
+      //add_multiline_in_browser(o, "Copyright (C) ", copyright);
+      o->add(" ");
+
+      g->end();
+    }
+    o->end();
+  }
+	{
+		Fl_Button *b = new Fl_Button(x+width - BB,y+ height - BH , BB, BH, "Delete");
+		b->callback(view_field_delete_cb,this);
+	}
+	put_on_view_btn = new Fl_Menu_Button(x+BB*3/2+WB,y+ height - BH ,BB*3/2,BH,"Put on view");
+	put_on_view_btn->callback(view_field_put_on_view_cb,this);
+
+	set_size_btn = new Fl_Check_Button(x,y+ height - BH ,BB*3/2,BH,"Background size");
+	set_size_btn->callback(view_field_set_size_btn_cb,this);
+
+	group->end();
+	group->hide();
+}
+
+void GUI::create_field_window(int numfield)
+{
+  int width0 = 40 * fontsize;
+  int height0 = 13 * BH + 5 * WB;
+
+  int width = (CTX.field_size[0] < width0) ? width0 : CTX.field_size[0];
+  int height = (CTX.field_size[1] < height0) ? height0 : CTX.field_size[1];
+
+  int L1 = BB;
+	int i_entry=1;
+  if(field_window) {
+		width=field_window->w();
+		height=field_window->h();
+		FieldManager &fields=GModel::current()->fields;
+		field_browser->clear();
+		for(FieldManager::iterator it=fields.begin();it!=fields.end();it++){
+			Field *field=it->second;
+			std::ostringstream sstream;
+			if(it->first==fields.background_field)
+				sstream<<"*";
+			sstream<<it->first;
+			sstream<<" "<<field->get_name();
+			field_browser->add(sstream.str().c_str(),field);
+			if(!field->dialog_box()){
+				field_window->begin();
+				field->dialog_box()=new FieldDialogBox(field, 2 * WB + L1 , WB, width - L1 - 3 * WB, height - 2*WB  ,fontsize);
+				field_window->end();
+			}
+			if(it->second->id==numfield){
+				field_browser->select(i_entry);
+				field_browser->do_callback();
+			}
+			i_entry++;
+		}
+    field_window->show();
+    return;
+  }
+
+	selected_field_dialog_box=NULL;
+  field_window = new Dialog_Window(width, height, "Fields");
+  field_window->box(GMSH_WINDOW_BOX);
+  Fl_Group *resize_box = new Fl_Group(2*WB+L1, 2*WB+BB,width-3*WB-L1, height - 3 * WB-BB);
+	resize_box->end();
+	{
+		Fl_Menu_Button *b= new Fl_Menu_Button(WB,WB,L1,BH,"New");
+		FieldManager &fields=GModel::current()->fields;
+		std::map<const std::string, FieldFactory*>::iterator it;
+		for(it=fields.map_type_name.begin();it!=fields.map_type_name.end();it++)
+			b->add(it->first.c_str());
+		b->callback(view_field_new_cb);
+	}
+  field_browser = new Fl_Hold_Browser(WB, 2*WB+BH, L1, height - 3 * WB - BH);
+  field_browser->callback(view_field_browser_cb);
+  field_window->resizable(resize_box);
+  field_window->size_range(width0, height0);
+  field_window->position(CTX.field_position[0], CTX.field_position[1]);
+  field_window->end();
+}
+
 // Create the window for the statistics
 
 void GUI::create_statistics_window()
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index 054efcc34b72c36ab07979a206a1aae691d596f4..7885788f3f9c77925358620f91ee0e95047088b6 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -55,12 +55,15 @@
 
 #include <vector>
 #include <string>
+#include <list>
 
 #include "Opengl_Window.h"
 #include "Colorbar_Window.h"
 #include "Popup_Button.h"
 #include "SpherePosition_Widget.h"
 
+#include "Field.h"
+
 // The dynamic contexts
 
 typedef struct{
@@ -108,6 +111,21 @@ struct PluginDialogBox
   Fl_Input *input[MAX_PLUGIN_OPTIONS];
 };
 
+class FieldDialogBox
+{
+  std::list<Fl_Widget*> inputs;
+  std::list<std::string> inputs_values;
+	public:
+	Field *current_field;
+  Fl_Group *group;
+	Fl_Menu_Button *put_on_view_btn;
+	Fl_Check_Button *set_size_btn;
+	Fl_Button *apply_btn,*revert_btn;
+	FieldDialogBox(Field *field,int x,int y, int width, int height,int fontsize);
+	void load_field(Field *field);
+	void save_values();
+};
+
 // The dialog for solvers
 
 struct SolverDialogBox
@@ -211,6 +229,11 @@ public:
   Fl_Return_Button *view_ok;
   Fl_Menu_Button   *view_menu_butt[2];
 
+	// Field window
+  Fl_Window        *field_window;
+	Fl_Hold_Browser  *field_browser;
+	FieldDialogBox *selected_field_dialog_box;
+
   // Plugin window
   Fl_Window        *plugin_window;
   Fl_Hold_Browser  *plugin_browser;
@@ -283,6 +306,8 @@ public:
   void create_view_options_window(int numview);
   void create_plugin_dialog_box(GMSH_Plugin *p, int x, int y, int width, int height);
   void create_plugin_window(int numview);
+	void create_field_dialog_box(Field *f, int x, int y, int width, int height);
+  void create_field_window(int numview);
   void create_visibility_window(bool redraw_only=false);
   void create_clip_window();
   void create_manip_window();
diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp
index 326720e1b7077e077ef6af7a79ca83a43cd7bb8c..7eda7b40da201e4d82cfa0d62b433b267fcabeb8 100644
--- a/Fltk/Main.cpp
+++ b/Fltk/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.120 2008-03-11 22:30:31 geuzaine Exp $
+// $Id: Main.cpp,v 1.121 2008-03-18 08:41:21 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -88,9 +88,10 @@ int main(int argc, char *argv[])
       if(CTX.bgm_filename) {
         MergeFile(CTX.bgm_filename);
         if(PView::list.size()){
-	  Field *field = new PostViewField(PView::list.back());
-	  BGMAddField(field);
-	  fields.insert(field);
+	  /*Field *field = new PostViewField(PView::list.back());
+	  GModel::current()->fields.insert(field);
+		field->set_mesh_size=true;
+		GModel::current()->mesh_size_fields.insert(field);*/
         }
         else
           Msg(GERROR, "Invalid background mesh (no view)");
@@ -170,9 +171,10 @@ int main(int argc, char *argv[])
   if(CTX.bgm_filename) {
     MergeFile(CTX.bgm_filename);
     if(PView::list.size()){
-      Field *field = new PostViewField(PView::list.back());
-      BGMAddField(field);
-      fields.insert(field);
+			/*Field *field = new PostViewField(PView::list.back());
+			GModel::current()->fields.insert(field);
+			field->set_mesh_size=true;
+			GModel::current()->mesh_size_fields.insert(field);*/
     }
     else
       Msg(GERROR, "Invalid background mesh (no view)");
diff --git a/Fltk/Makefile b/Fltk/Makefile
index 72a17fce2b5ab6254ae7518601ebfa5c379ac89d..b536ff0dab38cc4ec941433b996c1f156db26825 100644
--- a/Fltk/Makefile
+++ b/Fltk/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.174 2008-03-11 22:30:31 geuzaine Exp $
+# $Id: Makefile,v 1.175 2008-03-18 08:41:21 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -70,154 +70,188 @@ depend:
 # DO NOT DELETE THIS LINE
 Main.o: Main.cpp GUI.h Opengl_Window.h Colorbar_Window.h \
   ../Common/GmshUI.h ../Post/ColorTable.h Popup_Button.h \
-  SpherePosition_Widget.h ../Common/Gmsh.h ../Common/Message.h \
-  ../Mesh/Generator.h ../Parser/CreateFile.h ../Graphics/Draw.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Common/Context.h \
-  ../Common/Options.h ../Parser/Parser.h ../DataStr/List.h \
-  ../DataStr/Tree.h ../DataStr/avl.h ../Parser/OpenFile.h \
+  SpherePosition_Widget.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/Gmsh.h \
+  ../Common/Message.h ../Mesh/Generator.h ../Parser/CreateFile.h \
+  ../Graphics/Draw.h ../Geo/SBoundingBox3d.h ../Common/Context.h \
+  ../Common/Options.h ../Post/ColorTable.h ../Parser/Parser.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../Parser/OpenFile.h \
   ../Common/CommandLine.h Solvers.h ../Plugin/PluginManager.h \
-  ../Plugin/Plugin.h ../Post/PView.h ../Post/PViewData.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../Common/GmshMatrix.h \
-  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
-  ../Geo/gmshSurface.h ../Geo/Pair.h ../Geo/Range.h ../Geo/SPoint2.h \
-  ../Geo/SPoint3.h ../Geo/SVector3.h ../Geo/SBoundingBox3d.h \
-  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../Geo/SPoint2.h \
-  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/OctreePost.h \
-  ../Common/Octree.h ../Common/OctreeInternals.h ../Mesh/BackgroundMesh.h
+  ../Plugin/Plugin.h ../Common/Options.h ../Common/Message.h \
+  ../Post/PView.h ../Post/PViewDataList.h ../Post/AdaptiveViews.h \
+  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/GmshMatrix.h \
+  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/GPoint.h \
+  ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/GRegion.h \
+  ../Mesh/Field.h ../Mesh/BackgroundMesh.h ../Post/PView.h
 Message.o: Message.cpp ../Common/Message.h ../Common/GmshUI.h \
   ../Common/Context.h ../Common/Options.h ../Post/ColorTable.h GUI.h \
-  Opengl_Window.h Colorbar_Window.h Popup_Button.h \
-  SpherePosition_Widget.h GUI_Extras.h ../Common/OS.h
+  Opengl_Window.h Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
+  SpherePosition_Widget.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h GUI_Extras.h ../Common/OS.h
 GUI.o: GUI.cpp ../Common/GmshUI.h ../Common/GmshDefines.h \
   ../Common/Message.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
   ../Common/Context.h ../Common/Options.h ../Post/ColorTable.h \
   ../Graphics/Draw.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h GUI.h \
-  Opengl_Window.h Colorbar_Window.h Popup_Button.h \
-  SpherePosition_Widget.h Callbacks.h Win32Icon.h ../Parser/OpenFile.h \
-  ../Common/CommandLine.h ../Mesh/Generator.h Solvers.h \
-  ../Plugin/PluginManager.h ../Plugin/Plugin.h ../Post/PView.h \
-  ../Post/PViewData.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h Shortcut_Window.h
+  Opengl_Window.h Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
+  SpherePosition_Widget.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  Callbacks.h Win32Icon.h ../Parser/OpenFile.h ../Common/CommandLine.h \
+  ../Mesh/Generator.h Solvers.h ../Plugin/PluginManager.h \
+  ../Plugin/Plugin.h ../Common/Options.h ../Common/Message.h \
+  ../Post/PView.h ../Post/PViewDataList.h ../Post/AdaptiveViews.h \
+  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/GmshMatrix.h \
+  Shortcut_Window.h ../Post/PView.h ../Geo/GModel.h ../Geo/GVertex.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdge.h ../Geo/GFace.h \
+  ../Geo/GEdgeLoop.h ../Geo/GRegion.h ../Mesh/Field.h \
+  ../Geo/GeoStringInterface.h
 GUI_Extras.o: GUI_Extras.cpp ../Common/GmshUI.h ../Common/GmshDefines.h \
   ../Parser/CreateFile.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/Context.h ../Graphics/Draw.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h GUI.h Opengl_Window.h Colorbar_Window.h Popup_Button.h \
-  SpherePosition_Widget.h Shortcut_Window.h File_Picker.h
+  ../Geo/SPoint3.h GUI.h Opengl_Window.h Colorbar_Window.h \
+  ../Post/ColorTable.h Popup_Button.h SpherePosition_Widget.h \
+  ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Geo/Pair.h ../Geo/Range.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h Shortcut_Window.h \
+  File_Picker.h
 GUI_Projection.o: GUI_Projection.cpp ../Geo/GModelIO_Fourier.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h ../Graphics/Draw.h \
-  ../Common/Options.h ../Post/ColorTable.h ../Common/Context.h \
-  ../Parser/OpenFile.h ../Graphics/SelectBuffer.h GUI_Projection.h \
-  ../Common/GmshUI.h ../Geo/fourierProjectionFace.h ../Geo/GModel.h \
-  ../Geo/Range.h GUI.h Opengl_Window.h Colorbar_Window.h Popup_Button.h \
-  SpherePosition_Widget.h Shortcut_Window.h GUI_Extras.h \
-  ../Geo/fourierFace.h ../Geo/GFace.h ../Geo/GModel.h ../Geo/Range.h \
-  ../Geo/fourierEdge.h ../Geo/GEdge.h ../Geo/GModel.h \
-  ../Geo/fourierVertex.h ../Geo/GModel.h ../Geo/GVertex.h \
-  ../Geo/MVertex.h ../Common/Message.h
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/SVector3.h ../Geo/GFace.h \
+  ../Geo/GEdgeLoop.h ../Geo/Pair.h ../Geo/GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h \
+  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h \
+  ../Graphics/Draw.h ../Geo/SBoundingBox3d.h ../Common/Options.h \
+  ../Post/ColorTable.h ../Common/Context.h ../Parser/OpenFile.h \
+  ../Graphics/SelectBuffer.h ../Geo/GVertex.h ../Geo/GEdge.h \
+  ../Geo/GFace.h ../Geo/GRegion.h GUI_Projection.h ../Common/GmshUI.h \
+  ../Geo/GModel.h ../Geo/fourierProjectionFace.h GUI.h Opengl_Window.h \
+  Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
+  SpherePosition_Widget.h ../Mesh/Field.h Shortcut_Window.h GUI_Extras.h \
+  ../Geo/fourierFace.h ../Geo/fourierEdge.h ../Geo/fourierVertex.h \
+  ../Common/Message.h
 GUI_Classifier.o: GUI_Classifier.cpp GUI_Classifier.h ../Common/GmshUI.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h GUI.h Opengl_Window.h \
-  Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
-  SpherePosition_Widget.h Shortcut_Window.h ../Graphics/Draw.h \
-  ../Common/Options.h ../Common/Context.h ../Graphics/SelectBuffer.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/SVector3.h ../Geo/GFace.h \
+  ../Geo/GEdgeLoop.h ../Geo/Pair.h ../Geo/GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h \
+  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h GUI.h \
+  Opengl_Window.h Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
+  SpherePosition_Widget.h ../Mesh/Field.h Shortcut_Window.h \
+  ../Graphics/Draw.h ../Geo/SBoundingBox3d.h ../Common/Options.h \
+  ../Post/ColorTable.h ../Common/Context.h ../Graphics/SelectBuffer.h \
+  ../Geo/GVertex.h ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GRegion.h \
   GUI_Projection.h ../Geo/fourierProjectionFace.h ../Geo/GModel.h \
-  ../Geo/Range.h GUI_Extras.h ../Common/Message.h \
-  ../Mesh/meshGFaceDelaunayInsertion.h ../Mesh/meshGFaceOptimize.h \
-  ../Mesh/meshGFaceDelaunayInsertion.h ../Geo/discreteEdge.h \
-  ../Geo/GModel.h ../Geo/GEdge.h ../Geo/Geo.h ../Geo/gmshSurface.h \
-  ../Geo/Pair.h ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h \
-  ../Geo/SVector3.h ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../Geo/SPoint2.h ../Geo/ExtrudeParams.h \
-  ../Common/SmoothData.h ../Geo/discreteFace.h ../Geo/GModel.h \
-  ../Geo/GFace.h ../Geo/Geo.h
+  GUI_Extras.h ../Common/Message.h ../Mesh/meshGFaceDelaunayInsertion.h \
+  ../Geo/MElement.h ../Mesh/meshGFaceOptimize.h ../Geo/MEdge.h \
+  ../Mesh/meshGFaceDelaunayInsertion.h ../Geo/discreteEdge.h ../Geo/Geo.h \
+  ../Geo/discreteFace.h
 Callbacks.o: Callbacks.cpp ../Common/GmshUI.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/Tools.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h \
   ../Geo/GeoStringInterface.h ../Geo/findLinks.h ../Mesh/Generator.h \
-  ../Mesh/HighOrder.h ../Graphics/Draw.h ../Graphics/SelectBuffer.h \
-  ../Post/PView.h ../Post/PViewData.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Parser/CreateFile.h ../Parser/OpenFile.h \
-  ../Common/CommandLine.h ../Common/Context.h ../Common/Options.h GUI.h \
-  Opengl_Window.h Colorbar_Window.h Popup_Button.h \
-  SpherePosition_Widget.h GUI_Extras.h Callbacks.h ../Plugin/Plugin.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Plugin/PluginManager.h ../Plugin/Plugin.h \
-  ../Common/Visibility.h ../Common/GmshDefines.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h Solvers.h ../Common/OS.h ../Mesh/Field.h \
-  ../Geo/Geo.h ../Geo/gmshSurface.h ../Geo/Pair.h ../Geo/Range.h \
-  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint2.h ../Geo/ExtrudeParams.h \
-  ../Common/SmoothData.h ../Post/OctreePost.h ../Common/Octree.h \
-  ../Common/OctreeInternals.h ../Mesh/BackgroundMesh.h
+  ../Mesh/HighOrder.h ../Geo/GModel.h ../Graphics/Draw.h \
+  ../Geo/SBoundingBox3d.h ../Graphics/SelectBuffer.h ../Geo/GVertex.h \
+  ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GRegion.h ../Post/PView.h \
+  ../Parser/CreateFile.h ../Parser/OpenFile.h ../Common/CommandLine.h \
+  ../Common/Context.h ../Common/Options.h ../Post/ColorTable.h GUI.h \
+  Opengl_Window.h Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
+  SpherePosition_Widget.h ../Mesh/Field.h GUI_Extras.h Callbacks.h \
+  ../Plugin/Plugin.h ../Common/Options.h ../Common/Message.h \
+  ../Post/PView.h ../Post/PViewDataList.h ../Post/AdaptiveViews.h \
+  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/GmshMatrix.h \
+  ../Plugin/PluginManager.h ../Plugin/Plugin.h ../Common/Visibility.h \
+  ../Common/GmshDefines.h ../Geo/GVertex.h ../Geo/GEdge.h ../Geo/GFace.h \
+  ../Geo/GRegion.h ../Numeric/Numeric.h Solvers.h ../Common/OS.h \
+  ../Mesh/BackgroundMesh.h
 Opengl.o: Opengl.cpp ../Common/GmshUI.h ../Common/GmshDefines.h \
   ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../Common/Context.h \
   ../Graphics/Draw.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Graphics/SelectBuffer.h ../Geo/GVertex.h ../Geo/GEntity.h \
-  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Common/StringUtils.h GUI.h \
-  Opengl_Window.h Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
-  SpherePosition_Widget.h ../Graphics/gl2ps.h
+  ../Geo/Range.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/GFace.h \
+  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Common/StringUtils.h GUI.h Opengl_Window.h Colorbar_Window.h \
+  ../Post/ColorTable.h Popup_Button.h SpherePosition_Widget.h \
+  ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Graphics/gl2ps.h
 Opengl_Window.o: Opengl_Window.cpp ../Common/GmshUI.h \
   ../Common/GmshDefines.h ../Common/Message.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../Common/Context.h ../Graphics/Draw.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Graphics/SelectBuffer.h \
-  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
+  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
   ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h GUI.h \
-  Opengl_Window.h Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
-  SpherePosition_Widget.h ../Geo/MElement.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h \
+  ../Geo/GEdge.h ../Geo/Pair.h ../Geo/GRegion.h GUI.h Opengl_Window.h \
+  Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
+  SpherePosition_Widget.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Numeric/Numeric.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/MFace.h
 Colorbar_Window.o: Colorbar_Window.cpp ../Common/GmshUI.h GUI.h \
   Opengl_Window.h Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
-  SpherePosition_Widget.h ../Common/Context.h
+  SpherePosition_Widget.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/Context.h
 Solvers.o: Solvers.cpp ../Common/Message.h Solvers.h GmshServer.h \
   ../Parser/OpenFile.h ../Common/GmshUI.h GUI.h Opengl_Window.h \
   Colorbar_Window.h ../Post/ColorTable.h Popup_Button.h \
-  SpherePosition_Widget.h ../Post/PView.h ../Post/PViewData.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Graphics/Draw.h ../Common/Context.h
+  SpherePosition_Widget.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PView.h \
+  ../Graphics/Draw.h ../Geo/SBoundingBox3d.h ../Common/Context.h
diff --git a/Fltk/Message.cpp b/Fltk/Message.cpp
index 6d427d429edfde0b9d75ab702de0fe296eb57c43..b1187aebd0dae9109e5cf0aaf4c404e5eb5d39ae 100644
--- a/Fltk/Message.cpp
+++ b/Fltk/Message.cpp
@@ -1,4 +1,4 @@
-// $Id: Message.cpp,v 1.86 2008-03-11 20:03:10 geuzaine Exp $
+// $Id: Message.cpp,v 1.87 2008-03-18 08:41:21 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -204,6 +204,10 @@ void Exit(int level)
       CTX.plugin_position[1] = WID->plugin_window->y();
       CTX.plugin_size[0] = WID->plugin_window->w();
       CTX.plugin_size[1] = WID->plugin_window->h();
+      CTX.field_position[0] = WID->field_window->x();
+      CTX.field_position[1] = WID->field_window->y();
+      CTX.field_size[0] = WID->field_window->w();
+      CTX.field_size[1] = WID->field_window->h();
       CTX.stat_position[0] = WID->stat_window->x();
       CTX.stat_position[1] = WID->stat_window->y();
       CTX.vis_position[0] = WID->vis_window->x();
diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index 0b5c8ff8b4e6ba035d45a6cecd0e5293429e50ac..0ce655c6ab09d631abf3ea247ea3c0f79ccc6833 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -1,4 +1,4 @@
-// $Id: GModel.cpp,v 1.70 2008-03-11 22:37:50 geuzaine Exp $
+// $Id: GModel.cpp,v 1.71 2008-03-18 08:41:21 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -99,9 +99,9 @@ void GModel::destroy()
 
   MVertex::resetGlobalNumber();
   MElement::resetGlobalNumber();
+  fields.reset();
 #if !defined(HAVE_GMSH_EMBEDDED)
   gmshSurface::reset();
-  fields.reset();
   BGMReset();
 #endif
 }
diff --git a/Geo/GModel.h b/Geo/GModel.h
index 12648f5a2fbe563a3c12faa8dcac3327ec260ee0..022a4e36342b3fc9fb6ecdb7ea479dbb7ec5cb29 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -28,6 +28,7 @@
 #include "GFace.h"
 #include "GRegion.h"
 #include "SBoundingBox3d.h"
+#include "Field.h"
 
 class GEO_Internals;
 class OCC_Internals;
@@ -37,6 +38,7 @@ class smooth_normals;
 class GModel
 {
  private:
+	std::set<Field*>mesh_size_fields;
   // Vertex cache to speed-up direct access by vertex number (used for
   // post-processing I/O)
   std::vector<MVertex*> _vertexVectorCache;
@@ -245,6 +247,9 @@ class GModel
 
   // Med interface ("Modele d'Echange de Donnees")
   int writeMED(const std::string &name);
+
+	// Characteristic Lengths fields
+	FieldManager fields;
 };
 
 #endif
diff --git a/Geo/GModelIO_Geo.cpp b/Geo/GModelIO_Geo.cpp
index 7d9124fd99cf2f9e3bc774e8297ee0ad7feb96d6..13716cb177ab6d8447548954a40495835409bd03 100644
--- a/Geo/GModelIO_Geo.cpp
+++ b/Geo/GModelIO_Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: GModelIO_Geo.cpp,v 1.16 2008-02-22 21:09:00 geuzaine Exp $
+// $Id: GModelIO_Geo.cpp,v 1.17 2008-03-18 08:41:21 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -147,6 +147,30 @@ int GModel::importGEOInternals()
   
   return 1;
 }
+class writeFieldOptionGEO{
+ private :
+  FILE *geo;
+	Field *field;
+ public :
+  writeFieldOptionGEO(FILE *fp,Field *_field) { geo = fp ? fp : stdout; field=_field;}
+  void operator() (std::pair<const char *,FieldOption *> it)
+  {
+		std::string v;
+		it.second->get_text_representation(v);
+		fprintf(geo,"Field[%i].%s = %s;\n",field->id,it.first,v.c_str());
+	}
+};
+class writeFieldGEO{
+ private :
+  FILE *geo;
+ public :
+  writeFieldGEO(FILE *fp) { geo = fp ? fp : stdout; }
+  void operator() (std::pair<int, Field *> it)
+  {
+		fprintf(geo,"Field[%i] = %s;\n",it.first,it.second->get_name());
+		std::for_each(it.second->options.begin(),it.second->options.end(),writeFieldOptionGEO(geo,it.second));
+	}
+};
 
 class writeGVertexGEO {
  private :
@@ -409,6 +433,8 @@ int GModel::writeGEO(const std::string &name, bool printLabels)
     std::for_each(groups[i].begin(), groups[i].end(), 
 		  writePhysicalGroupGEO(fp, i, printLabels, labels, physicalNames));
 
+	std::for_each(fields.begin(),fields.end(), writeFieldGEO(fp));
+	if(fields.background_field>0)fprintf(fp,"Background Field = %i;\n",fields.background_field);
   if(fp) fclose(fp);
   return 1;
 }
diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index d57bcc547245b34310d29e0df6802bf6af4af54c..7a2fc434011486db7ed9347f51601c08349a4871 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: Geo.cpp,v 1.106 2008-02-26 08:28:16 geuzaine Exp $
+// $Id: Geo.cpp,v 1.107 2008-03-18 08:41:21 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -716,6 +716,11 @@ int NEWVOLUME(void)
     return (GModel::current()->getGEOInternals()->MaxVolumeNum + 1);
 }
 
+int NEWFIELD(void)
+{
+	return (GModel::current()->fields.max_id()+1);
+}
+
 int NEWPHYSICAL(void)
 {
   if(CTX.geom.old_newreg)
@@ -1031,7 +1036,7 @@ void DeletePoint(int ip)
     List_Read(Curves, i, &c);
     for(int j = 0; j < List_Nbr(c->Control_Points); j++) {
       if(!compareVertex(List_Pointer(c->Control_Points, j), &v)){
-	List_Delete(Curves);
+					List_Delete(Curves);
         return;
       }
     }
diff --git a/Geo/Geo.h b/Geo/Geo.h
index f743100ab54dd7304c1b9edaf111505bf1688f18..2fada331e3a1bce0d22ee7a63bf46b48ed061cf1 100644
--- a/Geo/Geo.h
+++ b/Geo/Geo.h
@@ -259,6 +259,7 @@ int NEWLINELOOP(void);
 int NEWSURFACE(void);
 int NEWSURFACELOOP(void);
 int NEWVOLUME(void);
+int NEWFIELD(void);
 int NEWPHYSICAL(void);
 int NEWREG(void);
 
diff --git a/Geo/GeoStringInterface.cpp b/Geo/GeoStringInterface.cpp
index 734f11f3548a4063a06eee8b9fb6a80b17bb2c88..1e6ee3a8ace07b7399f6a8b563a2cafeb1c68b81 100644
--- a/Geo/GeoStringInterface.cpp
+++ b/Geo/GeoStringInterface.cpp
@@ -1,4 +1,4 @@
-// $Id: GeoStringInterface.cpp,v 1.18 2008-02-25 15:36:38 geuzaine Exp $
+// $Id: GeoStringInterface.cpp,v 1.19 2008-03-18 08:41:21 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -20,6 +20,7 @@
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
 #include <string.h>
+#include <sstream>
 #include "Message.h"
 #include "Numeric.h"
 #include "Malloc.h"
@@ -241,22 +242,26 @@ void add_point(const char *fich, const char *x, const char *y, const char *z,
   add_infile(text, fich);
 }
 
-void add_attractor(const char *fich, int ip, int typ,
-		   const char *ax, const char *ay, const char *ad)
-{
-  char text[BUFFSIZE];
-  if(typ == 0) {
-    snprintf(text, BUFFSIZE, "Attractor Point {%d} = {%s,%s,%s} = ;", ip, ax, ay, ad);
-  }
-  else if(typ == 1) {
-    snprintf(text, BUFFSIZE, "Attractor Line {%d} = {%s,%s,%s};", ip, ax, ay, ad);
-  }
-  else if(typ == 2) {
-    snprintf(text, BUFFSIZE, "Attractor Surface {%d} = {%s,%s,%s};", ip, ax, ay, ad);
-  }
-  add_infile(text, fich);
+void add_field_option(int field_id, const char *option_name, const char *option_value, const char *fich){
+	std::ostringstream sstream;
+	sstream<<"Field["<<field_id<<"]."<<std::string(option_name)<<" = "<<std::string(option_value)<<";";
+	add_infile(sstream.str().c_str(),fich);
+}
+void add_field(int field_id, const char *type_name, const char *fich){
+	std::ostringstream sstream;
+	sstream<<"Field["<<field_id<<"] = "<<std::string(type_name)<<";";
+	add_infile(sstream.str().c_str(),fich);
+}
+void delete_field(int field_id, const char *fich){
+	std::ostringstream sstream;
+	sstream<<"Delete Field ["<<field_id<<"];";
+	add_infile(sstream.str().c_str(),fich);
+}
+void set_background_field(int field_id,const char *fich){
+	std::ostringstream sstream;
+	sstream<<"Background Field = "<<field_id<<";";
+	add_infile(sstream.str().c_str(),fich);
 }
-
 
 void add_line(int p1, int p2, const char *fich)
 {
diff --git a/Geo/GeoStringInterface.h b/Geo/GeoStringInterface.h
index bde4965a365d601c2f5e35cac3751db5dc82b5f9..ac61dca160acedeb8810b4f8eeac29b7f41b9d6f 100644
--- a/Geo/GeoStringInterface.h
+++ b/Geo/GeoStringInterface.h
@@ -36,13 +36,16 @@ void add_recosurf(List_T *list, const char *fich);
 void add_param(const char *par, const char *value, const char *fich);
 void add_point(const char *fich, const char *x, const char *y, const char *z, 
 	       const char *lc);
-void add_attractor(const char *fich, int ip, int typ);
 void add_line(int p1, int p2, const char *fich);
 void add_circ(int p1, int p2, int p3, const char *fich);
 void add_ell(int p1, int p2, int p3, int p4, const char *fich);
 void add_spline(int N, int *p, const char *fich);
 void add_bezier(int N, int *p, const char *fich);
 void add_bspline(int N, int *p, const char *fich);
+void add_field_option(int field_id, const char *option_name, const char *option_value, const char *fich);
+void add_field(int field_id, const char *type_name, const char *fich);
+void delete_field(int field_id, const char *fich);
+void set_background_field(int field_id,const char *fich);
 void add_multline(int N, int *p, const char *fich);
 void add_lineloop(List_T *list, const char *fich, int *numloop);
 void add_surf(List_T *list, const char *fich, int support, int typ);
diff --git a/Geo/Makefile b/Geo/Makefile
index 19440ba1f8f9f9d35cb27c2f4fa6fa66fef5ebbb..38dca74c25ca55fb8e173feeebe396b9a432a5d1 100644
--- a/Geo/Makefile
+++ b/Geo/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.192 2008-03-11 22:30:31 geuzaine Exp $
+# $Id: Makefile,v 1.193 2008-03-18 08:41:21 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -75,28 +75,50 @@ depend:
 # DO NOT DELETE THIS LINE
 GEntity.o: GEntity.cpp GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
   ../Common/VertexArray.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Common/Context.h
+  ../Common/Context.h ../Common/Context.h
 GVertex.o: GVertex.cpp GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GFace.h GEdgeLoop.h GEdge.h \
   SVector3.h Pair.h MVertex.h ../Common/Message.h
 GEdge.o: GEdge.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h MElement.h ../Common/GmshDefines.h \
-  MVertex.h MEdge.h MFace.h ../Common/Message.h \
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h ../Common/Message.h \
   ../Numeric/GaussLegendre1D.h
 GEdgeLoop.o: GEdgeLoop.cpp GEdgeLoop.h GEdge.h GEntity.h Range.h \
   SPoint3.h SBoundingBox3d.h GVertex.h GPoint.h SPoint2.h SVector3.h \
   ../Common/Message.h
 GFace.o: GFace.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h MElement.h ../Common/GmshDefines.h \
-  MVertex.h MEdge.h MFace.h ../Common/Message.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h ../Numeric/GaussLegendre1D.h \
-  ../Common/VertexArray.h ../Geo/SVector3.h ../Common/Context.h
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h ../Common/Message.h \
+  ../Numeric/Numeric.h ../Numeric/GaussLegendre1D.h \
+  ../Common/VertexArray.h ../Geo/SVector3.h ../Common/Context.h \
+  ../Common/Context.h
 GRegion.o: GRegion.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h MElement.h ../Common/GmshDefines.h \
-  MVertex.h MEdge.h MFace.h ../Common/Message.h
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h ../Common/Message.h
 gmshVertex.o: gmshVertex.cpp GFace.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h GEdgeLoop.h GEdge.h GVertex.h SPoint2.h \
   SVector3.h Pair.h gmshVertex.h Geo.h ../Common/GmshDefines.h \
@@ -105,105 +127,207 @@ gmshVertex.o: gmshVertex.cpp GFace.h GEntity.h Range.h SPoint3.h \
   ../Common/SmoothData.h MVertex.h GeoInterpolation.h ../Common/Message.h
 gmshEdge.o: gmshEdge.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h gmshEdge.h Geo.h ../Common/GmshDefines.h \
-  gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ExtrudeParams.h \
-  ../Common/SmoothData.h GeoInterpolation.h ../Common/Message.h \
-  ../Common/Context.h
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h gmshEdge.h Geo.h \
+  GeoInterpolation.h ../Common/Message.h ../Common/Context.h
 gmshFace.o: gmshFace.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h gmshFace.h Geo.h ../Common/GmshDefines.h \
-  gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ExtrudeParams.h \
-  ../Common/SmoothData.h GeoInterpolation.h ../Common/Message.h
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h gmshFace.h Geo.h \
+  GeoInterpolation.h ../Numeric/Numeric.h ../Common/Message.h
 gmshRegion.o: gmshRegion.cpp GModel.h GVertex.h GEntity.h Range.h \
   SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h \
-  GFace.h GEdgeLoop.h Pair.h GRegion.h gmshRegion.h Geo.h \
-  ../Common/GmshDefines.h gmshSurface.h ../Numeric/Numeric.h \
+  GFace.h GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ExtrudeParams.h ../Common/SmoothData.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h gmshRegion.h Geo.h \
   ../Common/Message.h
 gmshSurface.o: gmshSurface.cpp gmshSurface.h Pair.h Range.h SPoint2.h \
   SPoint3.h SVector3.h SBoundingBox3d.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../Common/Message.h
 OCCVertex.o: OCCVertex.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h OCCVertex.h OCCIncludes.h MVertex.h \
-  OCCEdge.h OCCFace.h
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h OCCVertex.h OCCIncludes.h \
+  MVertex.h OCCEdge.h OCCFace.h
 OCCEdge.o: OCCEdge.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h ../Common/Message.h OCCEdge.h OCCVertex.h \
-  OCCIncludes.h MVertex.h OCCFace.h ../Common/Context.h
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/Message.h \
+  OCCEdge.h OCCVertex.h OCCIncludes.h MVertex.h OCCFace.h \
+  ../Common/Context.h
 OCCFace.o: OCCFace.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h OCCVertex.h OCCIncludes.h MVertex.h \
-  OCCEdge.h OCCFace.h ../Common/Message.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h ../Common/VertexArray.h ../Geo/SVector3.h \
-  ../Common/Context.h
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h OCCVertex.h OCCIncludes.h \
+  MVertex.h OCCEdge.h OCCFace.h ../Common/Message.h ../Numeric/Numeric.h \
+  ../Common/VertexArray.h ../Geo/SVector3.h ../Common/Context.h
 OCCRegion.o: OCCRegion.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h OCCVertex.h OCCIncludes.h MVertex.h \
-  OCCEdge.h OCCFace.h OCCRegion.h ../Common/Message.h
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h OCCVertex.h OCCIncludes.h \
+  MVertex.h OCCEdge.h OCCFace.h OCCRegion.h ../Common/Message.h
 fourierEdge.o: fourierEdge.cpp fourierEdge.h GEdge.h GEntity.h Range.h \
   SPoint3.h SBoundingBox3d.h GVertex.h GPoint.h SPoint2.h SVector3.h \
-  GModel.h GFace.h GEdgeLoop.h Pair.h GRegion.h fourierVertex.h MVertex.h \
+  GModel.h GFace.h GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h fourierVertex.h MVertex.h \
   ../Common/Context.h
 fourierFace.o: fourierFace.cpp fourierVertex.h GModel.h GVertex.h \
   GEntity.h Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h MVertex.h fourierFace.h \
+  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h MVertex.h fourierFace.h \
   fourierEdge.h ../Common/Message.h
 fourierProjectionFace.o: fourierProjectionFace.cpp \
   fourierProjectionFace.h GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h ../Common/VertexArray.h ../Geo/SVector3.h \
-  ../Common/Context.h
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/VertexArray.h \
+  ../Geo/SVector3.h ../Common/Context.h
 GModel.o: GModel.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
   SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h MElement.h ../Common/GmshDefines.h \
-  MVertex.h MEdge.h MFace.h ../Common/Message.h gmshSurface.h \
-  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../Mesh/Field.h \
-  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h ../Geo/Geo.h \
-  ../Geo/gmshSurface.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../Geo/SPoint2.h ../Geo/ExtrudeParams.h \
-  ../Common/SmoothData.h ../Geo/GEdge.h ../Post/OctreePost.h \
-  ../Common/Octree.h ../Common/OctreeInternals.h ../Mesh/Generator.h \
-  ../Mesh/BackgroundMesh.h ../Common/Context.h
+  GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h ../Common/Message.h \
+  gmshSurface.h ../Mesh/Generator.h ../Mesh/BackgroundMesh.h \
+  ../Common/Context.h
 GModelIO_Geo.o: GModelIO_Geo.cpp GModel.h GVertex.h GEntity.h Range.h \
   SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h \
-  GFace.h GEdgeLoop.h Pair.h GRegion.h Geo.h ../Common/GmshDefines.h \
-  gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ExtrudeParams.h \
-  ../Common/SmoothData.h ../Parser/OpenFile.h ../DataStr/Tools.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../Common/Message.h gmshVertex.h \
-  MVertex.h gmshFace.h gmshEdge.h gmshRegion.h ../Parser/Parser.h
+  GFace.h GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h Geo.h ../Parser/OpenFile.h \
+  ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../Numeric/Numeric.h ../Common/Message.h gmshVertex.h MVertex.h \
+  gmshFace.h gmshEdge.h gmshRegion.h ../Parser/Parser.h ../DataStr/List.h \
+  ../DataStr/Tree.h
 GModelIO_Mesh.o: GModelIO_Mesh.cpp GModel.h GVertex.h GEntity.h Range.h \
   SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h \
-  GFace.h GEdgeLoop.h Pair.h GRegion.h ../Common/GmshDefines.h MElement.h \
-  MVertex.h MEdge.h MFace.h discreteRegion.h Geo.h gmshSurface.h \
-  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../DataStr/List.h \
-  ../DataStr/Tree.h ../DataStr/avl.h ExtrudeParams.h \
-  ../Common/SmoothData.h discreteFace.h discreteEdge.h discreteVertex.h \
-  ../Common/StringUtils.h ../Common/Message.h
+  GFace.h GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/GmshDefines.h \
+  MElement.h MVertex.h MEdge.h MFace.h discreteRegion.h Geo.h \
+  discreteFace.h discreteEdge.h discreteVertex.h ../Common/StringUtils.h \
+  ../Common/Message.h
 GModelIO_OCC.o: GModelIO_OCC.cpp GModelIO_OCC.h GModel.h GVertex.h \
   GEntity.h Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h OCCIncludes.h \
+  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h OCCIncludes.h \
   ../Common/Message.h ../Common/Context.h OCCVertex.h MVertex.h OCCEdge.h \
   OCCFace.h OCCRegion.h
 GModelIO_Fourier.o: GModelIO_Fourier.cpp GModel.h GVertex.h GEntity.h \
   Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h ../Common/Message.h \
+  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/Message.h \
   fourierVertex.h MVertex.h fourierEdge.h fourierFace.h \
   GModelIO_Fourier.h
 GModelIO_CGNS.o: GModelIO_CGNS.cpp GModel.h GVertex.h GEntity.h Range.h \
   SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h \
-  GFace.h GEdgeLoop.h Pair.h GRegion.h ../Common/Message.h MElement.h \
-  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h MNeighbour.h \
-  MEdgeHash.h ../Common/Hash.h MFaceHash.h
+  GFace.h GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/Message.h \
+  MElement.h ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h \
+  MNeighbour.h MEdgeHash.h ../Common/Hash.h MFaceHash.h
 GModelIO_MED.o: GModelIO_MED.cpp GModel.h GVertex.h GEntity.h Range.h \
   SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h \
-  GFace.h GEdgeLoop.h Pair.h GRegion.h MElement.h ../Common/GmshDefines.h \
-  MVertex.h MEdge.h MFace.h ../Common/Message.h
+  GFace.h GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h ../Common/Message.h
 ExtrudeParams.o: ExtrudeParams.cpp ../Common/Message.h Geo.h \
   ../Common/GmshDefines.h gmshSurface.h Pair.h Range.h SPoint2.h \
   SPoint3.h SVector3.h SBoundingBox3d.h ../Numeric/Numeric.h \
@@ -213,18 +337,24 @@ Geo.o: Geo.cpp ../Common/Message.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../DataStr/Malloc.h ../DataStr/Tools.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h Geo.h \
   ../Common/GmshDefines.h gmshSurface.h Pair.h Range.h SPoint2.h \
-  SPoint3.h SVector3.h SBoundingBox3d.h ExtrudeParams.h \
-  ../Common/SmoothData.h GModel.h GVertex.h GEntity.h GPoint.h GEdge.h \
-  GFace.h GEdgeLoop.h GRegion.h GeoInterpolation.h ../Parser/Parser.h \
-  ../Common/Context.h
+  SPoint3.h SVector3.h SBoundingBox3d.h ../DataStr/List.h \
+  ../DataStr/Tree.h ExtrudeParams.h ../Common/SmoothData.h GModel.h \
+  GVertex.h GEntity.h GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h \
+  ../Mesh/Field.h ../Geo/Geo.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  GeoInterpolation.h ../Parser/Parser.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../Common/Context.h
 GeoStringInterface.o: GeoStringInterface.cpp ../Common/Message.h \
   ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../DataStr/Malloc.h \
   Geo.h ../Common/GmshDefines.h gmshSurface.h Pair.h Range.h SPoint2.h \
   SPoint3.h SVector3.h SBoundingBox3d.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ExtrudeParams.h \
   ../Common/SmoothData.h GeoStringInterface.h ../Parser/Parser.h \
-  ../Parser/OpenFile.h ../Common/Context.h GModel.h GVertex.h GEntity.h \
-  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h
+  ../DataStr/List.h ../DataStr/Tree.h ../Parser/OpenFile.h \
+  ../Common/Context.h GModel.h GVertex.h GEntity.h GPoint.h GEdge.h \
+  GFace.h GEdgeLoop.h GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h
 GeoInterpolation.o: GeoInterpolation.cpp ../Common/Message.h Geo.h \
   ../Common/GmshDefines.h gmshSurface.h Pair.h Range.h SPoint2.h \
   SPoint3.h SVector3.h SBoundingBox3d.h ../Numeric/Numeric.h \
@@ -233,8 +363,15 @@ GeoInterpolation.o: GeoInterpolation.cpp ../Common/Message.h Geo.h \
   GeoInterpolation.h GeoStringInterface.h
 findLinks.o: findLinks.cpp ../Common/Message.h GModel.h GVertex.h \
   GEntity.h Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../DataStr/List.h ../DataStr/Tools.h ../DataStr/List.h \
+  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../DataStr/Tree.h \
+  ../DataStr/List.h ../DataStr/Tools.h ../DataStr/List.h \
   ../DataStr/Tree.h
 MVertex.o: MVertex.cpp MVertex.h SPoint3.h GEdge.h GEntity.h Range.h \
   SBoundingBox3d.h GVertex.h GPoint.h SPoint2.h SVector3.h GFace.h \
diff --git a/Geo/SPoint3.h b/Geo/SPoint3.h
index 31821bd0f73167f2dfae4f0e360acff73fd41055..2d05ae76d0bd2253e797baff8eb1fab24904e1d8 100644
--- a/Geo/SPoint3.h
+++ b/Geo/SPoint3.h
@@ -47,7 +47,7 @@ class SPoint3 {
   void operator/=(double mult);
   SPoint3 operator*(double mult);
   operator double *() { return P; }
-  double distance(const SPoint3 &p);
+  double distance(const SPoint3 &p)const;
   // lexicographic
   bool operator < (const SPoint3 &p) const
   {
@@ -108,7 +108,7 @@ inline double &SPoint3::operator[](int i)
 inline double SPoint3::operator[](int i) const
 { return P[i]; }
 
-inline double SPoint3::distance(const SPoint3 &p)
+inline double SPoint3::distance(const SPoint3 &p)const
 { 
   double x = P[0] - p.P[0], y = P[1] - p.P[1], z = P[2] - p.P[2];
   return sqrt(x * x + y * y + z * z);
diff --git a/Geo/gmshSurface.cpp b/Geo/gmshSurface.cpp
index b42da18673d025904c7d2c32f282e5d979bbaf27..2030499965f92682481378f6b780cb9a502378b7 100644
--- a/Geo/gmshSurface.cpp
+++ b/Geo/gmshSurface.cpp
@@ -1,4 +1,4 @@
-// $Id: gmshSurface.cpp,v 1.11 2008-02-20 09:20:45 geuzaine Exp $
+// $Id: gmshSurface.cpp,v 1.12 2008-03-18 08:41:21 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -78,8 +78,10 @@ SPoint3 gmshPolarSphere::point(double parA, double parB) const
   //at the center of the sphere 
   //parA=2rx/(r+z) parB=2ry/(r+z)
   double rp2 = parA * parA + parB * parB;
-  double z = r * (4 * r * r - rp2) / (4 * r * r + rp2);
-  return SPoint3((r + z) * parA / (2 * r), (r + z) * parB / (2 * r), z);
+	SPoint3 p(2*parA/(1+rp2),2*parB/(1+rp2),(rp2-1)/(rp2+1));
+	p*=-r;
+	p+=o;
+	return p;
 }
 
 gmshSurface *gmshParametricSurface::NewParametricSurface(int iSurf, char *valX,
diff --git a/Geo/gmshSurface.h b/Geo/gmshSurface.h
index 20ee94528d5b4c35fd82cb27a722a3e5f4edb8b8..2e58b4704a5ada7e7376b1e772a408b1c2aa7807 100644
--- a/Geo/gmshSurface.h
+++ b/Geo/gmshSurface.h
@@ -105,8 +105,9 @@ public:
 };
 class gmshPolarSphere : public gmshSurface
 {
-  double xc, yc, zc, r;
-  gmshPolarSphere(double _x, double _y, double _z, double _r) : xc(_x), yc(_y), zc(_z), r(_r){}
+  double r;
+	SPoint3 o;
+  gmshPolarSphere(double x, double y, double z, double _r) : o(x,y,z), r(_r){}
 public:
   static gmshSurface *NewPolarSphere(int _iSphere, double _x, double _y, double _z, double _r);
   virtual Range<double> parBounds(int i) const 
@@ -127,8 +128,7 @@ public:
   virtual SVector3 normal(const SPoint2 &param) const
   {
     SPoint3  p1 = gmshSurface::point(param);
-    SPoint3  p2(xc, yc, zc);
-    SVector3 n(p1, p2);
+    SVector3 n(p1, o);
     n.normalize();
     return n;
   }
diff --git a/Graphics/Makefile b/Graphics/Makefile
index a145e5d4b31bd3878274bdbb2f7623ac2eef9348..66567c1412783c98cf0ef0b276b8d1ad4b7383be 100644
--- a/Graphics/Makefile
+++ b/Graphics/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.143 2008-03-11 22:30:31 geuzaine Exp $
+# $Id: Makefile,v 1.144 2008-03-18 08:41:21 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -74,55 +74,59 @@ Draw.o: Draw.cpp ../Common/GmshUI.h ../Common/GmshDefines.h \
   ../Common/Message.h Draw.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Common/Context.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Post/PView.h ../Post/PViewData.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Post/PView.h
 Mesh.o: Mesh.cpp ../Common/Message.h ../Common/GmshUI.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h Draw.h \
-  ../Common/Context.h ../Common/OS.h gl2ps.h ../Common/VertexArray.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/MFace.h Draw.h ../Geo/SBoundingBox3d.h ../Common/Context.h \
+  ../Common/OS.h gl2ps.h ../Common/VertexArray.h ../Geo/SVector3.h \
   ../Common/Context.h ../Common/SmoothData.h
 Geom.o: Geom.cpp ../Common/GmshUI.h Draw.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Common/Context.h gl2ps.h ../Common/VertexArray.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Common/Context.h ../Geo/GModel.h \
-  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h
+  ../Geo/SVector3.h ../Common/Context.h ../Geo/GModel.h ../Geo/GVertex.h \
+  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/SVector3.h ../Geo/GFace.h \
+  ../Geo/GEdgeLoop.h ../Geo/Pair.h ../Geo/GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h \
+  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h
 Post.o: Post.cpp ../Common/Message.h ../Common/GmshUI.h \
   ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h Draw.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h Iso.h ../Post/PView.h \
-  ../Post/PViewData.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Common/VertexArray.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Common/Context.h ../Common/SmoothData.h gl2ps.h
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Common/VertexArray.h ../Geo/SVector3.h \
+  ../Common/Context.h ../Common/SmoothData.h ../Common/Context.h gl2ps.h
 SelectBuffer.o: SelectBuffer.cpp ../Common/Message.h ../Common/GmshUI.h \
   ../Common/GmshDefines.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Geo/MVertex.h ../Geo/SPoint3.h ../Geo/MEdge.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h Draw.h ../Common/Context.h SelectBuffer.h \
-  ../Common/VertexArray.h ../Common/Context.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/MFace.h Draw.h ../Geo/SBoundingBox3d.h ../Common/Context.h \
+  SelectBuffer.h ../Geo/GVertex.h ../Geo/GEdge.h ../Geo/GFace.h \
+  ../Geo/GRegion.h ../Common/VertexArray.h ../Geo/SVector3.h \
+  ../Common/Context.h
 Iso.o: Iso.cpp ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h
 Entity.o: Entity.cpp ../Common/GmshUI.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h Draw.h ../Geo/SBoundingBox3d.h \
@@ -130,15 +134,17 @@ Entity.o: Entity.cpp ../Common/GmshUI.h ../Numeric/Numeric.h \
 ReadImg.o: ReadImg.cpp ReadImg.h ../Common/Message.h ../Common/GmshUI.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h
 Scale.o: Scale.cpp ../Common/GmshUI.h Draw.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PView.h ../Post/PViewData.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/Context.h gl2ps.h
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Common/Context.h gl2ps.h
 Graph2D.o: Graph2D.cpp ../Common/GmshUI.h Draw.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PView.h ../Post/PViewData.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h gl2ps.h ../Common/Context.h \
-  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  gl2ps.h ../Common/Context.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h
 gl2ps.o: gl2ps.cpp gl2ps.h
 gl2gif.o: gl2gif.cpp gl2gif.h PixelBuffer.h ../Common/GmshUI.h \
   ../Common/Message.h ../DataStr/Malloc.h Draw.h ../Geo/SBoundingBox3d.h \
diff --git a/Mesh/BackgroundMesh.cpp b/Mesh/BackgroundMesh.cpp
index 28dc03b1a7f0b27b18a3ad78606bcf3f4cc0cd41..2256a59972291d359bab2d8f6838ec59e1dd730b 100644
--- a/Mesh/BackgroundMesh.cpp
+++ b/Mesh/BackgroundMesh.cpp
@@ -1,4 +1,4 @@
-// $Id: BackgroundMesh.cpp,v 1.39 2008-03-12 08:36:48 remacle Exp $
+// $Id: BackgroundMesh.cpp,v 1.40 2008-03-18 08:41:21 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -30,23 +30,17 @@
 #include "Field.h"
 
 extern Context_T CTX;
-MinField lc_field;
 
 #define MAX_LC 1.e22
 
 bool BGMExists() 
 {
-  return !lc_field.empty();
-}
-
-void BGMAddField(Field *field)
-{
-  lc_field.push_front(field);
+	FieldManager &fields=GModel::current()->fields;
+	return (fields.background_field>0); 
 }
 
 void BGMReset()
 {
-  lc_field.clear();
 }
 
 // computes the characteristic length of the mesh at a vertex in order
@@ -172,10 +166,14 @@ double BGM_MeshSize(GEntity *ge, double U, double V, double X, double Y, double
   double l1 = MAX_LC;
   double l2 = MAX_LC;
   double l3 = CTX.lc;
-  double l4 = lc_field.empty() ? MAX_LC : lc_field(X, Y, Z);
-
-
+  double l4 = MAX_LC;
   double lc;
+	FieldManager &fields=GModel::current()->fields;
+	if(fields.background_field>0){
+		Field *f=fields.get(fields.background_field);
+		if(f) l4=(*f)(X,Y,Z);
+	}
+		
   if(l4 < MAX_LC && !CTX.mesh.constrained_bgmesh){
     // use the fields unconstrained by other characteristic lengths
     lc = l4 * CTX.mesh.lc_factor;
@@ -205,7 +203,7 @@ double BGM_MeshSize(GEntity *ge, double U, double V, double X, double Y, double
 // we do it also if CTX.mesh.constrained_bgmesh is true;
 bool Extend1dMeshIn2dSurfaces()
 {
-  if(lc_field.empty()) return true;
+  //if(lc_field.empty()) return true;
   if(CTX.mesh.constrained_bgmesh) return true;
   return false;
 }
diff --git a/Mesh/Field.cpp b/Mesh/Field.cpp
index 2c2a1e7058d0f76ce6bcf188941fbb3ba2e77f7a..894f944a2f75181dffa32b4d913717dcc0115820 100644
--- a/Mesh/Field.cpp
+++ b/Mesh/Field.cpp
@@ -1,4 +1,4 @@
-// $Id: Field.cpp,v 1.15 2008-02-22 07:49:39 geuzaine Exp $
+// $Id: Field.cpp,v 1.16 2008-03-18 08:41:21 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -19,410 +19,682 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
-#include <fstream>
-#include <string.h>
+#include <list>
 #include <math.h>
-#include "GModel.h"
-#include "MVertex.h"
-#include "Message.h"
-#include "Field.h"
-#include "Context.h"
-#include "GeoInterpolation.h"
-#include "BackgroundMesh.h"
+#include <fstream>
+#include <string>
+#include <sstream>
+
 #ifdef HAVE_MATH_EVAL
 #include "matheval.h"
 #endif
+#ifdef HAVE_ANN
+#include "ANN/ANN.h"
+#endif
+
+#include "Context.h"
+#include "Field.h"
+#include "GeoInterpolation.h"
+#include "GModel.h"
+#include "Message.h"
+#include "OctreePost.h"
+#include "PViewDataList.h"
 
 #define MAX_LC 1.e22
 
 extern Context_T CTX;
-FieldManager fields;
+
+class FieldOptionDouble:public FieldOption{
+	public:
+	double &val;
+	FieldOptionType get_type(){return FIELD_OPTION_DOUBLE;};
+	FieldOptionDouble(double &_val,bool *_status=NULL):FieldOption(_status),val(_val){};
+	double numerical_value()const { return val;};
+	void numerical_value(double v){modified(); val=v;};
+	void get_text_representation(std::string &v_str){
+		std::ostringstream sstream;
+		sstream.precision(16);
+		sstream<<val;
+		v_str=sstream.str();
+	}
+};
+
+class FieldOptionInt:public FieldOption{
+	public:
+	int &val;
+	FieldOptionType get_type(){return FIELD_OPTION_INT;};
+	FieldOptionInt(int &_val, bool *_status=NULL):FieldOption(_status),val(_val){};
+	double numerical_value()const{ return val;};
+	void numerical_value(double v){modified(); val=v;};
+	void get_text_representation(std::string &v_str){
+		std::ostringstream sstream;
+		sstream<<val;
+		v_str=sstream.str();
+	}
+};
+class FieldOptionList:public FieldOption{
+	public:
+	std::list<int> &val;
+	FieldOptionType get_type(){return FIELD_OPTION_LIST;};
+	FieldOptionList(std::list<int> &_val, bool *_status=NULL):FieldOption(_status),val(_val){};
+	std::list<int> &list(){modified(); return val; }
+	const std::list<int> &list()const { return val; }
+	void get_text_representation(std::string &v_str){
+		std::ostringstream sstream;
+		sstream<<"{";
+		for(std::list<int>::iterator it=val.begin();it!=val.end();it++){
+			if(it!=val.begin())
+				sstream<<", ";
+			sstream<<*it;
+		}
+		sstream<<"}";
+		v_str=sstream.str();
+	}
+};
+class FieldOptionString:public FieldOption{
+	public:
+	std::string &val;
+	virtual FieldOptionType get_type(){return FIELD_OPTION_STRING;};
+	FieldOptionString(std::string &_val, bool *_status=NULL):FieldOption(_status),val(_val){};
+	std::string &string(){modified(); return val; }
+	const std::string &string()const {return val; }
+	void get_text_representation(std::string &v_str){
+		std::ostringstream sstream;
+		sstream<<"\""<<val<<"\"";
+		v_str=sstream.str();
+	}
+};
+class FieldOptionBool:public FieldOption{
+	public:
+	bool &val;
+	FieldOptionType get_type(){return FIELD_OPTION_BOOL;};
+	FieldOptionBool(bool &_val, bool *_status=NULL):FieldOption(_status),val(_val){};
+	double numerical_value()const { return val;};
+	void numerical_value(double v){modified(); val=v;};
+	void get_text_representation(std::string &v_str){
+		std::ostringstream sstream;
+		sstream<<val;
+		v_str=sstream.str();
+	}
+};
+class FieldOptionPath:public FieldOptionString{
+	public:
+	FieldOptionType get_type(){return FIELD_OPTION_PATH;};
+};
 
 void FieldManager::reset()
 {
-  for(std::map<int,Field*>::iterator it = id_map.begin(); it != id_map.end(); it++){
+  for(std::map<int,Field*>::iterator it = begin(); it != end(); it++){
     delete it->second;
   }
-  id_map.clear();
+  clear();
 }
 
 Field *FieldManager::get(int id)
 {
-  std::map<int,Field*>::iterator it = id_map.find(id);
-  if(it == id_map.end()){
-    Msg(GERROR, "Field id %i does not exist", id);
+  iterator it = find(id);
+  if(it == end()){
     return NULL;
   }
   return it->second;
 }
 
-int FieldManager::insert(Field *field, int id)
-{
-  if(id == -1){ // get an automatic negative id starting from -1
-    if(id_map.begin() != id_map.end()){
-      id = id_map.begin()->first - 1;
-    }
-  }
-  if(id > 0){
-    if(id_map.find(id) != id_map.end()){
-      Msg(GERROR, "Field id %i is already defined, it will be deleted");
-      delete id_map[id];
-    }
-    id_map[id] = field;
-  }
-  return id;
+Field *FieldManager::new_field(int id, const char *type_name)
+{
+	if(find(id) != end()){
+		Msg(GERROR, "Field id %i is already defined.",id);
+		return NULL;
+	}
+	if(map_type_name.find(type_name) == map_type_name.end()){
+		Msg(GERROR, "Unknown field type \"%s\".",type_name);
+		return NULL;
+	}
+	Field *f=(*map_type_name[type_name])();
+	if(!f)
+		return NULL;
+	f->id=id;
+	(*this)[id]=f;
+  return f;
+}
+
+int FieldManager::new_id(){
+	int i=0;
+	iterator it=begin();
+	while(1){
+		i++;
+		while(it!=end() && it->first<i)it++;
+		if(it==end() || it->first!=i)break;
+	}
+	return std::max(i,1);
+}
+int FieldManager::max_id(){
+	if(!empty())
+		return rbegin()->first;
+	else return 0;
+}
+void FieldManager::delete_field(int id){
+	iterator it=find(id);
+	if(it==end()){
+		Msg(GERROR, "Cannot delete field id %i, it does not exist.",id);
+		return;
+	}
+	delete it->second;
+	erase(it);
 }
 
 // StructuredField
-StructuredField::StructuredField(const char *filename)
-{
-  std::ifstream input(filename);
-  input.read((char*)o, 3 * sizeof(double));
-  input.read((char*)d, 3 * sizeof(double));
-  input.read((char*)n, 3 * sizeof(int));
-  int nt = n[0] * n[1] * n[2];
-  data = new double[nt];
-  input.read((char*)data, nt * sizeof(double));
-  input.close();
-}
-
-StructuredField::~StructuredField()
-{
-  delete []data;
-}
-
-double StructuredField::operator()(double x,double y,double z)
-{
-  //tri-linear
-  int id[2][3];
-  double xi[3];
-  double xyz[3]={x,y,z};
-  for(int i = 0; i < 3; i++){
-    id[0][i] = (int)floor((xyz[i] - o[i]) / d[i]);
-    id[1][i] = id[0][i] + 1;
-    id[0][i] = std::max(std::min(id[0][i], n[i] - 1), 0);
-    id[1][i] = std::max(std::min(id[1][i], n[i] - 1), 0);
-    xi[i] = xyz[i] - (o[i] + id[0][i] * d[i]);
-    xi[i] = std::max(std::min(xi[i], 1.), 0.);
-  }
-  double v = 0;
-  for(int i = 0; i < 2; i++) 
-    for(int j = 0;j < 2; j++)
-      for(int k = 0; k < 2; k++){
-	v += data[id[i][0] * n[1] * n[2] + id[j][1] * n[2] + id[j][2]]
-	  * (i * xi[0] + (1 - i) * (1 - xi[0]))
-	  * (j * xi[1] + (1 - j) * (1 - xi[1]))
-	  * (k * xi[2] + (1 - k) * (1 - xi[2]));
-      }
-  return v;
-}
-
-// LatLonField
-double LatLonField::operator()(double x, double y, double z)
-{
-  return (*field)(asin(z / sqrt(x * x + y * y + z * z)), atan2(y, x), 0);
-}
-
-// ThresholdField
-ThresholdField::ThresholdField(Field *_field,
-			       double _dmin, double _dmax, double _lcmin, double _lcmax)
-  : field(_field), dmin(_dmin), dmax(_dmax), lcmin(_lcmin), lcmax(_lcmax)
-{
-}
-
-double ThresholdField::operator()(double x, double y, double z)
-{
-  double r = ((*field)(x, y, z) - dmin) / (dmax - dmin);
-  r = std::max(std::min(r, 1.), 0.);
-  double lc = lcmin * (1 - r) + lcmax * r;
-  return lc;
-}
-
-//GradField
-GradField::GradField(Field *_field, int _kind, double _delta)
-  : field(_field), kind(_kind), delta(_delta)
-{
-  if(delta < 0) delta = CTX.lc / 10000;
-}
-
-double GradField::operator()(double x, double y, double z)
-{
-  double gx, gy, gz;
-  switch(kind){
-  case 0 : /* x */
-    return ((*field)(x + delta / 2, y, z) - (*field)(x - delta / 2, y, z)) / delta;
-  case 1 : /* y */
-    return ((*field)(x, y + delta / 2, z) - (*field)(x, y - delta / 2, z)) / delta;
-  case 2 : /* z */
-    return ((*field)(x, y, z + delta / 2) - (*field)(x, y, z - delta / 2)) / delta;
-  case 3 : /* max */
-    gx = ((*field)(x + delta / 2, y, z) - (*field)(x - delta / 2, y, z)) / delta;
-    gy = ((*field)(x, y + delta / 2, z) - (*field)(x, y - delta / 2, z)) / delta;
-    gz = ((*field)(x, y, z + delta / 2) - (*field)(x, y, z - delta / 2)) / delta;
-    return sqrt(gx * gx + gy * gy + gz * gz);
-  default :
-    Msg(GERROR, "Unknown kind (%i) for GradField", kind);
-    return 0;
-  }
-}
-
-// ParametricField
-ParametricField::ParametricField(Field *_field, 
-				 const char *strX, const char *strY, const char *strZ)
-  : field(_field)
-{
-  char *sx = strdup(strX), *sy = strdup(strY), *sz = strdup(strZ);
-#if !defined(HAVE_MATH_EVAL)
-  Msg(GERROR, "MathEval is not compiled in this version of Gmsh");
-#else
-  evalX = evaluator_create(sx);
-  evalY = evaluator_create(sy);
-  evalZ = evaluator_create(sz);
-#endif
-}
-
-ParametricField::~ParametricField()
-{
-#if !defined(HAVE_MATH_EVAL)
-  Msg(GERROR, "MathEval is not compiled in this version of Gmsh");
-#else
-  evaluator_destroy(evalX);
-  evaluator_destroy(evalY);
-  evaluator_destroy(evalZ);
-#endif
-}
-
-double ParametricField::operator()(double x, double y, double z)
-{
-#if !defined(HAVE_MATH_EVAL)
-  Msg(GERROR, "MathEval is not compiled in this version of Gmsh");
-  return 0.;
-#else
-  static char *names[3] = {"x", "y", "z"};
-  double values [3] = {x, y, z};
-  const double nx = evaluator_evaluate(evalX, 3, names, values);
-  const double ny = evaluator_evaluate(evalY, 3, names, values);
-  const double nz = evaluator_evaluate(evalZ, 3, names, values);
-  return (*field)(nx, ny, nz);
-#endif
-}
-
-// FunctionField
-FunctionField::FunctionField(std::list<Field*> *_list, const char *str)
-  : list(_list)
-{
-#if !defined(HAVE_MATH_EVAL)
-  Msg(GERROR, "MathEval is not compiled in this version of Gmsh");
-#else
-  char *s = strdup(str);
-  eval = evaluator_create(s);
-  values = new double[3 + list->size()];
-  names = new char*[3 + list->size()];
-  names[0] = strdup("x");
-  names[1] = strdup("y");
-  names[2] = strdup("z");
-  int p = 3;
-  for(std::list<Field*>::iterator it = list->begin(); it != list->end(); it++){
-    char tmp[256] ; 
-    sprintf(tmp, "f%i", p - 3);
-    names[p] = strdup(tmp);
-    p++;
-  }
-#endif
-}
-
-double FunctionField::operator()(double x, double y, double z)
-{
-#if !defined(HAVE_MATH_EVAL)
-  Msg(GERROR, "MathEval is not compiled in this version of Gmsh");
-  return 0.;
-#else
-  values[0] = x;
-  values[1] = y;
-  values[2] = z;
-  int p = 3;
-  for(std::list<Field*>::iterator it = list->begin(); it != list->end(); it++){
-    values[p]=(**it)(x, y ,z);
-    p++;
-  }
-  return evaluator_evaluate(eval, p, names, values);
+class StructuredField : public Field{
+  double o[3], d[3];
+  int n[3];
+  double *data;
+	bool error_status;
+	std::string file_name;
+public :
+  StructuredField(){
+		options["FileName"]=new FieldOptionString(file_name,&update_needed);
+	}
+	const char *get_name(){
+		return "Structured";
+	}
+  virtual ~StructuredField(){
+		if(data) delete []data;
+	}
+  double operator()(double x, double y, double z){
+		if(update_needed){
+			error_status=false;
+			try{
+				std::ifstream input(file_name.c_str());
+				if(!input.is_open())throw(1);
+				input.exceptions ( std::ifstream::eofbit | std::ifstream::failbit | std::ifstream::badbit );
+				input.read((char*)o, 3 * sizeof(double));
+				input.read((char*)d, 3 * sizeof(double));
+				input.read((char*)n, 3 * sizeof(int));
+				int nt = n[0] * n[1] * n[2];
+				if(data) delete []data;
+				data = new double[nt];
+				input.read((char*)data, nt * sizeof(double));
+				input.close();
+			}
+			catch(...){
+				error_status=true;
+				Msg(GERROR,"Field %i : error reading file %s",this->id,file_name.c_str());
+			}
+			update_needed=false;
+		}
+		if(error_status)return MAX_LC;
+		//tri-linear
+		int id[2][3];
+		double xi[3];
+		double xyz[3]={x,y,z};
+		for(int i = 0; i < 3; i++){
+			id[0][i] = (int)floor((xyz[i] - o[i]) / d[i]);
+			id[1][i] = id[0][i] + 1;
+			id[0][i] = std::max(std::min(id[0][i], n[i] - 1), 0);
+			id[1][i] = std::max(std::min(id[1][i], n[i] - 1), 0);
+			xi[i] = xyz[i] - (o[i] + id[0][i] * d[i]);
+			xi[i] = std::max(std::min(xi[i], 1.), 0.);
+		}
+		double v = 0;
+		for(int i = 0; i < 2; i++) 
+			for(int j = 0;j < 2; j++)
+				for(int k = 0; k < 2; k++){
+		v += data[id[i][0] * n[1] * n[2] + id[j][1] * n[2] + id[k][2]]
+			* (i * xi[0] + (1 - i) * (1 - xi[0]))
+			* (j * xi[1] + (1 - j) * (1 - xi[1]))
+			* (k * xi[2] + (1 - k) * (1 - xi[2]));
+				}
+		return v;
+	}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+};
+
+class LonLatField : public Field{
+	int field_id;
+public:
+  LonLatField(){
+		field_id=1;
+		options["IField"]=new FieldOptionInt(field_id);
+	}
+	const char *get_name(){return "LonLat";}
+  double operator()(double x, double y, double z){
+		return (*GModel::current()->fields.get(field_id))(atan2(x,y),asin(z / sqrt(x * x + y * y + z * z)), 0);
+	}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+};
+
+class BoxField : public Field{
+	double v_in,v_out,x_min,x_max,y_min,y_max,z_min,z_max;
+	public:
+	BoxField(){
+		v_in=v_out=x_min=x_max=y_min=y_max=z_min=z_max=0;
+		options["VIn"]=new FieldOptionDouble(v_in);
+		options["VOut"]=new FieldOptionDouble(v_out);
+		options["XMin"]=new FieldOptionDouble(x_min);
+		options["XMax"]=new FieldOptionDouble(x_max);
+		options["YMin"]=new FieldOptionDouble(y_min);
+		options["YMax"]=new FieldOptionDouble(y_max);
+		options["ZMin"]=new FieldOptionDouble(z_min);
+		options["ZMax"]=new FieldOptionDouble(z_max);
+	}
+	const char *get_name(){return "Box";}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+  double operator()(double x, double y, double z){
+		return (x<=x_max && x>=x_min && y<=y_max && y>=y_min && z<=z_max && z>=z_min) ?
+			v_in : v_out;
+	}
+};
+
+
+class ThresholdField : public Field{
+	int iField;
+  double dmin, dmax, lcmin, lcmax;
+	public:
+	const char *get_name(){
+		return "Threshold";
+	}
+  ThresholdField(){
+		iField=0;
+		dmin=1;
+		dmax=10;
+		lcmin=0.1;
+		lcmax=1;
+		options["IField"]=new FieldOptionInt(iField);
+		options["DistMin"]=new FieldOptionDouble(dmin);
+		options["DistMax"]=new FieldOptionDouble(dmax);
+		options["LcMin"]=new FieldOptionDouble(lcmin);
+		options["LcMax"]=new FieldOptionDouble(lcmax);
+	}
+  double operator()(double x, double y, double z){
+		Field *field=GModel::current()->fields.get(iField);
+		double r = ((*field)(x, y, z) - dmin) / (dmax - dmin);
+		r = std::max(std::min(r, 1.), 0.);
+		double lc = lcmin * (1 - r) + lcmax * r;
+		return lc;
+	}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+};
+
+
+class GradientField : public Field{
+	int iField,kind;
+	double delta;
+	public:
+	const char *get_name(){
+		return "Gradient";
+	}
+  GradientField():iField(0),kind(3),delta(CTX.lc/1e4){
+		options["IField"]=new FieldOptionInt(iField);
+		options["Kind"]=new FieldOptionInt(kind);
+		options["Delta"]=new FieldOptionDouble(delta);
+	}
+  double operator()(double x, double y, double z){
+		Field *field=GModel::current()->fields.get(iField);
+		double gx, gy, gz;
+		switch(kind){
+		case 0 : /* x */
+			return ((*field)(x + delta / 2, y, z) - (*field)(x - delta / 2, y, z)) / delta;
+		case 1 : /* y */
+			return ((*field)(x, y + delta / 2, z) - (*field)(x, y - delta / 2, z)) / delta;
+		case 2 : /* z */
+			return ((*field)(x, y, z + delta / 2) - (*field)(x, y, z - delta / 2)) / delta;
+		case 3 : /* norm */
+			gx = ((*field)(x + delta / 2, y, z) - (*field)(x - delta / 2, y, z)) / delta;
+			gy = ((*field)(x, y + delta / 2, z) - (*field)(x, y - delta / 2, z)) / delta;
+			gz = ((*field)(x, y, z + delta / 2) - (*field)(x, y, z - delta / 2)) / delta;
+			return sqrt(gx * gx + gy * gy + gz * gz);
+		default :
+			Msg(GERROR, "Field %i : Unknown kind (%i) of gradient.",this->id, kind);
+			return MAX_LC;
+		}
+	}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+};
+
+#if defined(HAVE_MATH_EVAL)
+class MathEvalExpression{
+	bool error_status;
+  std::list<Field*> *list;
+	int nvalues;
+  char **names;
+  double *values;
+  void *eval;
+	int *evaluators_id;
+	std::string function;
+	char *c_str_function;
+	public:
+	double evaluate(double x,double y, double z){
+		if(error_status) return MAX_LC;
+		for(int i=0;i<nvalues;i++){
+			Field *f;
+			switch (evaluators_id[i]){
+				case -1: values[i]=x; break;
+				case -2: values[i]=y; break;
+				case -3: values[i]=z; break;
+				default: {
+					f=GModel::current()->fields.get(evaluators_id[i]);
+					values[i] = f ? (*f)(x,y,z) : MAX_LC;
+				}
+			}
+		}
+		return evaluator_evaluate(eval, nvalues, names, values);
+	}
+	MathEvalExpression(){
+		eval=NULL;
+		values=NULL;
+		c_str_function=NULL;
+		evaluators_id=NULL;
+	}
+	bool set_function(const std::string &f){
+		free_members();
+		error_status=false;
+		c_str_function=strdup(f.c_str());
+		eval = evaluator_create(c_str_function);
+		if(!eval){
+			error_status=true;
+			return false;
+		}
+		evaluator_get_variables(eval,&names,&nvalues);
+		values = new double[nvalues];
+		evaluators_id=new int[nvalues];
+		for(int i=0;i<nvalues;i++){
+			int id;
+			if(!strcmp("x",names[i])) evaluators_id[i]=-1;
+			else if(!strcmp("y",names[i])) evaluators_id[i]=-2;
+			else if(!strcmp("z",names[i])) evaluators_id[i]=-3;
+			else if(sscanf(names[i],"F%i",&id)==1) evaluators_id[i]=id;
+			else{
+				Msg(GERROR, "Unknown matheval argument \"%s\"\n",names[i]);
+				error_status=true;
+				return false;
+			}
+		}
+		return true;
+	}
+	void free_members(){
+		if(c_str_function)free(c_str_function);
+		if(eval) evaluator_destroy(eval);
+		if(values)delete[]values;
+		if(evaluators_id) delete evaluators_id;
+	}
+	~MathEvalExpression(){
+		free_members();
+	}
+};
+
+class MathEvalField : public Field{
+	MathEvalExpression expr;
+	std::string f;
+	public:
+	MathEvalField(){
+		options["F"]=new FieldOptionString(f,&update_needed);
+	}
+  double operator()(double x, double y, double z){
+		if(update_needed){
+			if(!expr.set_function(f))
+				Msg(GERROR, "Field %i : Invalid matheval expression \"%s\"\n",this->id,f.c_str());
+			update_needed=false;
+		}
+		return expr.evaluate(x,y,z);
+	}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+	const char *get_name(){return "MathEval";}
+};
+class ParametricField : public Field{
+	MathEvalExpression expr[3];
+	std::string f[3];
+	int ifield;
+	public:
+	ParametricField(){
+		options["IField"] = new FieldOptionInt(ifield);
+		options["FX"]=new FieldOptionString(f[0],&update_needed);
+		options["FY"]=new FieldOptionString(f[1],&update_needed);
+		options["FZ"]=new FieldOptionString(f[2],&update_needed);
+	}
+  double operator()(double x, double y, double z){
+		if(update_needed){
+			for(int i=0;i<3;i++){
+				if(!expr[i].set_function(f[i]))
+					Msg(GERROR, "Field %i : Invalid matheval expression \"%s\"\n",this->id,f[i].c_str());
+			}
+			update_needed=false;
+		}
+		return (*GModel::current()->fields.get(ifield))(expr[0].evaluate(x,y,z),expr[1].evaluate(x,y,z),expr[2].evaluate(x,y,z));
+	}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+	const char *get_name(){return "Param";}
+};
 #endif
-}
-
-FunctionField::~FunctionField()
-{
-#if !defined(HAVE_MATH_EVAL)
-  Msg(GERROR, "MathEval is not compiled in this version of Gmsh");
-#else
-  int n = 3 + list->size();
-  for(int i = 0; i < n; i++){
-    free(names[i]);
-  }
-  delete [] names;
-  delete [] values;
-  delete list;
-  evaluator_destroy(eval);
-#endif
-}
-
-// PostViewField
-double PostViewField::operator()(double x, double y, double z) 
-{
-  // FIXME: should test unique view num instead, but that would be slower
-  if(view_index < 0 || view_index >= (int)PView::list.size()) return MAX_LC;
-
-  double l = 0.;
-  if(!octree->searchScalar(x, y, z, &l, 0)){
-    // uncomment the following to try really hard to find an element
-    // around the point
-    /*
-    double fact[9] = {0.001, 0.0025, 0.005, 0.0075, 0.01, 0.025, 0.05, 0.075, 0.1};
-    for(int i = 0; i < 9; i++){
-      double eps = CTX.lc * fact[i];
-      if(octree->searchScalar(x + eps, y, z, &l, 0)) break;
-      if(octree->searchScalar(x - eps, y, z, &l, 0)) break;
-      if(octree->searchScalar(x, y + eps, z, &l, 0)) break;
-      if(octree->searchScalar(x, y - eps, z, &l, 0)) break;
-      if(octree->searchScalar(x, y, z + eps, &l, 0)) break;
-      if(octree->searchScalar(x, y, z - eps, &l, 0)) break;
-      if(octree->searchScalar(x + eps, y - eps, z - eps, &l, 0)) break;
-      if(octree->searchScalar(x + eps, y + eps, z - eps, &l, 0)) break;
-      if(octree->searchScalar(x - eps, y - eps, z - eps, &l, 0)) break;
-      if(octree->searchScalar(x - eps, y + eps, z - eps, &l, 0)) break;
-      if(octree->searchScalar(x + eps, y - eps, z + eps, &l, 0)) break;
-      if(octree->searchScalar(x + eps, y + eps, z + eps, &l, 0)) break;
-      if(octree->searchScalar(x - eps, y - eps, z + eps, &l, 0)) break;
-      if(octree->searchScalar(x - eps, y + eps, z + eps, &l, 0)) break;
-    }
-    */
-  }
-  if(l <= 0) return MAX_LC;
-  return l;
-}
-
-PostViewField::PostViewField(PView *view)
-{
-  Msg(INFO, "Field from '%s'", view->getData()->getName().c_str());
-  octree = new OctreePost(view);
-  view_index = view->getIndex();
-}
-
-PostViewField::~PostViewField()
-{
-  delete octree;
-}
-
-// Min Field
-double MinField::operator()(double x, double y, double z)
-{
-  if(size() == 0){
-    Msg(GERROR, "Requesting minimum of a void list of field");
-    return 0;
-  }
-  iterator it = begin();
-  double v = (**it++)(x, y, z);
-  while(it != end()){
-    v = std::min(v, (**it++)(x, y, z));
-  }
-  return v;
-}
-
-// Attractor Field
-#define maxpts  1
-void AttractorField::addPoint(double X, double Y, double Z)
-{
-  attractorPoints.push_back(SPoint3(X, Y, Z));
-}
-
-AttractorField::~AttractorField()
-{
-#ifdef HAVE_ANN
-  if(kdtree) delete kdtree;
-  if(zeronodes) annDeallocPts(zeronodes);
-  delete [] index;
-  delete [] dist;
-#endif
-}
-
-AttractorField::AttractorField()
-#ifdef HAVE_ANN
-  : kdtree (0), zeronodes(0)
-#endif
-{
-#ifdef HAVE_ANN
-  index = new ANNidx[maxpts];
-  dist = new ANNdist[maxpts];
-#endif
-}
 
-void AttractorField::buildFastSearchStructures()
-{
+class PostViewField:public Field{
+	int view_index;
+  OctreePost *octree;
+	public : 
+	double operator()(double x, double y, double z) {
+		// FIXME: should test unique view num instead, but that would be slower
+		if(view_index < 0 || view_index >= (int)PView::list.size()) return MAX_LC;
+		if(update_needed){
+			if(octree)delete octree;
+			octree = new OctreePost(PView::list[view_index]);
+			update_needed=false;
+		}
+		double l = 0.;
+		if(!octree->searchScalar(x, y, z, &l, 0)){
+			// uncomment the following to try really hard to find an element
+			// around the point
+			/*
+			double fact[9] = {0.001, 0.0025, 0.005, 0.0075, 0.01, 0.025, 0.05, 0.075, 0.1};
+			for(int i = 0; i < 9; i++){
+				double eps = CTX.lc * fact[i];
+				if(octree->searchScalar(x + eps, y, z, &l, 0)) break;
+				if(octree->searchScalar(x - eps, y, z, &l, 0)) break;
+				if(octree->searchScalar(x, y + eps, z, &l, 0)) break;
+				if(octree->searchScalar(x, y - eps, z, &l, 0)) break;
+				if(octree->searchScalar(x, y, z + eps, &l, 0)) break;
+				if(octree->searchScalar(x, y, z - eps, &l, 0)) break;
+				if(octree->searchScalar(x + eps, y - eps, z - eps, &l, 0)) break;
+				if(octree->searchScalar(x + eps, y + eps, z - eps, &l, 0)) break;
+				if(octree->searchScalar(x - eps, y - eps, z - eps, &l, 0)) break;
+				if(octree->searchScalar(x - eps, y + eps, z - eps, &l, 0)) break;
+				if(octree->searchScalar(x + eps, y - eps, z + eps, &l, 0)) break;
+				if(octree->searchScalar(x + eps, y + eps, z + eps, &l, 0)) break;
+				if(octree->searchScalar(x - eps, y - eps, z + eps, &l, 0)) break;
+				if(octree->searchScalar(x - eps, y + eps, z + eps, &l, 0)) break;
+			}
+			*/
+		}
+		//if(l <= 0) return MAX_LC;
+		return l;
+	}
+	const char *get_name(){ return "PostView"; }
+	PostViewField() {
+		octree=NULL;
+		options["IView"]=new FieldOptionInt(view_index,&update_needed);
+	}
+	~PostViewField(){
+		if(octree) delete octree;
+	}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+};
+
+class MinField : public Field{
+	std::list<int> idlist;
+	public:
+	MinField(){
+		options["FieldsList"]=new FieldOptionList(idlist,&update_needed);
+	}
+  double operator()(double x, double y, double z){
+		double v=MAX_LC;
+		for(std::list<int>::iterator it=idlist.begin();it!=idlist.end();it++){
+			Field *f=(GModel::current()->fields.get(*it));
+			if(f)
+				v=std::min(v,(*f)(x,y,z));
+		}
+		return v;
+	}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+ const char *get_name(){return "Min";}
+};
+
+class MaxField : public Field{
+	std::list<int> idlist;
+	public:
+	MaxField(){
+		options["FieldsList"]=new FieldOptionList(idlist,&update_needed);
+	}
+  double operator()(double x, double y, double z){
+		double v=-MAX_LC;
+		for(std::list<int>::iterator it=idlist.begin();it!=idlist.end();it++){
+			Field *f=(GModel::current()->fields.get(*it));
+			if(f)
+				v=std::max(v,(*f)(x,y,z));
+		}
+		return v;
+	}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+	const char *get_name(){return "Max";}
+};
 #ifdef HAVE_ANN
-  if(zeronodes){
-    annDeallocPts(zeronodes);
-    delete kdtree;
-  }
-  int totpoints = attractorPoints.size();
-  if (totpoints)
-    zeronodes = annAllocPts(totpoints, 4);
-  int k = 0;
-  for(std::list <SPoint3>::iterator it2 = attractorPoints.begin();
-      it2 != attractorPoints.end(); ++it2){
-    zeronodes[k][0]=it2->x();
-    zeronodes[k][1]=it2->y();
-    zeronodes[k++][2]=it2->z();
-  }
-  kdtree = new ANNkd_tree(zeronodes, totpoints, 3);
+class AttractorField : public Field{
+  ANNkd_tree* kdtree;
+  ANNpointArray zeronodes;
+  ANNidxArray index;
+  ANNdistArray dist;
+  std::list<int> nodes_id;  
+  std::list<int> edges_id;  
+	int n_nodes_by_edge;
+public :
+  AttractorField(): kdtree (0), zeronodes(0) {
+		index = new ANNidx[1];
+		dist = new ANNdist[1];
+		options["NodesList"]=new FieldOptionList(nodes_id,&update_needed);
+		options["EdgesList"]=new FieldOptionList(edges_id,&update_needed);
+		options["NNodesByEdge"]=new FieldOptionInt(n_nodes_by_edge,&update_needed);
+		n_nodes_by_edge=20;
+	}
+  ~AttractorField(){
+		if(kdtree) delete kdtree;
+		if(zeronodes) annDeallocPts(zeronodes);
+		delete [] index;
+		delete [] dist;
+	}
+	const char *get_name(){
+		return "Attractor";
+	}
+  virtual double operator()(double X, double Y, double Z){
+		if(update_needed){
+			if(zeronodes){
+				annDeallocPts(zeronodes);
+				delete kdtree;
+			}
+			int totpoints = nodes_id.size()+n_nodes_by_edge*edges_id.size();
+			if (totpoints)
+				zeronodes = annAllocPts(totpoints, 4);
+			int k = 0;
+			for(std::list <int>::iterator it = nodes_id.begin(); it != nodes_id.end(); ++it){
+				Vertex *v = FindPoint(*it); 
+				if(v){
+					zeronodes[k][0]=v->Pos.X;
+					zeronodes[k][1]=v->Pos.Y;
+					zeronodes[k++][2]=v->Pos.Z;
+				}else{
+					GVertex *gv = GModel::current()->getVertexByTag(*it);
+					if(gv){
+						zeronodes[k][0]=gv->x();
+						zeronodes[k][1]=gv->y();
+						zeronodes[k++][2]=gv->z();
+					}
+				}
+			}
+			for(std::list <int>::iterator it = edges_id.begin(); it != edges_id.end(); ++it){
+				Curve *c = FindCurve(*it); 
+				if(c){
+					for(int i = 0; i < n_nodes_by_edge ; i++){
+						double u = (double)i / (n_nodes_by_edge - 1);
+						Vertex V = InterpolateCurve(c, u, 0);
+						zeronodes[k][0]=V.Pos.X;
+						zeronodes[k][1]=V.Pos.Y;
+						zeronodes[k++][2]=V.Pos.Z;
+					}
+				}else{
+					GEdge *ge = GModel::current()->getEdgeByTag(*it);
+					if(ge){
+						for(int i = 0; i < n_nodes_by_edge; i++){
+							double u = (double)i / (n_nodes_by_edge - 1);
+							Range<double> b = ge->parBounds(0);
+							double t = b.low() + u * (b.high() - b.low());
+							GPoint gp = ge->point(t);
+							zeronodes[k][0]=gp.x();
+							zeronodes[k][1]=gp.y();
+							zeronodes[k++][2]=gp.z();
+						}
+					}
+				}
+			}
+			kdtree = new ANNkd_tree(zeronodes, totpoints, 3);
+		}
+		double xyz[3] = {X, Y, Z};
+		kdtree->annkSearch(xyz, 1, index, dist);
+		return sqrt(dist[0]);
+	}
+	FieldDialogBox *&dialog_box(){
+		static FieldDialogBox *dialogBox=NULL;
+		return dialogBox;
+	}
+};
 #endif
-}
-
-double AttractorField::operator()(double X, double Y, double Z)
-{
-  double xyz[3] = {X, Y, Z};
-  if(attractorPoints.size() == 1){
-    SPoint3 p = *(attractorPoints.begin());
-    return sqrt((p.x() - X) * (p.x() - X) + 
-		(p.y() - Y) * (p.y() - Y) + 
-		(p.z() - Z) * (p.z() - Z));
-  }
-  else{
-#ifdef HAVE_ANN
-    kdtree->annkSearch(xyz, maxpts, index, dist);
-    return sqrt(dist[0]);
-#else
-    Msg(GERROR,"GMSH should be compiled with ANN in order to enable attractors");
-    return 0.;
-#endif
-  }
-}
-
-void AttractorField::addCurve(Curve *c, int N) 
-{
-  for(int i = 0; i < N; i++){
-    double u = (double)i / (N - 1);
-    Vertex V = InterpolateCurve(c, u, 0);
-    addPoint(V.Pos.X, V.Pos.Y, V.Pos.Z);
-  }
-}
-
-void AttractorField::addGEdge(GEdge *c, int N) 
-{
-  for(int i = 0; i < N; i++){
-    double u = (double)i / (N - 1);
-    Range<double> b = c->parBounds(0);
-    double t = b.low() + u * (b.high() - b.low());
-    GPoint gp = c->point(t);
-    addPoint(gp.x(), gp.y(), gp.z());
-  }
-}
 
+#if 0
 void addMapLc (std::map<MVertex*, double> &maplc, MVertex *v, double l)
 {
   std::map<MVertex*, double>::iterator it = maplc.find(v);
   if(it == maplc.end()) maplc[v] = l;
   else if(it->second > l) it->second = l;
 }
+#endif
 
+#if 0
+/*class AttractorField_1DMesh : public AttractorField 
+{
+protected:
+  std::vector<double> lcs;
+  std::vector<double> lcs2;
+  double _dmax,_dmin,_lcmax;
+public:
+  AttractorField_1DMesh (GModel *m , double dmax, double dmin, double lcmax);
+  AttractorField_1DMesh (GFace  *gf, double dmax, double dmin, double lcmax);
+  virtual double operator()(double X, double Y, double Z) ;
+  virtual void eval(double X, double Y, double Z, double &l, double &lpt, double &dist) ;
+};*/
 AttractorField_1DMesh::AttractorField_1DMesh(GModel *m, double dmax, double dmin, 
 					     double lcmax)
   : _dmax(dmax), _dmin(dmin), _lcmax(lcmax)
@@ -496,7 +768,6 @@ AttractorField_1DMesh::AttractorField_1DMesh(GFace *gf, double dmax, double dmin
   }
 }
 
-
 double AttractorField_1DMesh::operator()(double X, double Y, double Z)
 {
 #ifdef HAVE_ANN
@@ -526,3 +797,94 @@ void AttractorField_1DMesh::eval(double X, double Y, double Z, double &lcmin, do
   Msg(GERROR,"GMSH should be compiled with ANN in order to enable attractors");
 #endif
 }
+#endif
+
+template<class F>
+class FieldFactoryT:public FieldFactory{
+	public:
+	Field *operator()(){return new F;};
+};
+
+template<class F>
+Field *field_factory(){return new F();};
+
+FieldManager::FieldManager(){
+	map_type_name["Structured"]=new FieldFactoryT<StructuredField>();
+	map_type_name["Threshold"]=new FieldFactoryT<ThresholdField>();
+	map_type_name["Box"]=new FieldFactoryT<BoxField>();
+	map_type_name["LonLat"]=new FieldFactoryT<LonLatField>();
+#if defined(HAVE_MATH_EVAL)
+	map_type_name["Param"]=new FieldFactoryT<ParametricField>();
+	map_type_name["MathEval"]=new FieldFactoryT<MathEvalField>();
+#endif
+#if defined(HAVE_ANN)
+	map_type_name["Attractor"]=new FieldFactoryT<AttractorField>();
+#endif
+	map_type_name["PostView"]=new FieldFactoryT<PostViewField>();
+	map_type_name["Gradient"]=new FieldFactoryT<GradientField>();
+	map_type_name["Min"]=new FieldFactoryT<MinField>();
+	map_type_name["Max"]=new FieldFactoryT<MaxField>();
+	background_field=-1;
+}
+
+static void evaluate(Field *field, List_T *list1, int nbElm1, int nbNod, 
+		     int nbComp, int comp )
+{
+  if(!nbElm1) return;
+  int nb = List_Nbr(list1) / nbElm1;
+  for(int i = 0; i < List_Nbr(list1); i += nb) {
+    double *x = (double *)List_Pointer_Fast(list1, i);
+    double *y = (double *)List_Pointer_Fast(list1, i + nbNod);
+    double *z = (double *)List_Pointer_Fast(list1, i + 2 * nbNod);
+    for(int j = 0; j < nbNod; j++) {
+      // store data from the main view into v
+      double *val1 = (double *)List_Pointer_Fast(list1, 
+						 i + 3 * nbNod + 
+						 nbNod * nbComp * 0 + nbComp * j);
+      val1[comp] = (*field)(x[j],y[j],z[j]);
+    }
+  }
+}
+
+Field::Field(){
+}
+
+void Field::put_on_view(PView *view,int comp)
+{
+  PViewDataList *data = dynamic_cast<PViewDataList*>(view->getData());
+  if(!data) return ;
+  evaluate(this, data->SP, data->NbSP, 1, 1, 0);
+  evaluate(this, data->SL, data->NbSL, 2, 1, 0);
+  evaluate(this, data->ST, data->NbST, 3, 1, 0);
+  evaluate(this, data->SQ, data->NbSQ, 4, 1, 0);      
+  evaluate(this, data->SS, data->NbSS, 4, 1, 0);
+  evaluate(this, data->SH, data->NbSH, 8, 1, 0);      
+  evaluate(this, data->SI, data->NbSI, 6, 1, 0);
+  evaluate(this, data->SY, data->NbSY, 5, 1, 0);
+  for(int cc = 0; cc < 3; cc++){
+    if(comp < 0 || comp == cc){
+      evaluate(this, data->VP, data->NbVP, 1, 3, cc);
+      evaluate(this, data->VL, data->NbVL, 2, 3, cc);
+      evaluate(this, data->VT, data->NbVT, 3, 3, cc);
+      evaluate(this, data->VQ, data->NbVQ, 4, 3, cc);
+      evaluate(this, data->VS, data->NbVS, 4, 3, cc);
+      evaluate(this, data->VH, data->NbVH, 8, 3, cc);
+      evaluate(this, data->VI, data->NbVI, 6, 3, cc);
+      evaluate(this, data->VY, data->NbVY, 5, 3, cc);
+    }
+  }
+  for(int cc = 0; cc < 9; cc++){
+    if(comp < 0 || comp == cc){
+      evaluate(this, data->TP, data->NbTP, 1, 9, cc);
+      evaluate(this, data->TL, data->NbTL, 2, 9, cc);
+      evaluate(this, data->TT, data->NbTT, 3, 9, cc);      
+      evaluate(this, data->TQ, data->NbTQ, 4, 9, cc);
+      evaluate(this, data->TS, data->NbTS, 4, 9, cc);
+      evaluate(this, data->TH, data->NbTH, 8, 9, cc);
+      evaluate(this, data->TI, data->NbTI, 6, 9, cc);
+      evaluate(this, data->TY, data->NbTY, 5, 9, cc);
+    }
+  }
+  data->finalize();
+  view->setChanged(true);
+}
diff --git a/Mesh/Field.h b/Mesh/Field.h
index d92632a24043a7a9bd1e613a43d719fc5c7d764b..cd97bb76f5fe8d0fe0170db1cecd6cf0b7f27f7a 100644
--- a/Mesh/Field.h
+++ b/Mesh/Field.h
@@ -20,134 +20,63 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
-#include <vector>
 #include <map>
 #include <list>
-#include "PView.h"
-#ifdef HAVE_ANN
-#include "ANN/ANN.h"
-#endif
 #include "Geo.h"
-#include "GEdge.h"
-#include "OctreePost.h"
+#include "PView.h"
+
+class Field;
+typedef enum {FIELD_OPTION_DOUBLE=0,FIELD_OPTION_INT,FIELD_OPTION_STRING,FIELD_OPTION_PATH,FIELD_OPTION_BOOL,FIELD_OPTION_LIST}FieldOptionType;
+class FieldOption{
+	protected:
+	bool *status;
+	inline void modified(){if(status)*status=true;}
+	public:
+	FieldOption(bool *_status):status(_status){};
+	virtual FieldOptionType get_type()=0;
+	virtual void get_text_representation(std::string &v_str)=0;
+	virtual void numerical_value(double val){throw (1);}
+	virtual double numerical_value()const {throw (1);}
+	virtual const std::list<int> & list()const {throw (1);}
+	virtual std::list<int> & list(){throw (1);}
+	virtual const std::string & string()const{throw (1);}
+	virtual std::string & string(){throw (1);}
+};
 
+class FieldDialogBox;
 class Field{
+	struct lstr{
+		bool operator() (const char* s1, const char* s2 ) const{
+			return strcmp(s1,s2)<0;
+		}
+	};
 public:
+	int id;
+	std::map<const char *, FieldOption*,lstr> options;
   virtual double operator()(double x, double y, double z) = 0;
   virtual ~Field(){}
+	bool update_needed;
+	Field();
+	virtual const char *get_name()=0;
+	virtual FieldDialogBox *&dialog_box()=0;
+	void put_on_view(PView *view,int comp=-1);
 };
 
-class FieldManager{
-  std::map<int, Field*> id_map;
-public:
+class FieldFactory{
+	public:
+	virtual Field *operator()()=0;
+};
+class FieldManager:public std::map<int, Field*>{
+	public:
+	std::map<const std::string,FieldFactory*> map_type_name;
   void reset();
-  int insert(Field *field, int id=-1 /* -1 = automatic id */); /* returns the id */
   Field *get(int id);
+	Field *new_field(int id, const char *type_name);
+	void delete_field(int id);
+	int new_id();
+	int max_id();
+	FieldManager();
+	int background_field;
 };
 
-extern FieldManager fields;
-
-class StructuredField : public Field{
-  double o[3], d[3];
-  int n[3];
-  double *data;
-public :
-  StructuredField(const char *filename);
-  virtual ~StructuredField();
-  double operator()(double x, double y, double z);
-};
-
-class LatLonField : public Field{
-  Field *field;
-public:
-  LatLonField(Field *_field) : field(_field){};
-  double operator()(double x, double y, double z);
-};
-
-class ParametricField : public Field{
-  void *evalX, *evalY, *evalZ;
-  Field *field;
-public:
-  ParametricField(Field *_field, const char *strX, const char *strY, const char *strZ);
-  double operator()(double x, double y, double z);
-  virtual ~ParametricField();
-};
-
-class ThresholdField : public Field{
-  Field *field;
-  double dmin, dmax, lcmin, lcmax;
-public:
-  ThresholdField(Field *field, double dmin, double dmax, double lcmin, double lcmax);
-  double operator()(double x, double y, double z);
-};
-
-class GradField : public Field{
-  Field *field;
-  int kind; /* 0 x, 1 y, 2 z, 3 max */
-  double delta;
-public:
-  GradField(Field *field, int _kind=2, double _delta=-1);
-  double operator()(double x, double y, double z);
-};
-
-class FunctionField : public Field{
-  std::list<Field*> *list;
-  char **names;
-  double *values;
-  void *eval;
-public:
-  FunctionField(std::list<Field*> *_list, const char *fct);
-  double operator()(double x, double y, double z);
-  virtual ~FunctionField();
-};
-
-class PostViewField : public Field{
-  OctreePost *octree;
-  int view_index;
-public:
-  PostViewField(PView *view);
-  double operator()(double x, double y, double z);
-  virtual ~PostViewField();
-};
-
-class MinField : public Field, public std::list<Field*>{
-public:
-  MinField(){}
-  double operator()(double x, double y, double z);
-};
-
-class AttractorField : public Field{
-protected :
-#ifdef HAVE_ANN
-  ANNkd_tree* kdtree;
-  ANNpointArray zeronodes;
-  ANNidxArray index;
-  ANNdistArray dist;
-#endif
-  std::list<SPoint3> attractorPoints;  
-public :
-  AttractorField();
-  virtual ~AttractorField();
-  void addPoint(double X, double Y, double Z);
-  void buildFastSearchStructures() ;
-  void addGEdge(GEdge*, int);
-  void addCurve(Curve*, int);
-  virtual double operator()(double X, double Y, double Z) ;
-};
-
-class AttractorField_1DMesh : public AttractorField 
-{
-protected:
-  std::vector<double> lcs;
-  std::vector<double> lcs2;
-  double _dmax,_dmin,_lcmax;
-public:
-  AttractorField_1DMesh (GModel *m , double dmax, double dmin, double lcmax);
-  AttractorField_1DMesh (GFace  *gf, double dmax, double dmin, double lcmax);
-  virtual double operator()(double X, double Y, double Z) ;
-  virtual void eval(double X, double Y, double Z, double &l, double &lpt, double &dist) ;
-};
-
-
-
 #endif
diff --git a/Mesh/Makefile b/Mesh/Makefile
index 0fa65be99ac9c0c50af6d997d2ee8dd3b85fcb96..e74a2fc62e8558b2bf8e98dfbea1fa6e66727944 100644
--- a/Mesh/Makefile
+++ b/Mesh/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.207 2008-03-11 22:30:31 geuzaine Exp $
+# $Id: Makefile,v 1.208 2008-03-18 08:41:21 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -89,292 +89,237 @@ Generator.o: Generator.cpp ../Common/Message.h ../Numeric/Numeric.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/OS.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h meshGEdge.h \
-  meshGFace.h meshGFaceBDS.h meshGRegion.h BackgroundMesh.h \
-  BoundaryLayer.h HighOrder.h
-Field.o: Field.cpp ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
-  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SBoundingBox3d.h ../Geo/MVertex.h ../Geo/SPoint3.h \
-  ../Common/Message.h Field.h ../Post/PView.h ../Post/PViewData.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h ../Geo/Geo.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Geo/MElement.h \
+  ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h meshGEdge.h meshGFace.h \
+  meshGFaceBDS.h meshGRegion.h BackgroundMesh.h BoundaryLayer.h \
+  HighOrder.h
+Field.o: Field.cpp ../Common/Context.h Field.h ../Geo/Geo.h \
   ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
   ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
   ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../Geo/SPoint2.h ../Geo/ExtrudeParams.h \
-  ../Common/SmoothData.h ../Post/OctreePost.h ../Common/Octree.h \
-  ../Common/OctreeInternals.h ../Common/Context.h \
-  ../Geo/GeoInterpolation.h ../Geo/Geo.h BackgroundMesh.h
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Geo/GeoInterpolation.h \
+  ../Geo/Geo.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GEdgeLoop.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Common/Message.h \
+  ../Post/OctreePost.h ../Common/Octree.h ../Common/OctreeInternals.h \
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h
 meshGEdge.o: meshGEdge.cpp meshGEdge.h ../Geo/GEdge.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/MElement.h ../Common/GmshDefines.h \
-  ../Geo/MVertex.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  BackgroundMesh.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
-  ../Common/Message.h ../DataStr/List.h ../Common/Context.h
+  ../Geo/GVertex.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
+  ../Geo/MEdge.h ../Geo/MFace.h BackgroundMesh.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../Common/Message.h ../DataStr/List.h \
+  ../Common/Context.h
 meshGEdgeExtruded.o: meshGEdgeExtruded.cpp ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Common/Message.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/MFace.h ../Geo/ExtrudeParams.h ../Common/Message.h
 meshGFace.o: meshGFace.cpp meshGFace.h meshGFaceBDS.h \
   meshGFaceDelaunayInsertion.h ../Geo/MElement.h ../Common/GmshDefines.h \
-  ../Geo/MVertex.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h meshGFaceOptimize.h DivideAndConquer.h \
+  ../Geo/MVertex.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/SVector3.h \
+  ../Geo/MFace.h meshGFaceOptimize.h ../Geo/MEdge.h DivideAndConquer.h \
   BackgroundMesh.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Common/Context.h ../Common/Message.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h BDS.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/GVertex.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/Pair.h ../Geo/MVertex.h ../Common/Context.h ../Geo/GPoint.h \
+  ../Common/Message.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  BDS.h ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h qualityMeasures.h Field.h \
-  ../Geo/Geo.h ../Geo/gmshSurface.h ../Geo/Pair.h ../Geo/Range.h \
-  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
-  ../Geo/SBoundingBox3d.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../Geo/SPoint2.h ../Geo/ExtrudeParams.h \
-  ../Common/SmoothData.h ../Post/OctreePost.h ../Common/Octree.h \
-  ../Common/OctreeInternals.h ../Common/OS.h
+  ../Geo/Geo.h ../Geo/gmshSurface.h ../Numeric/Numeric.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Common/OS.h
 meshGFaceTransfinite.o: meshGFaceTransfinite.cpp meshGFace.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/MVertex.h ../Geo/SPoint3.h ../Geo/MElement.h \
-  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/MEdge.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Common/Context.h ../Common/Message.h \
-  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h \
+  ../Geo/GEdge.h ../Geo/Pair.h ../Geo/MVertex.h ../Geo/MElement.h \
+  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h \
+  ../Common/Context.h ../Common/Message.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h
 meshGFaceExtruded.o: meshGFaceExtruded.cpp ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Common/Context.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/MFace.h ../Geo/ExtrudeParams.h ../Common/Context.h \
   ../Common/Message.h
 meshGFaceBDS.o: meshGFaceBDS.cpp meshGFace.h meshGFaceOptimize.h \
   ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  meshGFaceDelaunayInsertion.h BackgroundMesh.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
-  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
-  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Common/Context.h \
-  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEdge.h ../Geo/GFace.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Common/Message.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
-  BDS.h ../Post/PView.h ../Post/PViewData.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h qualityMeasures.h Field.h ../Geo/Geo.h \
-  ../Geo/gmshSurface.h ../Geo/Pair.h ../Geo/Range.h ../Geo/SPoint2.h \
-  ../Geo/SPoint3.h ../Geo/SVector3.h ../Geo/SBoundingBox3d.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../Geo/SPoint2.h \
-  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/OctreePost.h \
-  ../Common/Octree.h ../Common/OctreeInternals.h ../Common/OS.h
+  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/SVector3.h ../Geo/MFace.h \
+  ../Geo/MEdge.h meshGFaceDelaunayInsertion.h BackgroundMesh.h \
+  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/GVertex.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/Pair.h ../Geo/MVertex.h ../Common/Context.h ../Geo/GPoint.h \
+  ../Geo/GModel.h ../Geo/GFace.h ../Geo/GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Geo/gmshSurface.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/Message.h \
+  ../Numeric/Numeric.h BDS.h ../Post/PView.h qualityMeasures.h Field.h \
+  ../Common/OS.h
 meshGFaceDelaunayInsertion.o: meshGFaceDelaunayInsertion.cpp BDS.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Post/PView.h ../Post/PViewData.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h BackgroundMesh.h \
-  meshGFaceDelaunayInsertion.h ../Geo/MElement.h ../Common/GmshDefines.h \
-  ../Geo/MVertex.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  meshGFaceOptimize.h meshGFace.h ../Numeric/Numeric.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
+  ../Geo/GEdge.h ../Geo/GVertex.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/Pair.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  BackgroundMesh.h meshGFaceDelaunayInsertion.h ../Geo/MElement.h \
+  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h \
+  meshGFaceOptimize.h ../Geo/MEdge.h meshGFace.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../Common/Message.h
 meshGFaceOptimize.o: meshGFaceOptimize.cpp meshGFaceOptimize.h \
   ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  meshGFaceDelaunayInsertion.h qualityMeasures.h ../Geo/GFace.h \
-  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h BackgroundMesh.h
+  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/SVector3.h ../Geo/MFace.h \
+  ../Geo/MEdge.h meshGFaceDelaunayInsertion.h qualityMeasures.h \
+  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SBoundingBox3d.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GVertex.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GEdge.h ../Geo/GVertex.h \
+  ../Geo/MVertex.h BackgroundMesh.h
 meshGRegion.o: meshGRegion.cpp meshGRegion.h \
   meshGRegionDelaunayInsertion.h ../Geo/MElement.h \
   ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/SPoint3.h \
-  ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h qualityMeasures.h \
-  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/gmshRegion.h ../Geo/Geo.h ../Geo/gmshSurface.h ../Geo/Pair.h \
-  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
-  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../Geo/SPoint2.h ../Geo/ExtrudeParams.h \
-  ../Common/SmoothData.h ../Geo/GRegion.h BDS.h ../Post/PView.h \
-  ../Post/PViewData.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Common/Message.h ../Common/Context.h
+  ../Geo/MEdge.h ../Geo/SVector3.h ../Geo/MFace.h BackgroundMesh.h \
+  qualityMeasures.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
+  ../Geo/Range.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Geo/gmshSurface.h \
+  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Geo/GRegion.h ../Geo/GFace.h ../Geo/GEdge.h ../Geo/gmshRegion.h \
+  ../Geo/Geo.h BDS.h ../Post/PView.h ../Common/Message.h \
+  ../Common/Context.h
 meshGRegionDelaunayInsertion.o: meshGRegionDelaunayInsertion.cpp \
   ../Common/OS.h BackgroundMesh.h meshGRegion.h meshGRegionLocalMeshMod.h \
   meshGRegionDelaunayInsertion.h ../Geo/MElement.h \
   ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/SPoint3.h \
-  ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h qualityMeasures.h \
+  ../Geo/MEdge.h ../Geo/SVector3.h ../Geo/MFace.h qualityMeasures.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../Common/Message.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Mesh/Field.h ../Geo/Geo.h ../Geo/gmshSurface.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Geo/GRegion.h \
+  ../Numeric/Numeric.h ../Common/Message.h
 meshGRegionTransfinite.o: meshGRegionTransfinite.cpp meshGFace.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/MVertex.h ../Geo/SPoint3.h ../Geo/MElement.h \
-  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/MEdge.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Common/Context.h ../Common/Message.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
+  ../Geo/GEdge.h ../Geo/GVertex.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/MVertex.h ../Geo/MElement.h \
+  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h \
+  ../Common/Context.h ../Common/Message.h
 meshGRegionExtruded.o: meshGRegionExtruded.cpp ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/ExtrudeParams.h ../Common/SmoothData.h meshGFace.h meshGRegion.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/MFace.h ../Geo/ExtrudeParams.h meshGFace.h meshGRegion.h \
   ../Common/Context.h ../Common/Message.h
 meshGRegionCarveHole.o: meshGRegionCarveHole.cpp ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h ../Common/Message.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/MFace.h ../Common/Message.h
 meshGRegionLocalMeshMod.o: meshGRegionLocalMeshMod.cpp \
   meshGRegionLocalMeshMod.h meshGRegionDelaunayInsertion.h \
   ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  qualityMeasures.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GRegion.h \
-  ../Geo/GEntity.h ../Common/Message.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h
+  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/SVector3.h ../Geo/MFace.h \
+  BackgroundMesh.h qualityMeasures.h ../Geo/GEntity.h ../Geo/Range.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Common/Message.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h
 DivideAndConquer.o: DivideAndConquer.cpp ../Common/Message.h \
   ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h DivideAndConquer.h \
   ../DataStr/Malloc.h
 BackgroundMesh.o: BackgroundMesh.cpp ../Common/Message.h BackgroundMesh.h \
   ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../Common/Context.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEdge.h ../Geo/GFace.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h Field.h \
-  ../Post/PView.h ../Post/PViewData.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Geo/Geo.h ../Common/GmshDefines.h \
-  ../Geo/gmshSurface.h ../Geo/Pair.h ../Geo/Range.h ../Geo/SPoint2.h \
-  ../Geo/SPoint3.h ../Geo/SVector3.h ../Geo/SBoundingBox3d.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../Geo/SPoint2.h \
-  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/OctreePost.h \
-  ../Common/Octree.h ../Common/OctreeInternals.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h \
+  ../Geo/GEdge.h ../Geo/Pair.h ../Geo/GModel.h ../Geo/GFace.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  Field.h
 qualityMeasures.o: qualityMeasures.cpp qualityMeasures.h BDS.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Post/PView.h ../Post/PViewData.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MElement.h ../Common/GmshDefines.h \
-  ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h ../Numeric/Numeric.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
+  ../Geo/GEdge.h ../Geo/GVertex.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/Pair.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Geo/MVertex.h ../Geo/MElement.h ../Common/GmshDefines.h \
+  ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h
 BoundaryLayer.o: BoundaryLayer.cpp ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h BoundaryLayer.h \
-  ../Geo/ExtrudeParams.h ../Common/SmoothData.h meshGEdge.h meshGFace.h \
-  ../Common/Message.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Geo/MElement.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/MFace.h BoundaryLayer.h ../Geo/ExtrudeParams.h meshGEdge.h \
+  meshGFace.h ../Common/Message.h
 BDS.o: BDS.cpp ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h BDS.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Post/PView.h ../Post/PViewData.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/Message.h \
-  meshGFaceDelaunayInsertion.h ../Geo/MElement.h ../Common/GmshDefines.h \
-  ../Geo/MVertex.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
+  ../Geo/GEdge.h ../Geo/GVertex.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/Pair.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Common/Message.h meshGFaceDelaunayInsertion.h ../Geo/MElement.h \
+  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h \
   qualityMeasures.h
 HighOrder.o: HighOrder.cpp HighOrder.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  meshGFaceOptimize.h ../Geo/MElement.h ../Common/GmshDefines.h \
-  ../Geo/MVertex.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h meshGFaceOptimize.h ../Geo/MElement.h \
+  ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h ../Geo/MEdge.h \
   meshGFaceDelaunayInsertion.h ../Common/Message.h ../Common/OS.h \
-  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../Common/Context.h \
-  ../Common/GmshMatrix.h ../Numeric/FunctionSpace.h
+  ../Numeric/Numeric.h ../Common/Context.h ../Common/GmshMatrix.h \
+  ../Numeric/FunctionSpace.h ../Common/GmshMatrix.h
diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l
index 392e9a2a00e6481702be7a713f86b585632bd25f..03ecb92fcfed6f5bc84a93ad600010dac02dd176 100644
--- a/Parser/Gmsh.l
+++ b/Parser/Gmsh.l
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.l,v 1.100 2008-02-23 15:30:07 geuzaine Exp $
+// $Id: Gmsh.l,v 1.101 2008-03-18 08:41:22 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -84,6 +84,7 @@ string	{alpha}({alpha}|{digit})*
 "news"  		{ gmsh_yylval.d = NEWSURFACE(); return tDOUBLE; }
 "newsl"  		{ gmsh_yylval.d = NEWSURFACELOOP(); return tDOUBLE; }
 "newv"  		{ gmsh_yylval.d = NEWVOLUME(); return tDOUBLE; }
+"newf"  		{ gmsh_yylval.d = NEWFIELD(); return tDOUBLE; }
 "="                     return tAFFECT;
 "+="                    return tAFFECTPLUS;
 "-="                    return tAFFECTMINUS;
@@ -110,7 +111,6 @@ Atan                    return tAtan;
 ArcTan                  return tAtan;
 Atan2                   return tAtan2;
 ArcTan2                 return tAtan2;
-Attractor		return tAttractor;
 
 Bezier			return tBezier;
 Boundary		return tBoundary;
@@ -155,7 +155,6 @@ For                     return tFor;
 Function                return tFunction;
 
 GetValue                return tGetValue;
-Grad                    return tGrad;
 GMSH_MAJOR_VERSION      return tGMSH_MAJOR_VERSION;
 GMSH_MINOR_VERSION      return tGMSH_MINOR_VERSION;
 GMSH_PATCH_VERSION      return tGMSH_PATCH_VERSION;
@@ -170,7 +169,6 @@ Intersect               return tIntersect;
 
 Knots			return tKnots;
 
-LatLon                  return tLatLon;
 Length                  return tLength;
 Line                    return tLine;
 Loop                    return tLoop;
@@ -215,20 +213,17 @@ Sprintf                 return tSprintf;
 StrCat                  return tStrCat;
 StrPrefix               return tStrPrefix;
 StrRelative             return tStrRelative;
-Structured              return tStructured;
 Show                    return tShow;
 
 Transfinite             return tTransfinite;
 Translate               return tTranslate;
 Tanh                    return tTanh;
 Tan                     return tTan;
-Threshold               return tThreshold;
 Today                   return tToday;
 
 Using                   return tUsing;
 
 Volume                  return tVolume;
-PostView                return tPostView;
 
 T2                      return tText2D;
 T3                      return tText3D;
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index b651e6d0bbc575e4fe474bce0c44dbaa232d2a8a..5d15d6b9b4cecd9154f720b2a7c0ebde25f35be6 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -149,57 +149,51 @@
      tCoherence = 330,
      tIntersect = 331,
      tBoundary = 332,
-     tAttractor = 333,
-     tLayers = 334,
-     tHole = 335,
-     tAlias = 336,
-     tAliasWithOptions = 337,
-     tText2D = 338,
-     tText3D = 339,
-     tInterpolationScheme = 340,
-     tTime = 341,
-     tCombine = 342,
-     tBSpline = 343,
-     tBezier = 344,
-     tNurbs = 345,
-     tOrder = 346,
-     tKnots = 347,
-     tColor = 348,
-     tColorTable = 349,
-     tFor = 350,
-     tIn = 351,
-     tEndFor = 352,
-     tIf = 353,
-     tEndIf = 354,
-     tExit = 355,
-     tField = 356,
-     tThreshold = 357,
-     tStructured = 358,
-     tLatLon = 359,
-     tGrad = 360,
-     tPostView = 361,
-     tReturn = 362,
-     tCall = 363,
-     tFunction = 364,
-     tShow = 365,
-     tHide = 366,
-     tGetValue = 367,
-     tGMSH_MAJOR_VERSION = 368,
-     tGMSH_MINOR_VERSION = 369,
-     tGMSH_PATCH_VERSION = 370,
-     tAFFECTDIVIDE = 371,
-     tAFFECTTIMES = 372,
-     tAFFECTMINUS = 373,
-     tAFFECTPLUS = 374,
-     tOR = 375,
-     tAND = 376,
-     tNOTEQUAL = 377,
-     tEQUAL = 378,
-     tGREATEROREQUAL = 379,
-     tLESSOREQUAL = 380,
-     UNARYPREC = 381,
-     tMINUSMINUS = 382,
-     tPLUSPLUS = 383
+     tLayers = 333,
+     tHole = 334,
+     tAlias = 335,
+     tAliasWithOptions = 336,
+     tText2D = 337,
+     tText3D = 338,
+     tInterpolationScheme = 339,
+     tTime = 340,
+     tCombine = 341,
+     tBSpline = 342,
+     tBezier = 343,
+     tNurbs = 344,
+     tOrder = 345,
+     tKnots = 346,
+     tColor = 347,
+     tColorTable = 348,
+     tFor = 349,
+     tIn = 350,
+     tEndFor = 351,
+     tIf = 352,
+     tEndIf = 353,
+     tExit = 354,
+     tField = 355,
+     tReturn = 356,
+     tCall = 357,
+     tFunction = 358,
+     tShow = 359,
+     tHide = 360,
+     tGetValue = 361,
+     tGMSH_MAJOR_VERSION = 362,
+     tGMSH_MINOR_VERSION = 363,
+     tGMSH_PATCH_VERSION = 364,
+     tAFFECTDIVIDE = 365,
+     tAFFECTTIMES = 366,
+     tAFFECTMINUS = 367,
+     tAFFECTPLUS = 368,
+     tOR = 369,
+     tAND = 370,
+     tNOTEQUAL = 371,
+     tEQUAL = 372,
+     tGREATEROREQUAL = 373,
+     tLESSOREQUAL = 374,
+     UNARYPREC = 375,
+     tMINUSMINUS = 376,
+     tPLUSPLUS = 377
    };
 #endif
 /* Tokens.  */
@@ -278,57 +272,51 @@
 #define tCoherence 330
 #define tIntersect 331
 #define tBoundary 332
-#define tAttractor 333
-#define tLayers 334
-#define tHole 335
-#define tAlias 336
-#define tAliasWithOptions 337
-#define tText2D 338
-#define tText3D 339
-#define tInterpolationScheme 340
-#define tTime 341
-#define tCombine 342
-#define tBSpline 343
-#define tBezier 344
-#define tNurbs 345
-#define tOrder 346
-#define tKnots 347
-#define tColor 348
-#define tColorTable 349
-#define tFor 350
-#define tIn 351
-#define tEndFor 352
-#define tIf 353
-#define tEndIf 354
-#define tExit 355
-#define tField 356
-#define tThreshold 357
-#define tStructured 358
-#define tLatLon 359
-#define tGrad 360
-#define tPostView 361
-#define tReturn 362
-#define tCall 363
-#define tFunction 364
-#define tShow 365
-#define tHide 366
-#define tGetValue 367
-#define tGMSH_MAJOR_VERSION 368
-#define tGMSH_MINOR_VERSION 369
-#define tGMSH_PATCH_VERSION 370
-#define tAFFECTDIVIDE 371
-#define tAFFECTTIMES 372
-#define tAFFECTMINUS 373
-#define tAFFECTPLUS 374
-#define tOR 375
-#define tAND 376
-#define tNOTEQUAL 377
-#define tEQUAL 378
-#define tGREATEROREQUAL 379
-#define tLESSOREQUAL 380
-#define UNARYPREC 381
-#define tMINUSMINUS 382
-#define tPLUSPLUS 383
+#define tLayers 333
+#define tHole 334
+#define tAlias 335
+#define tAliasWithOptions 336
+#define tText2D 337
+#define tText3D 338
+#define tInterpolationScheme 339
+#define tTime 340
+#define tCombine 341
+#define tBSpline 342
+#define tBezier 343
+#define tNurbs 344
+#define tOrder 345
+#define tKnots 346
+#define tColor 347
+#define tColorTable 348
+#define tFor 349
+#define tIn 350
+#define tEndFor 351
+#define tIf 352
+#define tEndIf 353
+#define tExit 354
+#define tField 355
+#define tReturn 356
+#define tCall 357
+#define tFunction 358
+#define tShow 359
+#define tHide 360
+#define tGetValue 361
+#define tGMSH_MAJOR_VERSION 362
+#define tGMSH_MINOR_VERSION 363
+#define tGMSH_PATCH_VERSION 364
+#define tAFFECTDIVIDE 365
+#define tAFFECTTIMES 366
+#define tAFFECTMINUS 367
+#define tAFFECTPLUS 368
+#define tOR 369
+#define tAND 370
+#define tNOTEQUAL 371
+#define tEQUAL 372
+#define tGREATEROREQUAL 373
+#define tLESSOREQUAL 374
+#define UNARYPREC 375
+#define tMINUSMINUS 376
+#define tPLUSPLUS 377
 
 
 
@@ -336,7 +324,7 @@
 /* Copy the first part of user declarations.  */
 #line 1 "Gmsh.y"
 
-// $Id: Gmsh.tab.cpp,v 1.349 2008-02-23 15:30:07 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.350 2008-03-18 08:41:22 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -443,8 +431,8 @@ typedef union YYSTYPE
   Shape s;
   List_T *l;
 }
-/* Line 193 of yacc.c.  */
-#line 448 "Gmsh.tab.cpp"
+/* Line 187 of yacc.c.  */
+#line 436 "Gmsh.tab.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -457,7 +445,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 461 "Gmsh.tab.cpp"
+#line 449 "Gmsh.tab.cpp"
 
 #ifdef short
 # undef short
@@ -507,7 +495,7 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
+# if YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -672,20 +660,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   6691
+#define YYLAST   6361
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  149
+#define YYNTOKENS  143
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  68
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  354
+#define YYNRULES  350
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1280
+#define YYNSTATES  1242
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   383
+#define YYMAXUTOK   377
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -696,16 +684,16 @@ static const yytype_uint8 yytranslate[] =
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   134,     2,   144,     2,   133,     2,     2,
-     139,   140,   131,   129,   145,   130,   143,   132,     2,     2,
+       2,     2,     2,   128,     2,   138,     2,   127,     2,     2,
+     133,   134,   125,   123,   139,   124,   137,   126,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     125,     2,   126,   120,     2,     2,     2,     2,     2,     2,
+     119,     2,   120,   114,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   141,     2,   142,   138,     2,     2,     2,     2,     2,
+       2,   135,     2,   136,   132,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   146,     2,   147,   148,     2,     2,     2,
+       2,     2,     2,   140,     2,   141,   142,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -729,9 +717,8 @@ static const yytype_uint8 yytranslate[] =
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   121,   122,   123,   124,   127,
-     128,   135,   136,   137
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   115,
+     116,   117,   118,   121,   122,   129,   130,   131
 };
 
 #if YYDEBUG
@@ -747,250 +734,246 @@ static const yytype_uint16 yyprhs[] =
      183,   192,   207,   208,   215,   217,   219,   221,   223,   225,
      227,   229,   234,   242,   252,   259,   266,   270,   277,   282,
      289,   299,   306,   316,   322,   331,   340,   352,   359,   369,
-     379,   389,   391,   393,   401,   410,   420,   429,   438,   447,
-     456,   466,   475,   481,   488,   495,   502,   510,   518,   526,
-     536,   544,   554,   572,   580,   588,   600,   609,   618,   627,
-     636,   640,   645,   656,   664,   672,   681,   690,   699,   707,
-     716,   722,   734,   740,   750,   755,   765,   770,   772,   774,
-     775,   778,   785,   792,   799,   806,   811,   818,   822,   827,
-     833,   837,   841,   846,   851,   855,   863,   871,   875,   883,
-     887,   890,   893,   909,   912,   919,   928,   937,   948,   950,
-     953,   955,   959,   964,   966,   972,   984,   998,   999,  1007,
-    1008,  1022,  1023,  1039,  1040,  1047,  1048,  1059,  1068,  1077,
-    1086,  1099,  1112,  1125,  1140,  1155,  1170,  1171,  1184,  1185,
-    1198,  1199,  1212,  1213,  1230,  1231,  1248,  1249,  1266,  1267,
-    1286,  1287,  1306,  1307,  1326,  1328,  1331,  1337,  1345,  1355,
-    1358,  1368,  1375,  1385,  1395,  1404,  1414,  1423,  1432,  1439,
-    1444,  1451,  1462,  1473,  1484,  1495,  1498,  1500,  1504,  1507,
-    1510,  1513,  1517,  1521,  1525,  1529,  1533,  1537,  1541,  1545,
-    1549,  1553,  1557,  1561,  1565,  1569,  1575,  1580,  1585,  1590,
-    1595,  1600,  1605,  1610,  1615,  1620,  1625,  1632,  1637,  1642,
-    1647,  1652,  1657,  1662,  1669,  1676,  1683,  1688,  1693,  1698,
-    1703,  1708,  1713,  1718,  1723,  1728,  1733,  1738,  1745,  1750,
-    1755,  1760,  1765,  1770,  1775,  1782,  1789,  1796,  1801,  1803,
-    1805,  1807,  1809,  1811,  1813,  1815,  1817,  1823,  1828,  1833,
-    1836,  1842,  1846,  1853,  1858,  1866,  1873,  1875,  1878,  1881,
-    1885,  1889,  1901,  1911,  1919,  1927,  1929,  1933,  1935,  1937,
-    1940,  1944,  1949,  1955,  1958,  1962,  1966,  1972,  1977,  1979,
-    1981,  1985,  1992,  1994,  1996,  2000,  2004,  2014,  2022,  2024,
-    2030,  2034,  2041,  2043,  2047,  2049,  2051,  2053,  2055,  2062,
-    2067,  2072,  2077,  2084,  2091
+     375,   383,   393,   403,   413,   423,   433,   435,   437,   445,
+     454,   461,   469,   477,   485,   495,   503,   513,   531,   539,
+     547,   559,   568,   577,   586,   595,   599,   604,   615,   623,
+     631,   640,   649,   658,   666,   675,   681,   693,   699,   709,
+     714,   724,   729,   731,   733,   734,   737,   744,   751,   758,
+     765,   770,   777,   784,   788,   793,   799,   803,   807,   812,
+     817,   821,   829,   837,   841,   849,   853,   856,   859,   875,
+     878,   885,   894,   903,   914,   916,   919,   921,   925,   930,
+     932,   938,   950,   964,   965,   973,   974,   988,   989,  1005,
+    1006,  1013,  1014,  1025,  1034,  1043,  1052,  1065,  1078,  1091,
+    1106,  1121,  1136,  1137,  1150,  1151,  1164,  1165,  1178,  1179,
+    1196,  1197,  1214,  1215,  1232,  1233,  1252,  1253,  1272,  1273,
+    1292,  1294,  1297,  1303,  1311,  1321,  1324,  1334,  1341,  1351,
+    1361,  1370,  1380,  1389,  1398,  1405,  1410,  1417,  1428,  1439,
+    1450,  1461,  1464,  1466,  1470,  1473,  1476,  1479,  1483,  1487,
+    1491,  1495,  1499,  1503,  1507,  1511,  1515,  1519,  1523,  1527,
+    1531,  1535,  1541,  1546,  1551,  1556,  1561,  1566,  1571,  1576,
+    1581,  1586,  1591,  1598,  1603,  1608,  1613,  1618,  1623,  1628,
+    1635,  1642,  1649,  1654,  1659,  1664,  1669,  1674,  1679,  1684,
+    1689,  1694,  1699,  1704,  1711,  1716,  1721,  1726,  1731,  1736,
+    1741,  1748,  1755,  1762,  1767,  1769,  1771,  1773,  1775,  1777,
+    1779,  1781,  1783,  1789,  1794,  1799,  1802,  1808,  1812,  1819,
+    1824,  1832,  1839,  1841,  1844,  1847,  1851,  1855,  1867,  1877,
+    1885,  1893,  1895,  1899,  1901,  1903,  1906,  1910,  1915,  1921,
+    1924,  1928,  1932,  1938,  1943,  1945,  1947,  1951,  1958,  1960,
+    1962,  1966,  1970,  1980,  1988,  1990,  1996,  2000,  2007,  2009,
+    2013,  2015,  2017,  2019,  2021,  2028,  2033,  2038,  2043,  2050,
+    2057
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     150,     0,    -1,   151,    -1,     1,     6,    -1,    -1,   151,
-     152,    -1,   155,    -1,   154,    -1,   173,    -1,   175,    -1,
-     176,    -1,   179,    -1,   180,    -1,   181,    -1,   184,    -1,
-     201,    -1,   202,    -1,   203,    -1,   183,    -1,   182,    -1,
-     126,    -1,   126,   126,    -1,    35,   139,     5,   140,     6,
-      -1,    35,   139,     5,   140,   153,   215,     6,    -1,    35,
-     139,     5,   145,   211,   140,     6,    -1,    35,   139,     5,
-     145,   211,   140,   153,   215,     6,    -1,     4,     5,   146,
-     156,   147,     6,    -1,    81,     4,   141,   204,   142,     6,
-      -1,    82,     4,   141,   204,   142,     6,    -1,    -1,   156,
-     159,    -1,   156,   163,    -1,   156,   166,    -1,   156,   168,
-      -1,   156,   169,    -1,   204,    -1,   157,   145,   204,    -1,
-     204,    -1,   158,   145,   204,    -1,    -1,    -1,     4,   160,
-     139,   157,   140,   161,   146,   158,   147,     6,    -1,   215,
-      -1,   162,   145,   215,    -1,    -1,    83,   139,   204,   145,
-     204,   145,   204,   140,   164,   146,   162,   147,     6,    -1,
-     215,    -1,   165,   145,   215,    -1,    -1,    84,   139,   204,
-     145,   204,   145,   204,   145,   204,   140,   167,   146,   165,
-     147,     6,    -1,    85,   146,   208,   147,   146,   208,   147,
-       6,    -1,    85,   146,   208,   147,   146,   208,   147,   146,
-     208,   147,   146,   208,   147,     6,    -1,    -1,    86,   170,
-     146,   158,   147,     6,    -1,     7,    -1,   119,    -1,   118,
-      -1,   117,    -1,   116,    -1,   137,    -1,   136,    -1,     4,
-     171,   204,     6,    -1,     4,   141,   204,   142,   171,   204,
-       6,    -1,     4,   141,   146,   211,   147,   142,   171,   209,
-       6,    -1,     4,   141,   142,     7,   209,     6,    -1,     4,
-     141,   142,   119,   209,     6,    -1,     4,   172,     6,    -1,
-       4,   141,   204,   142,   172,     6,    -1,     4,     7,   216,
-       6,    -1,     4,   143,     4,     7,   216,     6,    -1,     4,
-     141,   204,   142,   143,     4,     7,   216,     6,    -1,     4,
-     143,     4,   171,   204,     6,    -1,     4,   141,   204,   142,
-     143,     4,   171,   204,     6,    -1,     4,   143,     4,   172,
-       6,    -1,     4,   141,   204,   142,   143,     4,   172,     6,
-      -1,     4,   143,    93,   143,     4,     7,   212,     6,    -1,
-       4,   141,   204,   142,   143,    93,   143,     4,     7,   212,
-       6,    -1,     4,   143,    94,     7,   213,     6,    -1,     4,
-     141,   204,   142,   143,    94,     7,   213,     6,    -1,    64,
-     139,     4,   140,   143,     4,     7,   204,     6,    -1,    64,
-     139,     4,   140,   143,     4,     7,   216,     6,    -1,   204,
-      -1,   216,    -1,    43,   139,   204,   140,     7,   206,     6,
-      -1,    60,    43,   139,   174,   140,     7,   209,     6,    -1,
-      78,    43,   101,   139,   204,   140,     7,   209,     6,    -1,
-     104,   101,   139,   204,   140,     7,   204,     6,    -1,   106,
-     101,   139,   204,   140,     7,   204,     6,    -1,   102,   101,
-     139,   204,   140,     7,   209,     6,    -1,   109,   101,   139,
-     204,   140,     7,     5,     6,    -1,   109,   101,   139,   204,
-     140,     7,     5,   209,     6,    -1,   103,   101,   139,   204,
-     140,     7,     5,     6,    -1,    52,    53,   101,   209,     6,
-      -1,    78,    43,   209,     7,   209,     6,    -1,    78,    46,
-     209,     7,   209,     6,    -1,    52,    53,   209,     7,   204,
-       6,    -1,    46,   139,   204,   140,     7,   209,     6,    -1,
-      50,   139,   204,   140,     7,   209,     6,    -1,    44,   139,
-     204,   140,     7,   209,     6,    -1,    44,   139,   204,   140,
-       7,   209,    56,   206,     6,    -1,    45,   139,   204,   140,
-       7,   209,     6,    -1,    45,   139,   204,   140,     7,   209,
-      56,   206,     6,    -1,    54,   139,   204,   140,     7,   146,
-     204,   145,   204,   145,     5,   145,     5,   145,     5,   147,
-       6,    -1,    88,   139,   204,   140,     7,   209,     6,    -1,
-      89,   139,   204,   140,     7,   209,     6,    -1,    90,   139,
-     204,   140,     7,   209,    92,   209,    91,   204,     6,    -1,
-      46,    71,   139,   204,   140,     7,   209,     6,    -1,    60,
-      46,   139,   174,   140,     7,   209,     6,    -1,    56,    49,
-     139,   204,   140,     7,   209,     6,    -1,    57,    49,   139,
-     204,   140,     7,   209,     6,    -1,    12,    13,     6,    -1,
-      13,    49,   204,     6,    -1,    54,    49,   139,   204,   140,
-       7,     5,     5,     5,     6,    -1,    47,   139,   204,   140,
-       7,   209,     6,    -1,    48,   139,   204,   140,     7,   209,
-       6,    -1,    49,    71,   139,   204,   140,     7,   209,     6,
-      -1,    60,    49,   139,   174,   140,     7,   209,     6,    -1,
-      59,    51,   139,   204,   140,     7,   209,     6,    -1,    51,
-     139,   204,   140,     7,   209,     6,    -1,    60,    51,   139,
-     174,   140,     7,   209,     6,    -1,    66,   206,   146,   177,
-     147,    -1,    65,   146,   206,   145,   206,   145,   204,   147,
-     146,   177,   147,    -1,    67,   206,   146,   177,   147,    -1,
-      68,   146,   206,   145,   204,   147,   146,   177,   147,    -1,
-      70,   146,   177,   147,    -1,    76,    46,   146,   211,   147,
-      49,   146,   204,   147,    -1,    77,   146,   177,   147,    -1,
-     178,    -1,   176,    -1,    -1,   178,   175,    -1,   178,    43,
-     146,   211,   147,     6,    -1,   178,    46,   146,   211,   147,
-       6,    -1,   178,    49,   146,   211,   147,     6,    -1,   178,
-      51,   146,   211,   147,     6,    -1,    74,   146,   178,   147,
-      -1,    74,     4,   141,   204,   142,     6,    -1,    74,     4,
-       6,    -1,    74,     4,     4,     6,    -1,    93,   212,   146,
-     178,   147,    -1,   110,   215,     6,    -1,   111,   215,     6,
-      -1,   110,   146,   178,   147,    -1,   111,   146,   178,   147,
-      -1,     4,   216,     6,    -1,     4,     4,   141,   204,   142,
-     215,     6,    -1,     4,     4,     4,   141,   204,   142,     6,
-      -1,     4,   204,     6,    -1,    64,   139,     4,   140,   143,
-       4,     6,    -1,    87,     4,     6,    -1,   100,     6,    -1,
-      40,     6,    -1,    40,   146,   204,   145,   204,   145,   204,
-     145,   204,   145,   204,   145,   204,   147,     6,    -1,    41,
-       6,    -1,    95,   139,   204,     8,   204,   140,    -1,    95,
-     139,   204,     8,   204,     8,   204,   140,    -1,    95,     4,
-      96,   146,   204,     8,   204,   147,    -1,    95,     4,    96,
-     146,   204,     8,   204,     8,   204,   147,    -1,    97,    -1,
-     109,     4,    -1,   107,    -1,   108,     4,     6,    -1,    98,
-     139,   204,   140,    -1,    99,    -1,    69,   206,   146,   178,
-     147,    -1,    69,   146,   206,   145,   206,   145,   204,   147,
-     146,   178,   147,    -1,    69,   146,   206,   145,   206,   145,
-     206,   145,   204,   147,   146,   178,   147,    -1,    -1,    69,
-     206,   146,   178,   185,   199,   147,    -1,    -1,    69,   146,
-     206,   145,   206,   145,   204,   147,   146,   178,   186,   199,
-     147,    -1,    -1,    69,   146,   206,   145,   206,   145,   206,
-     145,   204,   147,   146,   178,   187,   199,   147,    -1,    -1,
-      69,   146,   178,   188,   199,   147,    -1,    -1,    69,     4,
-     141,   204,   142,   146,   178,   189,   199,   147,    -1,    69,
-      43,   146,   204,   145,   206,   147,     6,    -1,    69,    46,
-     146,   204,   145,   206,   147,     6,    -1,    69,    49,   146,
-     204,   145,   206,   147,     6,    -1,    69,    43,   146,   204,
-     145,   206,   145,   206,   145,   204,   147,     6,    -1,    69,
-      46,   146,   204,   145,   206,   145,   206,   145,   204,   147,
-       6,    -1,    69,    49,   146,   204,   145,   206,   145,   206,
-     145,   204,   147,     6,    -1,    69,    43,   146,   204,   145,
-     206,   145,   206,   145,   206,   145,   204,   147,     6,    -1,
-      69,    46,   146,   204,   145,   206,   145,   206,   145,   206,
-     145,   204,   147,     6,    -1,    69,    49,   146,   204,   145,
-     206,   145,   206,   145,   206,   145,   204,   147,     6,    -1,
-      -1,    69,    43,   146,   204,   145,   206,   147,   190,   146,
-     199,   147,     6,    -1,    -1,    69,    46,   146,   204,   145,
-     206,   147,   191,   146,   199,   147,     6,    -1,    -1,    69,
-      49,   146,   204,   145,   206,   147,   192,   146,   199,   147,
-       6,    -1,    -1,    69,    43,   146,   204,   145,   206,   145,
-     206,   145,   204,   147,   193,   146,   199,   147,     6,    -1,
-      -1,    69,    46,   146,   204,   145,   206,   145,   206,   145,
-     204,   147,   194,   146,   199,   147,     6,    -1,    -1,    69,
-      49,   146,   204,   145,   206,   145,   206,   145,   204,   147,
-     195,   146,   199,   147,     6,    -1,    -1,    69,    43,   146,
-     204,   145,   206,   145,   206,   145,   206,   145,   204,   147,
-     196,   146,   199,   147,     6,    -1,    -1,    69,    46,   146,
-     204,   145,   206,   145,   206,   145,   206,   145,   204,   147,
-     197,   146,   199,   147,     6,    -1,    -1,    69,    49,   146,
-     204,   145,   206,   145,   206,   145,   206,   145,   204,   147,
-     198,   146,   199,   147,     6,    -1,   200,    -1,   199,   200,
-      -1,    79,   146,   204,   147,     6,    -1,    79,   146,   209,
-     145,   209,   147,     6,    -1,    79,   146,   209,   145,   209,
-     145,   209,   147,     6,    -1,    72,     6,    -1,    80,   139,
-     204,   140,     7,   209,    61,   204,     6,    -1,    58,    46,
-     209,     7,   204,     6,    -1,    58,    46,   209,     7,   204,
-      61,    63,   204,     6,    -1,    58,    46,   209,     7,   204,
-      61,    62,   204,     6,    -1,    58,    49,   146,   204,   147,
-       7,   209,     6,    -1,    58,    49,   146,   204,   147,     7,
-     209,     4,     6,    -1,    55,    49,   146,   204,   147,     7,
-     209,     6,    -1,    58,    51,   146,   204,   147,     7,   209,
-       6,    -1,    72,    49,   209,     7,   204,     6,    -1,    72,
-      49,   209,     6,    -1,    73,    49,   209,     7,   204,     6,
-      -1,    43,   146,   211,   147,    96,    49,   146,   204,   147,
-       6,    -1,    46,   146,   211,   147,    96,    49,   146,   204,
-     147,     6,    -1,    46,   146,   211,   147,    96,    51,   146,
-     204,   147,     6,    -1,    49,   146,   211,   147,    96,    51,
-     146,   204,   147,     6,    -1,    75,     6,    -1,   205,    -1,
-     139,   204,   140,    -1,   130,   204,    -1,   129,   204,    -1,
-     134,   204,    -1,   204,   130,   204,    -1,   204,   129,   204,
-      -1,   204,   131,   204,    -1,   204,   132,   204,    -1,   204,
-     133,   204,    -1,   204,   138,   204,    -1,   204,   125,   204,
-      -1,   204,   126,   204,    -1,   204,   128,   204,    -1,   204,
-     127,   204,    -1,   204,   124,   204,    -1,   204,   123,   204,
-      -1,   204,   122,   204,    -1,   204,   121,   204,    -1,   204,
-     120,   204,     8,   204,    -1,    14,   139,   204,   140,    -1,
-      15,   139,   204,   140,    -1,    16,   139,   204,   140,    -1,
-      17,   139,   204,   140,    -1,    18,   139,   204,   140,    -1,
-      19,   139,   204,   140,    -1,    20,   139,   204,   140,    -1,
-      21,   139,   204,   140,    -1,    22,   139,   204,   140,    -1,
-      24,   139,   204,   140,    -1,    25,   139,   204,   145,   204,
-     140,    -1,    26,   139,   204,   140,    -1,    27,   139,   204,
-     140,    -1,    28,   139,   204,   140,    -1,    29,   139,   204,
-     140,    -1,    30,   139,   204,   140,    -1,    31,   139,   204,
-     140,    -1,    32,   139,   204,   145,   204,   140,    -1,    33,
-     139,   204,   145,   204,   140,    -1,    34,   139,   204,   145,
-     204,   140,    -1,    23,   139,   204,   140,    -1,    14,   141,
-     204,   142,    -1,    15,   141,   204,   142,    -1,    16,   141,
-     204,   142,    -1,    17,   141,   204,   142,    -1,    18,   141,
-     204,   142,    -1,    19,   141,   204,   142,    -1,    20,   141,
-     204,   142,    -1,    21,   141,   204,   142,    -1,    22,   141,
-     204,   142,    -1,    24,   141,   204,   142,    -1,    25,   141,
-     204,   145,   204,   142,    -1,    26,   141,   204,   142,    -1,
-      27,   141,   204,   142,    -1,    28,   141,   204,   142,    -1,
-      29,   141,   204,   142,    -1,    30,   141,   204,   142,    -1,
-      31,   141,   204,   142,    -1,    32,   141,   204,   145,   204,
-     142,    -1,    33,   141,   204,   145,   204,   142,    -1,    34,
-     141,   204,   145,   204,   142,    -1,    23,   141,   204,   142,
-      -1,     3,    -1,     9,    -1,    10,    -1,    11,    -1,   113,
-      -1,   114,    -1,   115,    -1,     4,    -1,     4,   148,   146,
-     204,   147,    -1,     4,   141,   204,   142,    -1,   144,     4,
-     141,   142,    -1,     4,   172,    -1,     4,   141,   204,   142,
-     172,    -1,     4,   143,     4,    -1,     4,   141,   204,   142,
-     143,     4,    -1,     4,   143,     4,   172,    -1,     4,   141,
-     204,   142,   143,     4,   172,    -1,   112,   139,     5,   145,
-     204,   140,    -1,   207,    -1,   130,   206,    -1,   129,   206,
-      -1,   206,   130,   206,    -1,   206,   129,   206,    -1,   146,
-     204,   145,   204,   145,   204,   145,   204,   145,   204,   147,
-      -1,   146,   204,   145,   204,   145,   204,   145,   204,   147,
-      -1,   146,   204,   145,   204,   145,   204,   147,    -1,   139,
-     204,   145,   204,   145,   204,   140,    -1,   209,    -1,   208,
-     145,   209,    -1,   204,    -1,   210,    -1,   146,   147,    -1,
-     146,   211,   147,    -1,   130,   146,   211,   147,    -1,   204,
-     131,   146,   211,   147,    -1,   130,   210,    -1,   204,   131,
-     210,    -1,   204,     8,   204,    -1,   204,     8,   204,     8,
-     204,    -1,    43,   146,   204,   147,    -1,   176,    -1,   184,
-      -1,     4,   141,   142,    -1,     4,   141,   146,   211,   147,
-     142,    -1,   204,    -1,   210,    -1,   211,   145,   204,    -1,
-     211,   145,   210,    -1,   146,   204,   145,   204,   145,   204,
-     145,   204,   147,    -1,   146,   204,   145,   204,   145,   204,
-     147,    -1,     4,    -1,     4,   143,    93,   143,     4,    -1,
-     146,   214,   147,    -1,     4,   141,   204,   142,   143,    94,
-      -1,   212,    -1,   214,   145,   212,    -1,   216,    -1,     4,
-      -1,     5,    -1,    42,    -1,    37,   139,   215,   145,   215,
-     140,    -1,    38,   139,   215,   140,    -1,    39,   139,   215,
-     140,    -1,    36,   139,   215,   140,    -1,    36,   139,   215,
-     145,   211,   140,    -1,    36,   139,     4,   143,     4,   140,
-      -1,    36,   139,     4,   141,   204,   142,   143,     4,   140,
-      -1
+     144,     0,    -1,   145,    -1,     1,     6,    -1,    -1,   145,
+     146,    -1,   149,    -1,   148,    -1,   167,    -1,   169,    -1,
+     170,    -1,   173,    -1,   174,    -1,   175,    -1,   178,    -1,
+     195,    -1,   196,    -1,   197,    -1,   177,    -1,   176,    -1,
+     120,    -1,   120,   120,    -1,    35,   133,     5,   134,     6,
+      -1,    35,   133,     5,   134,   147,   209,     6,    -1,    35,
+     133,     5,   139,   205,   134,     6,    -1,    35,   133,     5,
+     139,   205,   134,   147,   209,     6,    -1,     4,     5,   140,
+     150,   141,     6,    -1,    80,     4,   135,   198,   136,     6,
+      -1,    81,     4,   135,   198,   136,     6,    -1,    -1,   150,
+     153,    -1,   150,   157,    -1,   150,   160,    -1,   150,   162,
+      -1,   150,   163,    -1,   198,    -1,   151,   139,   198,    -1,
+     198,    -1,   152,   139,   198,    -1,    -1,    -1,     4,   154,
+     133,   151,   134,   155,   140,   152,   141,     6,    -1,   209,
+      -1,   156,   139,   209,    -1,    -1,    82,   133,   198,   139,
+     198,   139,   198,   134,   158,   140,   156,   141,     6,    -1,
+     209,    -1,   159,   139,   209,    -1,    -1,    83,   133,   198,
+     139,   198,   139,   198,   139,   198,   134,   161,   140,   159,
+     141,     6,    -1,    84,   140,   202,   141,   140,   202,   141,
+       6,    -1,    84,   140,   202,   141,   140,   202,   141,   140,
+     202,   141,   140,   202,   141,     6,    -1,    -1,    85,   164,
+     140,   152,   141,     6,    -1,     7,    -1,   113,    -1,   112,
+      -1,   111,    -1,   110,    -1,   131,    -1,   130,    -1,     4,
+     165,   198,     6,    -1,     4,   135,   198,   136,   165,   198,
+       6,    -1,     4,   135,   140,   205,   141,   136,   165,   203,
+       6,    -1,     4,   135,   136,     7,   203,     6,    -1,     4,
+     135,   136,   113,   203,     6,    -1,     4,   166,     6,    -1,
+       4,   135,   198,   136,   166,     6,    -1,     4,     7,   210,
+       6,    -1,     4,   137,     4,     7,   210,     6,    -1,     4,
+     135,   198,   136,   137,     4,     7,   210,     6,    -1,     4,
+     137,     4,   165,   198,     6,    -1,     4,   135,   198,   136,
+     137,     4,   165,   198,     6,    -1,     4,   137,     4,   166,
+       6,    -1,     4,   135,   198,   136,   137,     4,   166,     6,
+      -1,     4,   137,    92,   137,     4,     7,   206,     6,    -1,
+       4,   135,   198,   136,   137,    92,   137,     4,     7,   206,
+       6,    -1,     4,   137,    93,     7,   207,     6,    -1,     4,
+     135,   198,   136,   137,    93,     7,   207,     6,    -1,     4,
+     100,     7,   198,     6,    -1,   100,   135,   198,   136,     7,
+       4,     6,    -1,   100,   135,   198,   136,   137,     4,     7,
+     198,     6,    -1,   100,   135,   198,   136,   137,     4,     7,
+     210,     6,    -1,   100,   135,   198,   136,   137,     4,     7,
+     203,     6,    -1,    64,   133,     4,   134,   137,     4,     7,
+     198,     6,    -1,    64,   133,     4,   134,   137,     4,     7,
+     210,     6,    -1,   198,    -1,   210,    -1,    43,   133,   198,
+     134,     7,   200,     6,    -1,    60,    43,   133,   168,   134,
+       7,   203,     6,    -1,    52,    53,   203,     7,   198,     6,
+      -1,    46,   133,   198,   134,     7,   203,     6,    -1,    50,
+     133,   198,   134,     7,   203,     6,    -1,    44,   133,   198,
+     134,     7,   203,     6,    -1,    44,   133,   198,   134,     7,
+     203,    56,   200,     6,    -1,    45,   133,   198,   134,     7,
+     203,     6,    -1,    45,   133,   198,   134,     7,   203,    56,
+     200,     6,    -1,    54,   133,   198,   134,     7,   140,   198,
+     139,   198,   139,     5,   139,     5,   139,     5,   141,     6,
+      -1,    87,   133,   198,   134,     7,   203,     6,    -1,    88,
+     133,   198,   134,     7,   203,     6,    -1,    89,   133,   198,
+     134,     7,   203,    91,   203,    90,   198,     6,    -1,    46,
+      71,   133,   198,   134,     7,   203,     6,    -1,    60,    46,
+     133,   168,   134,     7,   203,     6,    -1,    56,    49,   133,
+     198,   134,     7,   203,     6,    -1,    57,    49,   133,   198,
+     134,     7,   203,     6,    -1,    12,    13,     6,    -1,    13,
+      49,   198,     6,    -1,    54,    49,   133,   198,   134,     7,
+       5,     5,     5,     6,    -1,    47,   133,   198,   134,     7,
+     203,     6,    -1,    48,   133,   198,   134,     7,   203,     6,
+      -1,    49,    71,   133,   198,   134,     7,   203,     6,    -1,
+      60,    49,   133,   168,   134,     7,   203,     6,    -1,    59,
+      51,   133,   198,   134,     7,   203,     6,    -1,    51,   133,
+     198,   134,     7,   203,     6,    -1,    60,    51,   133,   168,
+     134,     7,   203,     6,    -1,    66,   200,   140,   171,   141,
+      -1,    65,   140,   200,   139,   200,   139,   198,   141,   140,
+     171,   141,    -1,    67,   200,   140,   171,   141,    -1,    68,
+     140,   200,   139,   198,   141,   140,   171,   141,    -1,    70,
+     140,   171,   141,    -1,    76,    46,   140,   205,   141,    49,
+     140,   198,   141,    -1,    77,   140,   171,   141,    -1,   172,
+      -1,   170,    -1,    -1,   172,   169,    -1,   172,    43,   140,
+     205,   141,     6,    -1,   172,    46,   140,   205,   141,     6,
+      -1,   172,    49,   140,   205,   141,     6,    -1,   172,    51,
+     140,   205,   141,     6,    -1,    74,   140,   172,   141,    -1,
+      74,   100,   135,   198,   136,     6,    -1,    74,     4,   135,
+     198,   136,     6,    -1,    74,     4,     6,    -1,    74,     4,
+       4,     6,    -1,    92,   206,   140,   172,   141,    -1,   104,
+     209,     6,    -1,   105,   209,     6,    -1,   104,   140,   172,
+     141,    -1,   105,   140,   172,   141,    -1,     4,   210,     6,
+      -1,     4,     4,   135,   198,   136,   209,     6,    -1,     4,
+       4,     4,   135,   198,   136,     6,    -1,     4,   198,     6,
+      -1,    64,   133,     4,   134,   137,     4,     6,    -1,    86,
+       4,     6,    -1,    99,     6,    -1,    40,     6,    -1,    40,
+     140,   198,   139,   198,   139,   198,   139,   198,   139,   198,
+     139,   198,   141,     6,    -1,    41,     6,    -1,    94,   133,
+     198,     8,   198,   134,    -1,    94,   133,   198,     8,   198,
+       8,   198,   134,    -1,    94,     4,    95,   140,   198,     8,
+     198,   141,    -1,    94,     4,    95,   140,   198,     8,   198,
+       8,   198,   141,    -1,    96,    -1,   103,     4,    -1,   101,
+      -1,   102,     4,     6,    -1,    97,   133,   198,   134,    -1,
+      98,    -1,    69,   200,   140,   172,   141,    -1,    69,   140,
+     200,   139,   200,   139,   198,   141,   140,   172,   141,    -1,
+      69,   140,   200,   139,   200,   139,   200,   139,   198,   141,
+     140,   172,   141,    -1,    -1,    69,   200,   140,   172,   179,
+     193,   141,    -1,    -1,    69,   140,   200,   139,   200,   139,
+     198,   141,   140,   172,   180,   193,   141,    -1,    -1,    69,
+     140,   200,   139,   200,   139,   200,   139,   198,   141,   140,
+     172,   181,   193,   141,    -1,    -1,    69,   140,   172,   182,
+     193,   141,    -1,    -1,    69,     4,   135,   198,   136,   140,
+     172,   183,   193,   141,    -1,    69,    43,   140,   198,   139,
+     200,   141,     6,    -1,    69,    46,   140,   198,   139,   200,
+     141,     6,    -1,    69,    49,   140,   198,   139,   200,   141,
+       6,    -1,    69,    43,   140,   198,   139,   200,   139,   200,
+     139,   198,   141,     6,    -1,    69,    46,   140,   198,   139,
+     200,   139,   200,   139,   198,   141,     6,    -1,    69,    49,
+     140,   198,   139,   200,   139,   200,   139,   198,   141,     6,
+      -1,    69,    43,   140,   198,   139,   200,   139,   200,   139,
+     200,   139,   198,   141,     6,    -1,    69,    46,   140,   198,
+     139,   200,   139,   200,   139,   200,   139,   198,   141,     6,
+      -1,    69,    49,   140,   198,   139,   200,   139,   200,   139,
+     200,   139,   198,   141,     6,    -1,    -1,    69,    43,   140,
+     198,   139,   200,   141,   184,   140,   193,   141,     6,    -1,
+      -1,    69,    46,   140,   198,   139,   200,   141,   185,   140,
+     193,   141,     6,    -1,    -1,    69,    49,   140,   198,   139,
+     200,   141,   186,   140,   193,   141,     6,    -1,    -1,    69,
+      43,   140,   198,   139,   200,   139,   200,   139,   198,   141,
+     187,   140,   193,   141,     6,    -1,    -1,    69,    46,   140,
+     198,   139,   200,   139,   200,   139,   198,   141,   188,   140,
+     193,   141,     6,    -1,    -1,    69,    49,   140,   198,   139,
+     200,   139,   200,   139,   198,   141,   189,   140,   193,   141,
+       6,    -1,    -1,    69,    43,   140,   198,   139,   200,   139,
+     200,   139,   200,   139,   198,   141,   190,   140,   193,   141,
+       6,    -1,    -1,    69,    46,   140,   198,   139,   200,   139,
+     200,   139,   200,   139,   198,   141,   191,   140,   193,   141,
+       6,    -1,    -1,    69,    49,   140,   198,   139,   200,   139,
+     200,   139,   200,   139,   198,   141,   192,   140,   193,   141,
+       6,    -1,   194,    -1,   193,   194,    -1,    78,   140,   198,
+     141,     6,    -1,    78,   140,   203,   139,   203,   141,     6,
+      -1,    78,   140,   203,   139,   203,   139,   203,   141,     6,
+      -1,    72,     6,    -1,    79,   133,   198,   134,     7,   203,
+      61,   198,     6,    -1,    58,    46,   203,     7,   198,     6,
+      -1,    58,    46,   203,     7,   198,    61,    63,   198,     6,
+      -1,    58,    46,   203,     7,   198,    61,    62,   198,     6,
+      -1,    58,    49,   140,   198,   141,     7,   203,     6,    -1,
+      58,    49,   140,   198,   141,     7,   203,     4,     6,    -1,
+      55,    49,   140,   198,   141,     7,   203,     6,    -1,    58,
+      51,   140,   198,   141,     7,   203,     6,    -1,    72,    49,
+     203,     7,   198,     6,    -1,    72,    49,   203,     6,    -1,
+      73,    49,   203,     7,   198,     6,    -1,    43,   140,   205,
+     141,    95,    49,   140,   198,   141,     6,    -1,    46,   140,
+     205,   141,    95,    49,   140,   198,   141,     6,    -1,    46,
+     140,   205,   141,    95,    51,   140,   198,   141,     6,    -1,
+      49,   140,   205,   141,    95,    51,   140,   198,   141,     6,
+      -1,    75,     6,    -1,   199,    -1,   133,   198,   134,    -1,
+     124,   198,    -1,   123,   198,    -1,   128,   198,    -1,   198,
+     124,   198,    -1,   198,   123,   198,    -1,   198,   125,   198,
+      -1,   198,   126,   198,    -1,   198,   127,   198,    -1,   198,
+     132,   198,    -1,   198,   119,   198,    -1,   198,   120,   198,
+      -1,   198,   122,   198,    -1,   198,   121,   198,    -1,   198,
+     118,   198,    -1,   198,   117,   198,    -1,   198,   116,   198,
+      -1,   198,   115,   198,    -1,   198,   114,   198,     8,   198,
+      -1,    14,   133,   198,   134,    -1,    15,   133,   198,   134,
+      -1,    16,   133,   198,   134,    -1,    17,   133,   198,   134,
+      -1,    18,   133,   198,   134,    -1,    19,   133,   198,   134,
+      -1,    20,   133,   198,   134,    -1,    21,   133,   198,   134,
+      -1,    22,   133,   198,   134,    -1,    24,   133,   198,   134,
+      -1,    25,   133,   198,   139,   198,   134,    -1,    26,   133,
+     198,   134,    -1,    27,   133,   198,   134,    -1,    28,   133,
+     198,   134,    -1,    29,   133,   198,   134,    -1,    30,   133,
+     198,   134,    -1,    31,   133,   198,   134,    -1,    32,   133,
+     198,   139,   198,   134,    -1,    33,   133,   198,   139,   198,
+     134,    -1,    34,   133,   198,   139,   198,   134,    -1,    23,
+     133,   198,   134,    -1,    14,   135,   198,   136,    -1,    15,
+     135,   198,   136,    -1,    16,   135,   198,   136,    -1,    17,
+     135,   198,   136,    -1,    18,   135,   198,   136,    -1,    19,
+     135,   198,   136,    -1,    20,   135,   198,   136,    -1,    21,
+     135,   198,   136,    -1,    22,   135,   198,   136,    -1,    24,
+     135,   198,   136,    -1,    25,   135,   198,   139,   198,   136,
+      -1,    26,   135,   198,   136,    -1,    27,   135,   198,   136,
+      -1,    28,   135,   198,   136,    -1,    29,   135,   198,   136,
+      -1,    30,   135,   198,   136,    -1,    31,   135,   198,   136,
+      -1,    32,   135,   198,   139,   198,   136,    -1,    33,   135,
+     198,   139,   198,   136,    -1,    34,   135,   198,   139,   198,
+     136,    -1,    23,   135,   198,   136,    -1,     3,    -1,     9,
+      -1,    10,    -1,    11,    -1,   107,    -1,   108,    -1,   109,
+      -1,     4,    -1,     4,   142,   140,   198,   141,    -1,     4,
+     135,   198,   136,    -1,   138,     4,   135,   136,    -1,     4,
+     166,    -1,     4,   135,   198,   136,   166,    -1,     4,   137,
+       4,    -1,     4,   135,   198,   136,   137,     4,    -1,     4,
+     137,     4,   166,    -1,     4,   135,   198,   136,   137,     4,
+     166,    -1,   106,   133,     5,   139,   198,   134,    -1,   201,
+      -1,   124,   200,    -1,   123,   200,    -1,   200,   124,   200,
+      -1,   200,   123,   200,    -1,   140,   198,   139,   198,   139,
+     198,   139,   198,   139,   198,   141,    -1,   140,   198,   139,
+     198,   139,   198,   139,   198,   141,    -1,   140,   198,   139,
+     198,   139,   198,   141,    -1,   133,   198,   139,   198,   139,
+     198,   134,    -1,   203,    -1,   202,   139,   203,    -1,   198,
+      -1,   204,    -1,   140,   141,    -1,   140,   205,   141,    -1,
+     124,   140,   205,   141,    -1,   198,   125,   140,   205,   141,
+      -1,   124,   204,    -1,   198,   125,   204,    -1,   198,     8,
+     198,    -1,   198,     8,   198,     8,   198,    -1,    43,   140,
+     198,   141,    -1,   170,    -1,   178,    -1,     4,   135,   136,
+      -1,     4,   135,   140,   205,   141,   136,    -1,   198,    -1,
+     204,    -1,   205,   139,   198,    -1,   205,   139,   204,    -1,
+     140,   198,   139,   198,   139,   198,   139,   198,   141,    -1,
+     140,   198,   139,   198,   139,   198,   141,    -1,     4,    -1,
+       4,   137,    92,   137,     4,    -1,   140,   208,   141,    -1,
+       4,   135,   198,   136,   137,    93,    -1,   206,    -1,   208,
+     139,   206,    -1,   210,    -1,     4,    -1,     5,    -1,    42,
+      -1,    37,   133,   209,   139,   209,   134,    -1,    38,   133,
+     209,   134,    -1,    39,   133,   209,   134,    -1,    36,   133,
+     209,   134,    -1,    36,   133,   209,   139,   205,   134,    -1,
+      36,   133,     4,   137,     4,   134,    -1,    36,   133,     4,
+     135,   198,   136,   137,     4,   134,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1003,35 +986,35 @@ static const yytype_uint16 yyrline[] =
      457,   312,   471,   476,   485,   484,   499,   504,   513,   512,
      526,   531,   542,   541,   553,   554,   555,   556,   557,   561,
      562,   569,   600,   639,   693,   710,   728,   739,   756,   763,
-     778,   796,   822,   849,   863,   880,   895,   913,   933,   956,
-     966,   981,   985,   998,  1020,  1036,  1057,  1064,  1075,  1090,
-    1098,  1113,  1120,  1132,  1166,  1202,  1224,  1242,  1260,  1278,
-    1304,  1322,  1348,  1368,  1386,  1404,  1430,  1447,  1466,  1484,
-    1522,  1528,  1534,  1541,  1565,  1589,  1605,  1625,  1642,  1659,
-    1680,  1685,  1690,  1695,  1700,  1711,  1717,  1726,  1727,  1732,
-    1735,  1739,  1762,  1785,  1808,  1836,  1845,  1858,  1874,  1889,
-    1903,  1909,  1915,  1924,  1938,  1986,  2002,  2018,  2037,  2047,
-    2069,  2073,  2078,  2083,  2095,  2112,  2129,  2156,  2183,  2214,
-    2222,  2228,  2235,  2239,  2248,  2256,  2264,  2273,  2272,  2285,
-    2284,  2297,  2296,  2309,  2308,  2320,  2319,  2335,  2342,  2349,
-    2356,  2363,  2370,  2377,  2384,  2391,  2399,  2398,  2410,  2409,
-    2421,  2420,  2432,  2431,  2443,  2442,  2454,  2453,  2465,  2464,
-    2476,  2475,  2487,  2486,  2501,  2504,  2510,  2519,  2539,  2562,
-    2566,  2590,  2608,  2626,  2644,  2673,  2708,  2713,  2740,  2754,
-    2767,  2784,  2790,  2796,  2799,  2808,  2818,  2819,  2820,  2821,
-    2822,  2823,  2824,  2825,  2826,  2833,  2834,  2835,  2836,  2837,
-    2838,  2839,  2840,  2841,  2842,  2843,  2844,  2845,  2846,  2847,
-    2848,  2849,  2850,  2851,  2852,  2853,  2854,  2855,  2856,  2857,
-    2858,  2859,  2860,  2861,  2862,  2863,  2864,  2866,  2867,  2868,
-    2869,  2870,  2871,  2872,  2873,  2874,  2875,  2876,  2877,  2878,
-    2879,  2880,  2881,  2882,  2883,  2884,  2885,  2886,  2895,  2896,
-    2897,  2898,  2899,  2900,  2901,  2905,  2921,  2936,  2956,  2969,
-    2982,  3005,  3023,  3041,  3059,  3077,  3085,  3089,  3093,  3097,
-    3101,  3108,  3112,  3116,  3120,  3127,  3132,  3140,  3145,  3149,
-    3154,  3158,  3166,  3177,  3185,  3193,  3199,  3210,  3230,  3240,
-    3250,  3267,  3294,  3299,  3303,  3307,  3320,  3324,  3336,  3343,
-    3364,  3368,  3383,  3388,  3395,  3399,  3406,  3410,  3418,  3426,
-    3440,  3454,  3458,  3477,  3500
+     778,   796,   822,   849,   863,   880,   895,   913,   933,   953,
+     961,   966,   980,   993,  1011,  1021,  1036,  1040,  1053,  1075,
+    1091,  1113,  1131,  1149,  1167,  1193,  1211,  1237,  1257,  1275,
+    1293,  1319,  1336,  1355,  1373,  1411,  1417,  1423,  1430,  1454,
+    1478,  1494,  1514,  1531,  1548,  1569,  1574,  1579,  1584,  1589,
+    1600,  1606,  1615,  1616,  1621,  1624,  1628,  1651,  1674,  1697,
+    1725,  1734,  1737,  1750,  1766,  1781,  1795,  1801,  1807,  1816,
+    1830,  1878,  1894,  1910,  1929,  1939,  1961,  1965,  1970,  1975,
+    1987,  2004,  2021,  2048,  2075,  2106,  2114,  2120,  2127,  2131,
+    2140,  2148,  2156,  2165,  2164,  2177,  2176,  2189,  2188,  2201,
+    2200,  2212,  2211,  2227,  2234,  2241,  2248,  2255,  2262,  2269,
+    2276,  2283,  2291,  2290,  2302,  2301,  2313,  2312,  2324,  2323,
+    2335,  2334,  2346,  2345,  2357,  2356,  2368,  2367,  2379,  2378,
+    2393,  2396,  2402,  2411,  2431,  2454,  2458,  2482,  2500,  2518,
+    2536,  2565,  2600,  2605,  2632,  2646,  2659,  2676,  2682,  2688,
+    2691,  2700,  2710,  2711,  2712,  2713,  2714,  2715,  2716,  2717,
+    2718,  2725,  2726,  2727,  2728,  2729,  2730,  2731,  2732,  2733,
+    2734,  2735,  2736,  2737,  2738,  2739,  2740,  2741,  2742,  2743,
+    2744,  2745,  2746,  2747,  2748,  2749,  2750,  2751,  2752,  2753,
+    2754,  2755,  2756,  2758,  2759,  2760,  2761,  2762,  2763,  2764,
+    2765,  2766,  2767,  2768,  2769,  2770,  2771,  2772,  2773,  2774,
+    2775,  2776,  2777,  2778,  2787,  2788,  2789,  2790,  2791,  2792,
+    2793,  2797,  2813,  2828,  2848,  2861,  2874,  2897,  2915,  2933,
+    2951,  2969,  2977,  2981,  2985,  2989,  2993,  3000,  3004,  3008,
+    3012,  3019,  3024,  3032,  3037,  3041,  3046,  3050,  3058,  3069,
+    3077,  3085,  3091,  3102,  3122,  3132,  3142,  3159,  3186,  3191,
+    3195,  3199,  3212,  3216,  3228,  3235,  3256,  3260,  3275,  3280,
+    3287,  3291,  3298,  3302,  3310,  3318,  3332,  3346,  3350,  3369,
+    3392
 };
 #endif
 
@@ -1052,12 +1035,11 @@ static const char *const yytname[] =
   "tRuled", "tTransfinite", "tComplex", "tPhysical", "tUsing", "tBump",
   "tProgression", "tPlugin", "tRotate", "tTranslate", "tSymmetry",
   "tDilate", "tExtrude", "tDuplicata", "tLoop", "tRecombine", "tSmoother",
-  "tDelete", "tCoherence", "tIntersect", "tBoundary", "tAttractor",
-  "tLayers", "tHole", "tAlias", "tAliasWithOptions", "tText2D", "tText3D",
+  "tDelete", "tCoherence", "tIntersect", "tBoundary", "tLayers", "tHole",
+  "tAlias", "tAliasWithOptions", "tText2D", "tText3D",
   "tInterpolationScheme", "tTime", "tCombine", "tBSpline", "tBezier",
   "tNurbs", "tOrder", "tKnots", "tColor", "tColorTable", "tFor", "tIn",
-  "tEndFor", "tIf", "tEndIf", "tExit", "tField", "tThreshold",
-  "tStructured", "tLatLon", "tGrad", "tPostView", "tReturn", "tCall",
+  "tEndFor", "tIf", "tEndIf", "tExit", "tField", "tReturn", "tCall",
   "tFunction", "tShow", "tHide", "tGetValue", "tGMSH_MAJOR_VERSION",
   "tGMSH_MINOR_VERSION", "tGMSH_PATCH_VERSION", "tAFFECTDIVIDE",
   "tAFFECTTIMES", "tAFFECTMINUS", "tAFFECTPLUS", "'?'", "tOR", "tAND",
@@ -1096,52 +1078,52 @@ static const yytype_uint16 yytoknum[] =
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-      63,   375,   376,   377,   378,    60,    62,   379,   380,    43,
-      45,    42,    47,    37,    33,   381,   382,   383,    94,    40,
-      41,    91,    93,    46,    35,    44,   123,   125,   126
+     365,   366,   367,   368,    63,   369,   370,   371,   372,    60,
+      62,   373,   374,    43,    45,    42,    47,    37,    33,   375,
+     376,   377,    94,    40,    41,    91,    93,    46,    35,    44,
+     123,   125,   126
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   149,   150,   150,   151,   151,   152,   152,   152,   152,
-     152,   152,   152,   152,   152,   152,   152,   152,   152,   152,
-     153,   153,   154,   154,   154,   154,   155,   155,   155,   156,
-     156,   156,   156,   156,   156,   157,   157,   158,   158,   160,
-     161,   159,   162,   162,   164,   163,   165,   165,   167,   166,
-     168,   168,   170,   169,   171,   171,   171,   171,   171,   172,
-     172,   173,   173,   173,   173,   173,   173,   173,   173,   173,
-     173,   173,   173,   173,   173,   173,   173,   173,   173,   173,
-     173,   174,   174,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     176,   176,   176,   176,   176,   176,   176,   177,   177,   178,
-     178,   178,   178,   178,   178,   179,   179,   179,   179,   180,
-     181,   181,   181,   181,   182,   182,   182,   182,   182,   182,
-     182,   182,   182,   182,   183,   183,   183,   183,   183,   183,
-     183,   183,   183,   183,   184,   184,   184,   185,   184,   186,
-     184,   187,   184,   188,   184,   189,   184,   184,   184,   184,
-     184,   184,   184,   184,   184,   184,   190,   184,   191,   184,
-     192,   184,   193,   184,   194,   184,   195,   184,   196,   184,
-     197,   184,   198,   184,   199,   199,   200,   200,   200,   200,
-     200,   201,   201,   201,   201,   201,   201,   201,   201,   201,
-     201,   202,   202,   202,   202,   203,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+       0,   143,   144,   144,   145,   145,   146,   146,   146,   146,
+     146,   146,   146,   146,   146,   146,   146,   146,   146,   146,
+     147,   147,   148,   148,   148,   148,   149,   149,   149,   150,
+     150,   150,   150,   150,   150,   151,   151,   152,   152,   154,
+     155,   153,   156,   156,   158,   157,   159,   159,   161,   160,
+     162,   162,   164,   163,   165,   165,   165,   165,   165,   166,
+     166,   167,   167,   167,   167,   167,   167,   167,   167,   167,
+     167,   167,   167,   167,   167,   167,   167,   167,   167,   167,
+     167,   167,   167,   167,   167,   167,   168,   168,   169,   169,
+     169,   169,   169,   169,   169,   169,   169,   169,   169,   169,
+     169,   169,   169,   169,   169,   169,   169,   169,   169,   169,
+     169,   169,   169,   169,   169,   170,   170,   170,   170,   170,
+     170,   170,   171,   171,   172,   172,   172,   172,   172,   172,
+     173,   173,   173,   173,   173,   174,   175,   175,   175,   175,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     178,   178,   178,   179,   178,   180,   178,   181,   178,   182,
+     178,   183,   178,   178,   178,   178,   178,   178,   178,   178,
+     178,   178,   184,   178,   185,   178,   186,   178,   187,   178,
+     188,   178,   189,   178,   190,   178,   191,   178,   192,   178,
+     193,   193,   194,   194,   194,   194,   194,   195,   195,   195,
+     195,   195,   195,   195,   195,   195,   195,   196,   196,   196,
+     196,   197,   198,   198,   198,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,   199,   199,   199,   199,   199,   199,
+     199,   199,   199,   199,   199,   199,   199,   199,   199,   199,
+     199,   199,   200,   200,   200,   200,   200,   201,   201,   201,
+     201,   202,   202,   203,   203,   203,   203,   203,   203,   204,
      204,   204,   204,   204,   204,   204,   204,   204,   205,   205,
-     205,   205,   205,   205,   205,   205,   205,   205,   205,   205,
-     205,   205,   205,   205,   205,   205,   206,   206,   206,   206,
-     206,   207,   207,   207,   207,   208,   208,   209,   209,   209,
-     209,   209,   209,   210,   210,   210,   210,   210,   210,   210,
-     210,   210,   211,   211,   211,   211,   212,   212,   212,   212,
-     213,   213,   214,   214,   215,   215,   216,   216,   216,   216,
-     216,   216,   216,   216,   216
+     205,   205,   206,   206,   206,   206,   207,   207,   208,   208,
+     209,   209,   210,   210,   210,   210,   210,   210,   210,   210,
+     210
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1154,35 +1136,35 @@ static const yytype_uint8 yyr2[] =
        0,    10,     1,     3,     0,    13,     1,     3,     0,    15,
        8,    14,     0,     6,     1,     1,     1,     1,     1,     1,
        1,     4,     7,     9,     6,     6,     3,     6,     4,     6,
-       9,     6,     9,     5,     8,     8,    11,     6,     9,     9,
-       9,     1,     1,     7,     8,     9,     8,     8,     8,     8,
-       9,     8,     5,     6,     6,     6,     7,     7,     7,     9,
-       7,     9,    17,     7,     7,    11,     8,     8,     8,     8,
-       3,     4,    10,     7,     7,     8,     8,     8,     7,     8,
-       5,    11,     5,     9,     4,     9,     4,     1,     1,     0,
-       2,     6,     6,     6,     6,     4,     6,     3,     4,     5,
-       3,     3,     4,     4,     3,     7,     7,     3,     7,     3,
-       2,     2,    15,     2,     6,     8,     8,    10,     1,     2,
-       1,     3,     4,     1,     5,    11,    13,     0,     7,     0,
-      13,     0,    15,     0,     6,     0,    10,     8,     8,     8,
-      12,    12,    12,    14,    14,    14,     0,    12,     0,    12,
-       0,    12,     0,    16,     0,    16,     0,    16,     0,    18,
-       0,    18,     0,    18,     1,     2,     5,     7,     9,     2,
-       9,     6,     9,     9,     8,     9,     8,     8,     6,     4,
-       6,    10,    10,    10,    10,     2,     1,     3,     2,     2,
-       2,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     5,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     6,     4,     4,     4,
-       4,     4,     4,     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,     1,     1,     1,     5,     4,     4,     2,
-       5,     3,     6,     4,     7,     6,     1,     2,     2,     3,
-       3,    11,     9,     7,     7,     1,     3,     1,     1,     2,
-       3,     4,     5,     2,     3,     3,     5,     4,     1,     1,
-       3,     6,     1,     1,     3,     3,     9,     7,     1,     5,
-       3,     6,     1,     3,     1,     1,     1,     1,     6,     4,
-       4,     4,     6,     6,     9
+       9,     6,     9,     5,     8,     8,    11,     6,     9,     5,
+       7,     9,     9,     9,     9,     9,     1,     1,     7,     8,
+       6,     7,     7,     7,     9,     7,     9,    17,     7,     7,
+      11,     8,     8,     8,     8,     3,     4,    10,     7,     7,
+       8,     8,     8,     7,     8,     5,    11,     5,     9,     4,
+       9,     4,     1,     1,     0,     2,     6,     6,     6,     6,
+       4,     6,     6,     3,     4,     5,     3,     3,     4,     4,
+       3,     7,     7,     3,     7,     3,     2,     2,    15,     2,
+       6,     8,     8,    10,     1,     2,     1,     3,     4,     1,
+       5,    11,    13,     0,     7,     0,    13,     0,    15,     0,
+       6,     0,    10,     8,     8,     8,    12,    12,    12,    14,
+      14,    14,     0,    12,     0,    12,     0,    12,     0,    16,
+       0,    16,     0,    16,     0,    18,     0,    18,     0,    18,
+       1,     2,     5,     7,     9,     2,     9,     6,     9,     9,
+       8,     9,     8,     8,     6,     4,     6,    10,    10,    10,
+      10,     2,     1,     3,     2,     2,     2,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     5,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     6,     4,     4,     4,     4,     4,     4,     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,     1,
+       1,     1,     5,     4,     4,     2,     5,     3,     6,     4,
+       7,     6,     1,     2,     2,     3,     3,    11,     9,     7,
+       7,     1,     3,     1,     1,     2,     3,     4,     5,     2,
+       3,     3,     5,     4,     1,     1,     3,     6,     1,     1,
+       3,     3,     9,     7,     1,     5,     3,     6,     1,     3,
+       1,     1,     1,     1,     6,     4,     4,     4,     6,     6,
+       9
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1195,288 +1177,282 @@ static const yytype_uint16 yydefact[] =
        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,   158,     0,   163,     0,     0,     0,     0,     0,   160,
-       0,     0,     0,     0,     5,     7,     6,     8,     9,    10,
-      11,    12,    13,    19,    18,    14,    15,    16,    17,   288,
-     295,   346,    54,   289,   290,   291,     0,     0,     0,     0,
+     154,     0,   159,     0,     0,   156,     0,     0,     0,     0,
+       5,     7,     6,     8,     9,    10,    11,    12,    13,    19,
+      18,    14,    15,    16,    17,   284,   291,   342,    54,   285,
+     286,   287,     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,   343,     0,     0,
+     288,   289,   290,    58,    57,    56,    55,     0,     0,     0,
+      60,    59,     0,     0,     0,     0,     0,     0,     0,   222,
+       0,     0,     0,     0,   147,     0,   149,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   347,     0,   292,   293,   294,    58,    57,    56,    55,
-       0,     0,     0,    60,    59,     0,     0,     0,     0,     0,
-       0,     0,   226,     0,     0,     0,     0,   151,     0,   153,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   302,     0,     0,     0,     0,     0,     0,   124,     0,
+     124,     0,     0,     0,     0,   124,   221,     0,   124,     0,
+       0,     0,     0,     0,     0,   334,     0,     0,     0,     0,
+       0,   146,     0,     0,   155,   341,   342,   124,     0,   340,
+     124,     0,     0,     0,     0,     0,   295,    29,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   306,     0,     0,     0,     0,     0,
-       0,   129,     0,   129,     0,     0,     0,   129,   225,     0,
-     129,     0,     0,     0,     0,     0,     0,     0,     0,   338,
-       0,     0,     0,     0,     0,   150,     0,     0,     0,     0,
-       0,   159,     0,   345,   346,   129,     0,   344,   129,     0,
-       0,     0,     0,     0,   299,    29,     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,   291,   225,   224,
+     226,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      66,   143,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   140,   105,     0,
+       0,     0,     0,   291,     0,     0,   324,   325,   328,   329,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   295,   229,   228,   230,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    66,   147,     0,
+       0,     0,     0,     0,   313,     0,   314,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   144,   110,     0,     0,     0,     0,
-     295,     0,     0,   328,   329,   332,   333,     0,     0,     0,
+       0,     0,   304,   303,     0,     0,     0,     0,   124,   124,
+       0,     0,     0,     0,     0,     0,     0,     0,   169,     0,
+     124,   123,     0,   122,     0,     0,     0,   133,     0,     0,
+       0,     0,     0,     0,     0,   145,     0,     0,     0,     0,
+       0,   124,     0,     0,     0,     0,   157,     0,   136,     0,
+     137,     0,     0,   297,     0,     0,    68,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   317,     0,   318,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     308,   307,     0,     0,     0,     0,   129,   129,     0,     0,
-       0,     0,     0,     0,     0,     0,   173,     0,   129,   128,
-       0,   127,     0,     0,     0,   137,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   149,     0,     0,     0,     0,
-       0,   129,     0,     0,     0,     0,     0,     0,     0,   161,
-       0,     0,   140,     0,   141,     0,     0,   301,     0,     0,
-      68,     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,   341,
+       0,     0,     0,     0,     0,     0,     0,   223,     0,     0,
+       0,     0,    54,     0,     0,     0,     0,     0,    61,     0,
+     240,   239,   238,   237,   233,   234,   236,   235,   228,   227,
+     229,   230,   231,   232,   106,     0,     0,     0,     0,     0,
+       0,   224,   319,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   315,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    86,    87,     0,     0,     0,     0,     0,
+       0,     0,   306,   305,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   125,     0,     0,   163,
+     119,   215,     0,     0,   134,     0,     0,   130,     0,   121,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   345,     0,     0,     0,     0,     0,     0,
-     227,     0,     0,     0,     0,    54,     0,     0,     0,     0,
-       0,    61,     0,   244,   243,   242,   241,   237,   238,   240,
-     239,   232,   231,   233,   234,   235,   236,   111,     0,     0,
-       0,     0,     0,     0,   228,   323,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   319,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    81,    82,     0,
-       0,     0,     0,     0,     0,     0,   310,   309,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   130,     0,     0,   167,   124,   219,     0,     0,   138,
-       0,   135,     0,   126,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   162,     0,     0,
-       0,     0,     0,   142,   143,     0,   297,   303,     0,    39,
-       0,     0,     0,    52,     0,    30,    31,    32,    33,    34,
-     246,   267,   247,   268,   248,   269,   249,   270,   250,   271,
-     251,   272,   252,   273,   253,   274,   254,   275,   266,   287,
-     255,   276,     0,     0,   257,   278,   258,   279,   259,   280,
-     260,   281,   261,   282,   262,   283,     0,     0,     0,     0,
-       0,     0,     0,     0,   351,     0,     0,   349,   350,     0,
+     158,     0,   138,   139,     0,   293,   299,     0,    39,     0,
+       0,     0,    52,     0,    30,    31,    32,    33,    34,   242,
+     263,   243,   264,   244,   265,   245,   266,   246,   267,   247,
+     268,   248,   269,   249,   270,   250,   271,   262,   283,   251,
+     272,     0,     0,   253,   274,   254,   275,   255,   276,   256,
+     277,   257,   278,   258,   279,     0,     0,     0,     0,     0,
+       0,     0,     0,   347,     0,     0,   345,   346,    79,     0,
        0,     0,     0,     0,    54,     0,     0,     0,     0,     0,
-      73,     0,     0,     0,     0,   298,     0,    22,    20,     0,
-       0,     0,     0,   330,     0,     0,   325,   233,   324,   334,
-     335,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    92,     0,   320,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   120,   122,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     204,     0,   164,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   139,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   300,     0,
-     296,     0,     0,     0,     0,     0,    26,     0,     0,     0,
+      73,     0,     0,     0,     0,   294,     0,    22,    20,     0,
+       0,     0,     0,   326,     0,     0,   321,   229,   320,   330,
+     331,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   316,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     297,    64,    65,     0,     0,     0,     0,     0,    67,    69,
-      71,     0,     0,   342,     0,    77,   245,    21,     0,     0,
-       0,     0,     0,   327,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   321,     0,
-      95,     0,     0,     0,     0,     0,   211,     0,     0,     0,
+       0,     0,     0,     0,   115,   117,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   200,
+       0,   160,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   135,     0,     0,     0,     0,
+       0,     0,   296,     0,   292,     0,     0,     0,     0,     0,
+      26,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   293,    64,    65,     0,     0,     0,
+       0,     0,    67,    69,    71,     0,     0,   338,     0,    77,
+     241,    21,     0,     0,     0,     0,     0,   323,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     129,     0,     0,     0,     0,     0,     0,     0,   209,     0,
-       0,   174,   205,     0,     0,   218,   220,   136,     0,     0,
-      93,    94,    27,    28,     0,     0,     0,   339,     0,     0,
-       0,   154,     0,     0,     0,     0,     0,   146,   302,   145,
-       0,     0,     0,     0,   315,     0,   256,   277,   263,   284,
-     264,   285,   265,   286,     0,   353,   352,   348,   305,     0,
-      54,     0,     0,     0,     0,    62,     0,     0,     0,   340,
-      23,    24,     0,     0,    83,     0,   326,     0,    98,     0,
-     100,     0,     0,    96,     0,     0,   113,   114,     0,     0,
-      97,   118,   322,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   148,     0,     0,
-       0,     0,   129,   175,     0,   186,     0,   188,     0,   190,
-       0,     0,     0,     0,   317,     0,     0,     0,     0,   168,
-       0,     0,   103,   104,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   304,     0,    35,     0,     0,     0,     0,
-       0,    37,     0,     0,     0,     0,    74,     0,     0,    75,
-       0,   343,     0,     0,   331,     0,     0,     0,   106,     0,
-       0,   115,     0,     0,     0,   216,   108,   109,     0,     0,
-       0,   214,   217,   117,    84,   107,   116,   119,     0,     0,
-       0,   314,     0,   313,     0,     0,     0,   177,     0,     0,
-     178,     0,     0,   179,     0,   131,   132,   133,   134,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   337,     0,
-     156,   155,    88,    91,    86,    87,    89,     0,    40,     0,
-       0,     0,   316,     0,     0,     0,     0,    63,    70,    72,
-       0,    78,     0,    25,     0,     0,    99,   101,     0,     0,
-       0,     0,     0,   213,   212,   215,    79,    80,   129,     0,
-     123,     0,     0,     0,     0,     0,     0,     0,   206,     0,
-       0,   129,     0,   125,    85,     0,     0,     0,    90,     0,
-      36,     0,     0,     0,    38,    53,   354,     0,   341,     0,
-     221,   222,   223,   224,   112,     0,     0,     0,   312,   176,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   169,     0,     0,   336,   157,     0,     0,     0,
-       0,    76,     0,     0,   121,     0,   192,     0,     0,   194,
-       0,     0,   196,     0,     0,     0,   207,     0,   165,     0,
-     129,   105,     0,    44,     0,    50,     0,     0,     0,   311,
-     180,     0,     0,   187,   181,     0,     0,   189,   182,     0,
-       0,   191,     0,     0,     0,   171,     0,     0,     0,     0,
-       0,     0,     0,   198,     0,   200,     0,   202,   208,   210,
-     170,   166,     0,    41,     0,    48,     0,     0,     0,     0,
-     183,     0,     0,   184,     0,     0,   185,     0,     0,     0,
-      42,     0,     0,   152,     0,     0,     0,     0,     0,     0,
-       0,   172,     0,     0,     0,     0,     0,   193,     0,   195,
-       0,   197,     0,    43,    45,     0,    46,     0,   102,     0,
-       0,     0,     0,     0,    51,   199,   201,   203,    47,    49
+       0,     0,   317,     0,    90,     0,     0,     0,     0,     0,
+     207,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   124,     0,     0,     0,     0,     0,
+       0,     0,   205,     0,     0,   170,   201,     0,     0,   214,
+     216,   132,   131,     0,    27,    28,     0,     0,     0,   335,
+       0,     0,     0,   150,     0,     0,   142,   298,   141,     0,
+       0,     0,     0,   311,     0,   252,   273,   259,   280,   260,
+     281,   261,   282,     0,   349,   348,   344,   301,     0,    54,
+       0,     0,     0,     0,    62,     0,     0,     0,   336,    23,
+      24,     0,     0,    88,     0,   322,     0,    93,     0,    95,
+       0,     0,    91,     0,     0,   108,   109,     0,     0,    92,
+     113,   318,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   144,     0,     0,     0,
+       0,   124,   171,     0,   182,     0,   184,     0,   186,     0,
+       0,     0,     0,   313,     0,     0,     0,     0,   164,     0,
+      98,    99,     0,     0,     0,     0,    80,     0,   300,     0,
+      35,     0,     0,     0,     0,     0,    37,     0,     0,     0,
+       0,    74,     0,     0,    75,     0,   339,     0,     0,   327,
+       0,     0,     0,   101,     0,     0,   110,     0,     0,     0,
+     212,   103,   104,     0,     0,     0,   210,   213,   112,    89,
+     102,   111,   114,     0,     0,     0,   310,     0,   309,     0,
+       0,     0,   173,     0,     0,   174,     0,     0,   175,     0,
+     126,   127,   128,   129,     0,     0,     0,     0,     0,     0,
+       0,     0,   333,     0,   152,   151,     0,     0,     0,    40,
+       0,     0,     0,   312,     0,     0,     0,     0,    63,    70,
+      72,     0,    78,     0,    25,     0,     0,    94,    96,     0,
+       0,     0,     0,     0,   209,   208,   211,    84,    85,   124,
+       0,   118,     0,     0,     0,     0,     0,     0,     0,   202,
+       0,     0,   124,     0,   120,     0,     0,     0,    81,    83,
+      82,     0,    36,     0,     0,     0,    38,    53,   350,     0,
+     337,     0,   217,   218,   219,   220,   107,     0,     0,     0,
+     308,   172,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   165,     0,     0,   332,   153,     0,
+       0,     0,     0,    76,     0,     0,   116,     0,   188,     0,
+       0,   190,     0,     0,   192,     0,     0,     0,   203,     0,
+     161,     0,   124,   100,     0,    44,     0,    50,     0,     0,
+       0,   307,   176,     0,     0,   183,   177,     0,     0,   185,
+     178,     0,     0,   187,     0,     0,     0,   167,     0,     0,
+       0,     0,     0,     0,     0,   194,     0,   196,     0,   198,
+     204,   206,   166,   162,     0,    41,     0,    48,     0,     0,
+       0,     0,   179,     0,     0,   180,     0,     0,   181,     0,
+       0,     0,    42,     0,     0,   148,     0,     0,     0,     0,
+       0,     0,     0,   168,     0,     0,     0,     0,     0,   189,
+       0,   191,     0,   193,     0,    43,    45,     0,    46,     0,
+      97,     0,     0,     0,     0,     0,    51,   195,   197,   199,
+      47,    49
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     2,     3,    64,   669,    65,    66,   409,   984,   990,
-     595,   761,  1119,  1239,   596,  1207,  1265,   597,  1241,   598,
-     599,   765,   129,   224,    67,   526,   551,   313,   370,   371,
-      70,    71,    72,    73,    74,   314,   733,  1179,  1222,   552,
-    1035,  1038,  1041,  1044,  1191,  1195,  1199,  1231,  1234,  1237,
-     729,   730,    76,    77,    78,   332,   132,   350,   174,   883,
-     884,   334,   317,   201,   664,   794,   216,   217
+      -1,     2,     3,    60,   649,    61,    62,   395,   949,   955,
+     574,   735,  1081,  1201,   575,  1169,  1227,   576,  1203,   577,
+     578,   739,   126,   216,    63,   512,   536,   306,   362,   363,
+      66,    67,    68,    69,    70,   307,   712,  1141,  1184,   537,
+    1000,  1003,  1006,  1009,  1153,  1157,  1161,  1193,  1196,  1199,
+     708,   709,    72,    73,    74,   324,   129,   342,   171,   852,
+     853,   326,   310,   197,   644,   768,   208,   209
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1068
+#define YYPACT_NINF -1029
 static const yytype_int16 yypact[] =
 {
-    3203,    70,   109,  3282, -1068, -1068,  2341,   126,    95,    16,
-      26,   180,   -94,   127,   137,   -45,   166,   169,   -46,   173,
-     179,   161,   -12,   274,   286,   304,   336,   310,   638,   209,
-     240,   -57,   -57,   258,    31,   264,   334,   362,    13,   410,
-     371,   288,    -3,   416,   439,   449,   324,   329,   333,    18,
-      14, -1068,   350, -1068,   469,   385,   394,   395,   400, -1068,
-     498,    17,    11,    25, -1068, -1068, -1068, -1068, -1068, -1068,
-   -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068,
-      15,   360,   560, -1068, -1068, -1068,   -53,   165,   231,   282,
-     299,   342,   379,   383,   489,   502,   533,   553,   556,   562,
-     571,   574,   592,   620,   621,   647,   651,   386,   389,   392,
-     397, -1068,   412, -1068, -1068, -1068, -1068, -1068, -1068, -1068,
-    2615,  2615,  2615, -1068, -1068,  2615,  2128,    20,   554,  2615,
-     563,   962, -1068,   567,   579,  2615,   587, -1068,  2615, -1068,
-    2615,  2483,  2615,  2615,   461,  2615,  2483,  2615,  2615,   464,
-    2483,  2615,  2615,  1360,   486,  2615,   496,   511,   515,  1783,
-     516,   517,   529,   534,   543,   546,   557,   635,   -57,   -57,
-     -57,  2615,  2615,   -71, -1068,   -18,   -57,   558,   561,   575,
-     591,  2272,    51,   759,  1783,  1783,     8, -1068, -1068,   606,
-     759,  1506,  1783,   573,   622,   774,  2615,  2615,  2615,   640,
-    2615,   652,   697,  2615,  2615, -1068,   655,   676,   695,   703,
-     816, -1068,   707, -1068, -1068, -1068,   841, -1068, -1068,   844,
-     731,  2615,   858,   739, -1068, -1068,   861,  2615,  2615,  2615,
-    2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,
-    2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,
-    2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,
-    2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,   577,
-     641,   641,   641,   873,   568,   756,   756,   756,  5459,     3,
-    2483,  2738,   361,   754,   891,   763,  1284, -1068, -1068,  2615,
-    2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,
-    2615,  2615,  2615,  2615, -1068, -1068,  1432,   -89,  4015,  5480,
-     648,   770,  2483, -1068, -1068,  1708, -1068,   132,  5501,  5522,
-    2615,  5543,   632,  5564,  5585,  2615,   669,  5606,  5627,  1783,
-    1921,  1218,  1846,   907, -1068,  2615,  5648,  2615,  2615,  2615,
-     910,  2615,  2615,  2615,  2552,  2552,  2552,  2552,   778,   -22,
-   -1068, -1068,  4041,  4067,   -57,   -57,   759,   759,   138,  2615,
-    2615,  2615,  2615,  2272,  2272,  2615,  3353,   221, -1068, -1068,
-     775,  3353,   194,   914,   917, -1068,  2615,   972,  2483,   779,
-     786,   920,   921,  2615,  2615, -1068,  5669,  5690,  5711,   838,
-    4093, -1068,   789,  1984,  5732,  2615,  2615,  2615,  2615, -1068,
-    2615,  2658, -1068,  2725, -1068,  2615,  4769,    84,  2615,     7,
-   -1068,  5753,  4792,  5774,  4815,  5795,  4838,  5816,  4861,  5837,
-    4884,  5858,  4907,  5879,  4930,  5900,  4953,  5921,  4976,  5942,
-    4999,  5963,  5022,  4119,  4145,  5984,  5045,  6005,  5068,  6026,
-    5091,  6047,  5114,  6068,  5137,  6089,  5160,  4171,  4197,  4223,
-    4249,  4275,  4301,   678,   -35,   787,   796,   798,   794,  2615,
-   -1068,  1783,  1783,   683,   314,   560,  2615,   934,   937,    19,
-     800, -1068,  3029,   913,   643,   597,   597,   140,   140,   140,
-     140,   -34,   -34,   756,   756,   756,   756, -1068,    36,  2483,
-    2615,   938,  2197,  2615,   756, -1068,  2615,  2483,  2483,   848,
-     939,   941,  6110,   942,   854,   944,   945,  6131,   860,   947,
-     950,   953,  2483, -1068,   692,  2059,  2615,  6152,   954,  3098,
-    6173,  6194,  2615,  3297,  3399,  6215,   820,  2989, -1068,   822,
-     823,   824,   826,   -57,  2615,  2615, -1068, -1068,   819,   825,
-    2615,  5183,  4327,  4353,  4379,  1183,   -68,   -44,   -43,   164,
-     866, -1068,   482,   -57,  2795, -1068, -1068,  2615,  2615, -1068,
-    5206, -1068,   693, -1068,  2615,  1783,  1783,  5229,  5252,   963,
-     964,   966,   831,  2615,  2862,  2615,  2615, -1068,  6236,  6257,
-    6278,  6299,  6320, -1068, -1068,  5275,   376, -1068,  3427, -1068,
-     836,   837,   832, -1068,   971, -1068, -1068, -1068, -1068, -1068,
-   -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068,
-   -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068,
-   -1068, -1068,  2615,  2615, -1068, -1068, -1068, -1068, -1068, -1068,
-   -1068, -1068, -1068, -1068, -1068, -1068,  2615,  2615,  2615,  2615,
-    2615,  2615,  2615,   975, -1068,  2483,   641, -1068, -1068,  2615,
-    5298,   974,   977,   845, -1068,    32,  2615,   980,   983,  1464,
-   -1068,   984,   852,    18,   988, -1068,  2615, -1068,   869,   641,
-     -11,  4405,   -57, -1068,  2483,  3455,  3049,   756, -1068,  1708,
-   -1068,   948,  1783,  1783,   989,  1783,   792,  1783,  1783,   992,
-     949,  1783,  1783, -1068,   706, -1068,  2483,  1571,   994,   856,
-     996,   997,   998,  1142,  1000,  1001,  1003,  1004,  1005,  1006,
-    1007,  1021,   279,  4431,  4457, -1068, -1068,  3483,   884,   -57,
-     -57,   -57,  2483,  2483,  2483,  2483,  1041,   903,   916,   -41,
-   -1068,   326, -1068,   482,  1603,  1623,  1047,  1008,  6341,  1050,
-    1052,  1053,  1057,  1783,  1783,  1783,  1061,  4483, -1068,  3068,
-     680,  1059,  1060,  1063,  1064,  1065,  1062,  1069, -1068,  1071,
-   -1068,   940,  2615,  2615,  1783,   952, -1068,  6362,  5321,  6383,
-    5344,  6404,  5367,  6425,  5390,  5413,   956,   182,   965,  6446,
-      75, -1068, -1068,   183,   458,   959,  1073,  1756, -1068, -1068,
-   -1068,    18,  2615, -1068,   709, -1068,  2989, -1068,  1097,    48,
-    2615,     2,   710, -1068,  2615,   960,    28,    40,  1783,  1101,
-     967,   968,  1102,  1103,  1783,   969,  1105,  1106, -1068,   713,
-   -1068,  1113,  2615,  1783,  1783,  1783, -1068,   302,  1783,  1783,
-    1783,  1783,  1783,  1783,  1783,   390,  2615,  2615,  2615,   976,
-   -1068,   -60,    58,   184,   714,   721,   726,   732, -1068,  1783,
-    2615, -1068, -1068,  2272,   202, -1068, -1068, -1068,   979,  1114,
-   -1068, -1068, -1068, -1068,  1117,  1120,  1028, -1068,  2615,  2615,
-    2615, -1068,  1783,  1122,  2615,  2615,  1123, -1068,    84, -1068,
-    2615,  4509,  4535,   736, -1068,  2615, -1068, -1068, -1068, -1068,
-   -1068, -1068, -1068, -1068,   986, -1068, -1068, -1068, -1068,  1783,
-     560,  2615,  1124,  1127,    19, -1068,  1128,  5436,    18, -1068,
-   -1068, -1068,   641,  4561, -1068,   991,  2989,  2615, -1068,   -57,
-   -1068,   -57,  1129, -1068,  2615,  2615, -1068, -1068,  1131,  2615,
-   -1068, -1068, -1068,  1134,  4587,  1135,  1136,  1137,  2615,  2615,
-     878,  1138,  1139,  1140,  1141,  1143,  1148, -1068,  2552,  3511,
-    6467,  2530,   759,  3353,   -57,  1151,   -57,  1152,   -57,  1157,
-    1158,  1160,  1161,  1163,   417,  1025,  6488,  3539,   337, -1068,
-    2615,  1783, -1068, -1068,  1783,  3343,   618,  6509,  1165,  1167,
-    1884,  2301,  1645, -1068,   207,  2989,  2615,  2615,  1783,  1029,
-     741,  2989,  1170,  1171,  1172,  2407, -1068,  1169,  1174, -1068,
-    1038, -1068,  1177,  2615, -1068,  3567,    49,    54, -1068,  3595,
-    3623, -1068,  3651,  1179,  2615, -1068, -1068, -1068,  2666,  2803,
-    1180, -1068, -1068, -1068, -1068, -1068, -1068, -1068,  2875,  1181,
-    1039, -1068,  2615, -1068,  1043,   482,   370, -1068,  1042,   475,
-   -1068,  1046,   479, -1068,  1048, -1068, -1068, -1068, -1068,  1187,
-    1783,  1188,  1051,  2615,  3679,  1190,  1107,  2615, -1068,  2615,
-   -1068, -1068, -1068, -1068, -1068, -1068, -1068,  1193, -1068,  2615,
-    4613,  4639, -1068,  1783,  2615,  1194,  1066, -1068, -1068, -1068,
-      18, -1068,  1108, -1068,  4665,  1195, -1068, -1068,  1198,  1199,
-    1201,  1202,  4691, -1068, -1068, -1068, -1068, -1068,   759,  3371,
-   -1068,   237,  2272,   482,  2272,   482,  2272,   482, -1068,   744,
-    1783, -1068,  3707, -1068, -1068,  2615,  3735,  3763, -1068,  1068,
-    2989,  2615,  2615,   745,  2989, -1068, -1068,  1204, -1068,  2615,
-   -1068, -1068, -1068, -1068, -1068,  1210,  1070,  2615, -1068, -1068,
-    3791,   493,   295,  3819,   519,   297,  3847,   541,   322,  1783,
-    1212,  1155,  2932,  1074,  2940, -1068, -1068,  2615,  6530,  4717,
-      27, -1068,  4743,  1078, -1068,  3875,  1213,  2615,  1219,  1220,
-    2615,  1224,  1225,  2615,  1247,  1077, -1068,  2615, -1068,   482,
-   -1068, -1068,   748, -1068,  2615, -1068,  1783,  2615,  1249, -1068,
-   -1068,  1109,  3903, -1068, -1068,  1110,  3931, -1068, -1068,  1111,
-    3959, -1068,  1252,  3009,   327,  2999,  1253,  1132,  6551,   760,
-    3987,  1115,   482,  1271,   482,  1273,   482,  1275, -1068, -1068,
-   -1068, -1068,   482, -1068,   641, -1068,  1173,  1283,  1313,   347,
-   -1068,  1176,   356, -1068,  1178,   367, -1068,  1189,   369,   761,
-   -1068,  1191,  1783, -1068,  1182,  1314,   482,  1319,   482,  1320,
-     482, -1068,   641,  1321,   641,   764,  1328, -1068,   380, -1068,
-     454, -1068,   500, -1068, -1068,   768, -1068,  1330, -1068,  1332,
-    1333,  1335,   641,  1336, -1068, -1068, -1068, -1068, -1068, -1068
+    2852,    30,    42,  2930, -1029, -1029,  2002,    75,    67,    -7,
+      20,   124,   -74,    38,    51,   -46,    77,    81,   -42,   142,
+     160,   122,   -28,   138,   253,   256,   502,   265,    78,   204,
+     231,   -38,   -38,   249,    33,   261,   313,   353,    23,   414,
+     359,   291,   456,   470,   481,   363,   366,   369,    14,     9,
+   -1029,   382, -1029,   486,   392, -1029,   528,   532,    12,    19,
+   -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029,
+   -1029, -1029, -1029, -1029, -1029, -1029,    16,   391,   599, -1029,
+   -1029, -1029,   -55,    64,   189,   225,   323,   335,   442,   448,
+     458,   489,   519,   540,   551,   559,   568,   569,   573,   595,
+     604,   608,   609,   411,   416,   425,   432, -1029,   555,   455,
+   -1029, -1029, -1029, -1029, -1029, -1029, -1029,  2207,  2207,  2207,
+   -1029, -1029,  2207,  1766,    11,   597,  2207,   601,  1933, -1029,
+     612,   617,  2207,   621, -1029,  2207, -1029,  2207,  2138,  2207,
+    2207,   498,  2207,  2138,  2207,  2207,   514,  2138,  2207,  2207,
+    1433,   515,  2207,   513,   525,   534,  1433,   530,   543,   541,
+     547,   558,   562,   563,   683,   -38,   -38,   -38,  2207,  2207,
+     -51, -1029,   -23,   -38,   553,   570,   577,   580,  1967,   175,
+     748,  1433,  1433,    37,   592, -1029, -1029,   610,   748,   616,
+     620,   753,  2207,  2207,  2207,   628,  2207,   664,   677,  2207,
+    2207, -1029,  2207,   784, -1029, -1029, -1029, -1029,   803, -1029,
+   -1029,   811,   686,  2207,   826,   694, -1029, -1029,   829,  2207,
+    2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,
+    2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,
+    2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,
+    2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,
+    2207,   710,   790,   790,   790,  2207,   839,   581,   738,   738,
+     738,  5242,    55,  2138,  4483,   333,   734,   869,   752,  2311,
+   -1029, -1029,  2207,  2207,  2207,  2207,  2207,  2207,  2207,  2207,
+    2207,  2207,  2207,  2207,  2207,  2207,  2207, -1029, -1029,  2338,
+     129,  3729,  5263,   594,   762,  2138, -1029, -1029,  2069, -1029,
+      72,  5284,  5305,  2207,  5326,   227,  5347,  5368,  2207,   354,
+    5389,  5410,  1565,  1162,  2653,   873, -1029,  2207,  5431,  2207,
+    2207,  2207,   881,  2207,  2207,  2207,  2264,  2264,  2264,  2264,
+     758,   197, -1029, -1029,  3755,  3781,   -38,   -38,   748,   748,
+     298,  2207,  2207,  2207,  2207,  1967,  1967,  2207,  2996,   328,
+   -1029, -1029,   759,  2996,    61,   898,   900, -1029,  2207,  2207,
+     953,  2138,   766,  2207,  2207, -1029,  5452,  5473,  5494,   816,
+    3807, -1029,   769,  2675,  5515,  4506, -1029,  1339, -1029,  1471,
+   -1029,  2207,  4529,   264,  2207,     8, -1029,  5536,  4552,  5557,
+    4575,  5578,  4598,  5599,  4621,  5620,  4644,  5641,  4667,  5662,
+    4690,  5683,  4713,  5704,  4736,  5725,  4759,  5746,  4782,  3833,
+    3859,  5767,  4805,  5788,  4828,  5809,  4851,  5830,  4874,  5851,
+    4897,  5872,  4920,  3885,  3911,  3937,  3963,  3989,  4015,   459,
+     133,   771,   777,   780,  2358,   776,  2207, -1029,  1433,  1433,
+     429,   266,   599,  2207,   910,   913,    15,   782, -1029,  2702,
+     985,   836,   732,   732,   716,   716,   716,   716,   303,   303,
+     738,   738,   738,   738, -1029,    59,  2138,  2207,   912,  1829,
+    2207,   738, -1029,  2207,  2138,  2138,   825,   914,   921,  5893,
+     923,   837,   924,   926,  5914,   841,   927,   930,  2138, -1029,
+     615,  1697,  2207,  5935,   935,  3031,  5956,  5977,  2207,  3059,
+    3087,  5998,   810,  6229, -1029,   812,   815,   817,   808,   -38,
+    2207,  2207, -1029, -1029,   809,   830,  2207,  4943,  4041,  4067,
+    4093,  3703,   -63,    -8,   -41,   131, -1029,   -34,   -38,  1603,
+   -1029, -1029,  2207,  2207, -1029,  4966,  4989, -1029,   619, -1029,
+    5012,  5035,   963,   965,   966,   853,  2207,  1867,  2207,  2207,
+   -1029,     0, -1029, -1029,  5058,    70, -1029,  3115, -1029,   858,
+     875,   834, -1029,   986, -1029, -1029, -1029, -1029, -1029, -1029,
+   -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029,
+   -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029,
+   -1029,  2207,  2207, -1029, -1029, -1029, -1029, -1029, -1029, -1029,
+   -1029, -1029, -1029, -1029, -1029,  2207,  2207,  2207,  2207,  2207,
+    2207,  2207,   991, -1029,  2138,   790, -1029, -1029, -1029,  2207,
+    5081,  1000,  1005,   879, -1029,    18,  2207,  1010,  1012,  2390,
+   -1029,  1013,   886,    14,  1016, -1029,  2207, -1029,   903,   790,
+     169,  4119,   -38, -1029,  2138,  3143,  2722,   738, -1029,  2069,
+   -1029,   975,  1433,  1433,  1018,  1433,   712,  1433,  1433,  1020,
+     977,  1433,  1433,   632, -1029,  2138,  2409,  1022,   890,  1025,
+    1026,  1027,   862,  1028,  1029,  1030,  1031,  1032,  1036,  1037,
+    1041,   330,  4145,  4171, -1029, -1029,  3171,   906,   -38,   -38,
+     -38,  2138,  2138,  2138,  2138,  1042,   907,   916,   187, -1029,
+     395, -1029,   -34,  2433,  2460,  1044,  1045,  1003,  1048,  1049,
+    1433,  1433,  1433,  1052,  4197, -1029,  2754,  1092,  1053,  1054,
+    1056,  1060, -1029,  1061, -1029,   933,  2207,  2207,  1433,   920,
+   -1029,  6019,  5104,  6040,  5127,  6061,  5150,  6082,  5173,  5196,
+     934,   178,   936,  6103,   -84, -1029, -1029,   184,   378,   932,
+    1065,  2480, -1029, -1029, -1029,    14,  2207, -1029,   650, -1029,
+    6229, -1029,  1067,    63,  2207,    46,   657, -1029,  2207,   937,
+      25,    28,  1433,  1068,   938,   941,  1069,  1070,  1433,   942,
+    1077,  1078, -1029,   658, -1029,  1080,  2207,  1433,  1433,  1433,
+   -1029,    34,  1433,  1433,  1433,  1433,  1433,  1433,  1433,   441,
+    2207,  2207,  2207,   946, -1029,   222,   233,   259,   662,   671,
+     692,   708, -1029,  1433,  2207, -1029, -1029,  1967,   198, -1029,
+   -1029, -1029, -1029,   948, -1029, -1029,  1083,  1084,  1001, -1029,
+    2207,  2207,  2207, -1029,  1085,  1086, -1029,   264, -1029,  2207,
+    4223,  4249,   721, -1029,  2207, -1029, -1029, -1029, -1029, -1029,
+   -1029, -1029, -1029,   959, -1029, -1029, -1029, -1029,  1433,   599,
+    2207,  1091,  1094,    15, -1029,  1093,  5219,    14, -1029, -1029,
+   -1029,   790,  4275, -1029,   982,  6229,  2207, -1029,   -38, -1029,
+     -38,  1107, -1029,  2207,  2207, -1029, -1029,  1113,  2207, -1029,
+   -1029, -1029,  1115,  4301,  1116,  1117,  1118,  2207,  2207,   859,
+    1120,  1123,  1124,  1127,  1130,  1131, -1029,  2264,  3199,  6124,
+    2947,   748,  2996,   -38,  1132,   -38,  1133,   -38,  1134,  1135,
+    1137,  1138,  1140,   292,  1008,  6145,  3227,   422, -1029,  2207,
+   -1029, -1029,  1433,  2975,   661,  6166, -1029,  1301, -1029,   247,
+    6229,  2207,  2207,  1433,   981,   728,  6229,  1144,  1146,  1148,
+    2512, -1029,  1143,  1150, -1029,  1021, -1029,  1153,  2207, -1029,
+    3255,    54,    58, -1029,  3283,  3311, -1029,  3339,  1155,  2207,
+   -1029, -1029, -1029,  2531,  2555,  1156, -1029, -1029, -1029, -1029,
+   -1029, -1029, -1029,  2582,  1157,  1024, -1029,  2207, -1029,  1033,
+     -34,   461, -1029,  1057,   463, -1029,  1058,   506, -1029,  1059,
+   -1029, -1029, -1029, -1029,  1161,  1433,  1154,  1062,  2207,  3367,
+    1079,  2207, -1029,  2207, -1029, -1029,  1126,  1164,  1194, -1029,
+    2207,  4327,  4353, -1029,  1433,  2207,  1195,  1034, -1029, -1029,
+   -1029,    14, -1029,  1110, -1029,  4379,  1198, -1029, -1029,  1214,
+    1215,  1216,  1217,  4405, -1029, -1029, -1029, -1029, -1029,   748,
+    3003, -1029,   232,  1967,   -34,  1967,   -34,  1967,   -34, -1029,
+     736,  1433, -1029,  3395, -1029,  2207,  3423,  3451, -1029, -1029,
+   -1029,  1095,  6229,  2207,  2207,   740,  6229, -1029, -1029,  1219,
+   -1029,  2207, -1029, -1029, -1029, -1029, -1029,  1228,  1096,  2207,
+   -1029, -1029,  3479,   510,   360,  3507,   520,   362,  3535,   554,
+     383,  1433,  1230,  1173,  2306,  1114,  2602, -1029, -1029,  2207,
+    6187,  4431,    27, -1029,  4457,  1121, -1029,  3563,  1249,  2207,
+    1250,  1251,  2207,  1253,  1255,  2207,  1256,  1122, -1029,  2207,
+   -1029,   -34, -1029, -1029,   744, -1029,  2207, -1029,  1433,  2207,
+    1259, -1029, -1029,  1125,  3591, -1029, -1029,  1136,  3619, -1029,
+   -1029,  1139,  3647, -1029,  1260,  2634,   387,  2362,  1261,  1141,
+    6208,   745,  3675,  1145,   -34,  1266,   -34,  1267,   -34,  1268,
+   -1029, -1029, -1029, -1029,   -34, -1029,   790, -1029,  1142,  1269,
+    1272,   399, -1029,  1147,   433, -1029,  1152,   435, -1029,  1158,
+     478,   754, -1029,  1159,  1433, -1029,  1160,  1274,   -34,  1277,
+     -34,  1282,   -34, -1029,   790,  1288,   790,   757,  1290, -1029,
+     527, -1029,   531, -1029,   549, -1029, -1029,   760, -1029,  1291,
+   -1029,  1296,  1302,  1303,   790,  1307, -1029, -1029, -1029, -1029,
+   -1029, -1029
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-   -1068, -1068, -1068, -1068,   544, -1068, -1068, -1068, -1068,   187,
-   -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068,
-   -1068, -1068,  -279,    -2, -1068,   265,  1342,     6,  -188,  -174,
-   -1068, -1068, -1068, -1068, -1068,  1343, -1068, -1068, -1068, -1068,
-   -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068, -1068,
-    -514,  -672, -1068, -1068, -1068,    -5, -1068,    34, -1068, -1067,
-     468,   178,   -67,  -643,   445, -1068,   -63,    -1
+   -1029, -1029, -1029, -1029,   505, -1029, -1029, -1029, -1029,   188,
+   -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029,
+   -1029, -1029,  -271,    -1, -1029,   145,  1311,     6,  -187,  -175,
+   -1029, -1029, -1029, -1029, -1029,  1333, -1029, -1029, -1029, -1029,
+   -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029, -1029,
+    -641,  -515, -1029, -1029, -1029,    -4, -1029,   226, -1029, -1028,
+    -142,   237,    65,  -615,   468, -1029,   -59,     5
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1486,1484 +1462,1415 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -5
 static const yytype_int16 yytable[] =
 {
-     219,   131,   379,   466,   130,   133,  1123,   366,   914,    69,
-     461,   589,   374,   377,   375,   213,   214,   186,   202,   220,
-     793,   211,   199,   662,   282,   149,   144,   144,   149,   213,
-     214,   726,   137,  1185,   918,   177,   784,   154,   727,   728,
-     191,   401,   667,   192,   403,   140,   920,   107,   108,   109,
-     110,   488,   141,   111,   911,  1086,   489,   852,   354,   355,
-    1087,   107,   108,   109,   110,   173,   175,   111,   182,   354,
-     355,   140,   169,   170,   178,   356,     4,   179,   722,   322,
-     180,   226,   171,   326,   919,   954,   227,   955,   228,   172,
-     590,   591,   592,   593,   145,   145,   921,   300,   301,   302,
-     150,   146,   723,   724,   303,   644,   851,   354,   355,     5,
-     645,   354,   355,   283,   284,   275,   276,   277,   212,  1209,
-     278,   281,   462,   533,   286,   785,   786,   155,   357,   799,
-     306,   354,   355,   308,   498,   309,   315,   318,   319,   134,
-     321,   315,   323,   324,   135,   315,   327,   328,   906,   376,
-     336,   123,   124,   203,   594,   136,   221,   215,   222,   187,
-     169,   170,   668,   223,   200,   663,   352,   353,   538,   539,
-     171,   218,   138,  1186,   668,  1255,   353,   181,   354,   355,
-     354,   355,   852,   354,   355,   656,   139,   354,   355,   369,
-     654,   386,   387,   388,   554,   390,   369,   368,   393,   394,
-     556,   557,   349,   956,   351,   957,   454,   455,   456,   457,
-     358,   123,   124,   463,   153,   367,   406,   574,   757,   854,
-     123,   124,   411,   412,   413,   414,   415,   416,   417,   418,
-     419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
-     429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
-     439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   514,  1001,   142,   354,   355,   298,
-     299,   300,   301,   302,   726,   315,   143,   498,   303,   499,
-     467,   727,   728,   540,   472,   473,   474,   475,   476,   477,
-     478,   479,   480,   481,   482,   483,   484,   485,   486,   116,
-     117,   118,   119,   152,   229,   147,   230,   494,   148,   726,
-     725,   562,   151,   354,   355,   502,   727,   728,   152,   316,
-     507,   654,   896,   156,   316,   494,   315,   498,   316,   958,
-     517,   959,   519,   520,   521,   157,   523,   524,   525,   527,
-     527,   527,   527,   528,   528,   528,   528,  1068,   167,   969,
-     354,   355,  1069,   158,   541,   542,   543,   544,   275,   276,
-     545,   162,   369,   369,   938,   939,   553,   726,   465,   726,
-     231,   560,   232,   315,   727,   728,   727,   728,   567,   568,
-     213,   214,   159,   184,  1139,   160,   168,   161,   536,   537,
-     578,   579,   580,   581,   726,   582,   947,   948,   351,   726,
-     585,   727,   728,   588,   176,   587,   727,   728,   354,   355,
-     183,   185,   107,   108,   109,   110,   188,   189,   111,   726,
-     193,   233,   670,   234,   836,   496,   727,   728,   726,   852,
-     116,   117,   118,   119,   190,   727,   728,  1127,   235,   726,
-     236,   726,  1168,   194,  1171,   694,   727,   728,   727,   728,
-     123,   124,   726,   195,   650,   354,   355,   655,   316,   727,
-     728,   659,   657,   196,   658,   900,   354,   355,   197,  1174,
-     852,   853,   198,   852,  1220,   205,   852,   116,   117,   118,
-     119,   237,  1053,   238,   315,   671,   206,   650,   675,   204,
-     495,   676,   677,   679,  1245,   207,   208,   123,   124,   354,
-     355,   209,   210,  1247,   899,   901,   225,   315,   495,   316,
-     677,   697,   123,   124,  1249,  1102,  1251,   703,   239,   757,
-     240,  1101,   241,   759,   242,   269,   726,  1269,   270,   713,
-     714,   271,   852,   727,   728,   717,   272,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   515,   301,
-     302,   273,   734,   735,   726,   303,   316,   852,   285,   738,
-     852,   727,   728,   852,  1049,   214,   852,   712,   747,   287,
-     749,   750,   726,   304,   116,   117,   118,   119,   777,   727,
-     728,   453,   214,   778,   758,   305,   852,   731,   852,  1142,
-     852,  1145,   307,  1148,   123,   124,   107,   108,   109,   110,
-     320,  1270,   111,   325,   354,   355,   798,   802,   354,   355,
-     529,   530,   531,   107,   108,   109,   110,   767,   768,   111,
-    1104,   333,   354,   355,  1106,   335,  1059,   340,   243,   819,
-     244,   769,   770,   771,   772,   773,   774,   775,  1167,   348,
-     315,   245,   337,   246,   779,   213,   214,  1271,   354,   355,
-     338,   787,   372,   373,   339,   844,   845,   846,   847,   381,
-     382,   796,   341,   342,  1170,  1204,   953,   316,   343,   315,
-     354,   355,   247,   344,   248,   678,   680,   107,   108,   109,
-     110,   163,   345,   111,   164,   346,  1173,   165,   870,   166,
-     316,   315,   249,   678,   250,   251,   347,   252,  1229,   359,
-    1232,   253,  1235,   254,   123,   124,   801,   360,  1238,   459,
-     255,   222,   256,   257,   383,   258,   223,   315,   315,   315,
-     315,   361,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   259,  1258,   260,  1260,   303,  1262,   362,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   378,   841,   842,   843,   303,   881,   882,   261,
-     263,   262,   264,   384,  1034,  1060,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   498,   758,   504,
-     385,   303,   902,   389,   123,   124,   265,   907,   266,   492,
-     267,   222,   268,   392,   395,   913,   223,   511,   391,   916,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   498,   396,   508,   934,   303,   642,
-     871,   643,   399,   316,    30,    31,    32,    33,   498,    35,
-     653,   949,   950,   951,   397,    40,    41,   498,   498,   695,
-     737,   810,   398,   811,   964,   966,   400,   402,   967,  1002,
-     404,   498,   316,   818,   908,   498,   909,   915,   498,   498,
-     932,   960,   407,   975,   976,   977,   498,   410,   961,   980,
-     981,   498,   405,   962,   316,   985,   983,   498,   458,   963,
-     991,   988,  1020,   989,  1021,   408,  1074,   968,  1075,  1149,
-     988,  1150,  1160,  1074,   303,  1206,   995,   468,   469,   994,
-     316,   316,   316,   316,   470,   988,  1252,  1226,  1253,   988,
-    1136,  1267,  1005,  1272,   516,  1273,   493,   522,   532,  1009,
-    1010,   558,   555,   559,  1012,   564,   563,   565,   566,   651,
-     652,   572,   646,  1018,  1019,   575,   647,  1152,   648,   649,
-     660,   661,   665,  1028,   681,   672,   682,  1029,   683,   685,
-     686,   687,   688,  1006,   691,  1007,   690,   692,   369,   693,
-     707,   699,   708,   709,   710,  1054,   715,   212,   288,   711,
-     743,   744,   716,   745,   746,   762,   763,   766,   764,   776,
-     781,  1070,  1071,   782,     7,     8,   788,   783,  1036,   789,
-    1039,   791,  1042,   792,   795,   797,   808,   805,  1084,   814,
-     815,   821,   822,   823,   824,   825,  1205,   828,   829,  1092,
-     830,   831,   832,   833,   834,   546,    13,    14,   547,    16,
-      17,   548,    19,   549,    21,   835,    22,  1099,    24,    25,
-     840,    27,    28,   739,   740,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   848,  1112,   849,
-      42,   303,  1116,   857,  1117,   850,   860,   858,   861,   862,
-      46,    47,    48,   863,  1120,   867,   872,   873,   877,  1124,
-     874,   875,   876,   878,    55,    56,    57,   879,    58,   880,
-     904,   550,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   895,  1140,   885,  1143,
-     303,  1146,   903,   910,   369,   897,   917,   923,   926,   927,
-    1154,   930,   931,   924,   925,   929,  1158,  1159,   933,   561,
-     974,   971,   952,   972,  1162,   970,   973,   979,   982,   992,
-     996,   997,  1165,  1004,   999,  1008,  1141,  1011,  1144,  1013,
-    1147,  1015,  1016,  1017,  1022,  1023,  1024,  1025,   826,  1026,
-     806,   807,   991,   809,  1027,   812,   813,  1037,  1040,   816,
-     817,  1240,  1192,  1043,  1045,  1196,  1046,  1047,  1200,  1048,
-    1050,  1062,  1203,  1063,  1076,  1073,  1080,  1077,  1078,  1208,
-    1081,  1082,  1210,  1083,  1091,  1098,  1095,  1097,  1103,  1263,
-    1100,  1266,  1105,  1108,  1107,  1110,  1114,  1111,  1115,  1118,
-    1125,  1130,  1128,   827,  1131,  1132,  1126,  1133,  1134,  1278,
-    1161,   864,   865,   866,  1157,  1163,  1177,  1164,  1176,  1190,
-    1180,    79,   310,  1188,  1202,  1193,  1194,    83,    84,    85,
-    1197,  1198,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,  1201,  1211,  1212,  1214,  1216,  1218,  1223,
-    1228,   311,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   922,  1230,  1224,  1233,
-     303,  1236,   928,    30,    31,    32,    33,    34,    35,  1243,
-     471,   935,   936,   937,    40,    41,   940,   941,   942,   943,
-     944,   945,   946,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   965,  1244,  1242,
-    1257,   303,  1246,   460,  1248,  1259,  1261,  1264,   534,  1256,
-     112,   113,   114,   115,  1268,  1250,  1274,  1254,  1275,  1276,
-     978,  1277,  1279,   912,  1182,    68,    75,   120,   312,   998,
-       0,     0,   122,     0,     0,     0,     0,   125,     0,     0,
-       0,     0,   128,    79,   310,   513,     0,   993,     0,    83,
-      84,    85,     0,     0,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,     0,     0,     0,     0,     0,
-       0,     0,     0,   311,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,     0,    30,    31,    32,    33,    34,
-      35,     0,     0,     0,     0,     0,    40,    41,   487,  1055,
-       0,     0,  1056,     0,     0,     0,     0,     0,     0,     0,
-    1067,     0,     0,     0,     0,     0,  1072,     0,     0,     0,
-       0,   329,     0,     0,     0,     0,     0,     0,     0,     0,
-     790,     0,   112,   113,   114,   115,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   120,
-     330,     0,     0,     0,   122,     0,     0,     0,     0,   125,
-       0,     0,     0,     0,   128,     0,   331,     0,     0,    79,
-     310,     0,     0,     0,     0,    83,    84,    85,  1109,     0,
+     211,   372,   128,   358,   453,   127,  1085,   728,   325,    65,
+     370,   130,   568,   198,   332,   275,   205,   206,   195,   642,
+     212,   151,   758,   205,   206,   141,   134,   183,   767,   146,
+     146,   887,   387,  1147,   889,   389,     4,   174,   705,   364,
+     365,   366,     5,   367,   706,   707,   120,   121,   103,   104,
+     105,   106,   883,   731,   107,   103,   104,   105,   106,   137,
+    1047,   107,   448,   141,  1048,   647,   138,   541,   542,   880,
+     137,   828,   346,   347,   205,   206,   175,   701,   219,   176,
+     220,   888,   177,   218,   890,   166,   167,   142,   131,   348,
+     569,   570,   571,   572,   143,   168,   907,   908,   147,   703,
+     346,   347,   169,   276,   277,   152,   103,   104,   105,   106,
+     759,   760,   107,   268,   269,   270,   132,   349,   271,   274,
+    1171,   160,   279,   184,   161,   142,   133,   162,   299,   163,
+     136,   301,   702,   302,   308,   311,   312,   729,   314,   308,
+     316,   317,   199,   308,   320,   321,   120,   121,   328,   573,
+     875,   213,   207,   214,   196,   643,   166,   167,   215,   210,
+     135,   524,   525,   185,   344,   345,   168,  1148,   449,   346,
+     347,   139,   368,   178,   345,   150,  1217,   346,   347,   648,
+     636,   346,   347,   648,   140,   539,   361,   153,   376,   377,
+     378,   634,   380,   826,   361,   383,   384,   221,   385,   222,
+     120,   121,   440,   441,   442,   443,   557,   731,   315,   392,
+     144,   485,   319,   486,   145,   397,   398,   399,   400,   401,
+     402,   403,   404,   405,   406,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,   419,   420,   421,
+     422,   423,   424,   425,   426,   427,   428,   429,   430,   431,
+     432,   433,   434,   435,   436,   437,   438,   170,   172,   705,
+     179,   444,   966,   475,   149,   706,   707,   623,   476,   308,
+     705,   704,   624,   634,   454,   148,   706,   707,   459,   460,
+     461,   462,   463,   464,   465,   466,   467,   468,   469,   470,
+     471,   472,   473,   149,   113,   114,   115,   116,   346,   347,
+     483,   481,   154,   773,   705,   155,   631,   632,   485,   489,
+     706,   707,   865,   826,   494,   360,   159,   485,   481,   308,
+     346,   347,   223,   503,   224,   505,   506,   507,   825,   509,
+     510,   511,   513,   513,   513,   513,   519,   164,   450,   938,
+     452,   514,   514,   514,   514,   346,   347,   527,   528,   529,
+     530,   268,   269,   531,   361,   361,   346,   347,   225,  1062,
+     226,   923,   181,   924,   545,   546,   485,   308,   491,   550,
+     551,   165,   925,  1101,   926,   309,   113,   114,   115,   116,
+     309,  1029,   346,   347,   309,   869,  1030,   564,   500,   173,
+     567,   341,   566,   343,   120,   121,   120,   121,   927,   350,
+     928,   180,   182,   635,   359,   187,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   501,   294,   295,
+     186,   346,   347,  1104,   296,  1107,  1089,  1110,   293,   294,
+     295,   188,   705,  1014,   705,   296,   548,   526,   706,   707,
+     706,   707,   630,   113,   114,   115,   116,   916,   917,   639,
+     637,   346,   347,   346,   347,   705,   227,   638,   228,   705,
+     189,   706,   707,   120,   121,   706,   707,   538,   229,   810,
+     230,   705,   308,   651,   190,   630,   655,   706,   707,   656,
+     657,   659,   515,   516,   517,   191,   868,   870,   113,   114,
+     115,   116,   201,   485,   308,   495,   192,   657,   676,   193,
+    1166,  1130,   194,  1133,   682,   705,   733,   705,   120,   121,
+     309,   706,   707,   706,   707,   200,   692,   693,   346,   347,
+     780,   781,   696,   783,  1136,   786,   787,   202,  1182,   790,
+     791,   217,   203,  1191,   827,  1194,   204,  1197,   713,   714,
+    1207,   650,   482,  1200,   261,   346,   347,   826,   156,   262,
+     705,   157,   724,   158,   726,   727,   706,   707,   263,   482,
+     309,  1018,   265,   673,   732,   264,   752,  1220,   485,  1222,
+     633,  1224,   522,   523,  1209,   231,  1211,   232,   836,   837,
+     838,   233,   343,   234,   346,   347,   346,   347,   266,   826,
+     772,   235,   826,   236,   621,   826,   622,   741,   742,   705,
+    1063,   278,  1065,   705,   206,   706,   707,   280,   309,   706,
+     707,   743,   744,   745,   746,   747,   748,   749,   297,  1213,
+     308,   705,   237,   298,   238,   753,   300,   706,   707,   346,
+     347,   313,   761,   346,   347,   103,   104,   105,   106,   922,
+     891,   107,   770,   346,   347,  1067,   897,   318,   327,  1129,
+     308,   826,   239,   329,   240,   904,   905,   906,   330,  1132,
+     909,   910,   911,   912,   913,   914,   915,   331,  1231,  1023,
+     333,   308,  1232,   241,   335,   242,   826,   346,   347,   826,
+     336,   934,   826,   334,   243,   826,   244,   340,   351,   751,
+    1233,   337,   245,  1135,   246,   338,   339,   308,   308,   308,
+     308,   247,   249,   248,   250,   826,   251,   826,   252,   826,
+     352,   120,   121,   309,   439,   206,   446,   353,   214,   776,
+     354,   658,   660,   215,   120,   121,   958,   369,   253,   479,
+     254,   214,   850,   851,   999,   309,   215,   255,   658,   256,
+     793,   257,   259,   258,   260,   691,   103,   104,   105,   106,
+     371,   373,   107,   732,   485,   374,   674,   871,   485,   375,
+     717,   784,   876,   785,   710,   379,   818,   819,   820,   821,
+     882,   485,   382,   792,   885,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   877,
+     386,   878,   903,   296,   205,   206,   485,   485,   884,   901,
+    1020,   485,  1024,   929,   381,  1027,   918,   919,   920,   388,
+     485,  1033,   930,    30,    31,    32,    33,   390,    35,   933,
+     935,   391,   967,   936,    40,    41,   103,   104,   105,   106,
+     393,   485,   107,   931,   394,   396,   943,   944,   945,   291,
+     292,   293,   294,   295,   445,   950,   948,   485,   296,   932,
+     956,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     953,   309,   954,   985,   296,   986,   960,  1035,   800,  1036,
+     296,   455,  1098,  1070,   959,  1111,   456,  1112,   775,   953,
+     502,  1122,   970,  1035,   953,  1168,  1188,   457,   508,   974,
+     975,   309,   518,  1214,   977,  1215,   953,  1114,  1229,  1234,
+     540,  1235,   480,   983,   984,   543,   544,   549,   555,   558,
+     625,   626,   309,   993,   627,   629,   640,   641,   645,   652,
+     661,   662,   994,   801,   815,   816,   817,   361,   663,  1113,
+     665,   667,   666,   668,   671,  1019,   670,   672,   309,   309,
+     309,   309,   678,  1026,   686,   690,   687,  1031,  1032,   688,
+     694,   689,  1028,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,  1045,     7,     8,  1167,   296,  1137,
+     720,   695,   721,   722,   738,  1053,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     723,   736,   740,  1060,   296,   750,   532,    13,    14,   533,
+      16,    17,   534,    19,   535,    21,   755,    22,   737,    24,
+      25,   756,    27,    28,  1073,   757,   762,  1076,   763,  1077,
+     765,   766,   769,   771,   779,   782,  1082,   788,   789,   795,
+     796,  1086,   797,   798,   799,   802,   803,   804,   805,   806,
+      45,    46,    47,   807,   808,   809,   814,   823,   822,   824,
+     831,   832,   833,   937,   834,   835,   839,   844,   845,  1102,
+     854,  1105,   846,  1108,   847,   361,   849,   848,   864,   872,
+     866,  1116,   873,   879,   892,   895,   896,   886,   893,  1120,
+    1121,   894,   898,   899,   900,   902,   921,  1124,   939,   940,
+     941,   946,   942,   947,   547,  1127,   957,   961,   962,   964,
+     842,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   973,   971,   956,   972,   296,   969,   976,
+     978,  1034,   980,   981,   982,  1154,   987,  1202,  1158,   988,
+     989,  1162,  1078,   990,   483,  1165,   991,   992,  1002,  1005,
+    1008,  1010,  1170,  1011,  1012,  1172,  1013,  1015,  1037,  1001,
+    1041,  1004,  1038,  1007,  1039,  1225,  1042,  1228,  1043,  1044,
+    1052,  1071,  1056,  1058,  1059,    75,   303,  1069,  1088,  1075,
+    1079,    79,    80,    81,  1061,  1240,    82,    83,    84,    85,
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,     0,     0,     0,     0,     0,     0,     0,     0,   311,
-       0,     0,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,     0,     0,     0,     0,
-     303,    30,    31,    32,    33,    34,    35,   820,  1151,     0,
-       0,     0,    40,    41,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,     0,     0,     0,   380,     0,   855,
-       0,     0,     0,     0,     0,     0,     0,  1175,   112,   113,
-     114,   115,     0,     0,     0,     0,     0,     0,     0,   856,
-       0,     0,     0,     0,     0,   120,   330,     0,     0,     0,
-     122,     0,     0,     0,     0,   125,     0,     0,    79,   310,
-     128,  1066,   331,     0,    83,    84,    85,     0,     0,    86,
+      96,    97,    98,    99,   100,   101,   102,  1064,  1066,  1068,
+    1080,  1087,  1072,  1090,  1092,   304,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+    1093,  1094,  1095,  1096,   296,  1123,   843,    30,    31,    32,
+      33,    34,    35,  1125,  1139,  1119,  1138,  1126,    40,    41,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   501,   294,   295,  1142,  1152,  1155,  1156,   296,  1159,
+    1150,  1160,  1163,  1164,  1173,  1174,  1180,  1185,   109,   110,
+     111,   112,  1192,  1195,  1198,  1205,  1176,  1206,   881,  1178,
+    1219,  1186,  1204,  1221,  1190,   117,   305,  1208,  1223,  1103,
+     119,  1106,  1210,  1109,  1226,   122,  1230,  1236,  1212,  1216,
+     125,  1218,  1237,   499,    75,   303,   206,  1144,  1238,  1239,
+      79,    80,    81,  1241,    64,    82,    83,    84,    85,    86,
       87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-       0,     0,     0,     0,     0,     0,     0,     0,   311,     0,
-       0,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-      30,    31,    32,    33,    34,    35,   496,     0,     0,     0,
-       0,    40,    41,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   112,   113,   114,
-     115,   303,   905,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   120,   330,     0,     0,     0,   122,
-       0,     0,     0,     0,   125,     0,    79,   310,     0,   128,
-       0,   331,    83,    84,    85,     0,     0,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,     0,     0,
-       0,     0,     0,     0,     0,     0,   311,     0,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   497,
-     301,   302,     0,     0,     0,     0,   303,     0,    30,    31,
-      32,    33,    34,    35,   496,     0,     0,     0,     0,    40,
-      41,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-    1064,     0,     0,     0,   303,   112,   113,   114,   115,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   120,   330,     0,     0,     0,   122,     0,     0,
-       0,     0,   125,     0,    79,   310,     0,   128,     0,   331,
-      83,    84,    85,     0,     0,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,     0,     0,     0,     0,
-       0,     0,     0,     0,   311,     0,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   515,   301,   302,
-       0,     0,     0,     0,   303,     0,    30,    31,    32,    33,
-      34,    35,   576,     0,     0,     0,     0,    40,    41,     0,
-       0,     0,     0,     0,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   112,   113,   114,   115,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     120,   312,     0,     0,     0,   122,     0,     0,     0,     0,
-     125,     0,    79,   310,     0,   128,     0,   512,    83,    84,
-      85,     0,     0,    86,    87,    88,    89,    90,    91,    92,
+      97,    98,    99,   100,   101,   102,    71,   103,   104,   105,
+     106,   963,     0,   107,   304,     0,     0,     0,     0,     0,
+       0,     7,     8,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    30,    31,    32,    33,
+      34,    35,     0,     0,     0,     0,     0,    40,    41,     0,
+       0,     0,   532,    13,    14,   533,    16,    17,   534,    19,
+     535,    21,     0,    22,     0,    24,    25,     0,    27,    28,
+       0,     0,     0,     0,     0,     0,     0,   109,   110,   111,
+     112,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   117,   322,    45,    46,    47,   119,
+       0,     0,     0,     0,   122,     0,    75,   303,     0,   125,
+       0,   323,    79,    80,    81,     0,     0,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,     0,     0,
+       0,     0,     0,     0,     0,     0,   304,     0,     0,     0,
+     562,     0,     0,     7,     8,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    30,    31,
+      32,    33,    34,    35,     0,     0,     0,     0,     0,    40,
+      41,     0,     0,     0,   532,    13,    14,   533,    16,    17,
+     534,    19,   535,    21,     0,    22,     0,    24,    25,     0,
+      27,    28,     0,     0,     0,     0,     0,     0,     0,   109,
+     110,   111,   112,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   117,   322,    45,    46,
+      47,   119,     0,     0,     0,     0,   122,     0,    75,   303,
+       0,   125,     0,   323,    79,    80,    81,     0,     0,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
       93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,     0,     0,     0,     0,     0,     0,
-       0,     0,   311,     0,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,    30,    31,    32,    33,    34,    35,
-       0,    79,   274,     0,     0,    40,    41,    83,    84,    85,
-       0,     0,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,     0,     0,     0,     0,     0,     0,     0,
-       0,   112,   113,   114,   115,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   120,   312,
-       0,     0,     0,   122,     0,     0,     0,     0,   125,     0,
-      79,   274,     0,   128,     0,   696,    83,    84,    85,     0,
-       0,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,     0,     0,     0,     0,     0,     0,     0,     0,
-     112,   113,   114,   115,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   120,   121,     0,
-       0,     0,   122,     0,     0,     0,     0,   125,     0,     0,
-     279,     0,   128,     0,   280,    79,   274,     0,     0,     0,
-       0,    83,    84,    85,     0,     0,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,  1065,     0,   112,
-     113,   114,   115,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   120,   121,     0,     0,
-       0,   122,     0,     0,     0,     0,   125,     0,     0,   673,
-       0,   128,     0,   674,    79,    80,    81,     0,    82,     0,
-      83,    84,    85,     0,     0,    86,    87,    88,    89,    90,
+       0,     0,     0,     0,     0,     0,     0,     0,   304,     0,
+       0,     0,   563,     0,     0,     7,     8,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      30,    31,    32,    33,    34,    35,     0,     0,     0,     0,
+       0,    40,    41,     0,     0,     0,   532,    13,    14,   533,
+      16,    17,   534,    19,   535,    21,     0,    22,     0,    24,
+      25,     0,    27,    28,     0,     0,     0,     0,     0,     0,
+       0,   109,   110,   111,   112,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   117,   305,
+      45,    46,    47,   119,     0,     0,     0,     0,   122,     0,
+      75,   303,     0,   125,     0,   498,    79,    80,    81,     0,
+       0,    82,    83,    84,    85,    86,    87,    88,    89,    90,
       91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,     0,   107,   108,   109,
-     110,     0,     0,   111,   112,   113,   114,   115,     0,     0,
+     101,   102,     0,     0,     0,     0,     0,     0,     0,     0,
+     304,     0,     0,     0,   711,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   363,   364,     0,     0,     0,   122,     0,     0,     0,
-       0,   365,     0,  1079,     0,     0,   128,     0,   172,     0,
-       0,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
+       0,     0,    30,    31,    32,    33,    34,    35,     0,    75,
+     267,     0,     0,    40,    41,    79,    80,    81,     0,     0,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,     0,     0,   109,   110,   111,   112,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   112,   113,   114,   115,   116,   117,   118,
-     119,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     120,   121,     0,     0,     0,   122,     0,   123,   124,     0,
-     125,     0,   126,     0,   127,   128,    79,   310,     0,     0,
-       0,     0,    83,    84,    85,     0,     0,    86,    87,    88,
+     117,   305,     0,     0,     0,   119,     0,     0,     0,     0,
+     122,     0,    75,   267,     0,   125,     0,   675,    79,    80,
+      81,     0,     0,    82,    83,    84,    85,    86,    87,    88,
       89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,     0,     0,
-       0,     0,     0,     0,     0,     0,   311,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,    30,    31,
-      32,    33,    34,    35,     0,    79,   274,   214,     0,    40,
-      41,    83,    84,    85,     0,     0,    86,    87,    88,    89,
+      99,   100,   101,   102,     0,     0,     0,     0,     0,     0,
+       0,     0,   109,   110,   111,   112,     0,     0,     0,     7,
+       8,     0,     0,     0,     0,     0,     0,     0,     0,   117,
+     118,     0,     0,     0,   119,     0,     0,     0,     0,   122,
+       0,     0,   272,     0,   125,     0,   273,     0,     0,     0,
+     532,    13,    14,   533,    16,    17,   534,    19,   535,    21,
+       0,    22,     0,    24,    25,     0,    27,    28,     0,     0,
+       0,     0,     0,     0,     0,   109,   110,   111,   112,   281,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   117,   118,    45,    46,    47,   119,     0,     0,
+       0,     0,   122,     0,     0,   653,     0,   125,     0,   654,
+      75,   267,     0,     0,     0,     0,    79,    80,    81,     0,
+       0,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,     0,     0,     0,    75,    76,    77,   725,    78,
+       0,    79,    80,    81,     0,     0,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,     0,   103,   104,
+     105,   106,     0,     0,   107,     0,     0,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,     0,   109,   110,   111,   112,   483,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     355,   356,     0,     0,     0,   119,     0,     0,     0,     0,
+     357,     0,   108,     0,     0,   125,     0,   169,   109,   110,
+     111,   112,   113,   114,   115,   116,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   117,   118,     0,     0,     0,
+     119,     0,   120,   121,     0,   122,     0,   123,     0,   124,
+     125,    75,   303,     0,     0,     0,     0,    79,    80,    81,
+       0,     0,    82,    83,    84,    85,    86,    87,    88,    89,
       90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,     0,   107,   108,
-     109,   110,     0,     0,   111,   112,   113,   114,   115,     0,
+     100,   101,   102,     0,     0,     0,     0,     0,     0,     0,
+       0,   304,     0,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   484,   294,   295,     0,     0,     0,
+       0,   296,     0,    30,    31,    32,    33,    34,    35,     0,
+      75,   267,     0,     0,    40,    41,    79,    80,    81,     0,
+       0,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,     0,     0,   109,   110,   111,   112,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   120,   312,     0,     0,     0,   122,    79,   274,
-       0,     0,   125,     0,    83,    84,    85,   128,     0,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   112,   113,   114,   115,   303,     0,
-       7,     8,  1093,     0,     0,  1032,     0,  1033,     0,     0,
-       0,   120,   121,     0,     0,     0,   122,     0,     0,     0,
-       0,   125,     0,     0,     0,     0,   128,     0,     0,     0,
-       0,   546,    13,    14,   547,    16,    17,   548,    19,   549,
-      21,     0,    22,     0,    24,    25,     0,    27,    28,     0,
-       0,     0,     0,     0,     0,     0,     0,   112,   113,   114,
-     115,     0,     0,     0,     0,     0,    42,     7,     8,     0,
-       0,     0,     0,     0,   120,   121,    46,    47,    48,   122,
-       0,     0,     0,     0,   125,     0,     0,     0,     0,   128,
-      55,    56,    57,     0,    58,     0,     0,   550,   546,    13,
-      14,   547,    16,    17,   548,    19,   549,    21,     0,    22,
-       0,    24,    25,     0,    27,    28,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-       0,     0,     0,    42,   303,   583,     0,     7,     8,  1094,
-       0,     0,     0,    46,    47,    48,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    55,    56,    57,
-       0,    58,     0,     0,   550,     0,     0,     0,   546,    13,
-      14,   547,    16,    17,   548,    19,   549,    21,     0,    22,
-       0,    24,    25,     0,    27,    28,     0,     0,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   584,    42,     7,     8,   303,     0,     0,     0,
-     464,  1096,     0,    46,    47,    48,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    55,    56,    57,
-       0,    58,     0,     0,   550,   546,    13,    14,   547,    16,
-      17,   548,    19,   549,    21,     0,    22,     0,    24,    25,
-       0,    27,    28,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-      42,   303,   732,     0,     7,     8,  1181,     0,     0,     0,
-      46,    47,    48,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    55,    56,    57,     0,    58,     0,
-       0,   550,     0,     0,     0,   546,    13,    14,   547,    16,
-      17,   548,    19,   549,    21,     0,    22,     0,    24,    25,
-       0,    27,    28,     0,     0,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   748,
-      42,     7,     8,   303,     0,  1219,     0,     0,     0,     0,
-      46,    47,    48,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    55,    56,    57,   666,    58,     0,
-       0,   550,   546,    13,    14,   547,    16,    17,   548,    19,
-     549,    21,     0,    22,     0,    24,    25,   804,    27,    28,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,     0,     0,   869,    42,   303,  1178,
-       0,     0,     0,     0,     0,     0,     0,    46,    47,    48,
+       0,   117,   305,     0,     0,     0,   119,    75,   267,   206,
+       0,   122,     0,    79,    80,    81,   125,     0,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,     0,
+     103,   104,   105,   106,     0,     0,   107,     0,     0,     0,
+       0,     0,     0,   109,   110,   111,   112,   458,     7,     8,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    55,    56,    57,     0,    58,     0,     0,   550,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,  1221,   303,     0,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,     0,    -4,     1,     0,   303,    -4,     0,     0,
-       0,     0,     0,     0,     0,    -4,    -4,     0,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,     0,     0,     0,     0,   303,     0,    -4,     0,
-       0,     0,     0,    -4,    -4,   700,    -4,    -4,    -4,    -4,
-      -4,    -4,    -4,    -4,    -4,    -4,     0,    -4,    -4,    -4,
-      -4,    -4,    -4,    -4,     0,     0,     0,    -4,    -4,    -4,
-      -4,    -4,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,
-      -4,    -4,     0,     0,    -4,    -4,     6,     0,     0,     0,
-      -4,    -4,    -4,    -4,     7,     8,    -4,     0,    -4,     0,
-      -4,    -4,    -4,    -4,     0,    -4,    -4,    -4,     0,    -4,
-      -4,    -4,    -4,    -4,    -4,     0,     0,     9,     0,     0,
-       0,     0,    10,    11,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
-      26,    27,    28,     0,     0,     0,    29,    30,    31,    32,
-      33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
-      42,     0,     0,    43,    44,     7,     8,     0,     0,    45,
-      46,    47,    48,     0,     0,    49,     0,    50,     0,    51,
-      52,    53,    54,     0,    55,    56,    57,     0,    58,    59,
-      60,    61,    62,    63,     0,     0,   546,    13,    14,   547,
-      16,    17,   548,    19,   549,    21,     0,    22,     0,    24,
-      25,     0,    27,    28,     0,     0,     0,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,    42,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,    46,    47,    48,   704,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    55,    56,    57,     0,    58,
-       0,     0,   550,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,  1057,     0,
-    1058,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,  1137,     0,  1138,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,     0,     0,     0,     0,     0,   705,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,     0,     0,   760,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-       0,     0,   803,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,     0,     0,
-     839,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,     0,     0,  1030,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,     0,     0,     0,     0,     0,  1052,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,     0,     0,  1085,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-       0,     0,  1088,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,     0,     0,
-    1089,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,     0,     0,  1090,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,     0,     0,     0,     0,     0,  1113,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,     0,     0,  1153,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-       0,     0,  1155,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,     0,     0,
-    1156,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,     0,     0,  1166,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,     0,     0,     0,     0,     0,  1169,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,     0,     0,  1172,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-       0,     0,  1189,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,     0,     0,
-    1213,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,     0,     0,  1215,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,     0,     0,     0,     0,     0,  1217,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,     0,     0,  1227,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-     490,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,   534,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,   535,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,   573,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,     0,     0,     0,   622,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-     623,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,   636,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,   637,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,   638,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,     0,     0,     0,   639,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-     640,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,   641,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,   719,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,   720,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,     0,     0,     0,   721,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-     800,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,   837,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,   838,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,   868,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,     0,     0,     0,   986,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-     987,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,  1003,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,  1014,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,  1121,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,     0,     0,     0,  1122,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-    1129,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,     0,     0,     0,  1135,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,     0,
-       0,     0,  1184,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,     0,     0,     0,  1187,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,   586,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,     0,     0,     0,     0,
-     303,     0,     0,     0,   601,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,   603,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,     0,     0,     0,     0,   303,     0,     0,     0,
-     605,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,   607,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,     0,     0,   609,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,   611,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,     0,     0,     0,     0,   303,     0,
-       0,     0,   613,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,   615,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-       0,     0,     0,     0,   303,     0,     0,     0,   617,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,   619,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,     0,     0,     0,     0,
-     303,     0,     0,     0,   621,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,   625,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,     0,     0,     0,     0,   303,     0,     0,     0,
-     627,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,   629,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,     0,     0,   631,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,   633,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,     0,     0,     0,     0,   303,     0,
-       0,     0,   635,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,   718,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-       0,     0,     0,     0,   303,     0,     0,     0,   736,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,     0,
-       0,   741,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,     0,     0,     0,     0,
-     303,     0,     0,     0,   742,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,     0,     0,   756,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,     0,     0,     0,     0,   303,     0,     0,     0,
-     780,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,     0,     0,   887,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,     0,     0,   889,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,     0,     0,   891,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,     0,     0,     0,     0,   303,     0,
-       0,     0,   893,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,     0,     0,   894,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-       0,     0,     0,     0,   303,     0,     0,     0,  1000,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,   460,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,     0,     0,     0,     0,   303,     0,
-     491,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,   500,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,     0,     0,     0,     0,
-     303,     0,   501,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,   503,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,   505,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,   506,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-       0,     0,     0,     0,   303,     0,   509,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,   510,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,     0,     0,     0,     0,   303,     0,   518,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,   569,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,     0,     0,     0,     0,   303,     0,
-     570,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,   571,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,     0,     0,     0,     0,
-     303,     0,   577,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,   600,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,   602,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,   604,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-       0,     0,     0,     0,   303,     0,   606,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,   608,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,     0,     0,     0,     0,   303,     0,   610,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,   612,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,     0,     0,     0,     0,   303,     0,
-     614,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,   616,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,     0,     0,     0,     0,
-     303,     0,   618,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,   620,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,   624,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,   626,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-       0,     0,     0,     0,   303,     0,   628,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,   630,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,     0,     0,     0,     0,   303,     0,   632,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,   634,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,     0,     0,     0,     0,   303,     0,
-     684,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,   689,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,     0,     0,     0,     0,
-     303,     0,   698,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,   701,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,   702,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,   706,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-       0,     0,     0,     0,   303,     0,   751,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,   752,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,     0,     0,     0,     0,   303,     0,   753,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,   754,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,     0,     0,     0,     0,   303,     0,
-     755,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,   859,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,     0,     0,     0,     0,
-     303,     0,   886,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,     0,     0,     0,
-       0,   303,     0,   888,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,     0,     0,
-       0,     0,   303,     0,   890,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       0,     0,     0,   303,     0,   892,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-       0,     0,     0,     0,   303,     0,   898,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,     0,     0,     0,     0,   303,     0,  1031,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,     0,     0,     0,     0,   303,     0,  1051,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,     0,     0,     0,     0,   303,     0,  1061,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,     0,     0,     0,     0,   303,     0,
-    1183,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,     0,     0,     0,     0,   303,
-       0,  1225
+     117,   118,     0,     0,     0,   119,     0,     0,     0,     0,
+     122,     0,     0,     0,   474,   125,     0,     0,     0,   532,
+      13,    14,   533,    16,    17,   534,    19,   535,    21,     0,
+      22,     0,    24,    25,   628,    27,    28,     0,     0,     0,
+     109,   110,   111,   112,     7,     8,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   117,   118,     0,
+       0,     0,   119,    45,    46,    47,   764,   122,     0,     0,
+       0,     0,   125,     0,     0,   532,    13,    14,   533,    16,
+      17,   534,    19,   535,    21,   794,    22,     0,    24,    25,
+       0,    27,    28,     0,     0,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   829,
+       0,     0,     0,   296,     0,     0,     0,  1140,     0,    45,
+      46,    47,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   830,     0,     0,     0,
+     296,     0,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   874,     0,     0,     0,
+     296,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1183,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,  1040,     0,
+       0,     0,   296,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,  1054,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,  1055,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,     0,     0,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,  1057,     0,
+       0,     0,   296,     0,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,  1143,     0,
+       0,     0,   296,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+    1181,     0,     0,     0,   296,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,   483,     0,   296,     0,     0,     0,     0,     0,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   559,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,     0,     0,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     646,     0,     0,     0,   296,     0,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     778,     0,     0,     0,   296,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   841,     0,     0,     0,   296,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   501,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,     0,     0,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+       0,     0,     0,     0,   296,     0,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+       0,     0,    -4,     1,   296,     0,    -4,     0,     0,     0,
+       0,     0,     0,     0,    -4,    -4,     0,     0,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,     0,     0,     0,     0,   296,    -4,     0,     0,
+       0,     0,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,
+      -4,    -4,    -4,    -4,    -4,     0,    -4,    -4,    -4,    -4,
+      -4,    -4,    -4,     0,     0,     0,    -4,    -4,    -4,    -4,
+      -4,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,    -4,
+       0,     0,    -4,    -4,     6,     0,     0,     0,    -4,    -4,
+      -4,    -4,     7,     8,    -4,     0,    -4,     0,    -4,    -4,
+      -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,     0,     0,
+       0,     0,     0,     0,     0,     9,     0,     0,     0,     0,
+      10,    11,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,     0,    22,    23,    24,    25,    26,    27,
+      28,     0,     0,     0,    29,    30,    31,    32,    33,    34,
+      35,     0,    36,    37,    38,    39,    40,    41,     7,     8,
+      42,    43,     0,     0,     0,     0,    44,    45,    46,    47,
+       0,     0,    48,     0,    49,     0,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,     0,     0,     0,   532,
+      13,    14,   533,    16,    17,   534,    19,   535,    21,     0,
+      22,     0,    24,    25,     0,    27,    28,     0,     0,     0,
+       0,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,    45,    46,    47,   997,     0,   998,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,  1021,     0,  1022,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,  1099,     0,  1100,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+       0,     0,   679,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,     0,     0,
+     683,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,     0,     0,   684,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,     0,     0,   734,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,     0,     0,   777,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+       0,     0,   813,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,     0,     0,
+     995,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,     0,     0,  1017,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,     0,     0,  1046,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,     0,     0,  1049,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+       0,     0,  1050,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,     0,     0,
+    1051,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,     0,     0,  1074,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,     0,     0,  1115,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,     0,     0,  1117,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+       0,     0,  1118,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,     0,     0,
+    1128,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,     0,     0,  1131,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,     0,     0,  1134,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,     0,     0,  1151,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+       0,     0,  1175,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,     0,     0,
+    1177,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,     0,     0,  1179,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,     0,     0,  1189,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,   447,     0,     0,
+       0,     0,   520,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,   477,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,   520,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+     521,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,   556,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,   601,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,   602,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,   615,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+     616,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,   617,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,   618,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,   619,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,   620,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+     698,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,   699,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,   700,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,   774,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,   811,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+     812,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,   840,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,   951,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,   952,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,   968,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+     979,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,  1083,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+       0,     0,  1084,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,     0,     0,     0,  1091,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,     0,     0,     0,  1097,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,     0,     0,     0,
+    1146,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,  1149,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,   451,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,     0,     0,     0,     0,   296,     0,
+       0,     0,   561,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,   565,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+       0,     0,     0,     0,   296,     0,     0,     0,   580,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,   582,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,     0,     0,     0,     0,
+     296,     0,     0,     0,   584,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,   586,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,     0,     0,     0,     0,   296,     0,     0,     0,
+     588,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,   590,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,     0,     0,
+       0,     0,   296,     0,     0,     0,   592,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,   594,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,     0,     0,     0,     0,   296,     0,
+       0,     0,   596,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,   598,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+       0,     0,     0,     0,   296,     0,     0,     0,   600,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,   604,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,     0,     0,     0,     0,
+     296,     0,     0,     0,   606,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,   608,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,     0,     0,     0,     0,   296,     0,     0,     0,
+     610,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,   612,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,     0,     0,
+       0,     0,   296,     0,     0,     0,   614,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,   697,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,     0,     0,     0,     0,   296,     0,
+       0,     0,   715,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,   716,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+       0,     0,     0,     0,   296,     0,     0,     0,   718,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,     0,
+       0,   719,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,     0,     0,     0,     0,
+     296,     0,     0,     0,   730,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,     0,     0,   754,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,     0,     0,     0,     0,   296,     0,     0,     0,
+     856,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,     0,     0,   858,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,     0,     0,
+       0,     0,   296,     0,     0,     0,   860,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,     0,     0,   862,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,     0,     0,     0,     0,   296,     0,
+       0,     0,   863,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,     0,     0,   965,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+       0,     0,     0,     0,   296,     0,   447,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,   478,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,     0,     0,     0,     0,   296,     0,   487,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,   488,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,     0,     0,     0,     0,   296,     0,
+     490,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,   492,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,     0,     0,     0,     0,
+     296,     0,   493,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,   496,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,     0,     0,
+       0,     0,   296,     0,   497,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,   504,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+       0,     0,     0,     0,   296,     0,   552,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,   553,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,     0,     0,     0,     0,   296,     0,   554,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,   560,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,     0,     0,     0,     0,   296,     0,
+     579,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,   581,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,     0,     0,     0,     0,
+     296,     0,   583,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,   585,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,     0,     0,
+       0,     0,   296,     0,   587,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,   589,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+       0,     0,     0,     0,   296,     0,   591,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,   593,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,     0,     0,     0,     0,   296,     0,   595,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,   597,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,     0,     0,     0,     0,   296,     0,
+     599,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,   603,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,     0,     0,     0,     0,
+     296,     0,   605,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,   607,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,     0,     0,
+       0,     0,   296,     0,   609,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,   611,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+       0,     0,     0,     0,   296,     0,   613,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,   664,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,     0,     0,     0,     0,   296,     0,   669,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,   677,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,     0,     0,     0,     0,   296,     0,
+     680,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,   681,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,     0,     0,     0,     0,
+     296,     0,   685,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296,     0,   855,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,     0,     0,
+       0,     0,   296,     0,   857,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,     0,
+       0,     0,     0,   296,     0,   859,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+       0,     0,     0,     0,   296,     0,   861,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,     0,     0,     0,     0,   296,     0,   867,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,     0,     0,     0,     0,   296,     0,   996,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,     0,     0,     0,     0,   296,     0,  1016,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,     0,     0,     0,     0,   296,     0,
+    1025,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,     0,     0,     0,     0,   296,
+       0,  1145,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,     0,     0,     0,     0,
+     296,     0,  1187,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,     0,     0,     0,
+       0,   296
 };
 
 static const yytype_int16 yycheck[] =
 {
-      63,     6,   190,   282,     6,     6,  1073,   181,     6,     3,
-       7,     4,     4,   187,     6,     4,     5,     4,     4,     4,
-     663,     4,     4,     4,     4,    71,    71,    71,    71,     4,
-       5,    72,     6,     6,     6,     4,     4,    49,    79,    80,
-      43,   215,     6,    46,   218,   139,     6,    36,    37,    38,
-      39,   140,   146,    42,     6,     6,   145,   729,   129,   130,
-       6,    36,    37,    38,    39,    31,    32,    42,    34,   129,
-     130,   139,   129,   130,    43,   146,     6,    46,   146,   146,
-      49,    82,   139,   150,    56,   145,   139,   147,   141,   146,
-      83,    84,    85,    86,   139,   139,    56,   131,   132,   133,
-     146,   146,   146,   146,   138,   140,   147,   129,   130,     0,
-     145,   129,   130,    93,    94,   120,   121,   122,   101,  1186,
-     125,   126,   119,   145,   129,    93,    94,   139,   146,   140,
-     135,   129,   130,   138,   145,   140,   141,   142,   143,    13,
-     145,   146,   147,   148,    49,   150,   151,   152,   791,   141,
-     155,   136,   137,   139,   147,   139,   141,   146,   143,   146,
-     129,   130,   126,   148,   146,   146,   171,   172,   356,   357,
-     139,   146,   146,   146,   126,  1242,   181,   146,   129,   130,
-     129,   130,   854,   129,   130,   464,     6,   129,   130,   183,
-       7,   196,   197,   198,   368,   200,   190,   146,   203,   204,
-       6,     7,   168,   145,   170,   147,   269,   270,   271,   272,
-     176,   136,   137,   280,    53,   181,   221,   391,   143,   733,
-     136,   137,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   331,   908,   139,   129,   130,   129,
-     130,   131,   132,   133,    72,   280,   139,   145,   138,   147,
-     282,    79,    80,   145,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   116,
-     117,   118,   119,   139,   139,   139,   141,   312,   139,    72,
-     146,   378,   139,   129,   130,   320,    79,    80,   139,   141,
-     325,     7,   140,    49,   146,   330,   331,   145,   150,   145,
-     335,   147,   337,   338,   339,    49,   341,   342,   343,   344,
-     345,   346,   347,   344,   345,   346,   347,   140,   139,   147,
-     129,   130,   145,    49,   359,   360,   361,   362,   363,   364,
-     365,    51,   356,   357,    62,    63,   145,    72,     7,    72,
-     139,   376,   141,   378,    79,    80,    79,    80,   383,   384,
-       4,     5,    46,    49,   147,    49,   146,    51,   354,   355,
-     395,   396,   397,   398,    72,   400,     6,     7,   364,    72,
-     405,    79,    80,   408,   146,   407,    79,    80,   129,   130,
-     146,    49,    36,    37,    38,    39,     6,    46,    42,    72,
-       4,   139,   489,   141,   145,     8,    79,    80,    72,  1101,
-     116,   117,   118,   119,   146,    79,    80,  1080,   139,    72,
-     141,    72,   147,     4,   147,   512,    79,    80,    79,    80,
-     136,   137,    72,     4,   459,   129,   130,   143,   280,    79,
-      80,   466,   464,   139,   465,     7,   129,   130,   139,   147,
-    1142,   145,   139,  1145,   147,     6,  1148,   116,   117,   118,
-     119,   139,   145,   141,   489,   490,   101,   492,   493,   139,
-     312,   496,   497,   498,   147,   101,   101,   136,   137,   129,
-     130,   101,     4,   147,   783,   784,   146,   512,   330,   331,
-     515,   516,   136,   137,   147,   145,   147,   522,   139,   143,
-     141,  1035,   139,   586,   141,   139,    72,   147,   139,   534,
-     535,   139,  1204,    79,    80,   540,   139,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   139,   557,   558,    72,   138,   378,  1229,     4,   564,
-    1232,    79,    80,  1235,   147,     5,  1238,   533,   573,     6,
-     575,   576,    72,     6,   116,   117,   118,   119,   645,    79,
-      80,     4,     5,   646,   586,     6,  1258,   553,  1260,  1103,
-    1262,  1105,     5,  1107,   136,   137,    36,    37,    38,    39,
-     139,   147,    42,   139,   129,   130,   669,   674,   129,   130,
-     345,   346,   347,    36,    37,    38,    39,   622,   623,    42,
-     145,   153,   129,   130,   145,   139,     8,   159,   139,   696,
-     141,   636,   637,   638,   639,   640,   641,   642,   145,     4,
-     645,   139,   146,   141,   649,     4,     5,   147,   129,   130,
-     139,   656,   184,   185,   139,   722,   723,   724,   725,   191,
-     192,   666,   146,   146,   145,  1179,   840,   489,   139,   674,
-     129,   130,   139,   139,   141,   497,   498,    36,    37,    38,
-      39,    43,   139,    42,    46,   139,   145,    49,     8,    51,
-     512,   696,   139,   515,   141,   139,   139,   141,  1212,   141,
-    1214,   139,  1216,   141,   136,   137,   672,   146,  1222,   141,
-     139,   143,   141,   139,   141,   141,   148,   722,   723,   724,
-     725,   146,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   139,  1246,   141,  1248,   138,  1250,   146,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   146,   719,   720,   721,   138,   762,   763,   139,
-     139,   141,   141,   141,   952,   147,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   145,   780,   147,
-       6,   138,   784,   143,   136,   137,   139,   792,   141,   141,
-     139,   143,   141,    96,   139,   800,   148,   329,   146,   804,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   145,   139,   147,   822,   138,   141,
-     140,   143,     6,   645,    65,    66,    67,    68,   145,    70,
-     147,   836,   837,   838,   139,    76,    77,   145,   145,   147,
-     147,    49,   139,    51,   849,   850,   139,     6,   853,   912,
-       6,   145,   674,   147,   145,   145,   147,   147,   145,   145,
-     147,   147,     4,   868,   869,   870,   145,     6,   147,   874,
-     875,   145,   141,   147,   696,   880,   878,   145,     5,   147,
-     885,   145,     4,   147,     6,   146,   145,   853,   147,   145,
-     145,   147,   147,   145,   138,   147,   901,   143,     7,   900,
-     722,   723,   724,   725,   141,   145,   145,   147,   147,   145,
-    1098,   147,   917,   145,     7,   147,   146,     7,   140,   924,
-     925,     7,   147,     6,   929,   139,   147,     7,     7,   461,
-     462,    93,   145,   938,   939,   146,   140,  1111,   140,   145,
-       6,     4,   142,   948,    96,     7,     7,   948,     7,     7,
-      96,     7,     7,   919,     7,   921,    96,     7,   952,     6,
-     140,     7,   140,   140,   140,   970,   147,   101,     6,   143,
-       7,     7,   147,     7,   143,   139,   139,     6,   146,     4,
-       6,   986,   987,     6,    12,    13,     6,   142,   954,     6,
-     956,     7,   958,   141,     6,   126,     7,    49,  1003,     7,
-      51,     7,   146,     7,     7,     7,  1180,     7,     7,  1014,
-       7,     7,     7,     7,     7,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,     4,    54,  1032,    56,    57,
-     146,    59,    60,   565,   566,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,     6,  1053,   146,
-      78,   138,  1057,     6,  1059,   139,     6,    49,     6,     6,
-      88,    89,    90,     6,  1069,     4,     7,     7,     6,  1074,
-       7,     7,     7,     4,   102,   103,   104,     6,   106,   139,
-       7,   109,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   140,  1102,   146,  1104,
-     138,  1106,   143,     6,  1098,   140,   146,     6,     6,     6,
-    1115,     6,     6,   146,   146,   146,  1121,  1122,     5,   147,
-      92,     7,   146,     6,  1129,   146,     6,     5,     5,   143,
-       6,     4,  1137,   142,     6,     6,  1102,     6,  1104,     5,
-    1106,     6,     6,     6,     6,     6,     6,     6,     6,     6,
-     682,   683,  1157,   685,     6,   687,   688,     6,     6,   691,
-     692,  1224,  1167,     6,     6,  1170,     6,     6,  1173,     6,
-     145,     6,  1177,     6,     4,   146,     7,     6,     6,  1184,
-       6,   143,  1187,     6,     5,   146,     6,     6,   146,  1252,
-     147,  1254,   146,     6,   146,     7,     6,   146,    91,     6,
-       6,     6,    94,    61,     6,     6,   140,     6,     6,  1272,
-       6,   743,   744,   745,   146,     5,    61,   147,     6,     6,
-     146,     3,     4,   145,   147,     6,     6,     9,    10,    11,
-       6,     6,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,     6,     5,   146,   146,   146,     6,     6,
-     145,    43,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   808,     6,   146,     6,
-     138,     6,   814,    65,    66,    67,    68,    69,    70,     6,
-       6,   823,   824,   825,    76,    77,   828,   829,   830,   831,
-     832,   833,   834,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   849,     5,   146,
-       6,   138,   146,   140,   146,     6,     6,     6,   145,   147,
-     112,   113,   114,   115,     6,   146,     6,   146,     6,     6,
-     872,     6,     6,   799,  1157,     3,     3,   129,   130,   904,
-      -1,    -1,   134,    -1,    -1,    -1,    -1,   139,    -1,    -1,
-      -1,    -1,   144,     3,     4,   147,    -1,   899,    -1,     9,
-      10,    11,    -1,    -1,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    43,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,    -1,    65,    66,    67,    68,    69,
-      70,    -1,    -1,    -1,    -1,    -1,    76,    77,     6,   971,
-      -1,    -1,   974,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     982,    -1,    -1,    -1,    -1,    -1,   988,    -1,    -1,    -1,
-      -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       6,    -1,   112,   113,   114,   115,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,
-     130,    -1,    -1,    -1,   134,    -1,    -1,    -1,    -1,   139,
-      -1,    -1,    -1,    -1,   144,    -1,   146,    -1,    -1,     3,
-       4,    -1,    -1,    -1,    -1,     9,    10,    11,  1050,    -1,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    43,
-      -1,    -1,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,
-     138,    65,    66,    67,    68,    69,    70,     6,  1110,    -1,
-      -1,    -1,    76,    77,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,    -1,    -1,    -1,   101,    -1,     6,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1149,   112,   113,
-     114,   115,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     6,
-      -1,    -1,    -1,    -1,    -1,   129,   130,    -1,    -1,    -1,
-     134,    -1,    -1,    -1,    -1,   139,    -1,    -1,     3,     4,
-     144,     6,   146,    -1,     9,    10,    11,    -1,    -1,    14,
+      59,   188,     6,   178,   275,     6,  1034,     7,   150,     3,
+     185,     6,     4,     4,   156,     4,     4,     5,     4,     4,
+       4,    49,     4,     4,     5,    71,     6,     4,   643,    71,
+      71,     6,   207,     6,     6,   210,     6,     4,    72,   181,
+     182,     4,     0,     6,    78,    79,   130,   131,    36,    37,
+      38,    39,     6,   137,    42,    36,    37,    38,    39,   133,
+       6,    42,     7,    71,     6,     6,   140,     6,     7,     6,
+     133,   712,   123,   124,     4,     5,    43,   140,   133,    46,
+     135,    56,    49,    78,    56,   123,   124,   133,    13,   140,
+      82,    83,    84,    85,   140,   133,    62,    63,   140,   140,
+     123,   124,   140,    92,    93,   133,    36,    37,    38,    39,
+      92,    93,    42,   117,   118,   119,    49,   140,   122,   123,
+    1148,    43,   126,   100,    46,   133,   133,    49,   132,    51,
+       6,   135,   140,   137,   138,   139,   140,   137,   142,   143,
+     144,   145,   133,   147,   148,   149,   130,   131,   152,   141,
+     765,   135,   140,   137,   140,   140,   123,   124,   142,   140,
+     140,   348,   349,   140,   168,   169,   133,   140,   113,   123,
+     124,   133,   135,   140,   178,    53,  1204,   123,   124,   120,
+     451,   123,   124,   120,   133,   360,   180,    49,   192,   193,
+     194,     7,   196,   708,   188,   199,   200,   133,   202,   135,
+     130,   131,   261,   262,   263,   264,   381,   137,   143,   213,
+     133,   139,   147,   141,   133,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,    31,    32,    72,
+      34,   265,   877,   134,   133,    78,    79,   134,   139,   273,
+      72,   140,   139,     7,   275,   133,    78,    79,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   133,   110,   111,   112,   113,   123,   124,
+       8,   305,    49,   134,    72,    49,   448,   449,   139,   313,
+      78,    79,   134,   828,   318,   140,    51,   139,   322,   323,
+     123,   124,   133,   327,   135,   329,   330,   331,   141,   333,
+     334,   335,   336,   337,   338,   339,   139,   133,   273,   141,
+       7,   336,   337,   338,   339,   123,   124,   351,   352,   353,
+     354,   355,   356,   357,   348,   349,   123,   124,   133,  1000,
+     135,   139,    49,   141,   368,   369,   139,   371,   141,   373,
+     374,   140,   139,   141,   141,   138,   110,   111,   112,   113,
+     143,   134,   123,   124,   147,     7,   139,   391,   323,   140,
+     394,   165,   393,   167,   130,   131,   130,   131,   139,   173,
+     141,   140,    49,   137,   178,    46,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+       6,   123,   124,  1064,   132,  1066,  1041,  1068,   125,   126,
+     127,   140,    72,   141,    72,   132,   371,   139,    78,    79,
+      78,    79,   446,   110,   111,   112,   113,     6,     7,   453,
+     451,   123,   124,   123,   124,    72,   133,   452,   135,    72,
+       4,    78,    79,   130,   131,    78,    79,   139,   133,   139,
+     135,    72,   476,   477,     4,   479,   480,    78,    79,   483,
+     484,   485,   337,   338,   339,     4,   757,   758,   110,   111,
+     112,   113,     6,   139,   498,   141,   133,   501,   502,   133,
+    1141,   141,   133,   141,   508,    72,   565,    72,   130,   131,
+     273,    78,    79,    78,    79,   133,   520,   521,   123,   124,
+     662,   663,   526,   665,   141,   667,   668,   135,   141,   671,
+     672,   140,     4,  1174,   139,  1176,     4,  1178,   542,   543,
+     141,   476,   305,  1184,   133,   123,   124,  1062,    46,   133,
+      72,    49,   556,    51,   558,   559,    78,    79,   133,   322,
+     323,   139,     7,   498,   565,   133,   625,  1208,   139,  1210,
+     141,  1212,   346,   347,   141,   133,   141,   135,   720,   721,
+     722,   133,   356,   135,   123,   124,   123,   124,   133,  1104,
+     649,   133,  1107,   135,   135,  1110,   137,   601,   602,    72,
+     139,     4,   139,    72,     5,    78,    79,     6,   371,    78,
+      79,   615,   616,   617,   618,   619,   620,   621,     6,   141,
+     624,    72,   133,     6,   135,   629,     5,    78,    79,   123,
+     124,   133,   636,   123,   124,    36,    37,    38,    39,   814,
+     782,    42,   646,   123,   124,   139,   788,   133,   133,   139,
+     654,  1166,   133,   140,   135,   797,   798,   799,   133,   139,
+     802,   803,   804,   805,   806,   807,   808,   133,   141,     8,
+     140,   675,   141,   133,   133,   135,  1191,   123,   124,  1194,
+     133,   823,  1197,   140,   133,  1200,   135,     4,   135,   624,
+     141,   133,   133,   139,   135,   133,   133,   701,   702,   703,
+     704,   133,   133,   135,   135,  1220,   133,  1222,   135,  1224,
+     140,   130,   131,   476,     4,     5,   135,   140,   137,   654,
+     140,   484,   485,   142,   130,   131,   868,   135,   133,   135,
+     135,   137,   736,   737,   921,   498,   142,   133,   501,   135,
+     675,   133,   133,   135,   135,   519,    36,    37,    38,    39,
+     140,   135,    42,   754,   139,   135,   141,   758,   139,     6,
+     141,    49,   766,    51,   538,   137,   701,   702,   703,   704,
+     774,   139,    95,   141,   778,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   139,
+       6,   141,   796,   132,     4,     5,   139,   139,   141,   141,
+     942,   139,   141,   141,   140,   947,   810,   811,   812,     6,
+     139,   953,   141,    65,    66,    67,    68,     6,    70,   823,
+     824,   135,   881,   827,    76,    77,    36,    37,    38,    39,
+       4,   139,    42,   141,   140,     6,   840,   841,   842,   123,
+     124,   125,   126,   127,     5,   849,   847,   139,   132,   141,
+     854,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     139,   624,   141,     4,   132,     6,   870,   139,     6,   141,
+     132,   137,  1059,  1015,   869,   139,     7,   141,   652,   139,
+       7,   141,   886,   139,   139,   141,   141,   135,     7,   893,
+     894,   654,   134,   139,   898,   141,   139,  1072,   141,   139,
+     141,   141,   140,   907,   908,     7,     6,   141,    92,   140,
+     139,   134,   675,   917,   134,   139,     6,     4,   136,     7,
+      95,     7,   917,    61,   698,   699,   700,   921,     7,  1071,
+       7,     7,    95,     7,     7,   939,    95,     7,   701,   702,
+     703,   704,     7,   947,   134,   137,   134,   951,   952,   134,
+     141,   134,   947,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   968,    12,    13,  1142,   132,  1111,
+       7,   141,     7,     7,   140,   979,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     137,   133,     6,   997,   132,     4,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,     6,    54,   133,    56,
+      57,     6,    59,    60,  1018,   136,     6,  1021,     6,  1023,
+       7,   135,     6,   120,    49,     7,  1030,     7,    51,     7,
+     140,  1035,     7,     7,     7,     7,     7,     7,     7,     7,
+      87,    88,    89,     7,     7,     4,   140,   140,     6,   133,
+       6,     6,    49,   827,     6,     6,     4,     4,     4,  1063,
+     140,  1065,     6,  1067,     4,  1059,   133,     6,   134,   137,
+     134,  1075,     7,     6,     6,     6,     6,   140,   140,  1083,
+    1084,   140,   140,     6,     6,     5,   140,  1091,   140,     6,
+       6,     6,    91,     7,   141,  1099,   137,     6,     4,     6,
+       8,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,     6,   888,  1119,   890,   132,   136,     6,
+       5,   140,     6,     6,     6,  1129,     6,  1186,  1132,     6,
+       6,  1135,     6,     6,     8,  1139,     6,     6,     6,     6,
+       6,     6,  1146,     6,     6,  1149,     6,   139,     4,   923,
+       7,   925,     6,   927,     6,  1214,     6,  1216,   137,     6,
+       5,     7,     6,     6,   140,     3,     4,     6,   134,    90,
+       6,     9,    10,    11,   141,  1234,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,   140,   140,   140,
+       6,     6,   140,    93,     6,    43,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+       6,     6,     6,     6,   132,     6,   134,    65,    66,    67,
+      68,    69,    70,     5,    61,   140,     6,   141,    76,    77,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   140,     6,     6,     6,   132,     6,
+     139,     6,     6,   141,     5,   140,     6,     6,   106,   107,
+     108,   109,     6,     6,     6,     6,   140,     5,   773,   140,
+       6,   140,   140,     6,   139,   123,   124,   140,     6,  1063,
+     128,  1065,   140,  1067,     6,   133,     6,     6,   140,   140,
+     138,   141,     6,   141,     3,     4,     5,  1119,     6,     6,
+       9,    10,    11,     6,     3,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,     3,    36,    37,    38,
+      39,   873,    -1,    42,    43,    -1,    -1,    -1,    -1,    -1,
+      -1,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
+      69,    70,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,
+      -1,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    -1,    54,    -1,    56,    57,    -1,    59,    60,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   106,   107,   108,
+     109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   123,   124,    87,    88,    89,   128,
+      -1,    -1,    -1,    -1,   133,    -1,     3,     4,    -1,   138,
+      -1,   140,     9,    10,    11,    -1,    -1,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    43,    -1,    -1,    -1,
+     141,    -1,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    66,
+      67,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    76,
+      77,    -1,    -1,    -1,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    -1,    54,    -1,    56,    57,    -1,
+      59,    60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   106,
+     107,   108,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   123,   124,    87,    88,
+      89,   128,    -1,    -1,    -1,    -1,   133,    -1,     3,     4,
+      -1,   138,    -1,   140,     9,    10,    11,    -1,    -1,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    43,    -1,
-      -1,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      65,    66,    67,    68,    69,    70,     8,    -1,    -1,    -1,
-      -1,    76,    77,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   112,   113,   114,
-     115,   138,     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   129,   130,    -1,    -1,    -1,   134,
-      -1,    -1,    -1,    -1,   139,    -1,     3,     4,    -1,   144,
-      -1,   146,     9,    10,    11,    -1,    -1,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    43,    -1,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,    -1,    -1,    -1,   138,    -1,    65,    66,
-      67,    68,    69,    70,     8,    -1,    -1,    -1,    -1,    76,
-      77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-       6,    -1,    -1,    -1,   138,   112,   113,   114,   115,    -1,
+      -1,    -1,   141,    -1,    -1,    12,    13,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   129,   130,    -1,    -1,    -1,   134,    -1,    -1,
-      -1,    -1,   139,    -1,     3,     4,    -1,   144,    -1,   146,
-       9,    10,    11,    -1,    -1,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    43,    -1,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-      -1,    -1,    -1,    -1,   138,    -1,    65,    66,    67,    68,
-      69,    70,     8,    -1,    -1,    -1,    -1,    76,    77,    -1,
-      -1,    -1,    -1,    -1,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   112,   113,   114,   115,    -1,    -1,    -1,
+      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
+      -1,    76,    77,    -1,    -1,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    -1,    54,    -1,    56,
+      57,    -1,    59,    60,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   106,   107,   108,   109,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   123,   124,
+      87,    88,    89,   128,    -1,    -1,    -1,    -1,   133,    -1,
+       3,     4,    -1,   138,    -1,   140,     9,    10,    11,    -1,
+      -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      43,    -1,    -1,    -1,   141,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    65,    66,    67,    68,    69,    70,    -1,     3,
+       4,    -1,    -1,    76,    77,     9,    10,    11,    -1,    -1,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    -1,    -1,   106,   107,   108,   109,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     129,   130,    -1,    -1,    -1,   134,    -1,    -1,    -1,    -1,
-     139,    -1,     3,     4,    -1,   144,    -1,   146,     9,    10,
+     123,   124,    -1,    -1,    -1,   128,    -1,    -1,    -1,    -1,
+     133,    -1,     3,     4,    -1,   138,    -1,   140,     9,    10,
       11,    -1,    -1,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    43,    -1,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,    65,    66,    67,    68,    69,    70,
-      -1,     3,     4,    -1,    -1,    76,    77,     9,    10,    11,
-      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   112,   113,   114,   115,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,   130,
-      -1,    -1,    -1,   134,    -1,    -1,    -1,    -1,   139,    -1,
-       3,     4,    -1,   144,    -1,   146,     9,    10,    11,    -1,
+      -1,    -1,   106,   107,   108,   109,    -1,    -1,    -1,    12,
+      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   123,
+     124,    -1,    -1,    -1,   128,    -1,    -1,    -1,    -1,   133,
+      -1,    -1,   136,    -1,   138,    -1,   140,    -1,    -1,    -1,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      -1,    54,    -1,    56,    57,    -1,    59,    60,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   106,   107,   108,   109,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   123,   124,    87,    88,    89,   128,    -1,    -1,
+      -1,    -1,   133,    -1,    -1,   136,    -1,   138,    -1,   140,
+       3,     4,    -1,    -1,    -1,    -1,     9,    10,    11,    -1,
       -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     112,   113,   114,   115,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,   130,    -1,
-      -1,    -1,   134,    -1,    -1,    -1,    -1,   139,    -1,    -1,
-     142,    -1,   144,    -1,   146,     3,     4,    -1,    -1,    -1,
+      33,    34,    -1,    -1,    -1,     3,     4,     5,   141,     7,
       -1,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,     6,    -1,   112,
-     113,   114,   115,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   129,   130,    -1,    -1,
-      -1,   134,    -1,    -1,    -1,    -1,   139,    -1,    -1,   142,
-      -1,   144,    -1,   146,     3,     4,     5,    -1,     7,    -1,
-       9,    10,    11,    -1,    -1,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    -1,    36,    37,    38,
-      39,    -1,    -1,    42,   112,   113,   114,   115,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   129,   130,    -1,    -1,    -1,   134,    -1,    -1,    -1,
-      -1,   139,    -1,     6,    -1,    -1,   144,    -1,   146,    -1,
-      -1,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
-     119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     129,   130,    -1,    -1,    -1,   134,    -1,   136,   137,    -1,
-     139,    -1,   141,    -1,   143,   144,     3,     4,    -1,    -1,
-      -1,    -1,     9,    10,    11,    -1,    -1,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    43,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    65,    66,
-      67,    68,    69,    70,    -1,     3,     4,     5,    -1,    76,
-      77,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    -1,    36,    37,
-      38,    39,    -1,    -1,    42,   112,   113,   114,   115,    -1,
+      38,    39,    -1,    -1,    42,    -1,    -1,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   106,   107,   108,   109,     8,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   129,   130,    -1,    -1,    -1,   134,     3,     4,
-      -1,    -1,   139,    -1,     9,    10,    11,   144,    -1,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   112,   113,   114,   115,   138,    -1,
-      12,    13,     6,    -1,    -1,   145,    -1,   147,    -1,    -1,
-      -1,   129,   130,    -1,    -1,    -1,   134,    -1,    -1,    -1,
-      -1,   139,    -1,    -1,    -1,    -1,   144,    -1,    -1,    -1,
-      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    -1,    54,    -1,    56,    57,    -1,    59,    60,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
-     115,    -1,    -1,    -1,    -1,    -1,    78,    12,    13,    -1,
-      -1,    -1,    -1,    -1,   129,   130,    88,    89,    90,   134,
-      -1,    -1,    -1,    -1,   139,    -1,    -1,    -1,    -1,   144,
-     102,   103,   104,    -1,   106,    -1,    -1,   109,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    -1,    54,
-      -1,    56,    57,    -1,    59,    60,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-      -1,    -1,    -1,    78,   138,   147,    -1,    12,    13,     6,
-      -1,    -1,    -1,    88,    89,    90,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,
-      -1,   106,    -1,    -1,   109,    -1,    -1,    -1,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    -1,    54,
-      -1,    56,    57,    -1,    59,    60,    -1,    -1,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   147,    78,    12,    13,   138,    -1,    -1,    -1,
-     142,     6,    -1,    88,    89,    90,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,
-      -1,   106,    -1,    -1,   109,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    -1,    54,    -1,    56,    57,
-      -1,    59,    60,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      78,   138,   147,    -1,    12,    13,     6,    -1,    -1,    -1,
-      88,    89,    90,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   102,   103,   104,    -1,   106,    -1,
-      -1,   109,    -1,    -1,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    -1,    54,    -1,    56,    57,
-      -1,    59,    60,    -1,    -1,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   147,
-      78,    12,    13,   138,    -1,     6,    -1,    -1,    -1,    -1,
-      88,    89,    90,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   102,   103,   104,     8,   106,    -1,
-      -1,   109,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    -1,    54,    -1,    56,    57,     8,    59,    60,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    -1,    -1,     8,    78,   138,   147,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
+     123,   124,    -1,    -1,    -1,   128,    -1,    -1,    -1,    -1,
+     133,    -1,   100,    -1,    -1,   138,    -1,   140,   106,   107,
+     108,   109,   110,   111,   112,   113,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   123,   124,    -1,    -1,    -1,
+     128,    -1,   130,   131,    -1,   133,    -1,   135,    -1,   137,
+     138,     3,     4,    -1,    -1,    -1,    -1,     9,    10,    11,
+      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    43,    -1,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    65,    66,    67,    68,    69,    70,    -1,
+       3,     4,    -1,    -1,    76,    77,     9,    10,    11,    -1,
+      -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    -1,    -1,   106,   107,   108,   109,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   123,   124,    -1,    -1,    -1,   128,     3,     4,     5,
+      -1,   133,    -1,     9,    10,    11,   138,    -1,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
+      36,    37,    38,    39,    -1,    -1,    42,    -1,    -1,    -1,
+      -1,    -1,    -1,   106,   107,   108,   109,     6,    12,    13,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   102,   103,   104,    -1,   106,    -1,    -1,   109,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,   147,   138,    -1,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,     0,     1,    -1,   138,     4,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    12,    13,    -1,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,    -1,    -1,    -1,   138,    -1,    35,    -1,
-      -1,    -1,    -1,    40,    41,   147,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    -1,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    -1,    64,    65,    66,
-      67,    68,    69,    70,    -1,    72,    73,    74,    75,    76,
-      77,    78,    -1,    -1,    81,    82,     4,    -1,    -1,    -1,
-      87,    88,    89,    90,    12,    13,    93,    -1,    95,    -1,
-      97,    98,    99,   100,    -1,   102,   103,   104,    -1,   106,
-     107,   108,   109,   110,   111,    -1,    -1,    35,    -1,    -1,
+     123,   124,    -1,    -1,    -1,   128,    -1,    -1,    -1,    -1,
+     133,    -1,    -1,    -1,     6,   138,    -1,    -1,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    -1,
+      54,    -1,    56,    57,     6,    59,    60,    -1,    -1,    -1,
+     106,   107,   108,   109,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   123,   124,    -1,
+      -1,    -1,   128,    87,    88,    89,     6,   133,    -1,    -1,
+      -1,    -1,   138,    -1,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,     6,    54,    -1,    56,    57,
+      -1,    59,    60,    -1,    -1,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,     6,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,   141,    -1,    87,
+      88,    89,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,     6,    -1,    -1,    -1,
+     132,    -1,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,     6,    -1,    -1,    -1,
+     132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   141,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,     6,    -1,
+      -1,    -1,   132,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,     6,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,     6,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,     6,    -1,
+      -1,    -1,   132,    -1,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,     6,    -1,
+      -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+       6,    -1,    -1,    -1,   132,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,     8,    -1,   132,    -1,    -1,    -1,    -1,    -1,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,     8,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+       8,    -1,    -1,    -1,   132,    -1,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+       8,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,     8,    -1,    -1,    -1,   132,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,   132,    -1,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,     0,     1,   132,    -1,     4,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    12,    13,    -1,    -1,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,   132,    35,    -1,    -1,
       -1,    -1,    40,    41,    -1,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    -1,    54,    55,    56,    57,
       58,    59,    60,    -1,    -1,    -1,    64,    65,    66,    67,
       68,    69,    70,    -1,    72,    73,    74,    75,    76,    77,
-      78,    -1,    -1,    81,    82,    12,    13,    -1,    -1,    87,
-      88,    89,    90,    -1,    -1,    93,    -1,    95,    -1,    97,
-      98,    99,   100,    -1,   102,   103,   104,    -1,   106,   107,
-     108,   109,   110,   111,    -1,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    -1,    54,    -1,    56,
-      57,    -1,    59,    60,    -1,    -1,    -1,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    78,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    88,    89,    90,   147,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   102,   103,   104,    -1,   106,
-      -1,    -1,   109,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,   145,    -1,
-     147,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,   145,    -1,   147,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   147,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   147,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   147,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     147,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   147,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   147,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   147,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   147,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     147,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   147,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   147,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   147,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   147,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     147,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   147,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   147,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   147,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   147,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     147,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   147,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   147,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   147,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-     145,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,   145,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,   145,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,   145,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,    -1,    -1,    -1,   145,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-     145,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,   145,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,   145,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,   145,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,    -1,    -1,    -1,   145,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-     145,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,   145,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,   145,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,   145,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,    -1,    -1,    -1,   145,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-     145,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,   145,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,   145,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,   145,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,    -1,    -1,    -1,   145,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-     145,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,   145,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,   145,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,   145,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,    -1,    -1,    -1,   145,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
-     145,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,   145,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
-      -1,    -1,   145,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,   145,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,   142,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,
-     138,    -1,    -1,    -1,   142,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,   142,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,
-     142,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,   142,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,    -1,    -1,   142,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,   142,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,
-      -1,    -1,   142,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,   142,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-      -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,   142,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,   142,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,
-     138,    -1,    -1,    -1,   142,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,   142,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,
-     142,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,   142,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,    -1,    -1,   142,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,   142,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,
-      -1,    -1,   142,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,   142,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-      -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,   142,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-      -1,   142,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,
-     138,    -1,    -1,    -1,   142,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,    -1,    -1,   142,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,
-     142,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,   142,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,    -1,    -1,   142,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,   142,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,
-      -1,    -1,   142,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,    -1,   142,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-      -1,    -1,    -1,    -1,   138,    -1,    -1,    -1,   142,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,
-     140,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,   140,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,
-     138,    -1,   140,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,   140,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,   140,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,   140,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-      -1,    -1,    -1,    -1,   138,    -1,   140,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,   140,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,
-     140,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,   140,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,
-     138,    -1,   140,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,   140,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,   140,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,   140,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-      -1,    -1,    -1,    -1,   138,    -1,   140,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,   140,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,
-     140,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,   140,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,
-     138,    -1,   140,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,   140,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,   140,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,   140,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-      -1,    -1,    -1,    -1,   138,    -1,   140,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,   140,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,
-     140,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,   140,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,
-     138,    -1,   140,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,   140,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,   140,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,   140,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-      -1,    -1,    -1,    -1,   138,    -1,   140,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,   140,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,
-     140,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,   140,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,
-     138,    -1,   140,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,    -1,    -1,    -1,
-      -1,   138,    -1,   140,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,    -1,   140,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,    -1,   140,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-      -1,    -1,    -1,    -1,   138,    -1,   140,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,    -1,   140,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,   140,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,    -1,
-     140,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,    -1,    -1,    -1,    -1,   138,
-      -1,   140
+      -1,    -1,    80,    81,     4,    -1,    -1,    -1,    86,    87,
+      88,    89,    12,    13,    92,    -1,    94,    -1,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    35,    -1,    -1,    -1,    -1,
+      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    -1,    54,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    64,    65,    66,    67,    68,    69,
+      70,    -1,    72,    73,    74,    75,    76,    77,    12,    13,
+      80,    81,    -1,    -1,    -1,    -1,    86,    87,    88,    89,
+      -1,    -1,    92,    -1,    94,    -1,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,    -1,    -1,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    -1,
+      54,    -1,    56,    57,    -1,    59,    60,    -1,    -1,    -1,
+      -1,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    87,    88,    89,   139,    -1,   141,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,   139,    -1,   141,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,   139,    -1,   141,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   141,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     141,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   141,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   141,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   141,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     141,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   141,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   141,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   141,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     141,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   141,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   141,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   141,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     141,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   141,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   141,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   141,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     141,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   141,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,   134,    -1,    -1,
+      -1,    -1,   139,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,   139,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,   139,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+     139,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,   139,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,   139,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,   139,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,   139,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+     139,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,   139,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,   139,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,   139,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,   139,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+     139,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,   139,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,   139,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,   139,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,   139,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+     139,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,   139,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,   139,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,   139,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,   139,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+     139,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,   139,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+      -1,    -1,   139,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,   139,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    -1,    -1,   139,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,
+     139,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    -1,    -1,   139,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,   136,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,
+      -1,    -1,   136,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,   136,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,   136,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,   136,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+     132,    -1,    -1,    -1,   136,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,   136,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,
+     136,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,   136,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,    -1,    -1,
+      -1,    -1,   132,    -1,    -1,    -1,   136,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,   136,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,
+      -1,    -1,   136,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,   136,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,   136,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,   136,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+     132,    -1,    -1,    -1,   136,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,   136,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,
+     136,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,   136,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,    -1,    -1,
+      -1,    -1,   132,    -1,    -1,    -1,   136,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,   136,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,
+      -1,    -1,   136,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,   136,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,   136,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,   136,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+     132,    -1,    -1,    -1,   136,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,    -1,    -1,   136,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,
+     136,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,   136,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,    -1,    -1,
+      -1,    -1,   132,    -1,    -1,    -1,   136,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,   136,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,
+      -1,    -1,   136,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,    -1,    -1,   136,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,   132,    -1,   134,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,   134,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,   132,    -1,   134,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,   134,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,
+     134,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,   134,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+     132,    -1,   134,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,   134,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,    -1,    -1,
+      -1,    -1,   132,    -1,   134,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,   134,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,   132,    -1,   134,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,   134,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,   132,    -1,   134,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,   134,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,
+     134,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,   134,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+     132,    -1,   134,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,   134,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,    -1,    -1,
+      -1,    -1,   132,    -1,   134,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,   134,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,   132,    -1,   134,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,   134,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,   132,    -1,   134,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,   134,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,
+     134,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,   134,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+     132,    -1,   134,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,   134,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,    -1,    -1,
+      -1,    -1,   132,    -1,   134,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,   134,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,   132,    -1,   134,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,   134,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,   132,    -1,   134,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,   134,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,
+     134,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,   134,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+     132,    -1,   134,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132,    -1,   134,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,    -1,    -1,
+      -1,    -1,   132,    -1,   134,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,   132,    -1,   134,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,   132,    -1,   134,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,   134,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,   132,    -1,   134,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,   134,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,    -1,
+     134,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,   134,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+     132,    -1,   134,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,   132
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     1,   150,   151,     6,     0,     4,    12,    13,    35,
+       0,     1,   144,   145,     6,     0,     4,    12,    13,    35,
       40,    41,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    54,    55,    56,    57,    58,    59,    60,    64,
       65,    66,    67,    68,    69,    70,    72,    73,    74,    75,
-      76,    77,    78,    81,    82,    87,    88,    89,    90,    93,
-      95,    97,    98,    99,   100,   102,   103,   104,   106,   107,
-     108,   109,   110,   111,   152,   154,   155,   173,   175,   176,
-     179,   180,   181,   182,   183,   184,   201,   202,   203,     3,
-       4,     5,     7,     9,    10,    11,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    36,    37,    38,
-      39,    42,   112,   113,   114,   115,   116,   117,   118,   119,
-     129,   130,   134,   136,   137,   139,   141,   143,   144,   171,
-     172,   204,   205,   216,    13,    49,   139,     6,   146,     6,
-     139,   146,   139,   139,    71,   139,   146,   139,   139,    71,
-     146,   139,   139,    53,    49,   139,    49,    49,    49,    46,
-      49,    51,    51,    43,    46,    49,    51,   139,   146,   129,
-     130,   139,   146,   206,   207,   206,   146,     4,    43,    46,
-      49,   146,   206,   146,    49,    49,     4,   146,     6,    46,
-     146,    43,    46,     4,     4,     4,   139,   139,   139,     4,
-     146,   212,     4,   139,   139,     6,   101,   101,   101,   101,
-       4,     4,   101,     4,     5,   146,   215,   216,   146,   215,
-       4,   141,   143,   148,   172,   146,   216,   139,   141,   139,
-     141,   139,   141,   139,   141,   139,   141,   139,   141,   139,
-     141,   139,   141,   139,   141,   139,   141,   139,   141,   139,
-     141,   139,   141,   139,   141,   139,   141,   139,   141,   139,
-     141,   139,   141,   139,   141,   139,   141,   139,   141,   139,
-     139,   139,   139,   139,     4,   204,   204,   204,   204,   142,
-     146,   204,     4,    93,    94,     4,   204,     6,     6,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   138,     6,     6,   204,     5,   204,   204,
-       4,    43,   130,   176,   184,   204,   210,   211,   204,   204,
-     139,   204,   211,   204,   204,   139,   211,   204,   204,   101,
-     130,   146,   204,   209,   210,   139,   204,   146,   139,   139,
-     209,   146,   146,   139,   139,   139,   139,   139,     4,   206,
-     206,   206,   204,   204,   129,   130,   146,   146,   206,   141,
-     146,   146,   146,   129,   130,   139,   178,   206,   146,   176,
-     177,   178,   209,   209,     4,     6,   141,   178,   146,   177,
-     101,   209,   209,   141,   141,     6,   204,   204,   204,   143,
-     204,   146,    96,   204,   204,   139,   139,   139,   139,     6,
-     139,   178,     6,   178,     6,   141,   204,     4,   146,   156,
-       6,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,     4,   215,   215,   215,   215,     5,   141,
-     140,     7,   119,   211,   142,     7,   171,   172,   143,     7,
-     141,     6,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,     6,   140,   145,
-     145,   140,   141,   146,   204,   210,     8,   131,   145,   147,
-     140,   140,   204,   140,   147,   140,   140,   204,   147,   140,
-     140,   209,   146,   147,   211,   131,     7,   204,   140,   204,
-     204,   204,     7,   204,   204,   204,   174,   204,   216,   174,
-     174,   174,   140,   145,   145,   145,   206,   206,   177,   177,
-     145,   204,   204,   204,   204,   204,    43,    46,    49,    51,
-     109,   175,   188,   145,   178,   147,     6,     7,     7,     6,
-     204,   147,   211,   147,   139,     7,     7,   204,   204,   140,
-     140,   140,    93,   145,   178,   146,     8,   140,   204,   204,
-     204,   204,   204,   147,   147,   204,   142,   172,   204,     4,
-      83,    84,    85,    86,   147,   159,   163,   166,   168,   169,
-     140,   142,   140,   142,   140,   142,   140,   142,   140,   142,
-     140,   142,   140,   142,   140,   142,   140,   142,   140,   142,
-     140,   142,   145,   145,   140,   142,   140,   142,   140,   142,
-     140,   142,   140,   142,   140,   142,   145,   145,   145,   145,
-     145,   145,   141,   143,   140,   145,   145,   140,   140,   145,
-     204,   209,   209,   147,     7,   143,   171,   172,   216,   204,
-       6,     4,     4,   146,   213,   142,     8,     6,   126,   153,
-     211,   204,     7,   142,   146,   204,   204,   204,   210,   204,
-     210,    96,     7,     7,   140,     7,    96,     7,     7,   140,
-      96,     7,     7,     6,   211,   147,   146,   204,   140,     7,
-     147,   140,   140,   204,   147,   147,   140,   140,   140,   140,
-     140,   143,   206,   204,   204,   147,   147,   204,   142,   145,
-     145,   145,   146,   146,   146,   146,    72,    79,    80,   199,
-     200,   206,   147,   185,   204,   204,   142,   147,   204,   209,
-     209,   142,   142,     7,     7,     7,   143,   204,   147,   204,
-     204,   140,   140,   140,   140,   140,   142,   143,   172,   215,
-     147,   160,   139,   139,   146,   170,     6,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,     4,   211,   215,   204,
-     142,     6,     6,   142,     4,    93,    94,   204,     6,     6,
-       6,     7,   141,   212,   214,     6,   204,   126,   215,   140,
-     145,   206,   211,   147,     8,    49,   209,   209,     7,   209,
-      49,    51,   209,   209,     7,    51,   209,   209,   147,   211,
-       6,     7,   146,     7,     7,     7,     6,    61,     7,     7,
-       7,     7,     7,     7,     7,     4,   145,   145,   145,   147,
-     146,   206,   206,   206,   211,   211,   211,   211,     6,   146,
-     139,   147,   200,   145,   199,     6,     6,     6,    49,   140,
-       6,     6,     6,     6,   209,   209,   209,     4,   145,     8,
-       8,   140,     7,     7,     7,     7,     7,     6,     4,     6,
-     139,   204,   204,   208,   209,   146,   140,   142,   140,   142,
-     140,   142,   140,   142,   142,   140,   140,   140,   140,   171,
-       7,   171,   172,   143,     7,     6,   212,   204,   145,   147,
-       6,     6,   153,   204,     6,   147,   204,   146,     6,    56,
-       6,    56,   209,     6,   146,   146,     6,     6,   209,   146,
-       6,     6,   147,     5,   204,   209,   209,   209,    62,    63,
-     209,   209,   209,   209,   209,   209,   209,     6,     7,   204,
-     204,   204,   146,   178,   145,   147,   145,   147,   145,   147,
-     147,   147,   147,   147,   204,   209,   204,   204,   206,   147,
-     146,     7,     6,     6,    92,   204,   204,   204,   209,     5,
-     204,   204,     5,   172,   157,   204,   145,   145,   145,   147,
-     158,   204,   143,   209,   216,   204,     6,     4,   213,     6,
-     142,   212,   215,   145,   142,   204,   206,   206,     6,   204,
-     204,     6,   204,     5,   145,     6,     6,     6,   204,   204,
-       4,     6,     6,     6,     6,     6,     6,     6,   204,   216,
-     147,   140,   145,   147,   177,   189,   206,     6,   190,   206,
-       6,   191,   206,     6,   192,     6,     6,     6,     6,   147,
-     145,   140,   147,   145,   204,   209,   209,   145,   147,     8,
-     147,   140,     6,     6,     6,     6,     6,   209,   140,   145,
-     204,   204,   209,   146,   145,   147,     4,     6,     6,     6,
-       7,     6,   143,     6,   204,   147,     6,     6,   147,   147,
-     147,     5,   204,     6,     6,     6,     6,     6,   146,   204,
-     147,   199,   145,   146,   145,   146,   145,   146,     6,   209,
-       7,   146,   204,   147,     6,    91,   204,   204,     6,   161,
-     204,   145,   145,   208,   204,     6,   140,   212,    94,   145,
-       6,     6,     6,     6,     6,   145,   177,   145,   147,   147,
-     204,   206,   199,   204,   206,   199,   204,   206,   199,   145,
-     147,   209,   178,   147,   204,   147,   147,   146,   204,   204,
-     147,     6,   204,     5,   147,   204,   147,   145,   147,   147,
-     145,   147,   147,   145,   147,   209,     6,    61,   147,   186,
-     146,     6,   158,   140,   145,     6,   146,   145,   145,   147,
-       6,   193,   204,     6,     6,   194,   204,     6,     6,   195,
-     204,     6,   147,   204,   199,   178,   147,   164,   204,   208,
-     204,     5,   146,   147,   146,   147,   146,   147,     6,     6,
-     147,   147,   187,     6,   146,   140,   147,   147,   145,   199,
-       6,   196,   199,     6,   197,   199,     6,   198,   199,   162,
-     215,   167,   146,     6,     5,   147,   146,   147,   146,   147,
-     146,   147,   145,   147,   146,   208,   147,     6,   199,     6,
-     199,     6,   199,   215,     6,   165,   215,   147,     6,   147,
-     147,   147,   145,   147,     6,     6,     6,     6,   215,     6
+      76,    77,    80,    81,    86,    87,    88,    89,    92,    94,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     146,   148,   149,   167,   169,   170,   173,   174,   175,   176,
+     177,   178,   195,   196,   197,     3,     4,     5,     7,     9,
+      10,    11,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    36,    37,    38,    39,    42,   100,   106,
+     107,   108,   109,   110,   111,   112,   113,   123,   124,   128,
+     130,   131,   133,   135,   137,   138,   165,   166,   198,   199,
+     210,    13,    49,   133,     6,   140,     6,   133,   140,   133,
+     133,    71,   133,   140,   133,   133,    71,   140,   133,   133,
+      53,    49,   133,    49,    49,    49,    46,    49,    51,    51,
+      43,    46,    49,    51,   133,   140,   123,   124,   133,   140,
+     200,   201,   200,   140,     4,    43,    46,    49,   140,   200,
+     140,    49,    49,     4,   100,   140,     6,    46,   140,     4,
+       4,     4,   133,   133,   133,     4,   140,   206,     4,   133,
+     133,     6,   135,     4,     4,     4,     5,   140,   209,   210,
+     140,   209,     4,   135,   137,   142,   166,   140,   210,   133,
+     135,   133,   135,   133,   135,   133,   135,   133,   135,   133,
+     135,   133,   135,   133,   135,   133,   135,   133,   135,   133,
+     135,   133,   135,   133,   135,   133,   135,   133,   135,   133,
+     135,   133,   135,   133,   135,   133,   135,   133,   135,   133,
+     135,   133,   133,   133,   133,     7,   133,     4,   198,   198,
+     198,   198,   136,   140,   198,     4,    92,    93,     4,   198,
+       6,     6,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   132,     6,     6,   198,
+       5,   198,   198,     4,    43,   124,   170,   178,   198,   204,
+     205,   198,   198,   133,   198,   205,   198,   198,   133,   205,
+     198,   198,   124,   140,   198,   203,   204,   133,   198,   140,
+     133,   133,   203,   140,   140,   133,   133,   133,   133,   133,
+       4,   200,   200,   200,   198,   198,   123,   124,   140,   140,
+     200,   135,   140,   140,   140,   123,   124,   133,   172,   200,
+     140,   170,   171,   172,   203,   203,     4,     6,   135,   135,
+     172,   140,   171,   135,   135,     6,   198,   198,   198,   137,
+     198,   140,    95,   198,   198,   198,     6,   172,     6,   172,
+       6,   135,   198,     4,   140,   150,     6,   198,   198,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,     4,
+     209,   209,   209,   209,   198,     5,   135,   134,     7,   113,
+     205,   136,     7,   165,   166,   137,     7,   135,     6,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,     6,   134,   139,   139,   134,   135,
+     140,   198,   204,     8,   125,   139,   141,   134,   134,   198,
+     134,   141,   134,   134,   198,   141,   134,   134,   140,   141,
+     205,   125,     7,   198,   134,   198,   198,   198,     7,   198,
+     198,   198,   168,   198,   210,   168,   168,   168,   134,   139,
+     139,   139,   200,   200,   171,   171,   139,   198,   198,   198,
+     198,   198,    43,    46,    49,    51,   169,   182,   139,   172,
+     141,     6,     7,     7,     6,   198,   198,   141,   205,   141,
+     198,   198,   134,   134,   134,    92,   139,   172,   140,     8,
+     134,   136,   141,   141,   198,   136,   166,   198,     4,    82,
+      83,    84,    85,   141,   153,   157,   160,   162,   163,   134,
+     136,   134,   136,   134,   136,   134,   136,   134,   136,   134,
+     136,   134,   136,   134,   136,   134,   136,   134,   136,   134,
+     136,   139,   139,   134,   136,   134,   136,   134,   136,   134,
+     136,   134,   136,   134,   136,   139,   139,   139,   139,   139,
+     139,   135,   137,   134,   139,   139,   134,   134,     6,   139,
+     198,   203,   203,   141,     7,   137,   165,   166,   210,   198,
+       6,     4,     4,   140,   207,   136,     8,     6,   120,   147,
+     205,   198,     7,   136,   140,   198,   198,   198,   204,   198,
+     204,    95,     7,     7,   134,     7,    95,     7,     7,   134,
+      95,     7,     7,   205,   141,   140,   198,   134,     7,   141,
+     134,   134,   198,   141,   141,   134,   134,   134,   134,   134,
+     137,   200,   198,   198,   141,   141,   198,   136,   139,   139,
+     139,   140,   140,   140,   140,    72,    78,    79,   193,   194,
+     200,   141,   179,   198,   198,   136,   136,   141,   136,   136,
+       7,     7,     7,   137,   198,   141,   198,   198,     7,   137,
+     136,   137,   166,   209,   141,   154,   133,   133,   140,   164,
+       6,   198,   198,   198,   198,   198,   198,   198,   198,   198,
+       4,   205,   209,   198,   136,     6,     6,   136,     4,    92,
+      93,   198,     6,     6,     6,     7,   135,   206,   208,     6,
+     198,   120,   209,   134,   139,   200,   205,   141,     8,    49,
+     203,   203,     7,   203,    49,    51,   203,   203,     7,    51,
+     203,   203,   141,   205,     6,     7,   140,     7,     7,     7,
+       6,    61,     7,     7,     7,     7,     7,     7,     7,     4,
+     139,   139,   139,   141,   140,   200,   200,   200,   205,   205,
+     205,   205,     6,   140,   133,   141,   194,   139,   193,     6,
+       6,     6,     6,    49,     6,     6,   203,   203,   203,     4,
+     139,     8,     8,   134,     4,     4,     6,     4,     6,   133,
+     198,   198,   202,   203,   140,   134,   136,   134,   136,   134,
+     136,   134,   136,   136,   134,   134,   134,   134,   165,     7,
+     165,   166,   137,     7,     6,   206,   198,   139,   141,     6,
+       6,   147,   198,     6,   141,   198,   140,     6,    56,     6,
+      56,   203,     6,   140,   140,     6,     6,   203,   140,     6,
+       6,   141,     5,   198,   203,   203,   203,    62,    63,   203,
+     203,   203,   203,   203,   203,   203,     6,     7,   198,   198,
+     198,   140,   172,   139,   141,   139,   141,   139,   141,   141,
+     141,   141,   141,   198,   203,   198,   198,   200,   141,   140,
+       6,     6,    91,   198,   198,   198,     6,     7,   166,   151,
+     198,   139,   139,   139,   141,   152,   198,   137,   203,   210,
+     198,     6,     4,   207,     6,   136,   206,   209,   139,   136,
+     198,   200,   200,     6,   198,   198,     6,   198,     5,   139,
+       6,     6,     6,   198,   198,     4,     6,     6,     6,     6,
+       6,     6,     6,   198,   210,   141,   134,   139,   141,   171,
+     183,   200,     6,   184,   200,     6,   185,   200,     6,   186,
+       6,     6,     6,     6,   141,   139,   134,   141,   139,   198,
+     203,   139,   141,     8,   141,   134,   198,   203,   210,   134,
+     139,   198,   198,   203,   140,   139,   141,     4,     6,     6,
+       6,     7,     6,   137,     6,   198,   141,     6,     6,   141,
+     141,   141,     5,   198,     6,     6,     6,     6,     6,   140,
+     198,   141,   193,   139,   140,   139,   140,   139,   140,     6,
+     203,     7,   140,   198,   141,    90,   198,   198,     6,     6,
+       6,   155,   198,   139,   139,   202,   198,     6,   134,   206,
+      93,   139,     6,     6,     6,     6,     6,   139,   171,   139,
+     141,   141,   198,   200,   193,   198,   200,   193,   198,   200,
+     193,   139,   141,   203,   172,   141,   198,   141,   141,   140,
+     198,   198,   141,     6,   198,     5,   141,   198,   141,   139,
+     141,   141,   139,   141,   141,   139,   141,   203,     6,    61,
+     141,   180,   140,     6,   152,   134,   139,     6,   140,   139,
+     139,   141,     6,   187,   198,     6,     6,   188,   198,     6,
+       6,   189,   198,     6,   141,   198,   193,   172,   141,   158,
+     198,   202,   198,     5,   140,   141,   140,   141,   140,   141,
+       6,     6,   141,   141,   181,     6,   140,   134,   141,   141,
+     139,   193,     6,   190,   193,     6,   191,   193,     6,   192,
+     193,   156,   209,   161,   140,     6,     5,   141,   140,   141,
+     140,   141,   140,   141,   139,   141,   140,   202,   141,     6,
+     193,     6,   193,     6,   193,   209,     6,   159,   209,   141,
+       6,   141,   141,   141,   139,   141,     6,     6,     6,     6,
+     209,     6
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3037,7 +2944,7 @@ while (YYID (0))
    we won't break user code: when these are the locations we know.  */
 
 #ifndef YY_LOCATION_PRINT
-# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+# if YYLTYPE_IS_TRIVIAL
 #  define YY_LOCATION_PRINT(File, Loc)			\
      fprintf (File, "%d.%d-%d.%d",			\
 	      (Loc).first_line, (Loc).first_column,	\
@@ -4726,7 +4633,78 @@ yyreduce:
     break;
 
   case 79:
-#line 957 "Gmsh.y"
+#line 954 "Gmsh.y"
+    {
+		if(!strcmp((yyvsp[(1) - (5)].c),"Background")){
+			GModel::current()->fields.background_field=(int)(yyvsp[(4) - (5)].d);
+		}else{
+			yymsg(GERROR, "Unknown command %s Field.",(yyvsp[(1) - (5)].c));
+		}
+	;}
+    break;
+
+  case 80:
+#line 962 "Gmsh.y"
+    {
+		if(!GModel::current()->fields.new_field((int)(yyvsp[(3) - (7)].d),(yyvsp[(6) - (7)].c)))
+				yymsg(GERROR, "Cannot create field %i of type '%s'.", (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c));
+	;}
+    break;
+
+  case 81:
+#line 967 "Gmsh.y"
+    {
+		Field *field=GModel::current()->fields.get((int)(yyvsp[(3) - (9)].d));
+		if(field){
+			FieldOption *option=field->options[(yyvsp[(6) - (9)].c)];
+			if(option){
+				try {option->numerical_value((yyvsp[(8) - (9)].d));}
+				catch(...){
+					yymsg(GERROR, "Cannot assign a numerical value to  option '%s' in field %i of type '%s'", (yyvsp[(6) - (9)].c),(int)(yyvsp[(3) - (9)].d),field->get_name());
+				}
+			}else yymsg(GERROR, "Unknown option '%s' in field %i of type '%s'", (yyvsp[(6) - (9)].c),(int)(yyvsp[(3) - (9)].d),field->get_name());
+		}else yymsg(GERROR, "No field with id %i",(int)(yyvsp[(3) - (9)].d));
+			
+	;}
+    break;
+
+  case 82:
+#line 981 "Gmsh.y"
+    {
+		Field *field=GModel::current()->fields.get((int)(yyvsp[(3) - (9)].d));
+		if(field){
+			FieldOption *option=field->options[(yyvsp[(6) - (9)].c)];
+			if(option){
+				try {option->string()=(yyvsp[(8) - (9)].c);}
+				catch (...){
+					yymsg(GERROR, "Cannot assign a string value to  option '%s' in field %i of type '%s'", (yyvsp[(6) - (9)].c),(int)(yyvsp[(3) - (9)].d),field->get_name());
+				}
+			}else yymsg(GERROR, "Unknown option '%s' in field %i of type '%s'", (yyvsp[(6) - (9)].c),(int)(yyvsp[(3) - (9)].d),field->get_name());
+		}else yymsg(GERROR, "No field with id %i",(int)(yyvsp[(3) - (9)].d));
+	;}
+    break;
+
+  case 83:
+#line 994 "Gmsh.y"
+    {
+		Field *field=GModel::current()->fields.get((int)(yyvsp[(3) - (9)].d));
+		if(field){
+			FieldOption *option=field->options[(yyvsp[(6) - (9)].c)];
+			if(option){
+				std::list<int> &vl=option->list();
+				vl.clear();
+				for(int i=0;i<List_Nbr((yyvsp[(8) - (9)].l));i++){
+					double id;
+					List_Read((yyvsp[(8) - (9)].l),i,&id);
+					vl.push_back(id);
+				}
+			}else yymsg(GERROR, "Unknown option '%s' in field %i of type '%s'", (yyvsp[(6) - (9)].c),(int)(yyvsp[(3) - (9)].d),field->get_name());
+		}else yymsg(GERROR, "No field with id %i",(int)(yyvsp[(3) - (9)].d));
+	;}
+    break;
+
+  case 84:
+#line 1012 "Gmsh.y"
     {
       try {
 	GMSH_PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].d)); 
@@ -4738,8 +4716,8 @@ yyreduce:
     ;}
     break;
 
-  case 80:
-#line 967 "Gmsh.y"
+  case 85:
+#line 1022 "Gmsh.y"
     {
       try {
 	GMSH_PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].c)); 
@@ -4751,15 +4729,15 @@ yyreduce:
     ;}
     break;
 
-  case 81:
-#line 982 "Gmsh.y"
+  case 86:
+#line 1037 "Gmsh.y"
     { 
       (yyval.i) = (int)(yyvsp[(1) - (1)].d); 
     ;}
     break;
 
-  case 82:
-#line 986 "Gmsh.y"
+  case 87:
+#line 1041 "Gmsh.y"
     { 
       (yyval.i) = GModel::current()->setPhysicalName
 	(std::string((yyvsp[(1) - (1)].c)), ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
@@ -4767,8 +4745,8 @@ yyreduce:
     ;}
     break;
 
-  case 83:
-#line 999 "Gmsh.y"
+  case 88:
+#line 1054 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindPoint(num)){
@@ -4792,8 +4770,8 @@ yyreduce:
     ;}
     break;
 
-  case 84:
-#line 1021 "Gmsh.y"
+  case 89:
+#line 1076 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
@@ -4811,203 +4789,8 @@ yyreduce:
     ;}
     break;
 
-  case 85:
-#line 1037 "Gmsh.y"
-    {
-      AttractorField *att = new AttractorField();
-      for(int i = 0; i < List_Nbr((yyvsp[(8) - (9)].l)); i++){
-        double d;
-        List_Read((yyvsp[(8) - (9)].l), i, &d);
-        Vertex *v = FindPoint((int)d); 
-        if(v)
-          att->addPoint(v->Pos.X, v->Pos.Y, v->Pos.Z);
-        else{
-          GVertex *gv = GModel::current()->getVertexByTag((int)d);
-          if(gv) 
-            att->addPoint(gv->x(), gv->y(), gv->z());
-        }
-      }
-      att->buildFastSearchStructures();
-      fields.insert(att, (int)(yyvsp[(5) - (9)].d));
-      // dummy values
-      (yyval.s).Type = 0;
-      (yyval.s).Num = 0;
-    ;}
-    break;
-
-  case 86:
-#line 1058 "Gmsh.y"
-    {
-      fields.insert(new LatLonField(fields.get((int)(yyvsp[(7) - (8)].d))), (int)(yyvsp[(4) - (8)].d));
-      // dummy values
-      (yyval.s).Type = 0;
-      (yyval.s).Num = 0;
-    ;}
-    break;
-
-  case 87:
-#line 1065 "Gmsh.y"
-    {
-      int index = (int)(yyvsp[(7) - (8)].d);
-      if(index >= 0 && index < (int)PView::list.size()) 
-        fields.insert(new PostViewField(PView::list[index]), (int)(yyvsp[(4) - (8)].d));
-      else
-        yymsg(GERROR, "Field %i error, view %i does not exist", (int)(yyvsp[(4) - (8)].d), (int)(yyvsp[(7) - (8)].d));
-      // dummy values
-      (yyval.s).Type = 0;
-      (yyval.s).Num = 0;
-    ;}
-    break;
-
-  case 88:
-#line 1076 "Gmsh.y"
-    {
-      double pars[] = {0, CTX.lc/10, CTX.lc, CTX.lc/100, CTX.lc/20};
-      for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++){
-	if(i > 4)
-	  yymsg(GERROR, "Too many parameters for Thresold Field (max=5)");
-	else
-	  List_Read((yyvsp[(7) - (8)].l), i, &pars[i]);
-      }
-      fields.insert(new ThresholdField(fields.get((int)pars[0]), pars[1], 
-				       pars[2], pars[3], pars[4]), (int)(yyvsp[(4) - (8)].d));
-      // dummy values
-      (yyval.s).Type = 0;
-      (yyval.s).Num = 0;
-    ;}
-    break;
-
-  case 89:
-#line 1091 "Gmsh.y"
-    {
-      std::list<Field*> *flist = new std::list<Field*>;
-      fields.insert(new FunctionField(flist,(yyvsp[(7) - (8)].c)), (int)(yyvsp[(4) - (8)].d));
-      // dummy values
-      (yyval.s).Type = 0;
-      (yyval.s).Num = 0;
-    ;}
-    break;
-
   case 90:
-#line 1099 "Gmsh.y"
-    {
-      std::list<Field*> *flist = new std::list<Field*>;
-      flist->resize(0);
-      for(int i = 0; i < List_Nbr((yyvsp[(8) - (9)].l)); i++){
-	double id;
-	List_Read((yyvsp[(8) - (9)].l), i, &id);
-	Field *pfield = fields.get((int)id);
-	if(pfield) flist->push_front(pfield);
-      }
-      fields.insert(new FunctionField(flist,(yyvsp[(7) - (9)].c)), (int)(yyvsp[(4) - (9)].d));
-      // dummy values
-      (yyval.s).Type = 0;
-      (yyval.s).Num = 0;
-    ;}
-    break;
-
-  case 91:
-#line 1114 "Gmsh.y"
-    {
-      fields.insert(new StructuredField((yyvsp[(7) - (8)].c)), (int)(yyvsp[(4) - (8)].d));
-      // dummy values
-      (yyval.s).Type = 0;
-      (yyval.s).Num = 0;
-    ;}
-    break;
-
-  case 92:
-#line 1121 "Gmsh.y"
-    {
-      for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
-	double id;
-	List_Read((yyvsp[(4) - (5)].l), i, &id);
-        BGMAddField(fields.get((int)id));
-      }
-      // dummy values
-      (yyval.s).Type = 0;
-      (yyval.s).Num = 0;
-    ;}
-    break;
-
-  case 93:
-#line 1133 "Gmsh.y"
-    {
-      double pars[] = { CTX.lc/10, CTX.lc/100., CTX.lc/20, 1, 3 };
-      for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
-	if(i > 4) 
-	  yymsg(GERROR, "Too many paramaters for attractor line (max = 5)");	  
-	else
-	  List_Read((yyvsp[(5) - (6)].l), i, &pars[i]);
-      }
-      // treshold attractor: first parameter is the treshold, next two
-      // are the in and out size fields, last is transition factor
-      AttractorField *attractor = new AttractorField();
-      fields.insert(attractor);
-      Field *threshold = new ThresholdField(attractor, pars[0], pars[0] * pars[4], 
-					    pars[1], pars[2]);
-      fields.insert(threshold);
-      BGMAddField(threshold);
-      for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
-	double d;
-	List_Read((yyvsp[(3) - (6)].l), i, &d);
-	Vertex *v = FindPoint((int)d); 
-	if(v)
-	  attractor->addPoint(v->Pos.X, v->Pos.Y, v->Pos.Z);
-	else{
-	  GVertex *gv = GModel::current()->getVertexByTag((int)d);
-	  if(gv) 
-	    attractor->addPoint(gv->x(), gv->y(), gv->z());
-	}
-      }
-      attractor->buildFastSearchStructures();
-      // dummy values
-      (yyval.s).Type = 0;
-      (yyval.s).Num = 0;
-    ;}
-    break;
-
-  case 94:
-#line 1167 "Gmsh.y"
-    {
-      double pars[] = { CTX.lc/10, CTX.lc/100., CTX.lc/20, 10, 3 };
-      for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
-	if(i > 4) 
-	  yymsg(GERROR, "Too many paramaters for attractor line (max = 5)");	  
-	else
-	  List_Read((yyvsp[(5) - (6)].l), i, &pars[i]);
-      }
-      // treshold attractor: first parameter is the treshold, next two
-      // are the in and out size fields, last is transition factor
-      AttractorField *att = new AttractorField();
-      fields.insert(att);
-      Field *threshold = new ThresholdField(att, pars[0], pars[0] * pars[4],
-					    pars[1], pars[2]);
-      fields.insert(threshold);
-      BGMAddField(threshold);
-      for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
-	double d;
-	List_Read((yyvsp[(3) - (6)].l), i, &d);
-	Curve *c = FindCurve((int)d); 
-	if(c){
-	  att->addCurve(c, (int)pars[3]);
-	}
-	else{
-	  GEdge *ge = GModel::current()->getEdgeByTag((int)d);
-	  if(ge){
-	    att->addGEdge(ge, (int)pars[3]);
-	  }
-	}
-      }
-      att->buildFastSearchStructures();
-      // dummy values
-      (yyval.s).Type = 0;
-      (yyval.s).Num = 0;
-    ;}
-    break;
-
-  case 95:
-#line 1203 "Gmsh.y"
+#line 1092 "Gmsh.y"
     {      
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -5028,8 +4811,8 @@ yyreduce:
     ;}
     break;
 
-  case 96:
-#line 1225 "Gmsh.y"
+  case 91:
+#line 1114 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -5049,8 +4832,8 @@ yyreduce:
     ;}
     break;
 
-  case 97:
-#line 1243 "Gmsh.y"
+  case 92:
+#line 1132 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -5070,8 +4853,8 @@ yyreduce:
     ;}
     break;
 
-  case 98:
-#line 1261 "Gmsh.y"
+  case 93:
+#line 1150 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -5091,8 +4874,8 @@ yyreduce:
     ;}
     break;
 
-  case 99:
-#line 1279 "Gmsh.y"
+  case 94:
+#line 1168 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindCurve(num)){
@@ -5120,8 +4903,8 @@ yyreduce:
     ;}
     break;
 
-  case 100:
-#line 1305 "Gmsh.y"
+  case 95:
+#line 1194 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -5141,8 +4924,8 @@ yyreduce:
     ;}
     break;
 
-  case 101:
-#line 1323 "Gmsh.y"
+  case 96:
+#line 1212 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindCurve(num)){
@@ -5170,8 +4953,8 @@ yyreduce:
     ;}
     break;
 
-  case 102:
-#line 1350 "Gmsh.y"
+  case 97:
+#line 1239 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (17)].d);
       if(FindCurve(num)){
@@ -5192,8 +4975,8 @@ yyreduce:
     ;}
     break;
 
-  case 103:
-#line 1369 "Gmsh.y"
+  case 98:
+#line 1258 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -5213,8 +4996,8 @@ yyreduce:
     ;}
     break;
 
-  case 104:
-#line 1387 "Gmsh.y"
+  case 99:
+#line 1276 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -5234,8 +5017,8 @@ yyreduce:
     ;}
     break;
 
-  case 105:
-#line 1405 "Gmsh.y"
+  case 100:
+#line 1294 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (11)].d);
       if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
@@ -5263,8 +5046,8 @@ yyreduce:
     ;}
     break;
 
-  case 106:
-#line 1431 "Gmsh.y"
+  case 101:
+#line 1320 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindEdgeLoop(num)){
@@ -5283,8 +5066,8 @@ yyreduce:
     ;}
     break;
 
-  case 107:
-#line 1448 "Gmsh.y"
+  case 102:
+#line 1337 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
@@ -5302,8 +5085,8 @@ yyreduce:
     ;}
     break;
 
-  case 108:
-#line 1467 "Gmsh.y"
+  case 103:
+#line 1356 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -5323,8 +5106,8 @@ yyreduce:
     ;}
     break;
 
-  case 109:
-#line 1485 "Gmsh.y"
+  case 104:
+#line 1374 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d), type = 0;
       if(FindSurface(num)){
@@ -5364,8 +5147,8 @@ yyreduce:
     ;}
     break;
 
-  case 110:
-#line 1523 "Gmsh.y"
+  case 105:
+#line 1412 "Gmsh.y"
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
@@ -5373,8 +5156,8 @@ yyreduce:
     ;}
     break;
 
-  case 111:
-#line 1529 "Gmsh.y"
+  case 106:
+#line 1418 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
       (yyval.s).Type = 0;
@@ -5382,8 +5165,8 @@ yyreduce:
     ;}
     break;
 
-  case 112:
-#line 1535 "Gmsh.y"
+  case 107:
+#line 1424 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (10)].d);
       myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
@@ -5392,8 +5175,8 @@ yyreduce:
     ;}
     break;
 
-  case 113:
-#line 1542 "Gmsh.y"
+  case 108:
+#line 1431 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -5419,8 +5202,8 @@ yyreduce:
     ;}
     break;
 
-  case 114:
-#line 1566 "Gmsh.y"
+  case 109:
+#line 1455 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -5446,8 +5229,8 @@ yyreduce:
     ;}
     break;
 
-  case 115:
-#line 1590 "Gmsh.y"
+  case 110:
+#line 1479 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurfaceLoop(num)){
@@ -5465,8 +5248,8 @@ yyreduce:
     ;}
     break;
 
-  case 116:
-#line 1606 "Gmsh.y"
+  case 111:
+#line 1495 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
@@ -5484,8 +5267,8 @@ yyreduce:
     ;}
     break;
 
-  case 117:
-#line 1626 "Gmsh.y"
+  case 112:
+#line 1515 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindVolume(num)){
@@ -5504,8 +5287,8 @@ yyreduce:
     ;}
     break;
 
-  case 118:
-#line 1643 "Gmsh.y"
+  case 113:
+#line 1532 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindVolume(num)){
@@ -5524,8 +5307,8 @@ yyreduce:
     ;}
     break;
 
-  case 119:
-#line 1660 "Gmsh.y"
+  case 114:
+#line 1549 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
@@ -5543,40 +5326,40 @@ yyreduce:
     ;}
     break;
 
-  case 120:
-#line 1681 "Gmsh.y"
+  case 115:
+#line 1570 "Gmsh.y"
     {
       TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
     ;}
     break;
 
-  case 121:
-#line 1686 "Gmsh.y"
+  case 116:
+#line 1575 "Gmsh.y"
     {
       RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
       (yyval.l) = (yyvsp[(10) - (11)].l);
     ;}
     break;
 
-  case 122:
-#line 1691 "Gmsh.y"
+  case 117:
+#line 1580 "Gmsh.y"
     {
       SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
     ;}
     break;
 
-  case 123:
-#line 1696 "Gmsh.y"
+  case 118:
+#line 1585 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
       (yyval.l) = (yyvsp[(8) - (9)].l);
     ;}
     break;
 
-  case 124:
-#line 1701 "Gmsh.y"
+  case 119:
+#line 1590 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -5589,8 +5372,8 @@ yyreduce:
     ;}
     break;
 
-  case 125:
-#line 1712 "Gmsh.y"
+  case 120:
+#line 1601 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
@@ -5598,8 +5381,8 @@ yyreduce:
     ;}
     break;
 
-  case 126:
-#line 1718 "Gmsh.y"
+  case 121:
+#line 1607 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       BoundaryShapes((yyvsp[(3) - (4)].l), (yyval.l));
@@ -5607,32 +5390,32 @@ yyreduce:
     ;}
     break;
 
-  case 127:
-#line 1726 "Gmsh.y"
+  case 122:
+#line 1615 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
-  case 128:
-#line 1727 "Gmsh.y"
+  case 123:
+#line 1616 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
-  case 129:
-#line 1732 "Gmsh.y"
+  case 124:
+#line 1621 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
-  case 130:
-#line 1736 "Gmsh.y"
+  case 125:
+#line 1625 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
-  case 131:
-#line 1740 "Gmsh.y"
+  case 126:
+#line 1629 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5657,8 +5440,8 @@ yyreduce:
     ;}
     break;
 
-  case 132:
-#line 1763 "Gmsh.y"
+  case 127:
+#line 1652 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5683,8 +5466,8 @@ yyreduce:
     ;}
     break;
 
-  case 133:
-#line 1786 "Gmsh.y"
+  case 128:
+#line 1675 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5709,8 +5492,8 @@ yyreduce:
     ;}
     break;
 
-  case 134:
-#line 1809 "Gmsh.y"
+  case 129:
+#line 1698 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5735,8 +5518,8 @@ yyreduce:
     ;}
     break;
 
-  case 135:
-#line 1837 "Gmsh.y"
+  case 130:
+#line 1726 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5747,8 +5530,15 @@ yyreduce:
     ;}
     break;
 
-  case 136:
-#line 1846 "Gmsh.y"
+  case 131:
+#line 1734 "Gmsh.y"
+    {
+		GModel::current()->fields.delete_field((int)(yyvsp[(4) - (6)].d));
+	;}
+    break;
+
+  case 132:
+#line 1738 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
 	int index = (int)(yyvsp[(4) - (6)].d);
@@ -5763,8 +5553,8 @@ yyreduce:
     ;}
     break;
 
-  case 137:
-#line 1859 "Gmsh.y"
+  case 133:
+#line 1751 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
 	GModel::current()->destroy();
@@ -5782,8 +5572,8 @@ yyreduce:
     ;}
     break;
 
-  case 138:
-#line 1875 "Gmsh.y"
+  case 134:
+#line 1767 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
 	for(int i = PView::list.size() - 1; i >= 0; i--)
@@ -5795,8 +5585,8 @@ yyreduce:
     ;}
     break;
 
-  case 139:
-#line 1890 "Gmsh.y"
+  case 135:
+#line 1782 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -5807,8 +5597,8 @@ yyreduce:
     ;}
     break;
 
-  case 140:
-#line 1904 "Gmsh.y"
+  case 136:
+#line 1796 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
@@ -5816,8 +5606,8 @@ yyreduce:
     ;}
     break;
 
-  case 141:
-#line 1910 "Gmsh.y"
+  case 137:
+#line 1802 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
@@ -5825,8 +5615,8 @@ yyreduce:
     ;}
     break;
 
-  case 142:
-#line 1916 "Gmsh.y"
+  case 138:
+#line 1808 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5837,8 +5627,8 @@ yyreduce:
     ;}
     break;
 
-  case 143:
-#line 1925 "Gmsh.y"
+  case 139:
+#line 1817 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5849,8 +5639,8 @@ yyreduce:
     ;}
     break;
 
-  case 144:
-#line 1939 "Gmsh.y"
+  case 140:
+#line 1831 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
 	char tmpstring[1024];
@@ -5900,8 +5690,8 @@ yyreduce:
     ;}
     break;
 
-  case 145:
-#line 1987 "Gmsh.y"
+  case 141:
+#line 1879 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
 	int index = (int)(yyvsp[(4) - (7)].d);
@@ -5919,27 +5709,27 @@ yyreduce:
     ;}
     break;
 
-  case 146:
-#line 2003 "Gmsh.y"
+  case 142:
+#line 1895 "Gmsh.y"
     {
-      if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
-	int index = (int)(yyvsp[(5) - (7)].d);
+     /* if(!strcmp($1, "Background") && !strcmp($2, "Mesh")  && !strcmp($3, "View")){
+	int index = (int)$5;
 	if(index >= 0 && index < (int)PView::list.size()){
 	  Field *field = new PostViewField(PView::list[index]);
-	  fields.insert(field);
+	  GModel::current()->fields.insert(field);
 	  BGMAddField(field);
 	}
 	else
 	  yymsg(GERROR, "Unknown view %d", index);
       }
-      else
+      else*/
 	yymsg(GERROR, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
       Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(3) - (7)].c));
     ;}
     break;
 
-  case 147:
-#line 2019 "Gmsh.y"
+  case 143:
+#line 1911 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -5960,8 +5750,8 @@ yyreduce:
     ;}
     break;
 
-  case 148:
-#line 2038 "Gmsh.y"
+  case 144:
+#line 1930 "Gmsh.y"
     {
        try {
 	 GMSH_PluginManager::instance()->action((yyvsp[(3) - (7)].c), (yyvsp[(6) - (7)].c), 0);
@@ -5973,8 +5763,8 @@ yyreduce:
      ;}
     break;
 
-  case 149:
-#line 2048 "Gmsh.y"
+  case 145:
+#line 1940 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
 	PView::combine(false, 1, CTX.post.combine_remove_orig);
@@ -5998,31 +5788,31 @@ yyreduce:
     ;}
     break;
 
-  case 150:
-#line 2070 "Gmsh.y"
+  case 146:
+#line 1962 "Gmsh.y"
     {
       exit(0);
     ;}
     break;
 
-  case 151:
-#line 2074 "Gmsh.y"
+  case 147:
+#line 1966 "Gmsh.y"
     {
       CTX.forced_bbox = 0;
       SetBoundingBox();
     ;}
     break;
 
-  case 152:
-#line 2079 "Gmsh.y"
+  case 148:
+#line 1971 "Gmsh.y"
     {
       CTX.forced_bbox = 1;
       SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
     ;}
     break;
 
-  case 153:
-#line 2084 "Gmsh.y"
+  case 149:
+#line 1976 "Gmsh.y"
     {
 #if defined(HAVE_FLTK)
       Draw();
@@ -6030,8 +5820,8 @@ yyreduce:
     ;}
     break;
 
-  case 154:
-#line 2096 "Gmsh.y"
+  case 150:
+#line 1988 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -6050,8 +5840,8 @@ yyreduce:
     ;}
     break;
 
-  case 155:
-#line 2113 "Gmsh.y"
+  case 151:
+#line 2005 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -6070,8 +5860,8 @@ yyreduce:
     ;}
     break;
 
-  case 156:
-#line 2130 "Gmsh.y"
+  case 152:
+#line 2022 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -6100,8 +5890,8 @@ yyreduce:
     ;}
     break;
 
-  case 157:
-#line 2157 "Gmsh.y"
+  case 153:
+#line 2049 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -6130,8 +5920,8 @@ yyreduce:
     ;}
     break;
 
-  case 158:
-#line 2184 "Gmsh.y"
+  case 154:
+#line 2076 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(GERROR, "Invalid For/EndFor loop");
@@ -6164,8 +5954,8 @@ yyreduce:
     ;}
     break;
 
-  case 159:
-#line 2215 "Gmsh.y"
+  case 155:
+#line 2107 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname,
 						      gmsh_yylineno))
@@ -6175,8 +5965,8 @@ yyreduce:
     ;}
     break;
 
-  case 160:
-#line 2223 "Gmsh.y"
+  case 156:
+#line 2115 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction(&gmsh_yyin, gmsh_yyname,
 						     gmsh_yylineno))
@@ -6184,8 +5974,8 @@ yyreduce:
     ;}
     break;
 
-  case 161:
-#line 2229 "Gmsh.y"
+  case 157:
+#line 2121 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname,
 						     gmsh_yylineno))
@@ -6194,21 +5984,21 @@ yyreduce:
     ;}
     break;
 
-  case 162:
-#line 2236 "Gmsh.y"
+  case 158:
+#line 2128 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
     break;
 
-  case 163:
-#line 2240 "Gmsh.y"
+  case 159:
+#line 2132 "Gmsh.y"
     {
     ;}
     break;
 
-  case 164:
-#line 2249 "Gmsh.y"
+  case 160:
+#line 2141 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
@@ -6218,8 +6008,8 @@ yyreduce:
     ;}
     break;
 
-  case 165:
-#line 2257 "Gmsh.y"
+  case 161:
+#line 2149 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
@@ -6229,8 +6019,8 @@ yyreduce:
     ;}
     break;
 
-  case 166:
-#line 2265 "Gmsh.y"
+  case 162:
+#line 2157 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
@@ -6240,15 +6030,15 @@ yyreduce:
     ;}
     break;
 
-  case 167:
-#line 2273 "Gmsh.y"
+  case 163:
+#line 2165 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 168:
-#line 2277 "Gmsh.y"
+  case 164:
+#line 2169 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
@@ -6258,15 +6048,15 @@ yyreduce:
     ;}
     break;
 
-  case 169:
-#line 2285 "Gmsh.y"
+  case 165:
+#line 2177 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 170:
-#line 2289 "Gmsh.y"
+  case 166:
+#line 2181 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
@@ -6276,15 +6066,15 @@ yyreduce:
     ;}
     break;
 
-  case 171:
-#line 2297 "Gmsh.y"
+  case 167:
+#line 2189 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 172:
-#line 2301 "Gmsh.y"
+  case 168:
+#line 2193 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
@@ -6294,15 +6084,15 @@ yyreduce:
     ;}
     break;
 
-  case 173:
-#line 2309 "Gmsh.y"
+  case 169:
+#line 2201 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 174:
-#line 2313 "Gmsh.y"
+  case 170:
+#line 2205 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
@@ -6311,15 +6101,15 @@ yyreduce:
     ;}
     break;
 
-  case 175:
-#line 2320 "Gmsh.y"
+  case 171:
+#line 2212 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 176:
-#line 2324 "Gmsh.y"
+  case 172:
+#line 2216 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       extr.mesh.ViewIndex = (int)(yyvsp[(4) - (10)].d);
@@ -6331,8 +6121,8 @@ yyreduce:
     ;}
     break;
 
-  case 177:
-#line 2336 "Gmsh.y"
+  case 173:
+#line 2228 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
@@ -6341,8 +6131,8 @@ yyreduce:
     ;}
     break;
 
-  case 178:
-#line 2343 "Gmsh.y"
+  case 174:
+#line 2235 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
@@ -6351,8 +6141,8 @@ yyreduce:
     ;}
     break;
 
-  case 179:
-#line 2350 "Gmsh.y"
+  case 175:
+#line 2242 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
@@ -6361,8 +6151,8 @@ yyreduce:
     ;}
     break;
 
-  case 180:
-#line 2357 "Gmsh.y"
+  case 176:
+#line 2249 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6371,8 +6161,8 @@ yyreduce:
     ;}
     break;
 
-  case 181:
-#line 2364 "Gmsh.y"
+  case 177:
+#line 2256 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6381,8 +6171,8 @@ yyreduce:
     ;}
     break;
 
-  case 182:
-#line 2371 "Gmsh.y"
+  case 178:
+#line 2263 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6391,8 +6181,8 @@ yyreduce:
     ;}
     break;
 
-  case 183:
-#line 2378 "Gmsh.y"
+  case 179:
+#line 2270 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
@@ -6401,8 +6191,8 @@ yyreduce:
     ;}
     break;
 
-  case 184:
-#line 2385 "Gmsh.y"
+  case 180:
+#line 2277 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
@@ -6411,8 +6201,8 @@ yyreduce:
     ;}
     break;
 
-  case 185:
-#line 2392 "Gmsh.y"
+  case 181:
+#line 2284 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
@@ -6421,15 +6211,15 @@ yyreduce:
     ;}
     break;
 
-  case 186:
-#line 2399 "Gmsh.y"
+  case 182:
+#line 2291 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 187:
-#line 2403 "Gmsh.y"
+  case 183:
+#line 2295 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6438,15 +6228,15 @@ yyreduce:
     ;}
     break;
 
-  case 188:
-#line 2410 "Gmsh.y"
+  case 184:
+#line 2302 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 189:
-#line 2414 "Gmsh.y"
+  case 185:
+#line 2306 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6455,15 +6245,15 @@ yyreduce:
     ;}
     break;
 
-  case 190:
-#line 2421 "Gmsh.y"
+  case 186:
+#line 2313 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 191:
-#line 2425 "Gmsh.y"
+  case 187:
+#line 2317 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6472,15 +6262,15 @@ yyreduce:
     ;}
     break;
 
-  case 192:
-#line 2432 "Gmsh.y"
+  case 188:
+#line 2324 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 193:
-#line 2436 "Gmsh.y"
+  case 189:
+#line 2328 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
@@ -6489,15 +6279,15 @@ yyreduce:
     ;}
     break;
 
-  case 194:
-#line 2443 "Gmsh.y"
+  case 190:
+#line 2335 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 195:
-#line 2447 "Gmsh.y"
+  case 191:
+#line 2339 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
@@ -6506,15 +6296,15 @@ yyreduce:
     ;}
     break;
 
-  case 196:
-#line 2454 "Gmsh.y"
+  case 192:
+#line 2346 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 197:
-#line 2458 "Gmsh.y"
+  case 193:
+#line 2350 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
@@ -6523,15 +6313,15 @@ yyreduce:
     ;}
     break;
 
-  case 198:
-#line 2465 "Gmsh.y"
+  case 194:
+#line 2357 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 199:
-#line 2469 "Gmsh.y"
+  case 195:
+#line 2361 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
@@ -6540,15 +6330,15 @@ yyreduce:
     ;}
     break;
 
-  case 200:
-#line 2476 "Gmsh.y"
+  case 196:
+#line 2368 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 201:
-#line 2480 "Gmsh.y"
+  case 197:
+#line 2372 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
@@ -6557,15 +6347,15 @@ yyreduce:
     ;}
     break;
 
-  case 202:
-#line 2487 "Gmsh.y"
+  case 198:
+#line 2379 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
-  case 203:
-#line 2491 "Gmsh.y"
+  case 199:
+#line 2383 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
@@ -6574,20 +6364,20 @@ yyreduce:
     ;}
     break;
 
-  case 204:
-#line 2502 "Gmsh.y"
+  case 200:
+#line 2394 "Gmsh.y"
     {
     ;}
     break;
 
-  case 205:
-#line 2505 "Gmsh.y"
+  case 201:
+#line 2397 "Gmsh.y"
     {
     ;}
     break;
 
-  case 206:
-#line 2511 "Gmsh.y"
+  case 202:
+#line 2403 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -6598,8 +6388,8 @@ yyreduce:
     ;}
     break;
 
-  case 207:
-#line 2520 "Gmsh.y"
+  case 203:
+#line 2412 "Gmsh.y"
     {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -6621,8 +6411,8 @@ yyreduce:
     ;}
     break;
 
-  case 208:
-#line 2540 "Gmsh.y"
+  case 204:
+#line 2432 "Gmsh.y"
     {
       yymsg(GERROR, "Explicit region numbers in layers are deprecated");
       double d;
@@ -6647,15 +6437,15 @@ yyreduce:
     ;}
     break;
 
-  case 209:
-#line 2563 "Gmsh.y"
+  case 205:
+#line 2455 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
-  case 210:
-#line 2567 "Gmsh.y"
+  case 206:
+#line 2459 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -6676,8 +6466,8 @@ yyreduce:
     ;}
     break;
 
-  case 211:
-#line 2591 "Gmsh.y"
+  case 207:
+#line 2483 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6697,8 +6487,8 @@ yyreduce:
     ;}
     break;
 
-  case 212:
-#line 2609 "Gmsh.y"
+  case 208:
+#line 2501 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
 	double d;
@@ -6718,8 +6508,8 @@ yyreduce:
     ;}
     break;
 
-  case 213:
-#line 2627 "Gmsh.y"
+  case 209:
+#line 2519 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
 	double d;
@@ -6739,8 +6529,8 @@ yyreduce:
     ;}
     break;
 
-  case 214:
-#line 2645 "Gmsh.y"
+  case 210:
+#line 2537 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(4) - (8)].d));
       if(!s)
@@ -6771,8 +6561,8 @@ yyreduce:
     ;}
     break;
 
-  case 215:
-#line 2674 "Gmsh.y"
+  case 211:
+#line 2566 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(4) - (9)].d));
       if(!s)
@@ -6809,16 +6599,16 @@ yyreduce:
     ;}
     break;
 
-  case 216:
-#line 2709 "Gmsh.y"
+  case 212:
+#line 2601 "Gmsh.y"
     {
       yymsg(WARNING, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
     ;}
     break;
 
-  case 217:
-#line 2714 "Gmsh.y"
+  case 213:
+#line 2606 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(4) - (8)].d));
       if(!v)
@@ -6847,8 +6637,8 @@ yyreduce:
     ;}
     break;
 
-  case 218:
-#line 2741 "Gmsh.y"
+  case 214:
+#line 2633 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6864,8 +6654,8 @@ yyreduce:
     ;}
     break;
 
-  case 219:
-#line 2755 "Gmsh.y"
+  case 215:
+#line 2647 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	double d;
@@ -6880,8 +6670,8 @@ yyreduce:
     ;}
     break;
 
-  case 220:
-#line 2768 "Gmsh.y"
+  case 216:
+#line 2660 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6894,8 +6684,8 @@ yyreduce:
     ;}
     break;
 
-  case 221:
-#line 2785 "Gmsh.y"
+  case 217:
+#line 2677 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s)
@@ -6903,8 +6693,8 @@ yyreduce:
     ;}
     break;
 
-  case 222:
-#line 2791 "Gmsh.y"
+  case 218:
+#line 2683 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s)
@@ -6912,67 +6702,67 @@ yyreduce:
     ;}
     break;
 
-  case 223:
-#line 2797 "Gmsh.y"
+  case 219:
+#line 2689 "Gmsh.y"
     {
     ;}
     break;
 
-  case 224:
-#line 2800 "Gmsh.y"
+  case 220:
+#line 2692 "Gmsh.y"
     {
     ;}
     break;
 
-  case 225:
-#line 2809 "Gmsh.y"
+  case 221:
+#line 2701 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
-  case 226:
-#line 2818 "Gmsh.y"
+  case 222:
+#line 2710 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
-  case 227:
-#line 2819 "Gmsh.y"
+  case 223:
+#line 2711 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
-  case 228:
-#line 2820 "Gmsh.y"
+  case 224:
+#line 2712 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
-  case 229:
-#line 2821 "Gmsh.y"
+  case 225:
+#line 2713 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
-  case 230:
-#line 2822 "Gmsh.y"
+  case 226:
+#line 2714 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
-  case 231:
-#line 2823 "Gmsh.y"
+  case 227:
+#line 2715 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
-  case 232:
-#line 2824 "Gmsh.y"
+  case 228:
+#line 2716 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
-  case 233:
-#line 2825 "Gmsh.y"
+  case 229:
+#line 2717 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
-  case 234:
-#line 2827 "Gmsh.y"
+  case 230:
+#line 2719 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(GERROR, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -6981,308 +6771,308 @@ yyreduce:
     ;}
     break;
 
-  case 235:
-#line 2833 "Gmsh.y"
+  case 231:
+#line 2725 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
-  case 236:
-#line 2834 "Gmsh.y"
+  case 232:
+#line 2726 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
-  case 237:
-#line 2835 "Gmsh.y"
+  case 233:
+#line 2727 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
-  case 238:
-#line 2836 "Gmsh.y"
+  case 234:
+#line 2728 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
-  case 239:
-#line 2837 "Gmsh.y"
+  case 235:
+#line 2729 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 240:
-#line 2838 "Gmsh.y"
+  case 236:
+#line 2730 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 241:
-#line 2839 "Gmsh.y"
+  case 237:
+#line 2731 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 242:
-#line 2840 "Gmsh.y"
+  case 238:
+#line 2732 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 243:
-#line 2841 "Gmsh.y"
+  case 239:
+#line 2733 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 244:
-#line 2842 "Gmsh.y"
+  case 240:
+#line 2734 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 245:
-#line 2843 "Gmsh.y"
+  case 241:
+#line 2735 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d)? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d);  ;}
     break;
 
-  case 246:
-#line 2844 "Gmsh.y"
+  case 242:
+#line 2736 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 247:
-#line 2845 "Gmsh.y"
+  case 243:
+#line 2737 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 248:
-#line 2846 "Gmsh.y"
+  case 244:
+#line 2738 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
-  case 249:
-#line 2847 "Gmsh.y"
+  case 245:
+#line 2739 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 250:
-#line 2848 "Gmsh.y"
+  case 246:
+#line 2740 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 251:
-#line 2849 "Gmsh.y"
+  case 247:
+#line 2741 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 252:
-#line 2850 "Gmsh.y"
+  case 248:
+#line 2742 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 253:
-#line 2851 "Gmsh.y"
+  case 249:
+#line 2743 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 254:
-#line 2852 "Gmsh.y"
+  case 250:
+#line 2744 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 255:
-#line 2853 "Gmsh.y"
+  case 251:
+#line 2745 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 256:
-#line 2854 "Gmsh.y"
+  case 252:
+#line 2746 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
-  case 257:
-#line 2855 "Gmsh.y"
+  case 253:
+#line 2747 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 258:
-#line 2856 "Gmsh.y"
+  case 254:
+#line 2748 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 259:
-#line 2857 "Gmsh.y"
+  case 255:
+#line 2749 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 260:
-#line 2858 "Gmsh.y"
+  case 256:
+#line 2750 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 261:
-#line 2859 "Gmsh.y"
+  case 257:
+#line 2751 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
-  case 262:
-#line 2860 "Gmsh.y"
+  case 258:
+#line 2752 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 263:
-#line 2861 "Gmsh.y"
+  case 259:
+#line 2753 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 264:
-#line 2862 "Gmsh.y"
+  case 260:
+#line 2754 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 265:
-#line 2863 "Gmsh.y"
+  case 261:
+#line 2755 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d)*(yyvsp[(3) - (6)].d)+(yyvsp[(5) - (6)].d)*(yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 266:
-#line 2864 "Gmsh.y"
+  case 262:
+#line 2756 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d)*(double)rand()/(double)RAND_MAX; ;}
     break;
 
-  case 267:
-#line 2866 "Gmsh.y"
+  case 263:
+#line 2758 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 268:
-#line 2867 "Gmsh.y"
+  case 264:
+#line 2759 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 269:
-#line 2868 "Gmsh.y"
+  case 265:
+#line 2760 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
-  case 270:
-#line 2869 "Gmsh.y"
+  case 266:
+#line 2761 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 271:
-#line 2870 "Gmsh.y"
+  case 267:
+#line 2762 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 272:
-#line 2871 "Gmsh.y"
+  case 268:
+#line 2763 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 273:
-#line 2872 "Gmsh.y"
+  case 269:
+#line 2764 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 274:
-#line 2873 "Gmsh.y"
+  case 270:
+#line 2765 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 275:
-#line 2874 "Gmsh.y"
+  case 271:
+#line 2766 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 276:
-#line 2875 "Gmsh.y"
+  case 272:
+#line 2767 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 277:
-#line 2876 "Gmsh.y"
+  case 273:
+#line 2768 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
-  case 278:
-#line 2877 "Gmsh.y"
+  case 274:
+#line 2769 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 279:
-#line 2878 "Gmsh.y"
+  case 275:
+#line 2770 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 280:
-#line 2879 "Gmsh.y"
+  case 276:
+#line 2771 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 281:
-#line 2880 "Gmsh.y"
+  case 277:
+#line 2772 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 282:
-#line 2881 "Gmsh.y"
+  case 278:
+#line 2773 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
-  case 283:
-#line 2882 "Gmsh.y"
+  case 279:
+#line 2774 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 284:
-#line 2883 "Gmsh.y"
+  case 280:
+#line 2775 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 285:
-#line 2884 "Gmsh.y"
+  case 281:
+#line 2776 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 286:
-#line 2885 "Gmsh.y"
+  case 282:
+#line 2777 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d)*(yyvsp[(3) - (6)].d)+(yyvsp[(5) - (6)].d)*(yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 287:
-#line 2886 "Gmsh.y"
+  case 283:
+#line 2778 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d)*(double)rand()/(double)RAND_MAX; ;}
     break;
 
-  case 288:
-#line 2895 "Gmsh.y"
+  case 284:
+#line 2787 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
-  case 289:
-#line 2896 "Gmsh.y"
+  case 285:
+#line 2788 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
-  case 290:
-#line 2897 "Gmsh.y"
+  case 286:
+#line 2789 "Gmsh.y"
     { (yyval.d) = ParUtil::Instance()->rank(); ;}
     break;
 
-  case 291:
-#line 2898 "Gmsh.y"
+  case 287:
+#line 2790 "Gmsh.y"
     { (yyval.d) = ParUtil::Instance()->size(); ;}
     break;
 
-  case 292:
-#line 2899 "Gmsh.y"
+  case 288:
+#line 2791 "Gmsh.y"
     { (yyval.d) = Get_GmshMajorVersion(); ;}
     break;
 
-  case 293:
-#line 2900 "Gmsh.y"
+  case 289:
+#line 2792 "Gmsh.y"
     { (yyval.d) = Get_GmshMinorVersion(); ;}
     break;
 
-  case 294:
-#line 2901 "Gmsh.y"
+  case 290:
+#line 2793 "Gmsh.y"
     { (yyval.d) = Get_GmshPatchVersion(); ;}
     break;
 
-  case 295:
-#line 2906 "Gmsh.y"
+  case 291:
+#line 2798 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (1)].c);
@@ -7297,8 +7087,8 @@ yyreduce:
     ;}
     break;
 
-  case 296:
-#line 2922 "Gmsh.y"
+  case 292:
+#line 2814 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -7315,8 +7105,8 @@ yyreduce:
     ;}
     break;
 
-  case 297:
-#line 2937 "Gmsh.y"
+  case 293:
+#line 2829 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (4)].c);
@@ -7338,8 +7128,8 @@ yyreduce:
     ;}
     break;
 
-  case 298:
-#line 2957 "Gmsh.y"
+  case 294:
+#line 2849 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(2) - (4)].c);
@@ -7354,8 +7144,8 @@ yyreduce:
     ;}
     break;
 
-  case 299:
-#line 2970 "Gmsh.y"
+  case 295:
+#line 2862 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (2)].c);
@@ -7370,8 +7160,8 @@ yyreduce:
     ;}
     break;
 
-  case 300:
-#line 2983 "Gmsh.y"
+  case 296:
+#line 2875 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (5)].c);
@@ -7393,8 +7183,8 @@ yyreduce:
     ;}
     break;
 
-  case 301:
-#line 3006 "Gmsh.y"
+  case 297:
+#line 2898 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7414,8 +7204,8 @@ yyreduce:
     ;}
     break;
 
-  case 302:
-#line 3024 "Gmsh.y"
+  case 298:
+#line 2916 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7435,8 +7225,8 @@ yyreduce:
     ;}
     break;
 
-  case 303:
-#line 3042 "Gmsh.y"
+  case 299:
+#line 2934 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7456,8 +7246,8 @@ yyreduce:
     ;}
     break;
 
-  case 304:
-#line 3060 "Gmsh.y"
+  case 300:
+#line 2952 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7477,124 +7267,124 @@ yyreduce:
     ;}
     break;
 
-  case 305:
-#line 3078 "Gmsh.y"
+  case 301:
+#line 2970 "Gmsh.y"
     { 
       (yyval.d) = GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
     ;}
     break;
 
-  case 306:
-#line 3086 "Gmsh.y"
+  case 302:
+#line 2978 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
-  case 307:
-#line 3090 "Gmsh.y"
+  case 303:
+#line 2982 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
-  case 308:
-#line 3094 "Gmsh.y"
+  case 304:
+#line 2986 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
-  case 309:
-#line 3098 "Gmsh.y"
+  case 305:
+#line 2990 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
-  case 310:
-#line 3102 "Gmsh.y"
+  case 306:
+#line 2994 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
-  case 311:
-#line 3109 "Gmsh.y"
+  case 307:
+#line 3001 "Gmsh.y"
     { 
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     ;}
     break;
 
-  case 312:
-#line 3113 "Gmsh.y"
+  case 308:
+#line 3005 "Gmsh.y"
     { 
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     ;}
     break;
 
-  case 313:
-#line 3117 "Gmsh.y"
+  case 309:
+#line 3009 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
-  case 314:
-#line 3121 "Gmsh.y"
+  case 310:
+#line 3013 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
-  case 315:
-#line 3128 "Gmsh.y"
+  case 311:
+#line 3020 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
     ;}
     break;
 
-  case 316:
-#line 3133 "Gmsh.y"
+  case 312:
+#line 3025 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
-  case 317:
-#line 3141 "Gmsh.y"
+  case 313:
+#line 3033 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
     ;}
     break;
 
-  case 318:
-#line 3146 "Gmsh.y"
+  case 314:
+#line 3038 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
-  case 319:
-#line 3150 "Gmsh.y"
+  case 315:
+#line 3042 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
     ;}
     break;
 
-  case 320:
-#line 3155 "Gmsh.y"
+  case 316:
+#line 3047 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
-  case 321:
-#line 3159 "Gmsh.y"
+  case 317:
+#line 3051 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7604,8 +7394,8 @@ yyreduce:
     ;}
     break;
 
-  case 322:
-#line 3167 "Gmsh.y"
+  case 318:
+#line 3059 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7615,8 +7405,8 @@ yyreduce:
     ;}
     break;
 
-  case 323:
-#line 3178 "Gmsh.y"
+  case 319:
+#line 3070 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7626,8 +7416,8 @@ yyreduce:
     ;}
     break;
 
-  case 324:
-#line 3186 "Gmsh.y"
+  case 320:
+#line 3078 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7637,8 +7427,8 @@ yyreduce:
     ;}
     break;
 
-  case 325:
-#line 3194 "Gmsh.y"
+  case 321:
+#line 3086 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d)); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d += 1.) : (d -= 1.)) 
@@ -7646,8 +7436,8 @@ yyreduce:
     ;}
     break;
 
-  case 326:
-#line 3200 "Gmsh.y"
+  case 322:
+#line 3092 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
@@ -7660,8 +7450,8 @@ yyreduce:
    ;}
     break;
 
-  case 327:
-#line 3211 "Gmsh.y"
+  case 323:
+#line 3103 "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
@@ -7683,8 +7473,8 @@ yyreduce:
     ;}
     break;
 
-  case 328:
-#line 3231 "Gmsh.y"
+  case 324:
+#line 3123 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -7696,8 +7486,8 @@ yyreduce:
     ;}
     break;
 
-  case 329:
-#line 3241 "Gmsh.y"
+  case 325:
+#line 3133 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -7709,8 +7499,8 @@ yyreduce:
     ;}
     break;
 
-  case 330:
-#line 3251 "Gmsh.y"
+  case 326:
+#line 3143 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -7729,8 +7519,8 @@ yyreduce:
     ;}
     break;
 
-  case 331:
-#line 3268 "Gmsh.y"
+  case 327:
+#line 3160 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -7756,30 +7546,30 @@ yyreduce:
     ;}
     break;
 
-  case 332:
-#line 3295 "Gmsh.y"
+  case 328:
+#line 3187 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
     ;}
     break;
 
-  case 333:
-#line 3300 "Gmsh.y"
+  case 329:
+#line 3192 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
-  case 334:
-#line 3304 "Gmsh.y"
+  case 330:
+#line 3196 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
-  case 335:
-#line 3308 "Gmsh.y"
+  case 331:
+#line 3200 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -7790,22 +7580,22 @@ yyreduce:
     ;}
     break;
 
-  case 336:
-#line 3321 "Gmsh.y"
+  case 332:
+#line 3213 "Gmsh.y"
     {
       (yyval.u) = CTX.PACK_COLOR((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
-  case 337:
-#line 3325 "Gmsh.y"
+  case 333:
+#line 3217 "Gmsh.y"
     {
       (yyval.u) = CTX.PACK_COLOR((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
-  case 338:
-#line 3337 "Gmsh.y"
+  case 334:
+#line 3229 "Gmsh.y"
     {
       int flag;
       (yyval.u) = Get_ColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -7814,8 +7604,8 @@ yyreduce:
     ;}
     break;
 
-  case 339:
-#line 3344 "Gmsh.y"
+  case 335:
+#line 3236 "Gmsh.y"
     {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -7835,15 +7625,15 @@ yyreduce:
     ;}
     break;
 
-  case 340:
-#line 3365 "Gmsh.y"
+  case 336:
+#line 3257 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
-  case 341:
-#line 3369 "Gmsh.y"
+  case 337:
+#line 3261 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)(yyvsp[(3) - (6)].d));
@@ -7857,44 +7647,44 @@ yyreduce:
     ;}
     break;
 
-  case 342:
-#line 3384 "Gmsh.y"
+  case 338:
+#line 3276 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
     ;}
     break;
 
-  case 343:
-#line 3389 "Gmsh.y"
+  case 339:
+#line 3281 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
-  case 344:
-#line 3396 "Gmsh.y"
+  case 340:
+#line 3288 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
-  case 345:
-#line 3400 "Gmsh.y"
+  case 341:
+#line 3292 "Gmsh.y"
     {
       Msg(WARNING, "Named string expressions not implemented yet");
     ;}
     break;
 
-  case 346:
-#line 3407 "Gmsh.y"
+  case 342:
+#line 3299 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
-  case 347:
-#line 3411 "Gmsh.y"
+  case 343:
+#line 3303 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32*sizeof(char));
       time_t now;
@@ -7904,8 +7694,8 @@ yyreduce:
     ;}
     break;
 
-  case 348:
-#line 3419 "Gmsh.y"
+  case 344:
+#line 3311 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c))+strlen((yyvsp[(5) - (6)].c))+1)*sizeof(char));
       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
@@ -7915,8 +7705,8 @@ yyreduce:
     ;}
     break;
 
-  case 349:
-#line 3427 "Gmsh.y"
+  case 345:
+#line 3319 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c))+1)*sizeof(char));
       int i;
@@ -7932,8 +7722,8 @@ yyreduce:
     ;}
     break;
 
-  case 350:
-#line 3441 "Gmsh.y"
+  case 346:
+#line 3333 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c))+1)*sizeof(char));
       int i;
@@ -7949,15 +7739,15 @@ yyreduce:
     ;}
     break;
 
-  case 351:
-#line 3455 "Gmsh.y"
+  case 347:
+#line 3347 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
-  case 352:
-#line 3459 "Gmsh.y"
+  case 348:
+#line 3351 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -7978,8 +7768,8 @@ yyreduce:
     ;}
     break;
 
-  case 353:
-#line 3478 "Gmsh.y"
+  case 349:
+#line 3370 "Gmsh.y"
     { 
       const char* (*pStrOpt)(int num, int action, const char *value);
       StringXString *pStrCat;
@@ -8004,8 +7794,8 @@ yyreduce:
     ;}
     break;
 
-  case 354:
-#line 3501 "Gmsh.y"
+  case 350:
+#line 3393 "Gmsh.y"
     { 
       const char* (*pStrOpt)(int num, int action, const char *value);
       StringXString *pStrCat;
@@ -8032,7 +7822,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 8036 "Gmsh.tab.cpp"
+#line 7826 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -8246,7 +8036,7 @@ yyreturn:
 }
 
 
-#line 3525 "Gmsh.y"
+#line 3417 "Gmsh.y"
 
 
 void DeleteSymbol(void *a, void *b)
diff --git a/Parser/Gmsh.tab.hpp b/Parser/Gmsh.tab.hpp
index 5d7f03da049da01c0d7a8b13a0c864a9bf139c21..0ae3dd8d10b82fb01a68d5f1376cc5c0b9a01371 100644
--- a/Parser/Gmsh.tab.hpp
+++ b/Parser/Gmsh.tab.hpp
@@ -114,57 +114,51 @@
      tCoherence = 330,
      tIntersect = 331,
      tBoundary = 332,
-     tAttractor = 333,
-     tLayers = 334,
-     tHole = 335,
-     tAlias = 336,
-     tAliasWithOptions = 337,
-     tText2D = 338,
-     tText3D = 339,
-     tInterpolationScheme = 340,
-     tTime = 341,
-     tCombine = 342,
-     tBSpline = 343,
-     tBezier = 344,
-     tNurbs = 345,
-     tOrder = 346,
-     tKnots = 347,
-     tColor = 348,
-     tColorTable = 349,
-     tFor = 350,
-     tIn = 351,
-     tEndFor = 352,
-     tIf = 353,
-     tEndIf = 354,
-     tExit = 355,
-     tField = 356,
-     tThreshold = 357,
-     tStructured = 358,
-     tLatLon = 359,
-     tGrad = 360,
-     tPostView = 361,
-     tReturn = 362,
-     tCall = 363,
-     tFunction = 364,
-     tShow = 365,
-     tHide = 366,
-     tGetValue = 367,
-     tGMSH_MAJOR_VERSION = 368,
-     tGMSH_MINOR_VERSION = 369,
-     tGMSH_PATCH_VERSION = 370,
-     tAFFECTDIVIDE = 371,
-     tAFFECTTIMES = 372,
-     tAFFECTMINUS = 373,
-     tAFFECTPLUS = 374,
-     tOR = 375,
-     tAND = 376,
-     tNOTEQUAL = 377,
-     tEQUAL = 378,
-     tGREATEROREQUAL = 379,
-     tLESSOREQUAL = 380,
-     UNARYPREC = 381,
-     tMINUSMINUS = 382,
-     tPLUSPLUS = 383
+     tLayers = 333,
+     tHole = 334,
+     tAlias = 335,
+     tAliasWithOptions = 336,
+     tText2D = 337,
+     tText3D = 338,
+     tInterpolationScheme = 339,
+     tTime = 340,
+     tCombine = 341,
+     tBSpline = 342,
+     tBezier = 343,
+     tNurbs = 344,
+     tOrder = 345,
+     tKnots = 346,
+     tColor = 347,
+     tColorTable = 348,
+     tFor = 349,
+     tIn = 350,
+     tEndFor = 351,
+     tIf = 352,
+     tEndIf = 353,
+     tExit = 354,
+     tField = 355,
+     tReturn = 356,
+     tCall = 357,
+     tFunction = 358,
+     tShow = 359,
+     tHide = 360,
+     tGetValue = 361,
+     tGMSH_MAJOR_VERSION = 362,
+     tGMSH_MINOR_VERSION = 363,
+     tGMSH_PATCH_VERSION = 364,
+     tAFFECTDIVIDE = 365,
+     tAFFECTTIMES = 366,
+     tAFFECTMINUS = 367,
+     tAFFECTPLUS = 368,
+     tOR = 369,
+     tAND = 370,
+     tNOTEQUAL = 371,
+     tEQUAL = 372,
+     tGREATEROREQUAL = 373,
+     tLESSOREQUAL = 374,
+     UNARYPREC = 375,
+     tMINUSMINUS = 376,
+     tPLUSPLUS = 377
    };
 #endif
 /* Tokens.  */
@@ -243,57 +237,51 @@
 #define tCoherence 330
 #define tIntersect 331
 #define tBoundary 332
-#define tAttractor 333
-#define tLayers 334
-#define tHole 335
-#define tAlias 336
-#define tAliasWithOptions 337
-#define tText2D 338
-#define tText3D 339
-#define tInterpolationScheme 340
-#define tTime 341
-#define tCombine 342
-#define tBSpline 343
-#define tBezier 344
-#define tNurbs 345
-#define tOrder 346
-#define tKnots 347
-#define tColor 348
-#define tColorTable 349
-#define tFor 350
-#define tIn 351
-#define tEndFor 352
-#define tIf 353
-#define tEndIf 354
-#define tExit 355
-#define tField 356
-#define tThreshold 357
-#define tStructured 358
-#define tLatLon 359
-#define tGrad 360
-#define tPostView 361
-#define tReturn 362
-#define tCall 363
-#define tFunction 364
-#define tShow 365
-#define tHide 366
-#define tGetValue 367
-#define tGMSH_MAJOR_VERSION 368
-#define tGMSH_MINOR_VERSION 369
-#define tGMSH_PATCH_VERSION 370
-#define tAFFECTDIVIDE 371
-#define tAFFECTTIMES 372
-#define tAFFECTMINUS 373
-#define tAFFECTPLUS 374
-#define tOR 375
-#define tAND 376
-#define tNOTEQUAL 377
-#define tEQUAL 378
-#define tGREATEROREQUAL 379
-#define tLESSOREQUAL 380
-#define UNARYPREC 381
-#define tMINUSMINUS 382
-#define tPLUSPLUS 383
+#define tLayers 333
+#define tHole 334
+#define tAlias 335
+#define tAliasWithOptions 336
+#define tText2D 337
+#define tText3D 338
+#define tInterpolationScheme 339
+#define tTime 340
+#define tCombine 341
+#define tBSpline 342
+#define tBezier 343
+#define tNurbs 344
+#define tOrder 345
+#define tKnots 346
+#define tColor 347
+#define tColorTable 348
+#define tFor 349
+#define tIn 350
+#define tEndFor 351
+#define tIf 352
+#define tEndIf 353
+#define tExit 354
+#define tField 355
+#define tReturn 356
+#define tCall 357
+#define tFunction 358
+#define tShow 359
+#define tHide 360
+#define tGetValue 361
+#define tGMSH_MAJOR_VERSION 362
+#define tGMSH_MINOR_VERSION 363
+#define tGMSH_PATCH_VERSION 364
+#define tAFFECTDIVIDE 365
+#define tAFFECTTIMES 366
+#define tAFFECTMINUS 367
+#define tAFFECTPLUS 368
+#define tOR 369
+#define tAND 370
+#define tNOTEQUAL 371
+#define tEQUAL 372
+#define tGREATEROREQUAL 373
+#define tLESSOREQUAL 374
+#define UNARYPREC 375
+#define tMINUSMINUS 376
+#define tPLUSPLUS 377
 
 
 
@@ -310,8 +298,8 @@ typedef union YYSTYPE
   Shape s;
   List_T *l;
 }
-/* Line 1529 of yacc.c.  */
-#line 315 "Gmsh.tab.hpp"
+/* Line 1489 of yacc.c.  */
+#line 303 "Gmsh.tab.hpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index fd2985ce60791f243fedfc709fd7630303a81017..3d36ba4aeedd2bdfc5b96ae00807b29e80abfe16 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.y,v 1.302 2008-02-23 15:30:09 geuzaine Exp $
+// $Id: Gmsh.y,v 1.303 2008-03-18 08:41:25 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -101,11 +101,11 @@ int PrintListOfDouble(char *format, List_T *list, char *buffer);
 %token tUsing tBump tProgression tPlugin
 %token tRotate tTranslate tSymmetry tDilate tExtrude tDuplicata
 %token tLoop tRecombine tSmoother tDelete tCoherence tIntersect tBoundary
-%token tAttractor tLayers tHole tAlias tAliasWithOptions
+%token tLayers tHole tAlias tAliasWithOptions
 %token tText2D tText3D tInterpolationScheme  tTime tCombine
 %token tBSpline tBezier tNurbs tOrder tKnots
 %token tColor tColorTable tFor tIn tEndFor tIf tEndIf tExit
-%token tField tThreshold tStructured tLatLon tGrad tPostView 
+%token tField 
 %token tReturn tCall tFunction tShow tHide tGetValue
 %token tGMSH_MAJOR_VERSION tGMSH_MINOR_VERSION tGMSH_PATCH_VERSION
 
@@ -950,7 +950,62 @@ Affectation :
       Free($1);
       List_Delete($8);
     }
-
+	| tSTRING tField tAFFECT FExpr tEND
+	{
+		if(!strcmp($1,"Background")){
+			GModel::current()->fields.background_field=(int)$4;
+		}else{
+			yymsg(GERROR, "Unknown command %s Field.",$1);
+		}
+	}
+	| tField '[' FExpr ']' tAFFECT tSTRING tEND
+	{
+		if(!GModel::current()->fields.new_field((int)$3,$6))
+				yymsg(GERROR, "Cannot create field %i of type '%s'.", (int)$3, $6);
+	}
+  | tField '[' FExpr ']' '.' tSTRING  tAFFECT FExpr tEND
+	{
+		Field *field=GModel::current()->fields.get((int)$3);
+		if(field){
+			FieldOption *option=field->options[$6];
+			if(option){
+				try {option->numerical_value($8);}
+				catch(...){
+					yymsg(GERROR, "Cannot assign a numerical value to  option '%s' in field %i of type '%s'", $6,(int)$3,field->get_name());
+				}
+			}else yymsg(GERROR, "Unknown option '%s' in field %i of type '%s'", $6,(int)$3,field->get_name());
+		}else yymsg(GERROR, "No field with id %i",(int)$3);
+			
+	}
+  | tField '['FExpr ']' '.' tSTRING  tAFFECT StringExpr tEND
+	{
+		Field *field=GModel::current()->fields.get((int)$3);
+		if(field){
+			FieldOption *option=field->options[$6];
+			if(option){
+				try {option->string()=$8;}
+				catch (...){
+					yymsg(GERROR, "Cannot assign a string value to  option '%s' in field %i of type '%s'", $6,(int)$3,field->get_name());
+				}
+			}else yymsg(GERROR, "Unknown option '%s' in field %i of type '%s'", $6,(int)$3,field->get_name());
+		}else yymsg(GERROR, "No field with id %i",(int)$3);
+	}
+  | tField '['FExpr ']' '.' tSTRING  tAFFECT ListOfDouble tEND
+	{
+		Field *field=GModel::current()->fields.get((int)$3);
+		if(field){
+			FieldOption *option=field->options[$6];
+			if(option){
+				std::list<int> &vl=option->list();
+				vl.clear();
+				for(int i=0;i<List_Nbr($8);i++){
+					double id;
+					List_Read($8,i,&id);
+					vl.push_back(id);
+				}
+			}else yymsg(GERROR, "Unknown option '%s' in field %i of type '%s'", $6,(int)$3,field->get_name());
+		}else yymsg(GERROR, "No field with id %i",(int)$3);
+	}
   // Plugins
 
   | tPlugin '(' tSTRING ')' '.' tSTRING tAFFECT FExpr tEND 
@@ -1033,172 +1088,6 @@ Shape :
       $$.Type = MSH_PHYSICAL_POINT;
       $$.Num = num;
     }
-  | tAttractor tPoint tField '(' FExpr ')' tAFFECT ListOfDouble tEND 
-    {
-      AttractorField *att = new AttractorField();
-      for(int i = 0; i < List_Nbr($8); i++){
-        double d;
-        List_Read($8, i, &d);
-        Vertex *v = FindPoint((int)d); 
-        if(v)
-          att->addPoint(v->Pos.X, v->Pos.Y, v->Pos.Z);
-        else{
-          GVertex *gv = GModel::current()->getVertexByTag((int)d);
-          if(gv) 
-            att->addPoint(gv->x(), gv->y(), gv->z());
-        }
-      }
-      att->buildFastSearchStructures();
-      fields.insert(att, (int)$5);
-      // dummy values
-      $$.Type = 0;
-      $$.Num = 0;
-    }
-  | tLatLon tField '(' FExpr ')' tAFFECT FExpr tEND
-    {
-      fields.insert(new LatLonField(fields.get((int)$7)), (int)$4);
-      // dummy values
-      $$.Type = 0;
-      $$.Num = 0;
-    }
-  | tPostView tField '(' FExpr ')' tAFFECT FExpr tEND 
-    {
-      int index = (int)$7;
-      if(index >= 0 && index < (int)PView::list.size()) 
-        fields.insert(new PostViewField(PView::list[index]), (int)$4);
-      else
-        yymsg(GERROR, "Field %i error, view %i does not exist", (int)$4, (int)$7);
-      // dummy values
-      $$.Type = 0;
-      $$.Num = 0;
-    }
-  | tThreshold tField '(' FExpr ')' tAFFECT ListOfDouble tEND 
-    {
-      double pars[] = {0, CTX.lc/10, CTX.lc, CTX.lc/100, CTX.lc/20};
-      for(int i = 0; i < List_Nbr($7); i++){
-	if(i > 4)
-	  yymsg(GERROR, "Too many parameters for Thresold Field (max=5)");
-	else
-	  List_Read($7, i, &pars[i]);
-      }
-      fields.insert(new ThresholdField(fields.get((int)pars[0]), pars[1], 
-				       pars[2], pars[3], pars[4]), (int)$4);
-      // dummy values
-      $$.Type = 0;
-      $$.Num = 0;
-    }
-  | tFunction tField '(' FExpr ')' tAFFECT tBIGSTR tEND
-    {
-      std::list<Field*> *flist = new std::list<Field*>;
-      fields.insert(new FunctionField(flist,$7), (int)$4);
-      // dummy values
-      $$.Type = 0;
-      $$.Num = 0;
-    }
-  | tFunction tField '(' FExpr ')' tAFFECT tBIGSTR ListOfDouble tEND
-    {
-      std::list<Field*> *flist = new std::list<Field*>;
-      flist->resize(0);
-      for(int i = 0; i < List_Nbr($8); i++){
-	double id;
-	List_Read($8, i, &id);
-	Field *pfield = fields.get((int)id);
-	if(pfield) flist->push_front(pfield);
-      }
-      fields.insert(new FunctionField(flist,$7), (int)$4);
-      // dummy values
-      $$.Type = 0;
-      $$.Num = 0;
-    }
-  | tStructured tField '(' FExpr ')' tAFFECT tBIGSTR tEND
-    {
-      fields.insert(new StructuredField($7), (int)$4);
-      // dummy values
-      $$.Type = 0;
-      $$.Num = 0;
-    }
-  | tCharacteristic tLength tField ListOfDouble tEND 
-    {
-      for(int i = 0; i < List_Nbr($4); i++){
-	double id;
-	List_Read($4, i, &id);
-        BGMAddField(fields.get((int)id));
-      }
-      // dummy values
-      $$.Type = 0;
-      $$.Num = 0;
-    }
-  // backward compatibility
-  | tAttractor tPoint ListOfDouble tAFFECT ListOfDouble  tEND
-    {
-      double pars[] = { CTX.lc/10, CTX.lc/100., CTX.lc/20, 1, 3 };
-      for(int i = 0; i < List_Nbr($5); i++){
-	if(i > 4) 
-	  yymsg(GERROR, "Too many paramaters for attractor line (max = 5)");	  
-	else
-	  List_Read($5, i, &pars[i]);
-      }
-      // treshold attractor: first parameter is the treshold, next two
-      // are the in and out size fields, last is transition factor
-      AttractorField *attractor = new AttractorField();
-      fields.insert(attractor);
-      Field *threshold = new ThresholdField(attractor, pars[0], pars[0] * pars[4], 
-					    pars[1], pars[2]);
-      fields.insert(threshold);
-      BGMAddField(threshold);
-      for(int i = 0; i < List_Nbr($3); i++){
-	double d;
-	List_Read($3, i, &d);
-	Vertex *v = FindPoint((int)d); 
-	if(v)
-	  attractor->addPoint(v->Pos.X, v->Pos.Y, v->Pos.Z);
-	else{
-	  GVertex *gv = GModel::current()->getVertexByTag((int)d);
-	  if(gv) 
-	    attractor->addPoint(gv->x(), gv->y(), gv->z());
-	}
-      }
-      attractor->buildFastSearchStructures();
-      // dummy values
-      $$.Type = 0;
-      $$.Num = 0;
-    }
-  | tAttractor tLine ListOfDouble tAFFECT ListOfDouble tEND
-    {
-      double pars[] = { CTX.lc/10, CTX.lc/100., CTX.lc/20, 10, 3 };
-      for(int i = 0; i < List_Nbr($5); i++){
-	if(i > 4) 
-	  yymsg(GERROR, "Too many paramaters for attractor line (max = 5)");	  
-	else
-	  List_Read($5, i, &pars[i]);
-      }
-      // treshold attractor: first parameter is the treshold, next two
-      // are the in and out size fields, last is transition factor
-      AttractorField *att = new AttractorField();
-      fields.insert(att);
-      Field *threshold = new ThresholdField(att, pars[0], pars[0] * pars[4],
-					    pars[1], pars[2]);
-      fields.insert(threshold);
-      BGMAddField(threshold);
-      for(int i = 0; i < List_Nbr($3); i++){
-	double d;
-	List_Read($3, i, &d);
-	Curve *c = FindCurve((int)d); 
-	if(c){
-	  att->addCurve(c, (int)pars[3]);
-	}
-	else{
-	  GEdge *ge = GModel::current()->getEdgeByTag((int)d);
-	  if(ge){
-	    att->addGEdge(ge, (int)pars[3]);
-	  }
-	}
-      }
-      att->buildFastSearchStructures();
-      // dummy values
-      $$.Type = 0;
-      $$.Num = 0;
-    }
   | tCharacteristic tLength ListOfDouble tAFFECT FExpr tEND
     {      
       for(int i = 0; i < List_Nbr($3); i++){
@@ -1842,6 +1731,9 @@ Delete :
       }
       List_Delete($3);
     }
+	| tDelete tField '[' FExpr ']' tEND{
+		GModel::current()->fields.delete_field((int)$4);
+	}
   | tDelete tSTRING '[' FExpr ']' tEND
     {
       if(!strcmp($2, "View")){
@@ -2001,17 +1893,17 @@ Command :
     }
   | tSTRING tSTRING tSTRING '[' FExpr ']' tEND
     {
-      if(!strcmp($1, "Background") && !strcmp($2, "Mesh")  && !strcmp($3, "View")){
+     /* if(!strcmp($1, "Background") && !strcmp($2, "Mesh")  && !strcmp($3, "View")){
 	int index = (int)$5;
 	if(index >= 0 && index < (int)PView::list.size()){
 	  Field *field = new PostViewField(PView::list[index]);
-	  fields.insert(field);
+	  GModel::current()->fields.insert(field);
 	  BGMAddField(field);
 	}
 	else
 	  yymsg(GERROR, "Unknown view %d", index);
       }
-      else
+      else*/
 	yymsg(GERROR, "Unknown command '%s'", $1);
       Free($1); Free($2); Free($3);
     }
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index ae7f8bb723ab4013c824de973d9a609c9592c65d..ce6d5ec520a082d48dad30724f96ca566115e023 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -6,10 +6,29 @@
 
 /* A lexical scanner generated by flex */
 
+#define yy_create_buffer gmsh_yy_create_buffer
+#define yy_delete_buffer gmsh_yy_delete_buffer
+#define yy_flex_debug gmsh_yy_flex_debug
+#define yy_init_buffer gmsh_yy_init_buffer
+#define yy_flush_buffer gmsh_yy_flush_buffer
+#define yy_load_buffer_state gmsh_yy_load_buffer_state
+#define yy_switch_to_buffer gmsh_yy_switch_to_buffer
+#define yyin gmsh_yyin
+#define yyleng gmsh_yyleng
+#define yylex gmsh_yylex
+#define yylineno gmsh_yylineno
+#define yyout gmsh_yyout
+#define yyrestart gmsh_yyrestart
+#define yytext gmsh_yytext
+#define yywrap gmsh_yywrap
+#define yyalloc gmsh_yyalloc
+#define yyrealloc gmsh_yyrealloc
+#define yyfree gmsh_yyfree
+
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
+#define YY_FLEX_SUBMINOR_VERSION 34
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -31,7 +50,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -94,11 +113,12 @@ typedef unsigned int flex_uint32_t;
 
 #else	/* ! __cplusplus */
 
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif	/* __STDC__ */
+#endif	/* defined (__STDC__) */
 #endif	/* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -181,11 +201,13 @@ extern FILE *gmsh_yyin, *gmsh_yyout;
 /* The following is because we cannot portably get our hands on size_t
  * (without autoconf's help, which isn't available because we want
  * flex-generated scanners to compile on their own).
+ * Given that the standard has decreed that size_t exists since 1989,
+ * I guess we can afford to depend on it. Manoj.
  */
 
 #ifndef YY_TYPEDEF_YY_SIZE_T
 #define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int yy_size_t;
+typedef size_t yy_size_t;
 #endif
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -364,8 +386,8 @@ static void yy_fatal_error (yyconst char msg[]  );
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 150
-#define YY_END_OF_BUFFER 151
+#define YY_NUM_RULES 145
+#define YY_END_OF_BUFFER 146
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,79 +395,76 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[647] =
+static yyconst flex_int16_t yy_accept[613] =
     {   0,
-        0,    0,  151,  149,    1,    1,  149,    5,  149,    6,
-      149,  149,  149,  149,  149,  144,   20,    2,  149,   15,
-      149,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  149,   27,   23,   18,   24,   16,   25,
-       17,    0,  146,    3,    4,   19,  145,  144,    0,   28,
-       26,   29,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,   87,   86,
-
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  103,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  140,  141,  148,
-      148,  148,  148,  148,  148,  148,  148,   22,   21,    0,
-      145,    0,    0,  147,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,   51,  148,  148,  148,  148,  148,  148,
-      148,  148,   63,  148,  148,  148,  148,  148,   76,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,   94,  148,  148,  148,  148,  148,  148,
-
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  119,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  134,  148,  148,  148,  148,
-      148,  148,    0,  146,    0,    0,  145,   30,  148,  148,
-      148,  148,   34,   36,  148,  148,  148,  148,   43,   58,
-      148,   46,  148,  148,  148,  148,  148,  148,  148,   50,
-      148,  148,   62,  148,  148,  148,  148,  148,   71,  148,
-       72,  148,  148,   75,  148,  148,  148,   79,   83,   84,
-      148,  148,  148,  148,  148,  148,  148,   92,  148,   93,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-
-      148,  148,  148,  148,  115,  148,  148,  148,  148,  130,
-      120,  148,  148,  148,  148,  118,  148,  148,  148,  148,
-      148,  148,  143,  133,  148,  148,  148,  148,  148,   10,
-        9,    8,  148,   12,   14,    0,  145,   32,  148,  148,
-      148,   38,  148,  148,  148,  148,  148,  148,  148,  148,
-       54,  148,  148,  148,  148,  148,  148,  148,  148,   69,
-      148,  148,   73,   74,  148,  148,  148,   85,  148,  148,
-       89,  148,  148,  148,   95,  148,  148,  148,  100,  101,
-      148,  148,  104,  148,  105,  148,  148,  106,  148,  148,
-      148,  148,  148,  114,  148,  148,  148,  148,  148,  148,
-
-      148,  148,  148,  148,  148,  136,  148,  137,  148,   11,
-      148,   13,  148,   31,   35,   37,  148,  148,   41,  148,
-      148,  148,  148,   47,  148,  148,  148,  148,  148,   59,
-       60,  148,  148,  148,   68,  148,  148,  148,  148,  148,
-      148,  148,  148,   90,   96,   91,  148,  148,   97,  148,
-      148,  111,  148,  148,  110,  148,  148,  116,  113,  148,
-      121,  122,  148,  126,  148,  148,  148,  148,  148,  148,
-      148,  148,  138,    7,  148,   39,  148,   44,  148,  148,
-      148,  148,  148,  148,   49,   53,  148,  148,   65,  148,
-      148,  148,   66,  148,  148,  148,  148,  148,  148,  148,
-
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  125,
-      148,  148,  148,  123,  148,  148,  148,  148,  148,  148,
-       42,  148,  148,  148,  148,  148,  148,  148,   64,   67,
-      148,   77,  148,  148,  148,   78,  148,  148,   98,   99,
-      148,  102,  148,  139,  148,  148,  117,  148,  148,  148,
-      124,  148,  148,  148,  148,   40,  148,  148,  148,   48,
-      148,  148,   61,   70,  148,  148,  148,  148,   88,  148,
-      148,  148,  112,  127,  148,  148,  135,  148,  132,  148,
-      148,   57,  148,   55,  148,  148,  148,  148,  148,  108,
-      148,  148,  148,  129,  148,  148,   45,  148,   56,  148,
-
-      148,  148,  148,  109,  107,  128,  131,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-       52,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-       33,  148,  148,  148,  148,  148,  148,  148,  148,   80,
-       81,   82,  148,  148,  142,    0
+        0,    0,  146,  144,    1,    1,  144,    5,  144,    6,
+      144,  144,  144,  144,  144,  139,   21,    2,  144,   16,
+      144,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  143,  144,   28,   24,   19,   25,   17,   26,
+       18,    0,  141,    3,    4,   20,  140,  139,    0,   29,
+       27,   30,  143,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  143,  143,  143,  143,  143,   86,   85,  143,
+
+      143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+      101,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  143,  143,  143,  143,  135,  136,  143,  143,
+      143,  143,  143,  143,  143,   23,   22,    0,  140,    0,
+        0,  142,  143,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+       51,  143,  143,  143,  143,  143,  143,  143,  143,   63,
+      143,  143,  143,  143,  143,   76,  143,  143,  143,  143,
+      143,  143,  143,  143,  143,  143,  143,  143,   92,  143,
+      143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+
+      143,  143,  143,  143,  143,  143,  143,  143,  143,  117,
+      143,  143,  143,  143,  143,  143,  143,  143,  143,  131,
+      143,  143,  143,  143,  143,    0,  141,    0,    0,  140,
+       31,  143,  143,  143,  143,   35,   37,  143,  143,  143,
+       43,   58,  143,   46,  143,  143,  143,  143,  143,  143,
+      143,   50,  143,  143,   62,  143,  143,  143,  143,  143,
+       71,  143,   72,  143,  143,   75,  143,  143,  143,   82,
+       83,  143,  143,  143,  143,  143,  143,   90,  143,   91,
+      143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  143,  113,  143,  143,  143,  143,  127,  118,
+
+      143,  143,  143,  143,  116,  143,  143,  143,  143,  143,
+      138,  130,  143,  143,  143,  143,   10,   15,    9,    8,
+      143,   12,   14,    0,  140,   33,  143,  143,  143,   39,
+      143,  143,  143,  143,  143,  143,  143,   54,  143,  143,
+      143,  143,  143,  143,  143,  143,   69,  143,  143,   73,
+       74,  143,  143,  143,   84,  143,  143,   88,  143,  143,
+       93,  143,  143,  143,   98,   99,  143,  143,  102,  143,
+      103,  143,  104,  143,  143,  143,  143,  143,  112,  143,
+      143,  143,  143,  143,  143,  143,  143,  143,  132,  143,
+      133,  143,   11,  143,   13,  143,   32,   36,   38,  143,
+
+       41,  143,  143,  143,  143,   47,  143,  143,  143,  143,
+      143,   59,   60,  143,  143,  143,   68,  143,  143,  143,
+      143,  143,  143,  143,  143,   94,   89,  143,  143,   95,
+      143,  143,  109,  143,  108,  143,  143,  114,  111,  143,
+      119,  120,  143,  124,  143,  143,  143,  143,  143,  143,
+      134,    7,  143,   40,   44,  143,  143,  143,  143,  143,
+      143,   49,   53,  143,  143,   65,  143,  143,  143,   66,
+      143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  143,  143,  143,  123,  143,  143,  121,  143,
+      143,  143,  143,   42,  143,  143,  143,  143,  143,  143,
+
+      143,   64,   67,  143,   77,  143,  143,  143,   78,  143,
+      143,   96,   97,  143,  100,  143,  143,  143,  115,  143,
+      143,  122,  143,  143,  143,  143,  143,  143,   48,  143,
+      143,   61,   70,  143,  143,  143,  143,   87,  143,  143,
+      143,  110,  125,  143,  143,  129,  143,  143,   57,  143,
+       55,  143,  143,  143,  143,  143,  106,  143,  143,  143,
+      143,  143,   45,  143,   56,  143,  143,  143,  143,  107,
+      105,  126,  128,  143,  143,  143,  143,  143,  143,  143,
+      143,  143,  143,  143,  143,  143,   52,  143,  143,  143,
+      143,  143,  143,  143,  143,  143,   34,  143,  143,  143,
+
+      143,  143,  143,  143,  143,   79,   80,   81,  143,  143,
+      137,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -492,157 +511,151 @@ static yyconst flex_int32_t yy_meta[73] =
         2,    1
     } ;
 
-static yyconst flex_int16_t yy_base[648] =
+static yyconst flex_int16_t yy_base[614] =
     {   0,
-        0,    0,  768,  769,  769,  769,  746,  769,  760,  769,
-      744,   64,   65,   63,   75,   77,  769,  769,  743,  742,
-      741,   46,   48,   65,   66,   65,   80,   67,   45,   90,
-        0,  702,   92,   46,  694,  696,  101,   94,  108,  152,
-      694,  697,  705,  683,  769,  769,  769,  769,  769,  769,
-      769,  743,  171,  769,  769,  769,  176,  194,  215,  769,
-      769,  769,    0,  693,  697,  702,  695,   86,  688,  677,
-      681,  688,   79,  690,  697,  680,  159,  685,  684,  693,
-      678,  681,  687,  687,  110,  687,  683,  673,  672,  668,
-      671,  688,  663,  680,  676,  668,  663,  681,    0,  657,
-
-      661,  107,  661,  660,   97,  687,  667,  653,  665,  651,
-      643,    0,   35,  178,  121,  653,   32,  646,  653,  649,
-      649,  647,  180,  643,  642,  641,  645,    0,    0,  667,
-      642,  637,  649,  651,  642,  639,  627,  769,  769,  238,
-      243,  252,  258,  263,  630,  646,  154,  633,  632,  627,
-      632,  633,  628,  625,  628,  626,  626,  619,  632,  629,
-      619,  153,  615,  623,  625,  628,  606,  616,  617,  166,
-      614,  605,    0,  606,  604,  610,  606,  615,    0,  615,
-      633,  618,  611,  609,  608,  598,  630,  605,  590,  620,
-      602,  599,  600,  636,  588,  602,  581,  598,  594,  597,
-
-      579,  583,  588,  581,  592,  573,  586,  577,  582,  584,
-      573,  566,  584,  579,  561,  574,  567,  575,  570,  569,
-      558,  257,  570,  563,  593,  565,  567,  570,  557,  556,
-      548,  235,  272,  290,  299,  304,  311,    0,  549,  552,
-      556,  563,    0,  594,  561,  552,  555,  555,    0,    0,
-      538,    0,  556,  545,  538,  537,  544,  541,  547,    0,
-      531,  530,    0,  539,  532,  532,  539,  535,    0,  523,
-        0,  538,  524,    0,  521,  539,  537,    0,    0,    0,
-      518,  542,  518,  516,  519,  515,  512,    0,  563,    0,
-      198,  518,  510,  510,  514,  516,  519,  514,  503,  504,
-
-      522,  502,  499,  500,    0,  504,  498,  495,  509,    0,
-        0,  493,  494,  497,  496,    0,  507,  490,  501,  502,
-      503,  498,    0,    0,  484,  477,  482,  492,  486,    0,
-      486,    0,  491,  484,    0,  316,  321,  495,  475,  479,
-      478,    0,  487,  476,  471,  171,  476,  483,  480,  479,
-      487,  469,  476,  471,  474,  473,  474,  176,  459,    0,
-      471,  470,    0,    0,  464,  255,  461,    0,  479,  452,
-        0,  456,  450,  459,    0,  465,  456,  450,    0,    0,
-      458,  459,    0,  448,    0,  465,  450,    0,  452,  452,
-      454,  442,  449,    0,  445,  447,  446,  431,  430,  443,
-
-      436,  427,  442,  425,  435,    0,  192,    0,  437,    0,
-      434,    0,  431,    0,    0,  470,  419,  432,    0,  419,
-      422,  423,  414,    0,  419,  430,  425,  406,  415,    0,
-        0,  426,  149,  417,    0,  416,  419,  409,  260,  445,
-      401,  429,  414,    0,    0,    0,  405,  392,    0,  397,
-      414,    0,  399,  408,    0,  394,  402,    0,    0,  405,
-        0,    0,  403,    0,  402,  406,  386,  400,  387,  389,
-      393,  400,    0,    0,  381,    0,  385,    0,  374,  390,
-      402,  390,  391,  391,    0,    0,  391,  372,    0,  372,
-      386,  387,    0,  374,  400,  395,  388,  378,  394,  378,
-
-      370,  374,  361,  366,  368,  353,  356,  360,  355,    0,
-      362,  351,  352,    0,  344,  356,  353,  346,  356,  346,
-        0,  384,  347,  343,  354,  347,  338,  355,    0,    0,
-      342,    0,  363,  362,  373,    0,  374,  331,    0,    0,
-      340,    0,  343,    0,  338,  341,    0,  322,  335,  338,
-        0,  338,  332,  335,  348,    0,  324,  325,  327,    0,
-      330,  329,    0,    0,  339,  338,  347,  334,    0,  326,
-      311,  313,    0,    0,  305,  321,    0,  305,    0,  308,
-      299,    0,  303,    0,  302,  319,  318,  317,  331,    0,
-      310,  301,  308,    0,  307,  292,    0,  291,    0,  311,
-
-      310,  309,  315,    0,    0,    0,    0,  296,  295,  322,
-      321,  320,  310,  285,  295,  303,  302,  301,  294,  280,
-        0,  281,  270,  269,  260,  236,  250,  233,  232,  225,
-        0,  199,  183,  165,  152,  144,  123,  117,   96,    0,
-        0,    0,   78,   80,    0,  769,   96
+        0,    0,  734,  735,  735,  735,  712,  735,  726,  735,
+      710,   64,   65,   63,   75,   77,  735,  735,  709,  708,
+      707,   46,   48,   65,   66,   65,   80,   46,   45,   71,
+        0,  668,   92,   46,  660,  662,   94,  108,  111,  147,
+      660,  663,  671,  649,  735,  735,  735,  735,  735,  735,
+      735,  709,  169,  735,  735,  735,  174,  189,  213,  735,
+      735,  735,    0,  659,  663,  668,  661,  668,  653,  642,
+      646,  653,   61,  655,  662,  645,  154,  650,  649,  658,
+      643,  646,  652,  652,   95,  652,  648,  638,  637,  633,
+      636,  653,  628,  642,  634,  629,  647,    0,  623,  627,
+
+      616,  626,  625,  111,  652,  632,  618,  630,  616,  608,
+        0,   35,  164,   98,  618,   96,  611,  618,  614,  614,
+      612,   79,  608,  607,  606,  610,    0,    0,  632,  607,
+      615,  617,  608,  605,  593,  735,  735,  228,  233,  242,
+      248,  253,  596,  612,  192,  599,  598,  599,  600,  595,
+      592,  595,  593,  593,  586,  599,  596,  586,  119,  582,
+      590,  592,  595,  573,  583,  584,  164,  581,  572,    0,
+      573,  571,  577,  573,  582,    0,  582,  600,  585,  577,
+      576,  566,  598,  573,  558,  571,  568,  569,  605,  557,
+      571,  550,  567,  563,  566,  548,  552,  557,  550,  561,
+
+      556,  547,  552,  554,  543,  536,  554,  549,  531,  544,
+      537,  545,  540,  539,  528,  247,  540,  533,  563,  535,
+      541,  528,  527,  519,  225,  280,  285,  294,  299,  304,
+        0,  520,  523,  527,  534,    0,  565,  524,  527,  527,
+        0,    0,  510,    0,  528,  517,  510,  509,  516,  513,
+      519,    0,  503,  502,    0,  511,  504,  504,  511,  507,
+        0,  495,    0,  510,  496,    0,  493,  511,  509,    0,
+        0,  490,  514,  490,  488,  488,  485,    0,  536,    0,
+      157,  491,  483,  483,  487,  489,  492,  487,  476,  477,
+      476,  473,  474,    0,  478,  472,  469,  483,    0,    0,
+
+      467,  468,  471,  470,    0,  481,  464,  475,  478,  473,
+        0,    0,  453,  458,  468,  462,    0,    0,  462,    0,
+      467,  460,    0,  309,  314,  471,  451,  455,  454,    0,
+      453,  448,  184,  453,  460,  457,  456,  464,  446,  453,
+      448,  451,  450,  451,  171,  436,    0,  448,  447,    0,
+        0,  441,  238,  438,    0,  456,  429,    0,  428,  437,
+        0,  443,  434,  428,    0,    0,  436,  437,    0,  426,
+        0,  443,    0,  431,  431,  433,  421,  428,    0,  424,
+      426,  425,  410,  409,  422,  415,  422,  405,    0,  118,
+        0,  418,    0,  415,    0,  412,    0,    0,  451,  414,
+
+        0,  401,  404,  405,  396,    0,  401,  412,  407,  388,
+      397,    0,    0,  408,   47,  399,    0,  398,  401,  391,
+      248,  427,  383,  411,  396,    0,    0,  387,  374,    0,
+      379,  396,    0,  381,    0,  377,  385,    0,    0,  388,
+        0,    0,  386,    0,  385,  389,  384,  371,  378,  385,
+        0,    0,  366,    0,    0,  360,  376,  388,  376,  377,
+      377,    0,    0,  377,  358,    0,  358,  372,  373,    0,
+      360,  386,  381,  374,  364,  380,  364,  356,  360,  347,
+      352,  354,  343,  347,  342,    0,  349,  338,    0,  332,
+      342,  335,  345,    0,  374,  337,  333,  344,  337,  328,
+
+      345,    0,    0,  332,    0,  353,  352,  363,    0,  364,
+      321,    0,    0,  330,    0,  333,  328,  331,    0,  312,
+      325,    0,  324,  327,  340,  316,  317,  319,    0,  322,
+      321,    0,    0,  331,  330,  339,  326,    0,  318,  303,
+      305,    0,    0,  297,  298,    0,  301,  292,    0,  296,
+        0,  295,  312,  311,  310,  324,    0,  303,  294,  301,
+      300,  285,    0,  284,    0,  304,  303,  302,  308,    0,
+        0,    0,    0,  289,  288,  315,  314,  313,  303,  278,
+      288,  296,  295,  294,  287,  273,    0,  265,  264,  250,
+      249,  219,  250,  249,  247,  250,    0,  217,  216,  187,
+
+      185,  177,  173,  163,  166,    0,    0,    0,  144,  117,
+        0,  735,  111
     } ;
 
-static yyconst flex_int16_t yy_def[648] =
+static yyconst flex_int16_t yy_def[614] =
     {   0,
-      646,    1,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  646,  646,  646,
-      646,  646,  646,  646,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  646,  646,  646,  646,  646,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  646,  646,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
-      647,  647,  647,  647,  647,    0,  646
+      612,    1,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  612,  612,  612,  612,  612,
+      612,  612,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  612,  612,  612,  612,  612,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  612,  612,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+
+      613,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      613,    0,  612
     } ;
 
-static yyconst flex_int16_t yy_nxt[842] =
+static yyconst flex_int16_t yy_nxt[808] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
        14,   15,   16,   16,   16,   16,   16,   17,   18,   19,
@@ -652,94 +665,90 @@ static yyconst flex_int16_t yy_nxt[842] =
        31,   31,   31,   31,   31,   31,   31,   31,   43,   31,
        31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
        31,   44,   48,   52,   50,   53,   53,   53,   53,   53,
-      211,  202,   54,  106,   49,   51,   55,   57,   69,   58,
-       58,   58,   58,   58,   64,   56,  212,   63,   70,   95,
-
-      203,   92,   65,   59,   96,  107,  645,   71,   66,   67,
-       68,   73,  644,   72,   97,   74,   78,   93,   75,   76,
-       79,   82,  643,   83,   77,   98,   86,   59,   80,   94,
-       84,   81,  149,   85,   87,  155,   88,   89,  102,   90,
-      116,   99,  103,  156,  117,   91,  104,  110,  100,  194,
-      150,  105,  642,  118,  111,  112,  195,  113,  641,  119,
-      114,  120,  121,  115,  172,  122,  128,  129,  123,  124,
-      173,  190,  125,  126,  174,  208,  191,  127,  240,  640,
-      209,  639,  130,   53,   53,   53,   53,   53,  141,  141,
-      141,  141,  141,  266,  241,  242,  267,  140,  131,  489,
-
-      257,  638,  142,  490,   57,  132,   58,   58,   58,   58,
-       58,  133,  160,  258,  134,  161,  162,  420,  163,  637,
-       59,  140,  164,  143,  143,  421,  142,  144,  144,  144,
-      144,  144,  204,  218,  205,  636,  219,  376,  377,  433,
-      434,  206,  220,  471,   59,  207,  233,  233,  472,  635,
-      234,  234,  234,  234,  234,  141,  141,  141,  141,  141,
-      236,  236,  634,  633,  237,  237,  237,  237,  237,  235,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      632,  317,  495,  330,  234,  234,  234,  234,  234,  439,
-      496,  331,  440,  235,  318,  332,  319,  333,  334,  631,
-
-      630,  335,  234,  234,  234,  234,  234,  336,  336,  629,
-      628,  337,  337,  337,  337,  337,  237,  237,  237,  237,
-      237,  627,  320,  237,  237,  237,  237,  237,  337,  337,
-      337,  337,  337,  337,  337,  337,  337,  337,  626,  625,
-      624,  623,  622,  621,  620,  619,  618,  617,  616,  615,
-      614,  613,  612,  611,  610,  609,  608,  607,  606,  605,
-      604,  603,  602,  601,  600,  599,  598,  597,  596,  595,
-      594,  593,  592,  591,  590,  589,  588,  587,  586,  585,
-      584,  583,  582,  581,  580,  579,  578,  577,  576,  575,
-      574,  573,  572,  571,  570,  569,  568,  567,  566,  565,
-
-      564,  563,  562,  561,  560,  559,  558,  557,  556,  555,
-      554,  553,  552,  551,  550,  549,  548,  547,  546,  545,
-      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
-      534,  533,  532,  531,  530,  529,  528,  527,  526,  525,
-      524,  523,  522,  521,  520,  519,  518,  517,  516,  515,
-      514,  513,  512,  511,  510,  509,  508,  507,  506,  505,
-      504,  503,  502,  501,  500,  499,  498,  497,  494,  493,
-      492,  491,  488,  487,  486,  485,  484,  483,  482,  481,
-      480,  479,  478,  477,  476,  475,  474,  473,  470,  469,
-      468,  467,  466,  465,  464,  463,  462,  461,  460,  459,
-
-      458,  457,  456,  455,  454,  453,  452,  451,  450,  449,
-      448,  447,  446,  445,  444,  443,  442,  441,  438,  437,
-      436,  435,  432,  431,  430,  429,  428,  427,  426,  425,
-      424,  423,  422,  419,  418,  417,  416,  415,  414,  413,
-      412,  411,  410,  409,  408,  407,  406,  405,  404,  403,
-      402,  401,  400,  399,  398,  397,  396,  395,  394,  393,
-      392,  391,  390,  389,  388,  387,  386,  385,  384,  383,
-      382,  381,  380,  379,  378,  375,  374,  373,  372,  371,
-      370,  369,  368,  367,  366,  365,  364,  363,  362,  361,
-      360,  359,  358,  357,  356,  355,  354,  353,  352,  351,
-
-      350,  349,  348,  347,  346,  345,  344,  343,  342,  341,
-      340,  339,  338,  329,  328,  327,  326,  325,  324,  323,
-      322,  321,  316,  315,  314,  313,  312,  311,  310,  309,
-      308,  307,  306,  305,  304,  303,  302,  301,  300,  299,
-      298,  297,  296,  295,  294,  293,  292,  291,  290,  289,
-      288,  287,  286,  285,  284,  283,  282,  281,  280,  279,
-      278,  277,  276,  275,  274,  273,  272,  271,  270,  269,
-      268,  265,  264,  263,  262,  261,  260,  259,  256,  255,
-      254,  253,  252,  251,  250,  249,  248,  247,  246,  245,
-      244,  243,  239,  238,  232,  231,  230,  229,  228,  227,
-
-      226,  225,  224,  223,  222,  221,  217,  216,  215,  214,
-      213,  210,  201,  200,  199,  198,  197,  196,  193,  192,
-      189,  188,  187,  186,  185,  184,  183,  182,  181,  180,
-      179,  178,  177,  176,  175,  171,  170,  169,  168,  167,
-      166,  165,  159,  158,  157,  154,  153,  152,  151,  148,
-      147,  146,  145,  139,  138,  137,  136,  135,  109,  108,
-      101,   62,   61,   60,   47,   46,   45,  646,    3,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646
+       92,  197,   54,  105,   49,   51,   55,   57,   69,   58,
+       58,   58,   58,   58,   64,   56,   93,  466,   70,   94,
+
+      198,  467,   65,   59,   95,  106,   97,   71,   66,   67,
+       68,   73,   63,   72,   96,   74,   78,  152,   75,   76,
+       79,   82,   98,   83,   77,  153,   86,   59,   80,   99,
+       84,   81,  212,   85,   87,  213,   88,   89,  101,   90,
+      109,  214,  102,  611,  205,   91,  103,  110,  111,  169,
+      112,  104,  202,  113,  115,  170,  114,  203,  116,  171,
+      206,  127,  128,  189,  119,  120,  249,  117,  121,  449,
+      190,  122,  123,  118,  450,  124,  125,  129,  610,  250,
+      126,   53,   53,   53,   53,   53,  139,  139,  139,  139,
+      139,  258,  609,  130,  259,  138,  362,  363,  608,   57,
+
+      140,   58,   58,   58,   58,   58,  131,  157,  607,  132,
+      158,  159,  606,  160,  605,   59,  233,  161,  199,  138,
+      200,  141,  141,  604,  140,  142,  142,  142,  142,  142,
+      402,  201,  234,  235,  415,  416,  226,  226,  403,   59,
+      227,  227,  227,  227,  227,  139,  139,  139,  139,  139,
+      229,  229,  603,  602,  230,  230,  230,  230,  230,  228,
+      142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
+      472,  306,  421,  317,  601,  422,  318,  600,  473,  599,
+      598,  319,  597,  228,  307,  320,  308,  321,  322,  596,
+      595,  323,  227,  227,  227,  227,  227,  227,  227,  227,
+
+      227,  227,  324,  324,  594,  593,  325,  325,  325,  325,
+      325,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  325,  325,  325,  325,  325,  325,  325,  325,  325,
+      325,  592,  591,  590,  589,  588,  587,  586,  585,  584,
+      583,  582,  581,  580,  579,  578,  577,  576,  575,  574,
+      573,  572,  571,  570,  569,  568,  567,  566,  565,  564,
+      563,  562,  561,  560,  559,  558,  557,  556,  555,  554,
+      553,  552,  551,  550,  549,  548,  547,  546,  545,  544,
+      543,  542,  541,  540,  539,  538,  537,  536,  535,  534,
+      533,  532,  531,  530,  529,  528,  527,  526,  525,  524,
+
+      523,  522,  521,  520,  519,  518,  517,  516,  515,  514,
+      513,  512,  511,  510,  509,  508,  507,  506,  505,  504,
+      503,  502,  501,  500,  499,  498,  497,  496,  495,  494,
+      493,  492,  491,  490,  489,  488,  487,  486,  485,  484,
+      483,  482,  481,  480,  479,  478,  477,  476,  475,  474,
+      471,  470,  469,  468,  465,  464,  463,  462,  461,  460,
+      459,  458,  457,  456,  455,  454,  453,  452,  451,  448,
+      447,  446,  445,  444,  443,  442,  441,  440,  439,  438,
+      437,  436,  435,  434,  433,  432,  431,  430,  429,  428,
+      427,  426,  425,  424,  423,  420,  419,  418,  417,  414,
+
+      413,  412,  411,  410,  409,  408,  407,  406,  405,  404,
+      401,  400,  399,  398,  397,  396,  395,  394,  393,  392,
+      391,  390,  389,  388,  387,  386,  385,  384,  383,  382,
+      381,  380,  379,  378,  377,  376,  375,  374,  373,  372,
+      371,  370,  369,  368,  367,  366,  365,  364,  361,  360,
+      359,  358,  357,  356,  355,  354,  353,  352,  351,  350,
+      349,  348,  347,  346,  345,  344,  343,  342,  341,  340,
+      339,  338,  337,  336,  335,  334,  333,  332,  331,  330,
+      329,  328,  327,  326,  316,  315,  314,  313,  312,  311,
+      310,  309,  305,  304,  303,  302,  301,  300,  299,  298,
+
+      297,  296,  295,  294,  293,  292,  291,  290,  289,  288,
+      287,  286,  285,  284,  283,  282,  281,  280,  279,  278,
+      277,  276,  275,  274,  273,  272,  271,  270,  269,  268,
+      267,  266,  265,  264,  263,  262,  261,  260,  257,  256,
+      255,  254,  253,  252,  251,  248,  247,  246,  245,  244,
+      243,  242,  241,  240,  239,  238,  237,  236,  232,  231,
+      225,  224,  223,  222,  221,  220,  219,  218,  217,  216,
+      215,  211,  210,  209,  208,  207,  204,  196,  195,  194,
+      193,  192,  191,  188,  187,  186,  185,  184,  183,  182,
+      181,  180,  179,  178,  177,  176,  175,  174,  173,  172,
+
+      168,  167,  166,  165,  164,  163,  162,  156,  155,  154,
+      151,  150,  149,  148,  147,  146,  145,  144,  143,  137,
+      136,  135,  134,  133,  108,  107,  100,   62,   61,   60,
+       47,   46,   45,  612,    3,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+
+      612,  612,  612,  612,  612,  612,  612
     } ;
 
-static yyconst flex_int16_t yy_chk[842] =
+static yyconst flex_int16_t yy_chk[808] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -749,91 +758,87 @@ static yyconst flex_int16_t yy_chk[842] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,   12,   14,   13,   14,   14,   14,   14,   14,
-      117,  113,   15,   34,   12,   13,   15,   16,   23,   16,
-       16,   16,   16,   16,   22,   15,  117,  647,   23,   29,
-
-      113,   28,   22,   16,   29,   34,  644,   23,   22,   22,
-       22,   24,  643,   23,   29,   24,   25,   28,   24,   24,
-       25,   26,  639,   26,   24,   30,   27,   16,   25,   28,
-       26,   25,   68,   26,   27,   73,   27,   27,   33,   27,
-       38,   30,   33,   73,   38,   27,   33,   37,   30,  105,
-       68,   33,  638,   38,   37,   37,  105,   37,  637,   38,
-       37,   39,   39,   37,   85,   39,   40,   40,   39,   39,
-       85,  102,   39,   39,   85,  115,  102,   39,  147,  636,
-      115,  635,   40,   53,   53,   53,   53,   53,   57,   57,
-       57,   57,   57,  170,  147,  147,  170,   53,   40,  433,
-
-      162,  634,   57,  433,   58,   40,   58,   58,   58,   58,
-       58,   40,   77,  162,   40,   77,   77,  346,   77,  633,
-       58,   53,   77,   59,   59,  346,   57,   59,   59,   59,
-       59,   59,  114,  123,  114,  632,  123,  291,  291,  358,
-      358,  114,  123,  407,   58,  114,  140,  140,  407,  630,
-      140,  140,  140,  140,  140,  141,  141,  141,  141,  141,
-      142,  142,  629,  628,  142,  142,  142,  142,  142,  141,
-      143,  143,  143,  143,  143,  144,  144,  144,  144,  144,
-      627,  222,  439,  232,  233,  233,  233,  233,  233,  366,
-      439,  232,  366,  141,  222,  232,  222,  232,  232,  626,
-
-      625,  232,  234,  234,  234,  234,  234,  235,  235,  624,
-      623,  235,  235,  235,  235,  235,  236,  236,  236,  236,
-      236,  622,  222,  237,  237,  237,  237,  237,  336,  336,
-      336,  336,  336,  337,  337,  337,  337,  337,  620,  619,
-      618,  617,  616,  615,  614,  613,  612,  611,  610,  609,
-      608,  603,  602,  601,  600,  598,  596,  595,  593,  592,
-      591,  589,  588,  587,  586,  585,  583,  581,  580,  578,
-      576,  575,  572,  571,  570,  568,  567,  566,  565,  562,
-      561,  559,  558,  557,  555,  554,  553,  552,  550,  549,
-      548,  546,  545,  543,  541,  538,  537,  535,  534,  533,
-
-      531,  528,  527,  526,  525,  524,  523,  522,  520,  519,
-      518,  517,  516,  515,  513,  512,  511,  509,  508,  507,
-      506,  505,  504,  503,  502,  501,  500,  499,  498,  497,
-      496,  495,  494,  492,  491,  490,  488,  487,  484,  483,
-      482,  481,  480,  479,  477,  475,  472,  471,  470,  469,
-      468,  467,  466,  465,  463,  460,  457,  456,  454,  453,
-      451,  450,  448,  447,  443,  442,  441,  440,  438,  437,
-      436,  434,  432,  429,  428,  427,  426,  425,  423,  422,
-      421,  420,  418,  417,  416,  413,  411,  409,  405,  404,
-      403,  402,  401,  400,  399,  398,  397,  396,  395,  393,
-
-      392,  391,  390,  389,  387,  386,  384,  382,  381,  378,
-      377,  376,  374,  373,  372,  370,  369,  367,  365,  362,
-      361,  359,  357,  356,  355,  354,  353,  352,  351,  350,
-      349,  348,  347,  345,  344,  343,  341,  340,  339,  338,
-      334,  333,  331,  329,  328,  327,  326,  325,  322,  321,
-      320,  319,  318,  317,  315,  314,  313,  312,  309,  308,
-      307,  306,  304,  303,  302,  301,  300,  299,  298,  297,
-      296,  295,  294,  293,  292,  289,  287,  286,  285,  284,
-      283,  282,  281,  277,  276,  275,  273,  272,  270,  268,
-      267,  266,  265,  264,  262,  261,  259,  258,  257,  256,
-
-      255,  254,  253,  251,  248,  247,  246,  245,  244,  242,
-      241,  240,  239,  231,  230,  229,  228,  227,  226,  225,
-      224,  223,  221,  220,  219,  218,  217,  216,  215,  214,
-      213,  212,  211,  210,  209,  208,  207,  206,  205,  204,
-      203,  202,  201,  200,  199,  198,  197,  196,  195,  194,
-      193,  192,  191,  190,  189,  188,  187,  186,  185,  184,
-      183,  182,  181,  180,  178,  177,  176,  175,  174,  172,
-      171,  169,  168,  167,  166,  165,  164,  163,  161,  160,
-      159,  158,  157,  156,  155,  154,  153,  152,  151,  150,
-      149,  148,  146,  145,  137,  136,  135,  134,  133,  132,
-
-      131,  130,  127,  126,  125,  124,  122,  121,  120,  119,
-      118,  116,  111,  110,  109,  108,  107,  106,  104,  103,
-      101,  100,   98,   97,   96,   95,   94,   93,   92,   91,
-       90,   89,   88,   87,   86,   84,   83,   82,   81,   80,
-       79,   78,   76,   75,   74,   72,   71,   70,   69,   67,
-       66,   65,   64,   52,   44,   43,   42,   41,   36,   35,
-       32,   21,   20,   19,   11,    9,    7,    3,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
-      646
+       28,  112,   15,   34,   12,   13,   15,   16,   23,   16,
+       16,   16,   16,   16,   22,   15,   28,  415,   23,   29,
+
+      112,  415,   22,   16,   29,   34,   30,   23,   22,   22,
+       22,   24,  613,   23,   29,   24,   25,   73,   24,   24,
+       25,   26,   30,   26,   24,   73,   27,   16,   25,   30,
+       26,   25,  122,   26,   27,  122,   27,   27,   33,   27,
+       37,  122,   33,  610,  116,   27,   33,   37,   37,   85,
+       37,   33,  114,   37,   38,   85,   37,  114,   38,   85,
+      116,   40,   40,  104,   39,   39,  159,   38,   39,  390,
+      104,   39,   39,   38,  390,   39,   39,   40,  609,  159,
+       39,   53,   53,   53,   53,   53,   57,   57,   57,   57,
+       57,  167,  605,   40,  167,   53,  281,  281,  604,   58,
+
+       57,   58,   58,   58,   58,   58,   40,   77,  603,   40,
+       77,   77,  602,   77,  601,   58,  145,   77,  113,   53,
+      113,   59,   59,  600,   57,   59,   59,   59,   59,   59,
+      333,  113,  145,  145,  345,  345,  138,  138,  333,   58,
+      138,  138,  138,  138,  138,  139,  139,  139,  139,  139,
+      140,  140,  599,  598,  140,  140,  140,  140,  140,  139,
+      141,  141,  141,  141,  141,  142,  142,  142,  142,  142,
+      421,  216,  353,  225,  596,  353,  225,  595,  421,  594,
+      593,  225,  592,  139,  216,  225,  216,  225,  225,  591,
+      590,  225,  226,  226,  226,  226,  226,  227,  227,  227,
+
+      227,  227,  228,  228,  589,  588,  228,  228,  228,  228,
+      228,  229,  229,  229,  229,  229,  230,  230,  230,  230,
+      230,  324,  324,  324,  324,  324,  325,  325,  325,  325,
+      325,  586,  585,  584,  583,  582,  581,  580,  579,  578,
+      577,  576,  575,  574,  569,  568,  567,  566,  564,  562,
+      561,  560,  559,  558,  556,  555,  554,  553,  552,  550,
+      548,  547,  545,  544,  541,  540,  539,  537,  536,  535,
+      534,  531,  530,  528,  527,  526,  525,  524,  523,  521,
+      520,  518,  517,  516,  514,  511,  510,  508,  507,  506,
+      504,  501,  500,  499,  498,  497,  496,  495,  493,  492,
+
+      491,  490,  488,  487,  485,  484,  483,  482,  481,  480,
+      479,  478,  477,  476,  475,  474,  473,  472,  471,  469,
+      468,  467,  465,  464,  461,  460,  459,  458,  457,  456,
+      453,  450,  449,  448,  447,  446,  445,  443,  440,  437,
+      436,  434,  432,  431,  429,  428,  425,  424,  423,  422,
+      420,  419,  418,  416,  414,  411,  410,  409,  408,  407,
+      405,  404,  403,  402,  400,  399,  396,  394,  392,  388,
+      387,  386,  385,  384,  383,  382,  381,  380,  378,  377,
+      376,  375,  374,  372,  370,  368,  367,  364,  363,  362,
+      360,  359,  357,  356,  354,  352,  349,  348,  346,  344,
+
+      343,  342,  341,  340,  339,  338,  337,  336,  335,  334,
+      332,  331,  329,  328,  327,  326,  322,  321,  319,  316,
+      315,  314,  313,  310,  309,  308,  307,  306,  304,  303,
+      302,  301,  298,  297,  296,  295,  293,  292,  291,  290,
+      289,  288,  287,  286,  285,  284,  283,  282,  279,  277,
+      276,  275,  274,  273,  272,  269,  268,  267,  265,  264,
+      262,  260,  259,  258,  257,  256,  254,  253,  251,  250,
+      249,  248,  247,  246,  245,  243,  240,  239,  238,  237,
+      235,  234,  233,  232,  224,  223,  222,  221,  220,  219,
+      218,  217,  215,  214,  213,  212,  211,  210,  209,  208,
+
+      207,  206,  205,  204,  203,  202,  201,  200,  199,  198,
+      197,  196,  195,  194,  193,  192,  191,  190,  189,  188,
+      187,  186,  185,  184,  183,  182,  181,  180,  179,  178,
+      177,  175,  174,  173,  172,  171,  169,  168,  166,  165,
+      164,  163,  162,  161,  160,  158,  157,  156,  155,  154,
+      153,  152,  151,  150,  149,  148,  147,  146,  144,  143,
+      135,  134,  133,  132,  131,  130,  129,  126,  125,  124,
+      123,  121,  120,  119,  118,  117,  115,  110,  109,  108,
+      107,  106,  105,  103,  102,  101,  100,   99,   97,   96,
+       95,   94,   93,   92,   91,   90,   89,   88,   87,   86,
+
+       84,   83,   82,   81,   80,   79,   78,   76,   75,   74,
+       72,   71,   70,   69,   68,   67,   66,   65,   64,   52,
+       44,   43,   42,   41,   36,   35,   32,   21,   20,   19,
+       11,    9,    7,    3,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+
+      612,  612,  612,  612,  612,  612,  612
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -852,7 +857,7 @@ int gmsh_yy_flex_debug = 0;
 char *gmsh_yytext;
 #line 1 "Gmsh.l"
 #line 2 "Gmsh.l"
-// $Id: Gmsh.yy.cpp,v 1.349 2008-02-23 15:30:10 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.350 2008-03-18 08:41:26 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -912,7 +917,7 @@ void   skipline(void);
 #define YY_NO_UNISTD_H
 #endif
 
-#line 916 "Gmsh.yy.cpp"
+#line 921 "Gmsh.yy.cpp"
 
 #define INITIAL 0
 
@@ -972,7 +977,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO (void) fwrite( gmsh_yytext, gmsh_yyleng, 1, gmsh_yyout )
+#define ECHO fwrite( gmsh_yytext, gmsh_yyleng, 1, gmsh_yyout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -983,7 +988,7 @@ static int input (void );
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( gmsh_yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1068,7 +1073,7 @@ YY_DECL
 #line 71 "Gmsh.l"
 
 
-#line 1072 "Gmsh.yy.cpp"
+#line 1077 "Gmsh.yy.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1121,13 +1126,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 647 )
+				if ( yy_current_state >= 613 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 769 );
+		while ( yy_base[yy_current_state] != 735 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1225,32 +1230,32 @@ YY_RULE_SETUP
 case 15:
 YY_RULE_SETUP
 #line 87 "Gmsh.l"
-return tAFFECT;
+{ gmsh_yylval.d = NEWFIELD(); return tDOUBLE; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 88 "Gmsh.l"
-return tAFFECTPLUS;
+return tAFFECT;
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 89 "Gmsh.l"
-return tAFFECTMINUS;
+return tAFFECTPLUS;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 90 "Gmsh.l"
-return tAFFECTTIMES;
+return tAFFECTMINUS;
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 91 "Gmsh.l"
-return tAFFECTDIVIDE;
+return tAFFECTTIMES;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 92 "Gmsh.l"
-return tDOTS;
+return tAFFECTDIVIDE;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
@@ -1260,47 +1265,47 @@ return tDOTS;
 case 22:
 YY_RULE_SETUP
 #line 94 "Gmsh.l"
-return tOR;
+return tDOTS;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 95 "Gmsh.l"
-return tAND;
+return tOR;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 96 "Gmsh.l"
-return tPLUSPLUS;
+return tAND;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 97 "Gmsh.l"
-return tMINUSMINUS;
+return tPLUSPLUS;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 98 "Gmsh.l"
-return tEQUAL;
+return tMINUSMINUS;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 99 "Gmsh.l"
-return tNOTEQUAL;
+return tEQUAL;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 100 "Gmsh.l"
-return tLESSOREQUAL;
+return tNOTEQUAL;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 101 "Gmsh.l"
-return tGREATEROREQUAL;
+return tLESSOREQUAL;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 103 "Gmsh.l"
-return tAcos;
+#line 102 "Gmsh.l"
+return tGREATEROREQUAL;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
@@ -1310,17 +1315,17 @@ return tAcos;
 case 32:
 YY_RULE_SETUP
 #line 105 "Gmsh.l"
-return tAlias;
+return tAcos;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 106 "Gmsh.l"
-return tAliasWithOptions;
+return tAlias;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 107 "Gmsh.l"
-return tAsin;
+return tAliasWithOptions;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
@@ -1330,7 +1335,7 @@ return tAsin;
 case 36:
 YY_RULE_SETUP
 #line 109 "Gmsh.l"
-return tAtan;
+return tAsin;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
@@ -1340,7 +1345,7 @@ return tAtan;
 case 38:
 YY_RULE_SETUP
 #line 111 "Gmsh.l"
-return tAtan2;
+return tAtan;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
@@ -1350,7 +1355,7 @@ return tAtan2;
 case 40:
 YY_RULE_SETUP
 #line 113 "Gmsh.l"
-return tAttractor;
+return tAtan2;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
@@ -1545,355 +1550,330 @@ return tGetValue;
 case 79:
 YY_RULE_SETUP
 #line 158 "Gmsh.l"
-return tGrad;
+return tGMSH_MAJOR_VERSION;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 159 "Gmsh.l"
-return tGMSH_MAJOR_VERSION;
+return tGMSH_MINOR_VERSION;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 160 "Gmsh.l"
-return tGMSH_MINOR_VERSION;
+return tGMSH_PATCH_VERSION;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 161 "Gmsh.l"
-return tGMSH_PATCH_VERSION;
+#line 162 "Gmsh.l"
+return tHide;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 163 "Gmsh.l"
-return tHide;
+return tHole;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 164 "Gmsh.l"
-return tHole;
+return tHypot;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 165 "Gmsh.l"
-return tHypot;
+#line 166 "Gmsh.l"
+return tIn;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 167 "Gmsh.l"
-return tIn;
+return tIf;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 168 "Gmsh.l"
-return tIf;
+return tIntersect;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 169 "Gmsh.l"
-return tIntersect;
+#line 170 "Gmsh.l"
+return tKnots;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 171 "Gmsh.l"
-return tKnots;
+#line 172 "Gmsh.l"
+return tLength;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 173 "Gmsh.l"
-return tLatLon;
+return tLine;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 174 "Gmsh.l"
-return tLength;
+return tLoop;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 175 "Gmsh.l"
-return tLine;
+return tLog;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 176 "Gmsh.l"
-return tLoop;
+return tLog10;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 177 "Gmsh.l"
-return tLog;
+return tLayers;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 178 "Gmsh.l"
-return tLog10;
+#line 179 "Gmsh.l"
+return tModulo;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 179 "Gmsh.l"
-return tLayers;
+#line 180 "Gmsh.l"
+return tMPI_Rank;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 181 "Gmsh.l"
-return tModulo;
+return tMPI_Size;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 182 "Gmsh.l"
-return tMPI_Rank;
+#line 183 "Gmsh.l"
+return tNurbs;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 183 "Gmsh.l"
-return tMPI_Size;
+#line 185 "Gmsh.l"
+return tOrder;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 185 "Gmsh.l"
-return tNurbs;
+#line 187 "Gmsh.l"
+return tPhysical;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 187 "Gmsh.l"
-return tOrder;
+#line 188 "Gmsh.l"
+return tPi;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 189 "Gmsh.l"
-return tPhysical;
+return tPlane;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 190 "Gmsh.l"
-return tPi;
+return tPoint;
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 191 "Gmsh.l"
-return tPlane;
+return tProgression;
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 192 "Gmsh.l"
-return tPoint;
+return tProgression;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 193 "Gmsh.l"
-return tProgression;
+return tParametric;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 194 "Gmsh.l"
-return tProgression;
+return tPolarSphere;
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 195 "Gmsh.l"
-return tParametric;
+return tPrintf;
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
 #line 196 "Gmsh.l"
-return tPolarSphere;
+return tPlugin;
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 197 "Gmsh.l"
-return tPrintf;
+#line 198 "Gmsh.l"
+return tRecombine;
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 198 "Gmsh.l"
-return tPlugin;
+#line 199 "Gmsh.l"
+return tRotate;
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
 #line 200 "Gmsh.l"
-return tRecombine;
+return tRuled;
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
 #line 201 "Gmsh.l"
-return tRotate;
+return tRand;
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 202 "Gmsh.l"
-return tRuled;
+return tReturn;
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 203 "Gmsh.l"
-return tRand;
+#line 204 "Gmsh.l"
+return tSmoother;
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 204 "Gmsh.l"
-return tReturn;
+#line 205 "Gmsh.l"
+return tSqrt;
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
 #line 206 "Gmsh.l"
-return tSmoother;
+return tSin;
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
 #line 207 "Gmsh.l"
-return tSqrt;
+return tSinh;
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 208 "Gmsh.l"
-return tSin;
+return tSphere;
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
 #line 209 "Gmsh.l"
-return tSinh;
+return tSpline;
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 210 "Gmsh.l"
-return tSphere;
+return tSurface;
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
 #line 211 "Gmsh.l"
-return tSpline;
+return tSymmetry;
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
 #line 212 "Gmsh.l"
-return tSurface;
+return tSprintf;
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 213 "Gmsh.l"
-return tSymmetry;
+return tStrCat;
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 214 "Gmsh.l"
-return tSprintf;
+return tStrPrefix;
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 215 "Gmsh.l"
-return tStrCat;
+return tStrRelative;
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 216 "Gmsh.l"
-return tStrPrefix;
+return tShow;
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 217 "Gmsh.l"
-return tStrRelative;
+#line 218 "Gmsh.l"
+return tTransfinite;
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 218 "Gmsh.l"
-return tStructured;
+#line 219 "Gmsh.l"
+return tTranslate;
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 219 "Gmsh.l"
-return tShow;
+#line 220 "Gmsh.l"
+return tTanh;
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 221 "Gmsh.l"
-return tTransfinite;
+return tTan;
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 222 "Gmsh.l"
-return tTranslate;
+return tToday;
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 223 "Gmsh.l"
-return tTanh;
+#line 224 "Gmsh.l"
+return tUsing;
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 224 "Gmsh.l"
-return tTan;
+#line 226 "Gmsh.l"
+return tVolume;
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 225 "Gmsh.l"
-return tThreshold;
+#line 228 "Gmsh.l"
+return tText2D;
 	YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 226 "Gmsh.l"
-return tToday;
+#line 229 "Gmsh.l"
+return tText3D;
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 228 "Gmsh.l"
-return tUsing;
-	YY_BREAK
-case 138:
-YY_RULE_SETUP
 #line 230 "Gmsh.l"
-return tVolume;
+return tInterpolationScheme;
 	YY_BREAK
-case 139:
+case 138:
 YY_RULE_SETUP
 #line 231 "Gmsh.l"
-return tPostView;
+return tTime;
 	YY_BREAK
+case 139:
+#line 234 "Gmsh.l"
 case 140:
-YY_RULE_SETUP
-#line 233 "Gmsh.l"
-return tText2D;
-	YY_BREAK
+#line 235 "Gmsh.l"
 case 141:
-YY_RULE_SETUP
-#line 234 "Gmsh.l"
-return tText3D;
-	YY_BREAK
+#line 236 "Gmsh.l"
 case 142:
 YY_RULE_SETUP
-#line 235 "Gmsh.l"
-return tInterpolationScheme;
-	YY_BREAK
-case 143:
-YY_RULE_SETUP
 #line 236 "Gmsh.l"
-return tTime;
-	YY_BREAK
-case 144:
-#line 239 "Gmsh.l"
-case 145:
-#line 240 "Gmsh.l"
-case 146:
-#line 241 "Gmsh.l"
-case 147:
-YY_RULE_SETUP
-#line 241 "Gmsh.l"
 { gmsh_yylval.d = atof((char *)gmsh_yytext); return tDOUBLE; }
 	YY_BREAK
-case 148:
+case 143:
 YY_RULE_SETUP
-#line 243 "Gmsh.l"
+#line 238 "Gmsh.l"
 { gmsh_yylval.c = strsave((char*)gmsh_yytext); return tSTRING; }
 	YY_BREAK
-case 149:
+case 144:
 YY_RULE_SETUP
-#line 245 "Gmsh.l"
+#line 240 "Gmsh.l"
 return gmsh_yytext[0];
 	YY_BREAK
-case 150:
+case 145:
 YY_RULE_SETUP
-#line 247 "Gmsh.l"
+#line 242 "Gmsh.l"
 ECHO;
 	YY_BREAK
-#line 1897 "Gmsh.yy.cpp"
+#line 1877 "Gmsh.yy.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2124,7 +2104,7 @@ static int yy_get_next_buffer (void)
 
 		/* Read in more data. */
 		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), num_to_read );
+			(yy_n_chars), (size_t) num_to_read );
 
 		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
 		}
@@ -2148,6 +2128,14 @@ static int yy_get_next_buffer (void)
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) gmsh_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
 	(yy_n_chars) += number_to_move;
 	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
 	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
@@ -2177,7 +2165,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 647 )
+			if ( yy_current_state >= 613 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2205,11 +2193,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 647 )
+		if ( yy_current_state >= 613 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 646);
+	yy_is_jam = (yy_current_state == 612);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2299,7 +2287,7 @@ static int yy_get_next_buffer (void)
 				case EOB_ACT_END_OF_FILE:
 					{
 					if ( gmsh_yywrap( ) )
-						return 0;
+						return EOF;
 
 					if ( ! (yy_did_buffer_switch_on_eof) )
 						YY_NEW_FILE;
@@ -2563,7 +2551,9 @@ static void gmsh_yyensure_buffer_stack (void)
 		(yy_buffer_stack) = (struct yy_buffer_state**)gmsh_yyalloc
 								(num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
-		
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in gmsh_yyensure_buffer_stack()" );
+								  
 		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
 				
 		(yy_buffer_stack_max) = num_to_alloc;
@@ -2581,6 +2571,8 @@ static void gmsh_yyensure_buffer_stack (void)
 								((yy_buffer_stack),
 								num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in gmsh_yyensure_buffer_stack()" );
 
 		/* zero only the new slots.*/
 		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -2625,7 +2617,7 @@ YY_BUFFER_STATE gmsh_yy_scan_buffer  (char * base, yy_size_t  size )
 
 /** Setup the input buffer state to scan a string. The next call to gmsh_yylex() will
  * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
+ * @param yystr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
@@ -2879,7 +2871,7 @@ void gmsh_yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 247 "Gmsh.l"
+#line 242 "Gmsh.l"
 
 
 
diff --git a/Parser/Makefile b/Parser/Makefile
index 64a25348ebaf0575af215cb361083ead240a5b73..e5d789ba9b27db58f3582076f25aa8c853cee510 100644
--- a/Parser/Makefile
+++ b/Parser/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.143 2008-03-11 22:30:32 geuzaine Exp $
+# $Id: Makefile,v 1.144 2008-03-18 08:41:26 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -71,68 +71,65 @@ depend:
 Gmsh.tab.o: Gmsh.tab.cpp ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
   ../Plugin/PluginManager.h ../Plugin/Plugin.h ../Common/Options.h \
-  ../Post/ColorTable.h ../Post/PView.h ../Post/PViewData.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/PViewData.h \
-  ../Post/AdaptiveViews.h ../Common/GmshMatrix.h ../Parallel/ParUtil.h \
-  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../Common/Context.h \
-  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h ../Geo/Geo.h \
-  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
-  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint2.h ../Geo/ExtrudeParams.h \
-  ../Common/SmoothData.h ../Geo/GeoInterpolation.h ../Geo/Geo.h \
-  ../Mesh/Generator.h ../Graphics/Draw.h ../Common/Colors.h \
-  ../Common/Options.h Parser.h OpenFile.h ../Common/CommandLine.h \
-  FunctionManager.h ../Common/OS.h CreateFile.h ../Mesh/Field.h \
-  ../Post/OctreePost.h ../Common/Octree.h ../Common/OctreeInternals.h \
-  ../Mesh/BackgroundMesh.h
+  ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
+  ../Common/GmshMatrix.h ../Parallel/ParUtil.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../Common/Context.h ../Geo/GModel.h \
+  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Geo/Geo.h ../Geo/GeoInterpolation.h ../Geo/Geo.h \
+  ../Mesh/Generator.h ../Graphics/Draw.h ../Geo/SBoundingBox3d.h \
+  ../Post/PView.h ../Post/PViewDataList.h ../Common/Options.h \
+  ../Common/Colors.h ../Common/Options.h Parser.h ../DataStr/List.h \
+  ../DataStr/Tree.h OpenFile.h ../Common/CommandLine.h FunctionManager.h \
+  ../Post/ColorTable.h ../Common/OS.h CreateFile.h ../Geo/gmshSurface.h \
+  ../Mesh/Field.h ../Mesh/BackgroundMesh.h
 Gmsh.yy.o: Gmsh.yy.cpp ../Common/Message.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../Geo/Geo.h ../Common/GmshDefines.h \
   ../Geo/gmshSurface.h ../Geo/Pair.h ../Geo/Range.h ../Geo/SPoint2.h \
-  ../Geo/SPoint3.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../DataStr/List.h \
-  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/SPoint2.h \
-  ../Geo/ExtrudeParams.h ../Common/SmoothData.h Gmsh.tab.hpp
+  ../Geo/SPoint3.h ../Geo/SVector3.h ../Geo/SBoundingBox3d.h \
+  ../Numeric/Numeric.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  Gmsh.tab.hpp
 OpenFile.o: OpenFile.cpp ../Common/Message.h ../Geo/Geo.h \
   ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
   ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../DataStr/List.h \
-  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/SPoint2.h \
-  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Geo/GModel.h \
-  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Common/Context.h Parser.h OpenFile.h ../Common/CommandLine.h \
-  ../Post/PView.h ../Post/PViewData.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Graphics/ReadImg.h ../Common/OS.h \
-  ../Mesh/HighOrder.h ../Common/GmshUI.h ../Graphics/Draw.h \
-  ../Graphics/SelectBuffer.h ../Fltk/GUI.h ../Fltk/Opengl_Window.h \
-  ../Fltk/Colorbar_Window.h ../Fltk/Popup_Button.h \
-  ../Fltk/SpherePosition_Widget.h
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/GPoint.h \
+  ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/GRegion.h \
+  ../Mesh/Field.h ../Geo/Geo.h ../Post/PView.h ../Post/PViewData.h \
+  ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Numeric/Numeric.h ../Common/Context.h Parser.h ../DataStr/List.h \
+  ../DataStr/Tree.h OpenFile.h ../Common/CommandLine.h ../Post/PView.h \
+  ../Graphics/ReadImg.h ../Common/OS.h ../Mesh/HighOrder.h \
+  ../Geo/GModel.h ../Common/GmshUI.h ../Graphics/Draw.h \
+  ../Geo/SBoundingBox3d.h ../Graphics/SelectBuffer.h ../Geo/GVertex.h \
+  ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GRegion.h ../Fltk/GUI.h \
+  ../Fltk/Opengl_Window.h ../Fltk/Colorbar_Window.h ../Common/GmshUI.h \
+  ../Post/ColorTable.h ../Fltk/Popup_Button.h \
+  ../Fltk/SpherePosition_Widget.h ../Mesh/Field.h
 CreateFile.o: CreateFile.cpp ../Common/Message.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Common/GmshDefines.h OpenFile.h ../Common/Context.h \
-  ../Common/Options.h ../Post/ColorTable.h ../Common/GmshUI.h \
-  ../Graphics/gl2ps.h ../Graphics/gl2gif.h ../Graphics/PixelBuffer.h \
-  ../DataStr/Malloc.h ../Graphics/Draw.h ../Graphics/gl2jpeg.h \
-  ../Graphics/PixelBuffer.h ../Graphics/gl2png.h \
-  ../Graphics/PixelBuffer.h ../Graphics/gl2ppm.h \
-  ../Graphics/PixelBuffer.h ../Graphics/gl2yuv.h \
-  ../Graphics/PixelBuffer.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Common/GmshDefines.h OpenFile.h \
+  ../Common/Context.h ../Common/Options.h ../Post/ColorTable.h \
+  ../Common/GmshUI.h ../Graphics/gl2ps.h ../Graphics/gl2gif.h \
+  ../Graphics/PixelBuffer.h ../Common/GmshUI.h ../Common/Message.h \
+  ../DataStr/Malloc.h ../Graphics/Draw.h ../Geo/SBoundingBox3d.h \
+  ../Graphics/gl2jpeg.h ../Graphics/gl2png.h ../Graphics/gl2ppm.h \
+  ../Graphics/gl2yuv.h
 FunctionManager.o: FunctionManager.cpp FunctionManager.h
diff --git a/Plugin/FieldView.cpp b/Plugin/FieldView.cpp
index d08fee38c688c0cc385472a16455eeb2a8247fdd..03b1f2f7924c7d64f4c5a6e04a911d24aab6785e 100644
--- a/Plugin/FieldView.cpp
+++ b/Plugin/FieldView.cpp
@@ -1,4 +1,4 @@
-// $Id: FieldView.cpp,v 1.5 2008-02-17 08:48:06 geuzaine Exp $
+// $Id: FieldView.cpp,v 1.6 2008-03-18 08:41:26 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -21,11 +21,12 @@
 
 #include "FieldView.h"
 #include "Field.h"
+#include "GModel.h"
 
 StringXNumber FieldViewOptions_Number[] = {
   {GMSH_FULLRC, "Component", NULL, -1.},
   {GMSH_FULLRC, "iView", NULL, -1.},
-  {GMSH_FULLRC, "Field", NULL, -1.}
+  {GMSH_FULLRC, "iField", NULL, -1.}
 };
 
 extern "C"
@@ -36,11 +37,6 @@ extern "C"
   }
 }
 
-GMSH_FieldViewPlugin::GMSH_FieldViewPlugin()
-{
-  ;
-}
-
 void GMSH_FieldViewPlugin::getName(char *name) const
 {
   strcpy(name, "FieldView");
@@ -70,80 +66,18 @@ void GMSH_FieldViewPlugin::catchErrorMessage(char *errorMessage) const
   strcpy(errorMessage, "FieldView failed...");
 }
 
-static void evaluate(Field *field, List_T *list1, int nbElm1, int nbNod, 
-		     int nbComp, int comp )
-{
-  if(!nbElm1) return;
-  int nb = List_Nbr(list1) / nbElm1;
-  for(int i = 0; i < List_Nbr(list1); i += nb) {
-    double *x = (double *)List_Pointer_Fast(list1, i);
-    double *y = (double *)List_Pointer_Fast(list1, i + nbNod);
-    double *z = (double *)List_Pointer_Fast(list1, i + 2 * nbNod);
-    for(int j = 0; j < nbNod; j++) {
-      // store data from the main view into v
-      double *val1 = (double *)List_Pointer_Fast(list1, 
-						 i + 3 * nbNod + 
-						 nbNod * nbComp * 0 + nbComp * j);
-      val1[comp] = (*field)(x[j],y[j],z[j]);
-    }
-  }
-}
-
 PView *GMSH_FieldViewPlugin::execute(PView *v)
 {
   int comp = (int)FieldViewOptions_Number[0].def;
   int iView = (int)FieldViewOptions_Number[1].def;
   int iField = (int)FieldViewOptions_Number[2].def;
-
-  Field *field = fields.get(iField);
+  Field *field = GModel::current()->fields.get(iField);
   if(!field){
     Msg(GERROR, "Field[%d] does not exist", iField);
     return v;
   }
-
   PView *v1 = getView(iView, v);
   if(!v1) return v;
-
-  PViewDataList *data1 = getDataList(v1);
-  if(!data1) return v;
-
-  evaluate(field, data1->SP, data1->NbSP, 1, 1, 0);
-  evaluate(field, data1->SL, data1->NbSL, 2, 1, 0);
-  evaluate(field, data1->ST, data1->NbST, 3, 1, 0);
-  evaluate(field, data1->SQ, data1->NbSQ, 4, 1, 0);      
-  evaluate(field, data1->SS, data1->NbSS, 4, 1, 0);
-  evaluate(field, data1->SH, data1->NbSH, 8, 1, 0);      
-  evaluate(field, data1->SI, data1->NbSI, 6, 1, 0);
-  evaluate(field, data1->SY, data1->NbSY, 5, 1, 0);
-
-  for(int cc = 0; cc < 3; cc++){
-    if(comp < 0 || comp == cc){
-      evaluate(field, data1->VP, data1->NbVP, 1, 3, cc);
-      evaluate(field, data1->VL, data1->NbVL, 2, 3, cc);
-      evaluate(field, data1->VT, data1->NbVT, 3, 3, cc);
-      evaluate(field, data1->VQ, data1->NbVQ, 4, 3, cc);
-      evaluate(field, data1->VS, data1->NbVS, 4, 3, cc);
-      evaluate(field, data1->VH, data1->NbVH, 8, 3, cc);
-      evaluate(field, data1->VI, data1->NbVI, 6, 3, cc);
-      evaluate(field, data1->VY, data1->NbVY, 5, 3, cc);
-    }
-  }
-  
-  for(int cc = 0; cc < 9; cc++){
-    if(comp < 0 || comp == cc){
-      evaluate(field, data1->TP, data1->NbTP, 1, 9, cc);
-      evaluate(field, data1->TL, data1->NbTL, 2, 9, cc);
-      evaluate(field, data1->TT, data1->NbTT, 3, 9, cc);      
-      evaluate(field, data1->TQ, data1->NbTQ, 4, 9, cc);
-      evaluate(field, data1->TS, data1->NbTS, 4, 9, cc);
-      evaluate(field, data1->TH, data1->NbTH, 8, 9, cc);
-      evaluate(field, data1->TI, data1->NbTI, 6, 9, cc);
-      evaluate(field, data1->TY, data1->NbTY, 5, 9, cc);
-    }
-  }
-  
-  data1->finalize();
-  v1->setChanged(true);
-
+	field->put_on_view(v1);
   return v1;
 }
diff --git a/Plugin/FieldView.h b/Plugin/FieldView.h
index edee00236b830246cea07339121d7c772ea9bcf1..8c82f430e98601ecd312d61a8fc0bbd285120a2c 100644
--- a/Plugin/FieldView.h
+++ b/Plugin/FieldView.h
@@ -30,7 +30,6 @@ extern "C"
 class GMSH_FieldViewPlugin : public GMSH_Post_Plugin
 {
  public:
-  GMSH_FieldViewPlugin();
   void getName(char *name) const;
   void getInfos(char *author, char *copyright, char *help_text) const;
   void catchErrorMessage(char *errorMessage) const;
diff --git a/Plugin/Makefile b/Plugin/Makefile
index 707ecca5c5bf90d802ccad94e096736e89f70a7d..84591661d845a582a4c8499581735ddef804c50c 100644
--- a/Plugin/Makefile
+++ b/Plugin/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.152 2008-02-24 19:59:03 geuzaine Exp $
+# $Id: Makefile,v 1.153 2008-03-18 08:41:26 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -76,267 +76,266 @@ depend:
 Plugin.o: Plugin.cpp Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/Message.h ../Post/PView.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/PViewData.h \
-  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h
+  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/AdaptiveViews.h \
+  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/GmshMatrix.h
 PluginManager.o: PluginManager.cpp Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h PluginManager.h CutMap.h Levelset.h CutGrid.h \
   StreamLines.h CutPlane.h CutParametric.h CutSphere.h Skin.h \
-  ../DataStr/Tree.h ../DataStr/avl.h Extract.h ExtractElements.h \
-  ExtractEdges.h HarmonicToTime.h ModulusPhase.h Integrate.h Gradient.h \
-  Curl.h Divergence.h Annotate.h Remove.h MakeSimplex.h Smooth.h \
-  Transform.h TransformLatLon.h Triangulate.h Warp.h SphericalRaise.h \
-  Eigenvectors.h Eigenvalues.h Lambda2.h Evaluate.h ../Post/OctreePost.h \
-  ../Common/Octree.h ../Common/OctreeInternals.h Probe.h FieldView.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h Extract.h \
+  ExtractElements.h ExtractEdges.h HarmonicToTime.h ModulusPhase.h \
+  Integrate.h Gradient.h Curl.h Divergence.h Annotate.h Remove.h \
+  MakeSimplex.h Smooth.h Transform.h TransformLatLon.h Triangulate.h \
+  Warp.h SphericalRaise.h Eigenvectors.h Eigenvalues.h Lambda2.h \
+  Evaluate.h ../Post/OctreePost.h ../Common/Octree.h \
+  ../Common/OctreeInternals.h Probe.h FieldView.h GSHHS.h \
   ../Common/Context.h
 Levelset.o: Levelset.cpp Levelset.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
-  ../Common/GmshMatrix.h MakeSimplex.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
+  ../Common/GmshMatrix.h MakeSimplex.h ../DataStr/List.h \
+  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h
 CutPlane.o: CutPlane.cpp CutPlane.h Levelset.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/Message.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/Context.h \
-  ../Common/GmshUI.h ../Graphics/Draw.h
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h ../Common/GmshMatrix.h ../DataStr/List.h \
+  ../Common/Context.h ../Common/GmshUI.h ../Graphics/Draw.h \
+  ../Geo/SBoundingBox3d.h
 CutSphere.o: CutSphere.cpp CutSphere.h Levelset.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/Message.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/Context.h \
-  ../Common/GmshUI.h ../Graphics/Draw.h
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h ../Common/GmshMatrix.h ../DataStr/List.h \
+  ../Common/Context.h ../Common/GmshUI.h ../Graphics/Draw.h \
+  ../Geo/SBoundingBox3d.h
 CutMap.o: CutMap.cpp CutMap.h Levelset.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Common/Context.h
 Smooth.o: Smooth.cpp Smooth.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h
 CutParametric.o: CutParametric.cpp ../Post/OctreePost.h \
   ../Common/Octree.h ../Common/OctreeInternals.h CutParametric.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/Message.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/Context.h \
-  ../Common/GmshUI.h ../Graphics/Draw.h
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h ../Common/GmshMatrix.h ../Common/Context.h \
+  ../Common/GmshUI.h ../Graphics/Draw.h ../Geo/SBoundingBox3d.h
 Lambda2.o: Lambda2.cpp Lambda2.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Common/ShapeFunctions.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h
 Eigenvectors.o: Eigenvectors.cpp Eigenvectors.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/Message.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h ../Numeric/Numeric.h \
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h ../Common/GmshMatrix.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../Numeric/EigSolve.h
 Eigenvalues.o: Eigenvalues.cpp Eigenvalues.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h
 StreamLines.o: StreamLines.cpp StreamLines.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Post/OctreePost.h ../Common/Octree.h \
   ../Common/OctreeInternals.h ../Common/Context.h ../Common/GmshUI.h \
-  ../Graphics/Draw.h
+  ../Graphics/Draw.h ../Geo/SBoundingBox3d.h
 CutGrid.o: CutGrid.cpp ../Post/OctreePost.h ../Common/Octree.h \
   ../Common/OctreeInternals.h CutGrid.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Common/Context.h ../Common/GmshUI.h \
-  ../Graphics/Draw.h
+  ../Graphics/Draw.h ../Geo/SBoundingBox3d.h
 Transform.o: Transform.cpp Transform.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h
 TransformLatLon.o: TransformLatLon.cpp TransformLatLon.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/Message.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h ../Common/GmshMatrix.h
 Triangulate.o: Triangulate.cpp ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/discreteFace.h ../Geo/GModel.h ../Geo/GFace.h ../Geo/Geo.h \
-  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
-  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
-  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
-  ../DataStr/avl.h ../Geo/SPoint2.h ../Geo/ExtrudeParams.h \
-  ../Common/SmoothData.h ../Mesh/DivideAndConquer.h ../Common/Message.h \
-  ../Geo/MVertex.h ../Geo/SPoint3.h Triangulate.h Plugin.h \
-  ../Common/Options.h ../Post/ColorTable.h ../Post/PView.h \
-  ../Post/PViewData.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../Common/GmshMatrix.h ../Common/Context.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h ../Geo/discreteFace.h ../Geo/GModel.h ../Geo/Geo.h \
+  ../Mesh/DivideAndConquer.h ../Common/Message.h ../Geo/MVertex.h \
+  Triangulate.h Plugin.h ../Common/Options.h ../Post/ColorTable.h \
+  ../Post/PView.h ../Post/PViewDataList.h ../Post/AdaptiveViews.h \
+  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/GmshMatrix.h \
+  ../Common/Context.h
 Warp.o: Warp.cpp Warp.h Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/Message.h ../Post/PView.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/PViewData.h \
-  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
+  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/AdaptiveViews.h \
+  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/GmshMatrix.h \
   ../Common/SmoothData.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h
 SphericalRaise.o: SphericalRaise.cpp SphericalRaise.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/Message.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h ../Numeric/Numeric.h \
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h ../Common/GmshMatrix.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h
 Skin.o: Skin.cpp Skin.h Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/Message.h ../Post/PView.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/PViewData.h \
-  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
-  ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Malloc.h \
-  ../Common/Context.h
+  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/AdaptiveViews.h \
+  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/GmshMatrix.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../DataStr/Malloc.h ../Common/Context.h
 Extract.o: Extract.cpp Extract.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h
 ExtractElements.o: ExtractElements.cpp ExtractElements.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/Message.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h ../Numeric/Numeric.h \
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h ../Common/GmshMatrix.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h
 ExtractEdges.o: ExtractEdges.cpp ExtractEdges.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/Message.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h ../Mesh/BDS.h ../Geo/GFace.h \
-  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h ../Common/GmshMatrix.h ../Mesh/BDS.h \
+  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SBoundingBox3d.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GVertex.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Post/PView.h
 MakeSimplex.o: MakeSimplex.cpp MakeSimplex.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h
 Evaluate.o: Evaluate.cpp Evaluate.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Post/OctreePost.h ../Common/Octree.h \
   ../Common/OctreeInternals.h
 FieldView.o: FieldView.cpp FieldView.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Mesh/Field.h ../Geo/Geo.h \
   ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
-  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h ../DataStr/Tree.h ../DataStr/avl.h \
-  ../Geo/SPoint2.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
-  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GVertex.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Post/OctreePost.h ../Common/Octree.h \
-  ../Common/OctreeInternals.h
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GEdgeLoop.h \
+  ../Geo/GRegion.h ../Mesh/Field.h
 Integrate.o: Integrate.cpp Integrate.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Common/ShapeFunctions.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h
 Gradient.o: Gradient.cpp Gradient.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Common/ShapeFunctions.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h
 Curl.o: Curl.cpp Curl.h Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/Message.h ../Post/PView.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/PViewData.h \
-  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
+  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/AdaptiveViews.h \
+  ../DataStr/List.h ../Common/GmshMatrix.h ../Common/GmshMatrix.h \
   ../Common/ShapeFunctions.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h
 Divergence.o: Divergence.cpp Divergence.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Common/ShapeFunctions.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h
 Annotate.o: Annotate.cpp Annotate.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Common/Context.h ../Common/GmshUI.h \
   ../Fltk/GUI.h ../Fltk/Opengl_Window.h ../Fltk/Colorbar_Window.h \
-  ../Fltk/Popup_Button.h ../Fltk/SpherePosition_Widget.h \
-  ../Graphics/Draw.h
+  ../Common/GmshUI.h ../Post/ColorTable.h ../Fltk/Popup_Button.h \
+  ../Fltk/SpherePosition_Widget.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Graphics/Draw.h ../Geo/SBoundingBox3d.h
 Remove.o: Remove.cpp Remove.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h
 Probe.o: Probe.cpp Probe.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Common/GmshMatrix.h ../Common/Context.h ../Post/OctreePost.h \
   ../Common/Octree.h ../Common/OctreeInternals.h ../Common/GmshUI.h \
-  ../Graphics/Draw.h
+  ../Graphics/Draw.h ../Geo/SBoundingBox3d.h
 HarmonicToTime.o: HarmonicToTime.cpp HarmonicToTime.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/Message.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h ../Common/GmshMatrix.h
 ModulusPhase.o: ModulusPhase.cpp ModulusPhase.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/Message.h \
   ../Post/PView.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Post/AdaptiveViews.h \
-  ../DataStr/List.h ../Common/GmshMatrix.h
+  ../Post/PViewDataList.h ../Post/AdaptiveViews.h ../DataStr/List.h \
+  ../Common/GmshMatrix.h ../Common/GmshMatrix.h
diff --git a/Plugin/PluginManager.cpp b/Plugin/PluginManager.cpp
index da6125f370f5d7a2ca8a1cb24c3e91eafcb0952d..63e12660b66e5177adae3ccc55711b2e05887842 100644
--- a/Plugin/PluginManager.cpp
+++ b/Plugin/PluginManager.cpp
@@ -1,4 +1,4 @@
-// $Id: PluginManager.cpp,v 1.5 2008-02-23 15:30:10 geuzaine Exp $
+// $Id: PluginManager.cpp,v 1.6 2008-03-18 08:41:26 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -63,6 +63,7 @@
 #include "Evaluate.h"
 #include "Probe.h"
 #include "FieldView.h"
+#include "GSHHS.h"
 #include "Context.h"
 
 extern Context_T CTX;
@@ -237,6 +238,8 @@ void GMSH_PluginManager::registerDefaultPlugins()
 		      ("Evaluate", GMSH_RegisterEvaluatePlugin()));
     allPlugins.insert(std::pair<const char*, GMSH_Plugin*>
 		      ("CutParametric", GMSH_RegisterCutParametricPlugin()));
+    allPlugins.insert(std::pair<const char*, GMSH_Plugin*>
+		      ("GSHHS", GMSH_RegisterGSHHSPlugin()));
 #endif
   }
 
diff --git a/Post/Makefile b/Post/Makefile
index f0c171ed0aa32c2ebbb0b4acbc290cd114cda68a..bd4e30002f704fae491a250ad2a8915e9c580788 100644
--- a/Post/Makefile
+++ b/Post/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.33 2008-03-11 22:30:32 geuzaine Exp $
+# $Id: Makefile,v 1.34 2008-03-18 08:41:27 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -66,14 +66,15 @@ PView.o: PView.cpp PView.h PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h PViewOptions.h ColorTable.h PViewDataList.h \
   AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   PViewDataGModel.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
-  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Common/VertexArray.h ../Common/Context.h ../Common/SmoothData.h \
-  ../Common/StringUtils.h ../Common/Message.h
+  ../Geo/Range.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h \
+  ../Geo/Pair.h ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Numeric/Numeric.h \
+  ../Numeric/NumericEmbedded.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Common/VertexArray.h ../Geo/SVector3.h \
+  ../Common/Context.h ../Common/SmoothData.h ../Common/StringUtils.h \
+  ../Common/Message.h
 PViewData.o: PViewData.cpp PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h
 PViewDataIO.o: PViewDataIO.cpp ../Common/Message.h ../Numeric/Numeric.h \
@@ -92,28 +93,28 @@ PViewDataGModel.o: PViewDataGModel.cpp PViewDataGModel.h PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h PViewDataList.h \
   AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h
+  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SVector3.h ../Geo/GFace.h ../Geo/GEdgeLoop.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Mesh/Field.h ../Geo/Geo.h ../Common/GmshDefines.h \
+  ../Geo/gmshSurface.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
+  ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Post/PView.h \
+  ../Post/PViewData.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Geo/SBoundingBox3d.h ../Geo/MElement.h ../Geo/MVertex.h \
+  ../Geo/MEdge.h ../Geo/MFace.h
 PViewDataGModelIO.o: PViewDataGModelIO.cpp ../Common/Message.h \
   PViewDataGModel.h PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   PViewDataList.h AdaptiveViews.h ../DataStr/List.h \
   ../Common/GmshMatrix.h ../Geo/GModel.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SBoundingBox3d.h ../Geo/MVertex.h ../Geo/SPoint3.h \
-  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
-  ../Common/StringUtils.h
+  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/SVector3.h ../Geo/GFace.h \
+  ../Geo/GEdgeLoop.h ../Geo/Pair.h ../Geo/GRegion.h ../Mesh/Field.h \
+  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h \
+  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../DataStr/List.h \
+  ../DataStr/Tree.h ../DataStr/avl.h ../Geo/ExtrudeParams.h \
+  ../Common/SmoothData.h ../Post/PView.h ../Post/PViewData.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Geo/SBoundingBox3d.h \
+  ../Geo/MVertex.h ../Numeric/Numeric.h ../Common/StringUtils.h
 PViewOptions.o: PViewOptions.cpp PViewOptions.h ColorTable.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Common/Message.h
 AdaptiveViews.o: AdaptiveViews.cpp AdaptiveViews.h ../DataStr/List.h \
@@ -121,12 +122,12 @@ AdaptiveViews.o: AdaptiveViews.cpp AdaptiveViews.h ../DataStr/List.h \
   ../Post/ColorTable.h ../Common/Message.h ../Post/PView.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Post/AdaptiveViews.h
+  ../Post/AdaptiveViews.h ../DataStr/List.h ../Common/GmshMatrix.h
 OctreePost.o: OctreePost.cpp ../Common/Octree.h \
   ../Common/OctreeInternals.h OctreePost.h ../DataStr/List.h PView.h \
   PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h PViewOptions.h \
   ColorTable.h PViewDataList.h AdaptiveViews.h ../Common/GmshMatrix.h \
   ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h ../Common/Message.h \
-  ../Common/ShapeFunctions.h
+  ../Common/ShapeFunctions.h ../Numeric/Numeric.h
 ColorTable.o: ColorTable.cpp ../Common/Message.h ColorTable.h \
   ../Common/Context.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h
diff --git a/contrib/MathEval/matheval.cpp b/contrib/MathEval/matheval.cpp
index efc5e1b1cbe4347428b925f193de4e12ca8a858a..ef14c6d451d52e21417158dc95c23a9ad145e980 100644
--- a/contrib/MathEval/matheval.cpp
+++ b/contrib/MathEval/matheval.cpp
@@ -49,6 +49,8 @@ typedef struct {
   Node           *root;	/* Root of tree representation of
 			 * function.  */
   SymbolTable    *symbol_table;	/* Evalutor symbol table.  */
+	char **names;
+	int count;
 } Evaluator;
 
 void *
@@ -107,6 +109,8 @@ evaluator_create(char *string)
   evaluator = XMALLOC(Evaluator, 1);
   evaluator->root = matheval_root;
   evaluator->symbol_table = matheval_symbol_table;
+	evaluator->count=0;
+	evaluator->names=NULL;
   
   return evaluator;
 }
@@ -120,6 +124,7 @@ evaluator_destroy(void *evaluator)
    */
   node_destroy(((Evaluator *) evaluator)->root);
   symbol_table_destroy(((Evaluator *) evaluator)->symbol_table);
+	XFREE(((Evaluator *) evaluator)->names);
   XFREE(evaluator);
 }
 
@@ -177,6 +182,8 @@ evaluator_derivative(void *evaluator, char *name)
   derivative->root = node_simplify(node_derivative(((Evaluator *) evaluator)->root, name,
 						   ((Evaluator *) evaluator)->symbol_table));
   derivative->symbol_table = symbol_table_assign(((Evaluator *) evaluator)->symbol_table);
+	derivative->count=0;
+	derivative->names=NULL;
   
   return derivative;
 }
@@ -246,3 +253,38 @@ evaluator_derivative_z(void *evaluator)
    */
   return evaluator_derivative(evaluator, "z");
 }
+
+void
+evaluator_get_variables(void *evaluator, char ***names, int *count)
+{
+	Record        **records;	/* Array of symbol table records
+					 * containing evaluator variables. 
+					 */
+	int             i;	/* Loop counter.  */
+
+	/* If not already, find and remember evaluator variable names. */
+	if (!((Evaluator *) evaluator)->names) {
+		symbol_table_clear_flags(((Evaluator *) evaluator)->
+					 symbol_table);
+		node_flag_variables(((Evaluator *) evaluator)->root);
+		((Evaluator *) evaluator)->count =
+		    symbol_table_get_flagged_count(((Evaluator *)
+						    evaluator)->
+						   symbol_table);
+		records =
+		    XMALLOC(Record *, ((Evaluator *) evaluator)->count);
+		symbol_table_get_flagged(((Evaluator *) evaluator)->
+					 symbol_table, records,
+					 ((Evaluator *) evaluator)->count);
+		((Evaluator *) evaluator)->names =
+		    XMALLOC(char *, ((Evaluator *) evaluator)->count);
+		for (i = 0; i < ((Evaluator *) evaluator)->count; i++)
+			((Evaluator *) evaluator)->names[i] =
+			    records[i]->name;
+		XFREE(records);
+	}
+
+	/* Return requested information. */
+	*count = ((Evaluator *) evaluator)->count;
+	*names = ((Evaluator *) evaluator)->names;
+}
diff --git a/contrib/MathEval/matheval.h b/contrib/MathEval/matheval.h
index b155f4003c3034bf07baf5fe9aa8ff27c68cf7dc..cb4a639423479369985472e4d21d37a11d8bbc28 100644
--- a/contrib/MathEval/matheval.h
+++ b/contrib/MathEval/matheval.h
@@ -86,4 +86,17 @@ void    *evaluator_derivative_x(void *evaluator);
 void    *evaluator_derivative_y(void *evaluator);
 void    *evaluator_derivative_z(void *evaluator);
 
+/* Get array of strings with names of variables appearing in
+ * function represented by given evaluator.  Only variables
+ * referenced by evaluator after simplification are returned.
+ * Address of first string in array is stored into location
+ * pointed by function second argument.  Number of array elements
+ * is stored into location pointed by third argument.  Array is
+ * allocated, remembered and later destroyed by evaluator object,
+ * thus caller must not free any of string nor array itself.
+ * Returned information is valid until evaluator object destroyed. 
+ */
+extern void     evaluator_get_variables(void *evaluator,
+					char ***names, int *count);
+
 #endif
diff --git a/contrib/MathEval/node.cpp b/contrib/MathEval/node.cpp
index 2698e2c29229c7989e6c025a14056ea763b2377a..7ced8e2c78be1768e9febc5c8a0366d77984afa3 100644
--- a/contrib/MathEval/node.cpp
+++ b/contrib/MathEval/node.cpp
@@ -657,3 +657,27 @@ node_write(Node * node, char *string)
     break;
   }
 }
+void
+node_flag_variables(Node * node)
+{
+	/* According to node type, flag variable in symbol table or
+	 * proceed with calling function recursively on node children. */
+	switch (node->type) {
+	case 'v':
+		node->data.variable->flag = true;
+		break;
+
+	case 'f':
+		node_flag_variables(node->data.function.child);
+		break;
+
+	case 'u':
+		node_flag_variables(node->data.un_op.child);
+		break;
+
+	case 'b':
+		node_flag_variables(node->data.bin_op.left);
+		node_flag_variables(node->data.bin_op.right);
+		break;
+	}
+}
diff --git a/contrib/MathEval/node.h b/contrib/MathEval/node.h
index c2744aae19c8e06de253d8ad1df272067ab9a71d..0aee3fd97c7c4eae42adc409406e486bc7f2fb38 100644
--- a/contrib/MathEval/node.h
+++ b/contrib/MathEval/node.h
@@ -108,4 +108,7 @@ int             node_calculate_length(Node * node);
  */
 void            node_write(Node * node, char *string);
 
+/* Flag each variable in symbol table that is used from subtree rooted at
+ * specified node. */
+void            node_flag_variables(Node * node);
 #endif
diff --git a/contrib/MathEval/symbol_table.cpp b/contrib/MathEval/symbol_table.cpp
index 38fe2fb5d72a798c0ab4d72db763e809c8cf0bf9..dc7db03fcae3fd77849c2ff9edb87e0040a29538 100644
--- a/contrib/MathEval/symbol_table.cpp
+++ b/contrib/MathEval/symbol_table.cpp
@@ -211,3 +211,60 @@ hash(char *s, int n)
   
   return h % n;
 }
+
+void
+symbol_table_clear_flags(SymbolTable * symbol_table)
+{
+	Record         *curr;	/* Pointer to current symbol table record
+				 * while traversing hash table bucket. */
+	int             i;	/* Loop counter.  */
+
+	/* Clear flag for all records in symbol table. */
+	for (i = 0; i < symbol_table->length; i++)
+		for (curr = symbol_table->records[i].next; curr;
+		     curr = curr->next)
+			curr->flag = false;
+}
+
+int
+symbol_table_get_flagged_count(SymbolTable * symbol_table)
+{
+	int             count;	/* Number of flagged symbol table records. 
+				 */
+	Record         *curr;	/* Pointer to current symbol table record
+				 * while traversing hash table bucket. */
+	int             i;	/* Loop counter.  */
+
+	/* Calculate number of records in symbol table with flag set. */
+	count = 0;
+	for (i = 0; i < symbol_table->length; i++)
+		for (curr = symbol_table->records[i].next; curr;
+		     curr = curr->next)
+			if (curr->flag)
+				count++;
+	return count;
+}
+
+int
+symbol_table_get_flagged(SymbolTable * symbol_table, Record ** records,
+			 int length)
+{
+	int             count;	/* Number of pointers to symbol table
+				 * records put into given array. */
+	Record         *curr;	/* Pointers to current symbol table record 
+				 * while traversing hash table bucket.  */
+	int             i;	/* Loop counter.  */
+
+	/* Put pointers to records in symbol table with flag set into
+	 * given array. */
+	count = 0;
+	for (i = 0; i < symbol_table->length; i++)
+		for (curr = symbol_table->records[i].next; curr;
+		     curr = curr->next)
+			if (curr->flag) {
+				records[count++] = curr;
+				if (count == length)
+					return count;
+			}
+	return count;
+}
diff --git a/contrib/MathEval/symbol_table.h b/contrib/MathEval/symbol_table.h
index 0862c956efbd823a09bf79e7796f8d17ca1eab5a..d6d75b4f0eb528ba4ccf6f978824f9574c526569 100644
--- a/contrib/MathEval/symbol_table.h
+++ b/contrib/MathEval/symbol_table.h
@@ -33,6 +33,8 @@ typedef struct _Record {
     double (*function) (double); /* Pointer to function to calculate
 				  * its value.  */
   } data;
+	int             flag;	/* Record flag used for symbol table
+				 * selective traversal.  */
 } Record;
 
 /*
@@ -76,4 +78,16 @@ Record *symbol_table_lookup(SymbolTable * symbol_table, char *name);
  */
 SymbolTable *symbol_table_assign(SymbolTable * symbol_table);
 
+/* Clear flag for each symbol table record. */
+void            symbol_table_clear_flags(SymbolTable * symbol_table);
+
+/* Count number of flagged records in symbol table. */
+int             symbol_table_get_flagged_count(SymbolTable * symbol_table);
+
+/* Fill given array with pointers to records from given symbol table that
+ * have flag set.  Further arguments are array to store pointers and array 
+ * capacity.  Number of records that are actually put into array is
+ * returned. */
+int             symbol_table_get_flagged(SymbolTable * symbol_table,
+					 Record ** records, int length);
 #endif
diff --git a/contrib/NativeFileChooser/Makefile b/contrib/NativeFileChooser/Makefile
index 140196aa87fb2f7e4526b54228d6e8ad74211075..c725b8f1a0e1e313ee5304bedc28fc2796e0ec0a 100644
--- a/contrib/NativeFileChooser/Makefile
+++ b/contrib/NativeFileChooser/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.6 2008-02-17 08:48:10 geuzaine Exp $
+# $Id: Makefile,v 1.7 2008-03-18 08:41:27 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -52,5 +52,5 @@ depend:
 
 # DO NOT DELETE THIS LINE
 Fl_Native_File_Chooser.o: Fl_Native_File_Chooser.cxx \
-  Fl_Native_File_Chooser_MAC.cxx common.cxx FL/Fl_Native_File_Chooser.H \
-  FL/Fl_Native_File_Chooser_MAC.H
+  Fl_Native_File_Chooser_FLTK.cxx FL/Fl_Native_File_Chooser.H \
+  FL/Fl_Native_File_Chooser_FLTK.H common.cxx
diff --git a/contrib/Netgen/Makefile b/contrib/Netgen/Makefile
index 62c6c9eee21c1e295373eeb120661d3a4763da51..88a294d030b822c44d161a7a585000a2cf0be0d0 100644
--- a/contrib/Netgen/Makefile
+++ b/contrib/Netgen/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.32 2008-02-24 19:59:04 geuzaine Exp $
+# $Id: Makefile,v 1.33 2008-03-18 08:41:27 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -344,10 +344,9 @@ meshtool.o: libsrc/meshing/meshtool.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
   libsrc/meshing/specials.hpp libsrc/include/csg.hpp \
-  libsrc/include/../csg/csg.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/meshing.hpp libsrc/include/../meshing/meshing.hpp \
-  libsrc/include/../csg/surface.hpp libsrc/include/../csg/solid.hpp \
-  libsrc/include/../csg/identify.hpp \
+  libsrc/include/../csg/csg.hpp libsrc/include/meshing.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/../csg/surface.hpp \
+  libsrc/include/../csg/solid.hpp libsrc/include/../csg/identify.hpp \
   libsrc/include/../csg/singularref.hpp libsrc/include/../csg/csgeom.hpp \
   libsrc/include/../csg/triapprox.hpp libsrc/include/../csg/algprim.hpp \
   libsrc/include/../csg/brick.hpp libsrc/include/../csg/spline3d.hpp \
@@ -358,7 +357,7 @@ meshtool.o: libsrc/meshing/meshtool.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp \
   libsrc/include/geometry2d.hpp libsrc/include/../geom2d/geometry2d.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/include/../geom2d/spline2d.hpp \
+  libsrc/include/../geom2d/spline2d.hpp \
   libsrc/include/../geom2d/splinegeometry2.hpp \
   libsrc/include/../geom2d/geom2dmesh.hpp
 refine.o: libsrc/meshing/refine.cpp libsrc/include/mystdlib.h \
@@ -486,7 +485,7 @@ improve3.o: libsrc/meshing/improve3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/curvedelems.hpp libsrc/meshing/bisect.hpp \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
-  libsrc/meshing/specials.hpp libsrc/include/../opti/opti.hpp
+  libsrc/meshing/specials.hpp
 smoothing3.o: libsrc/meshing/smoothing3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -528,7 +527,7 @@ smoothing3.o: libsrc/meshing/smoothing3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/curvedelems.hpp libsrc/meshing/bisect.hpp \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
-  libsrc/meshing/specials.hpp libsrc/include/../opti/opti.hpp
+  libsrc/meshing/specials.hpp
 adfront3.o: libsrc/meshing/adfront3.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -742,7 +741,7 @@ improve2.o: libsrc/meshing/improve2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/curvedelems.hpp libsrc/meshing/bisect.hpp \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
-  libsrc/meshing/specials.hpp libsrc/include/../opti/opti.hpp
+  libsrc/meshing/specials.hpp
 smoothing2.o: libsrc/meshing/smoothing2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -784,7 +783,7 @@ smoothing2.o: libsrc/meshing/smoothing2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/curvedelems.hpp libsrc/meshing/bisect.hpp \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
-  libsrc/meshing/specials.hpp libsrc/include/../opti/opti.hpp
+  libsrc/meshing/specials.hpp
 adfront2.o: libsrc/meshing/adfront2.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1332,7 +1331,7 @@ improve2gen.o: libsrc/meshing/improve2gen.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/curvedelems.hpp libsrc/meshing/bisect.hpp \
   libsrc/meshing/clusters.hpp libsrc/meshing/meshfunc.hpp \
   libsrc/meshing/hprefinement.hpp libsrc/meshing/boundarylayer.hpp \
-  libsrc/meshing/specials.hpp libsrc/include/../opti/opti.hpp
+  libsrc/meshing/specials.hpp
 delaunay.o: libsrc/meshing/delaunay.cpp libsrc/include/mystdlib.h \
   libsrc/meshing/meshing.hpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mydefs.hpp \
@@ -1754,8 +1753,7 @@ nglib.o: libsrc/interface/nglib.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -1793,13 +1791,12 @@ nglib.o: libsrc/interface/nglib.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp \
   libsrc/include/stlgeom.hpp libsrc/include/../stlgeom/stlgeom.hpp \
-  libsrc/include/../gprim/gprim.hpp \
   libsrc/include/../stlgeom/stltopology.hpp \
   libsrc/include/../stlgeom/stltool.hpp \
   libsrc/include/../stlgeom/stlline.hpp \
   libsrc/include/../stlgeom/meshstlsurface.hpp \
   libsrc/include/geometry2d.hpp libsrc/include/../geom2d/geometry2d.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/include/../geom2d/spline2d.hpp \
+  libsrc/include/../geom2d/spline2d.hpp \
   libsrc/include/../geom2d/splinegeometry2.hpp \
   libsrc/include/../geom2d/geom2dmesh.hpp libsrc/interface/nglib.h
 geomtest3d.o: libsrc/gprim/geomtest3d.cpp libsrc/include/mystdlib.h \
@@ -2031,8 +2028,7 @@ algprim.o: libsrc/csg/algprim.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -2099,8 +2095,7 @@ brick.o: libsrc/csg/brick.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -2163,9 +2158,8 @@ manifold.o: libsrc/csg/manifold.cpp libsrc/include/csg.hpp \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
-  libsrc/include/../linalg/vector.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/linalg.hpp \
+  libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
@@ -2230,9 +2224,8 @@ bspline2d.o: libsrc/csg/bspline2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
-  libsrc/include/../linalg/vector.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/linalg.hpp \
+  libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
@@ -2297,9 +2290,8 @@ meshsurf.o: libsrc/csg/meshsurf.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
-  libsrc/include/../linalg/vector.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/linalg.hpp \
+  libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
@@ -2367,8 +2359,7 @@ csgeom.o: libsrc/csg/csgeom.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -2435,8 +2426,7 @@ polyhedra.o: libsrc/csg/polyhedra.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -2499,9 +2489,8 @@ curve2d.o: libsrc/csg/curve2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
-  libsrc/include/../linalg/vector.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/linalg.hpp \
+  libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
@@ -2569,8 +2558,7 @@ singularref.o: libsrc/csg/singularref.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -2661,9 +2649,8 @@ edgeflw.o: libsrc/csg/edgeflw.cpp libsrc/include/mystdlib.h \
   libsrc/include/../meshing/hprefinement.hpp \
   libsrc/include/../meshing/boundarylayer.hpp \
   libsrc/include/../meshing/specials.hpp libsrc/include/csg.hpp \
-  libsrc/include/../csg/csg.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../csg/surface.hpp libsrc/include/../csg/solid.hpp \
-  libsrc/include/../csg/identify.hpp \
+  libsrc/include/../csg/csg.hpp libsrc/include/../csg/surface.hpp \
+  libsrc/include/../csg/solid.hpp libsrc/include/../csg/identify.hpp \
   libsrc/include/../csg/singularref.hpp libsrc/include/../csg/csgeom.hpp \
   libsrc/include/../csg/triapprox.hpp libsrc/include/../csg/algprim.hpp \
   libsrc/include/../csg/brick.hpp libsrc/include/../csg/spline3d.hpp \
@@ -2703,8 +2690,7 @@ solid.o: libsrc/csg/solid.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -2768,9 +2754,8 @@ explicitcurve2d.o: libsrc/csg/explicitcurve2d.cpp \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
-  libsrc/include/../linalg/vector.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/linalg.hpp \
+  libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
@@ -2863,9 +2848,8 @@ specpoin.o: libsrc/csg/specpoin.cpp libsrc/include/mystdlib.h \
   libsrc/include/../meshing/hprefinement.hpp \
   libsrc/include/../meshing/boundarylayer.hpp \
   libsrc/include/../meshing/specials.hpp libsrc/include/csg.hpp \
-  libsrc/include/../csg/csg.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../csg/surface.hpp libsrc/include/../csg/solid.hpp \
-  libsrc/include/../csg/identify.hpp \
+  libsrc/include/../csg/csg.hpp libsrc/include/../csg/surface.hpp \
+  libsrc/include/../csg/solid.hpp libsrc/include/../csg/identify.hpp \
   libsrc/include/../csg/singularref.hpp libsrc/include/../csg/csgeom.hpp \
   libsrc/include/../csg/triapprox.hpp libsrc/include/../csg/algprim.hpp \
   libsrc/include/../csg/brick.hpp libsrc/include/../csg/spline3d.hpp \
@@ -2905,8 +2889,7 @@ gencyl.o: libsrc/csg/gencyl.cpp libsrc/include/linalg.hpp \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -2973,8 +2956,7 @@ revolution.o: libsrc/csg/revolution.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3040,8 +3022,7 @@ genmesh.o: libsrc/csg/genmesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3107,8 +3088,7 @@ spline3d.o: libsrc/csg/spline3d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3171,9 +3151,8 @@ surface.o: libsrc/csg/surface.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
-  libsrc/include/../linalg/vector.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/linalg.hpp \
+  libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
@@ -3211,8 +3190,7 @@ surface.o: libsrc/csg/surface.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/gencyl.hpp libsrc/include/../csg/polyhedra.hpp \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
-  libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp \
-  libsrc/include/../linalg/linalg.hpp
+  libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp
 identify.o: libsrc/csg/identify.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3242,8 +3220,7 @@ identify.o: libsrc/csg/identify.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3309,8 +3286,7 @@ triapprox.o: libsrc/csg/triapprox.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3373,9 +3349,8 @@ geom2dmesh.o: libsrc/geom2d/geom2dmesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
-  libsrc/include/../linalg/vector.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/linalg.hpp \
+  libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
@@ -3415,7 +3390,7 @@ geom2dmesh.o: libsrc/geom2d/geom2dmesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp \
   libsrc/include/geometry2d.hpp libsrc/include/../geom2d/geometry2d.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/include/../geom2d/spline2d.hpp \
+  libsrc/include/../geom2d/spline2d.hpp \
   libsrc/include/../geom2d/splinegeometry2.hpp \
   libsrc/include/../geom2d/geom2dmesh.hpp
 spline2d.o: libsrc/geom2d/spline2d.cpp libsrc/include/mystdlib.h \
@@ -3444,9 +3419,8 @@ spline2d.o: libsrc/geom2d/spline2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
-  libsrc/include/../linalg/vector.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/linalg.hpp \
+  libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
@@ -3485,7 +3459,7 @@ spline2d.o: libsrc/geom2d/spline2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/geom2d/spline2d.hpp
+  libsrc/geom2d/spline2d.hpp
 splinegeometry2.o: libsrc/geom2d/splinegeometry2.cpp \
   libsrc/include/mystdlib.h libsrc/include/csg.hpp \
   libsrc/include/../csg/csg.hpp libsrc/include/myadt.hpp \
@@ -3513,9 +3487,8 @@ splinegeometry2.o: libsrc/geom2d/splinegeometry2.cpp \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
-  libsrc/include/../linalg/vector.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/linalg.hpp \
+  libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
@@ -3554,8 +3527,7 @@ splinegeometry2.o: libsrc/geom2d/splinegeometry2.cpp \
   libsrc/include/../csg/extrusion.hpp \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/geom2d/spline2d.hpp \
-  libsrc/geom2d/splinegeometry2.hpp
+  libsrc/geom2d/spline2d.hpp libsrc/geom2d/splinegeometry2.hpp
 genmesh2d.o: libsrc/geom2d/genmesh2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/csg.hpp libsrc/include/../csg/csg.hpp \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
@@ -3582,9 +3554,8 @@ genmesh2d.o: libsrc/geom2d/genmesh2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/linalg.hpp libsrc/include/../linalg/linalg.hpp \
-  libsrc/include/../linalg/vector.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/linalg.hpp \
+  libsrc/include/../linalg/linalg.hpp libsrc/include/../linalg/vector.hpp \
   libsrc/include/../linalg/densemat.hpp \
   libsrc/include/../linalg/polynomial.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
@@ -3624,7 +3595,7 @@ genmesh2d.o: libsrc/geom2d/genmesh2d.cpp libsrc/include/mystdlib.h \
   libsrc/include/../csg/revolution.hpp libsrc/include/../csg/specpoin.hpp \
   libsrc/include/../csg/edgeflw.hpp libsrc/include/../csg/meshsurf.hpp \
   libsrc/include/geometry2d.hpp libsrc/include/../geom2d/geometry2d.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/include/../geom2d/spline2d.hpp \
+  libsrc/include/../geom2d/spline2d.hpp \
   libsrc/include/../geom2d/splinegeometry2.hpp \
   libsrc/include/../geom2d/geom2dmesh.hpp
 meshstlsurface.o: libsrc/stlgeom/meshstlsurface.cpp \
@@ -3656,8 +3627,7 @@ meshstlsurface.o: libsrc/stlgeom/meshstlsurface.cpp \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3683,9 +3653,8 @@ meshstlsurface.o: libsrc/stlgeom/meshstlsurface.cpp \
   libsrc/include/../meshing/hprefinement.hpp \
   libsrc/include/../meshing/boundarylayer.hpp \
   libsrc/include/../meshing/specials.hpp libsrc/stlgeom/stlgeom.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
-  libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
-  libsrc/stlgeom/meshstlsurface.hpp
+  libsrc/stlgeom/stltopology.hpp libsrc/stlgeom/stltool.hpp \
+  libsrc/stlgeom/stlline.hpp libsrc/stlgeom/meshstlsurface.hpp
 stlline.o: libsrc/stlgeom/stlline.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3714,8 +3683,7 @@ stlline.o: libsrc/stlgeom/stlline.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3741,9 +3709,8 @@ stlline.o: libsrc/stlgeom/stlline.cpp libsrc/include/mystdlib.h \
   libsrc/include/../meshing/hprefinement.hpp \
   libsrc/include/../meshing/boundarylayer.hpp \
   libsrc/include/../meshing/specials.hpp libsrc/stlgeom/stlgeom.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
-  libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
-  libsrc/stlgeom/meshstlsurface.hpp
+  libsrc/stlgeom/stltopology.hpp libsrc/stlgeom/stltool.hpp \
+  libsrc/stlgeom/stlline.hpp libsrc/stlgeom/meshstlsurface.hpp
 stltopology.o: libsrc/stlgeom/stltopology.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3772,8 +3739,7 @@ stltopology.o: libsrc/stlgeom/stltopology.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3799,9 +3765,8 @@ stltopology.o: libsrc/stlgeom/stltopology.cpp libsrc/include/mystdlib.h \
   libsrc/include/../meshing/hprefinement.hpp \
   libsrc/include/../meshing/boundarylayer.hpp \
   libsrc/include/../meshing/specials.hpp libsrc/stlgeom/stlgeom.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
-  libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
-  libsrc/stlgeom/meshstlsurface.hpp
+  libsrc/stlgeom/stltopology.hpp libsrc/stlgeom/stltool.hpp \
+  libsrc/stlgeom/stlline.hpp libsrc/stlgeom/meshstlsurface.hpp
 stltool.o: libsrc/stlgeom/stltool.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3830,8 +3795,7 @@ stltool.o: libsrc/stlgeom/stltool.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3857,9 +3821,8 @@ stltool.o: libsrc/stlgeom/stltool.cpp libsrc/include/mystdlib.h \
   libsrc/include/../meshing/hprefinement.hpp \
   libsrc/include/../meshing/boundarylayer.hpp \
   libsrc/include/../meshing/specials.hpp libsrc/stlgeom/stlgeom.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
-  libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
-  libsrc/stlgeom/meshstlsurface.hpp
+  libsrc/stlgeom/stltopology.hpp libsrc/stlgeom/stltool.hpp \
+  libsrc/stlgeom/stlline.hpp libsrc/stlgeom/meshstlsurface.hpp
 stlgeom.o: libsrc/stlgeom/stlgeom.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3888,8 +3851,7 @@ stlgeom.o: libsrc/stlgeom/stlgeom.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3915,9 +3877,8 @@ stlgeom.o: libsrc/stlgeom/stlgeom.cpp libsrc/include/mystdlib.h \
   libsrc/include/../meshing/hprefinement.hpp \
   libsrc/include/../meshing/boundarylayer.hpp \
   libsrc/include/../meshing/specials.hpp libsrc/stlgeom/stlgeom.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
-  libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
-  libsrc/stlgeom/meshstlsurface.hpp
+  libsrc/stlgeom/stltopology.hpp libsrc/stlgeom/stltool.hpp \
+  libsrc/stlgeom/stlline.hpp libsrc/stlgeom/meshstlsurface.hpp
 stlgeomchart.o: libsrc/stlgeom/stlgeomchart.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -3946,8 +3907,7 @@ stlgeomchart.o: libsrc/stlgeom/stlgeomchart.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -3973,9 +3933,8 @@ stlgeomchart.o: libsrc/stlgeom/stlgeomchart.cpp libsrc/include/mystdlib.h \
   libsrc/include/../meshing/hprefinement.hpp \
   libsrc/include/../meshing/boundarylayer.hpp \
   libsrc/include/../meshing/specials.hpp libsrc/stlgeom/stlgeom.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
-  libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
-  libsrc/stlgeom/meshstlsurface.hpp
+  libsrc/stlgeom/stltopology.hpp libsrc/stlgeom/stltool.hpp \
+  libsrc/stlgeom/stlline.hpp libsrc/stlgeom/meshstlsurface.hpp
 stlgeommesh.o: libsrc/stlgeom/stlgeommesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/myadt.hpp libsrc/include/../general/myadt.hpp \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \
@@ -4004,8 +3963,7 @@ stlgeommesh.o: libsrc/stlgeom/stlgeommesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/../gprim/geomtest3d.hpp \
   libsrc/include/../gprim/transform3d.hpp \
   libsrc/include/../gprim/adtree.hpp libsrc/include/meshing.hpp \
-  libsrc/include/../meshing/meshing.hpp libsrc/include/../gprim/gprim.hpp \
-  libsrc/include/../linalg/linalg.hpp libsrc/include/opti.hpp \
+  libsrc/include/../meshing/meshing.hpp libsrc/include/opti.hpp \
   libsrc/include/../opti/opti.hpp \
   libsrc/include/../meshing/msghandler.hpp \
   libsrc/include/../meshing/meshtype.hpp \
@@ -4031,9 +3989,8 @@ stlgeommesh.o: libsrc/stlgeom/stlgeommesh.cpp libsrc/include/mystdlib.h \
   libsrc/include/../meshing/hprefinement.hpp \
   libsrc/include/../meshing/boundarylayer.hpp \
   libsrc/include/../meshing/specials.hpp libsrc/stlgeom/stlgeom.hpp \
-  libsrc/include/../gprim/gprim.hpp libsrc/stlgeom/stltopology.hpp \
-  libsrc/stlgeom/stltool.hpp libsrc/stlgeom/stlline.hpp \
-  libsrc/stlgeom/meshstlsurface.hpp
+  libsrc/stlgeom/stltopology.hpp libsrc/stlgeom/stltool.hpp \
+  libsrc/stlgeom/stlline.hpp libsrc/stlgeom/meshstlsurface.hpp
 moveablemem.o: libsrc/general/moveablemem.cpp libsrc/include/myadt.hpp \
   libsrc/include/../general/myadt.hpp libsrc/include/mystdlib.h \
   libsrc/include/mydefs.hpp libsrc/include/../general/ngexception.hpp \