diff --git a/Box/Box.cpp b/Box/Box.cpp
index e011415a5dc262ee25f9ccd16bb197a09e1a27b1..478330e882be81b258a1d95c2915f265652b0a85 100644
--- a/Box/Box.cpp
+++ b/Box/Box.cpp
@@ -1,4 +1,4 @@
-// $Id: Box.cpp,v 1.23 2001-02-08 16:32:15 geuzaine Exp $
+// $Id: Box.cpp,v 1.24 2001-02-12 17:38:02 geuzaine Exp $
 
 #include <signal.h>
 
@@ -60,7 +60,7 @@ void Info (int level, char *arg0){
 int main(int argc, char *argv[]){
   int     i, nbf;
 
-  Init_Context();
+  Init_Context(0);
   Get_Options(argc, argv, &nbf);
 
   signal(SIGINT,  Signal); 
diff --git a/Box/Makefile b/Box/Makefile
index 6b86da99033b5155fc362c9b0c3e036130cc98f3..7b05a6d3bee5f651b6fc641cac8ff3ccedaa5a75 100644
--- a/Box/Makefile
+++ b/Box/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.5 2001-02-09 14:51:31 geuzaine Exp $
+# $Id: Makefile,v 1.6 2001-02-12 17:38:02 geuzaine Exp $
 #
 # Makefile for ".a"
 #
@@ -48,10 +48,11 @@ depend:
 	$(RM) $(RMFLAGS) Makefile.new
 
 # DO NOT DELETE THIS LINE
-box.o: box.cpp ../includes/msh_Include.h ../GmshDataStr/listman.h \
- ../GmshDataStr/treeman.h ../GmshDataStr/avl.h ../GmshDataStr/ualloc.h \
- ../GmshDataStr/outil.h ../base/base.h ../geo/geo.h \
- ../GmshUnix/message.h ../includes/msh_Const.h ../mesh/structure.h \
- ../includes/msh_Tree.h ../includes/msh_Proto.h \
- ../includes/msh_Version.h ../geo/context.h ../GmshGL/Draw_Post.h \
- ../GmshGL/colortable.h
+Box.o: Box.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
+  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
+  ../Common/GmshVersion.h ../Common/Const.h ../Geo/Geo.h ../Mesh/Mesh.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
+  ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Common/Views.h \
+  ../Common/ColorTable.h ../Parser/Parser.h ../Common/Context.h \
+  ../Parser/OpenFile.h ../Common/GetOptions.h ../Geo/MinMax.h \
+  ../Common/Static.h
diff --git a/Common/ColorTable.cpp b/Common/ColorTable.cpp
index 1b48ee6689d9fbcabbb85b7607a281e8f7035069..061b7953cb6238366facf75fb644b20a6305d72f 100644
--- a/Common/ColorTable.cpp
+++ b/Common/ColorTable.cpp
@@ -1,4 +1,4 @@
-// $Id: ColorTable.cpp,v 1.2 2001-01-08 08:05:40 geuzaine Exp $
+// $Id: ColorTable.cpp,v 1.3 2001-02-12 17:38:02 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "ColorTable.h"
@@ -183,16 +183,24 @@ void ColorTable_Paste(ColorTable *ct){
 
 void ColorTable_Print(ColorTable *ct, FILE *fp){
   int i, r, g, b, a;  
+  char tmp1[1024],tmp2[1024];
 
+  strcpy(tmp1, "");
   for (i=0;i<ct->size;i++) {
     r = UNPACK_RED( ct->table[i] );
     g = UNPACK_GREEN( ct->table[i] );
     b = UNPACK_BLUE( ct->table[i] );
     a = UNPACK_ALPHA( ct->table[i] );
-    if(!((i+1)%4)) fprintf(fp, "\n  ");
-    fprintf(fp, "{%d, %d, %d, %d}", r, g, b, a );
-    if(i!=ct->size-1) fprintf(fp, ", ");
+    if(i && !(i%4)){
+      if(fp) fprintf(fp, "%s\n", tmp1); else Msg(DIRECT, tmp1);
+      strcpy(tmp1, "");
+    }
+    sprintf(tmp2, "{%d, %d, %d, %d}", r, g, b, a);
+    strcat(tmp1, tmp2);
+    if(i!=ct->size-1) strcat(tmp1, ", ");
   }
+  if(fp) fprintf(fp, "%s\n", tmp1); else Msg(DIRECT, tmp1);
+
 }
 
 
diff --git a/Common/Context.cpp b/Common/Context.cpp
index ab9ffbe964b3e21cc2e010112d9c985d75471ad8..b8481a4e2bde9c444aa1d4616db7aaef695362b4 100644
--- a/Common/Context.cpp
+++ b/Common/Context.cpp
@@ -1,4 +1,4 @@
-// $Id: Context.cpp,v 1.35 2001-01-29 08:43:44 geuzaine Exp $
+// $Id: Context.cpp,v 1.36 2001-02-12 17:38:02 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -6,29 +6,12 @@
 #include "Mesh.h"
 #include "Draw.h"
 #include "Context.h"
+#include "Options.h"
+#include "DefaultOptions.h"
 #include "trackball.c"
 
 extern Context_T CTX ;
 
-extern StringXString GeneralOptions_String[] ;
-extern StringXString GeometryOptions_String[] ;
-extern StringXString MeshOptions_String[] ;
-extern StringXString PostProcessingOptions_String[] ;
-extern StringXString PrintOptions_String[] ;
-
-extern StringXNumber GeneralOptions_Number[] ;
-extern StringXNumber GeometryOptions_Number[] ;
-extern StringXNumber MeshOptions_Number[] ;
-extern StringXNumber PostProcessingOptions_Number[] ;
-extern StringXNumber PrintOptions_Number[] ;
-
-extern StringXColor GeneralOptions_Color[] ;
-extern StringXColor GeometryOptions_Color[] ;
-extern StringXColor MeshOptions_Color[] ;
-extern StringXColor PostProcessingOptions_Color[] ;
-extern StringXColor PrintOptions_Color[] ;
-
-
 // STRING OPTIONS
 
 StringXString * Get_StringOptionCategory(char * cat){
@@ -36,31 +19,36 @@ StringXString * Get_StringOptionCategory(char * cat){
   else if(!strcmp(cat,"Geometry"))       return GeometryOptions_String ;
   else if(!strcmp(cat,"Mesh"))           return MeshOptions_String ;
   else if(!strcmp(cat,"PostProcessing")) return PostProcessingOptions_String ;
+  else if(!strcmp(cat,"View"))           return ViewOptions_String ;
   else if(!strcmp(cat,"Print"))          return PrintOptions_String ;
   else                                   return NULL ;
 }
 
-void Set_DefaultStringOptions(StringXString s[]){
+void Set_DefaultStringOptions(int num, StringXString s[]){
   int i = 0;
-  while(s[i].str){
-    *s[i].ptr = s[i].def ;
-    i++;
-  }
+  while(s[i].str) s[i].function(num, GMSH_SET, s[i++].def) ;
 }
 
-char ** Get_StringOption(char *str, StringXString s[]){
+void UpdateGUI_StringOptions(int num, StringXString s[]){
+  int i = 0;
+  while(s[i].str) s[i++].function(num, GMSH_GUI, 0) ;
+}
+
+void * Get_StringOption(char *str, StringXString s[]){
   int i = 0;
   while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
   if(!s[i].str)
     return NULL;
   else
-    return s[i].ptr;
+    return (void*)s[i].function;
 }
 
-void Print_StringOptions(StringXString s[], char *prefix, FILE *file){
+void Print_StringOptions(int num, StringXString s[], char *prefix, FILE *file){
   int i = 0;
+  char tmp[1024];
   while(s[i].str){
-    fprintf(file, "%s%s = \"%s\";\n", prefix, s[i].str, *s[i].ptr) ;
+    sprintf(tmp, "%s%s = \"%s\";", prefix, s[i].str, s[i].function(num, GMSH_GET, NULL)) ;
+    if(file) fprintf(file, "%s\n", tmp); else Msg(DIRECT, "%s", tmp);
     i++;
   }
 }
@@ -72,89 +60,87 @@ StringXNumber * Get_NumberOptionCategory(char * cat){
   else if(!strcmp(cat,"Geometry"))       return GeometryOptions_Number ;
   else if(!strcmp(cat,"Mesh"))           return MeshOptions_Number ;
   else if(!strcmp(cat,"PostProcessing")) return PostProcessingOptions_Number ;
+  else if(!strcmp(cat,"View"))           return ViewOptions_Number ;
   else if(!strcmp(cat,"Print"))          return PrintOptions_Number ;
   else                                   return NULL ;
 }
 
-void Set_DefaultNumberOptions(StringXNumber s[]){
+void Set_DefaultNumberOptions(int num, StringXNumber s[]){
   int i = 0;
-  while(s[i].str){
-    switch(s[i].type){
-    case GMSH_INT: *(int*)s[i].ptr = (int)s[i].def; break;
-    case GMSH_LONG: *(long*)s[i].ptr = (long)s[i].def; break;
-    case GMSH_FLOAT: *(float*)s[i].ptr = (float)s[i].def; break;
-    case GMSH_DOUBLE: *(double*)s[i].ptr = (double)s[i].def; break;
-    }
-    i++;
-  }
+  while(s[i].str) s[i].function(num, GMSH_SET, s[i++].def) ;
+}
+
+void UpdateGUI_NumberOptions(int num, StringXNumber s[]){
+  int i = 0;
+  while(s[i].str) s[i++].function(num, GMSH_GUI, 0) ;
 }
 
-void * Get_NumberOption(char *str, StringXNumber s[], int *type){
+void * Get_NumberOption(char *str, StringXNumber s[]){
   int i = 0;
 
   while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
   if(!s[i].str)
     return NULL;
   else{
-    *type = s[i].type ;
-    return s[i].ptr;
+    return (void*)s[i].function;
   }
 }
 
-void Print_NumberOptions(StringXNumber s[], char *prefix, FILE *file){
+void Print_NumberOptions(int num, StringXNumber s[], char *prefix, FILE *file){
   int i = 0;
+  char tmp[1024];
   while(s[i].str){
-    fprintf(file, "%s%s = ", prefix, s[i].str);
-    switch(s[i].type){
-    case GMSH_INT : fprintf(file, "%d;\n", *(int*)s[i].ptr); break;
-    case GMSH_LONG : fprintf(file, "%ld;\n", *(long*)s[i].ptr); break;
-    case GMSH_FLOAT : fprintf(file, "%g;\n", *(float*)s[i].ptr); break;
-    case GMSH_DOUBLE : fprintf(file, "%g;\n", *(double*)s[i].ptr); break;
-    }
+    sprintf(tmp, "%s%s = %g;", prefix, s[i].str, s[i].function(num, GMSH_GET, 0));
+    if(file) fprintf(file, "%s\n", tmp); else Msg(DIRECT, tmp);
     i++;
   }
 }
 
-// COLORS
+// COLOR OPTIONS
 
 StringXColor * Get_ColorOptionCategory(char * cat){
   if     (!strcmp(cat,"General"))        return GeneralOptions_Color ;
   else if(!strcmp(cat,"Geometry"))       return GeometryOptions_Color ;
   else if(!strcmp(cat,"Mesh"))           return MeshOptions_Color ;
   else if(!strcmp(cat,"PostProcessing")) return PostProcessingOptions_Color ;
+  else if(!strcmp(cat,"View"))           return ViewOptions_Color ;
   else if(!strcmp(cat,"Print"))          return PrintOptions_Color ;
   else                                   return NULL ;
 }
 
-void Set_DefaultColorOptions(StringXColor s[], int num){
+void Set_DefaultColorOptions(int num, StringXColor s[], int scheme){
   int i = 0;
-  while(s[i].str){
-    switch(num){
-    case 0 : *s[i].ptr = s[i].def1; break;
-    case 1 : *s[i].ptr = s[i].def2; break;
-    case 2 : *s[i].ptr = s[i].def3; break;
-    }
-    i++;
+  switch(scheme){
+  case 0 : while(s[i].str) s[i].function(num, GMSH_SET, s[i++].def1) ; break;
+  case 1 : while(s[i].str) s[i].function(num, GMSH_SET, s[i++].def2) ; break;
+  case 2 : while(s[i].str) s[i].function(num, GMSH_SET, s[i++].def3) ; break;
   }
 }
 
-unsigned int * Get_ColorOption(char *str, StringXColor s[]) {
+void UpdateGUI_ColorOptions(int num, StringXColor s[]){
+  int i = 0;
+  while(s[i].str) s[i++].function(num, GMSH_GUI, 0) ;
+}
+
+void * Get_ColorOption(char *str, StringXColor s[]) {
   int i = 0;
   while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
   if(!s[i].str)
     return NULL;
   else
-    return s[i].ptr;
+    return (void*)s[i].function;
 }
 
-void Print_ColorOptions(StringXColor s[], char *prefix, FILE *file){
+void Print_ColorOptions(int num, StringXColor s[], char *prefix, FILE *file){
   int i = 0;
+  char tmp[1024];
   while(s[i].str){
-    fprintf(file, "%sColor.%s = {%d,%d,%d};\n", 
+    sprintf(tmp, "%sColor.%s = {%d,%d,%d};", 
 	    prefix, s[i].str,
-	    UNPACK_RED(*s[i].ptr),
-	    UNPACK_GREEN(*s[i].ptr),
-	    UNPACK_BLUE(*s[i].ptr));
+	    UNPACK_RED  (s[i].function(num, GMSH_GET, 0)),
+	    UNPACK_GREEN(s[i].function(num, GMSH_GET, 0)),
+	    UNPACK_BLUE (s[i].function(num, GMSH_GET, 0)));
+    if(file) fprintf(file, "%s\n", tmp); else Msg(DIRECT, tmp);
     i++;
   }
 }
@@ -175,19 +161,7 @@ int Get_ColorForString(StringX4Int SX4I[], int alpha,
 /*  C o n t e x t                                                           */
 /* ------------------------------------------------------------------------ */
 
-void Init_Colors(int num){
-  if(num < 0 || num > 2){
-    return;
-  }
-  CTX.color.id = num ;
-  Set_DefaultColorOptions(GeneralOptions_Color, num);
-  Set_DefaultColorOptions(GeometryOptions_Color, num);
-  Set_DefaultColorOptions(MeshOptions_Color, num);
-  Set_DefaultColorOptions(PostProcessingOptions_Color, num);
-  Set_DefaultColorOptions(PrintOptions_Color, num);
-}
-
-void Init_Context(void){
+void Init_Context(int num){
 
   // Cannot be set by the user 
   CTX.expose       = 0 ;
@@ -226,26 +200,54 @@ void Init_Context(void){
   CTX.post.draw      = 1 ;
 
   // Default string options
-  Set_DefaultStringOptions(GeneralOptions_String);
-  Set_DefaultStringOptions(GeometryOptions_String);
-  Set_DefaultStringOptions(MeshOptions_String);
-  Set_DefaultStringOptions(PostProcessingOptions_String);
-  Set_DefaultStringOptions(PrintOptions_String);
+  Set_DefaultStringOptions(num, GeneralOptions_String);
+  Set_DefaultStringOptions(num, GeometryOptions_String);
+  Set_DefaultStringOptions(num, MeshOptions_String);
+  Set_DefaultStringOptions(num, PostProcessingOptions_String);
+  Set_DefaultStringOptions(num, PrintOptions_String);
 
   // Default number options
-  Set_DefaultNumberOptions(GeneralOptions_Number);
-  Set_DefaultNumberOptions(GeometryOptions_Number);
-  Set_DefaultNumberOptions(MeshOptions_Number);
-  Set_DefaultNumberOptions(PostProcessingOptions_Number);
-  Set_DefaultNumberOptions(PrintOptions_Number);
+  Set_DefaultNumberOptions(num, GeneralOptions_Number);
+  Set_DefaultNumberOptions(num, GeometryOptions_Number);
+  Set_DefaultNumberOptions(num, MeshOptions_Number);
+  Set_DefaultNumberOptions(num, PostProcessingOptions_Number);
+  Set_DefaultNumberOptions(num, PrintOptions_Number);
 
   // Default color options
-  Init_Colors(0);
+  Init_Colors(num);
+}
 
+void Init_Colors(int num){
+  Set_DefaultColorOptions(num, GeneralOptions_Color, CTX.color_scheme);
+  Set_DefaultColorOptions(num, GeometryOptions_Color, CTX.color_scheme);
+  Set_DefaultColorOptions(num, MeshOptions_Color, CTX.color_scheme);
+  Set_DefaultColorOptions(num, PostProcessingOptions_Color, CTX.color_scheme);
+  Set_DefaultColorOptions(num, PrintOptions_Color, CTX.color_scheme);
+}
+
+void UpdateGUI_Context(int num){
+  UpdateGUI_StringOptions(num, GeneralOptions_String);
+  UpdateGUI_StringOptions(num, GeometryOptions_String);
+  UpdateGUI_StringOptions(num, MeshOptions_String);
+  UpdateGUI_StringOptions(num, PostProcessingOptions_String);
+  UpdateGUI_StringOptions(num, PrintOptions_String);
+      
+  UpdateGUI_NumberOptions(num, GeneralOptions_Number);
+  UpdateGUI_NumberOptions(num, GeometryOptions_Number);
+  UpdateGUI_NumberOptions(num, MeshOptions_Number);
+  UpdateGUI_NumberOptions(num, PostProcessingOptions_Number);
+  UpdateGUI_NumberOptions(num, PrintOptions_Number);
+
+  UpdateGUI_ColorOptions(num, GeneralOptions_Color);
+  UpdateGUI_ColorOptions(num, GeometryOptions_Color);
+  UpdateGUI_ColorOptions(num, MeshOptions_Color);
+  UpdateGUI_ColorOptions(num, PostProcessingOptions_Color);
+  UpdateGUI_ColorOptions(num, PrintOptions_Color);
 }
 
-void Print_Context(char *filename){
+void Print_Context(int num, char *filename){
   FILE *file;
+  char tmp[256];
   int i ;
   
   if(filename){
@@ -256,31 +258,31 @@ void Print_Context(char *filename){
     }
   }
   else
-    file = stdout;
-
-  Print_StringOptions(GeneralOptions_String, "General.", file);
-  Print_NumberOptions(GeneralOptions_Number, "General.", file);
-  Print_ColorOptions(GeneralOptions_Color, "General.", file);
-  fprintf(file, "\n");
-  Print_StringOptions(GeometryOptions_String, "Geometry.", file);
-  Print_NumberOptions(GeometryOptions_Number, "Geometry.", file);
-  Print_ColorOptions(GeometryOptions_Color, "Geometry.", file);
-  fprintf(file, "\n");
-  Print_StringOptions(MeshOptions_String, "Mesh.", file);
-  Print_NumberOptions(MeshOptions_Number, "Mesh.", file);
-  Print_ColorOptions(MeshOptions_Color, "Mesh.", file);
-  fprintf(file, "\n");
-  Print_StringOptions(PostProcessingOptions_String, "PostProcessing.", file);
-  Print_NumberOptions(PostProcessingOptions_Number, "PostProcessing.", file);
-  Print_ColorOptions(PostProcessingOptions_Color, "PostProcessing.", file);
+    file = NULL ;
+
+  Print_StringOptions(num, GeneralOptions_String, "General.", file);
+  Print_NumberOptions(num, GeneralOptions_Number, "General.", file);
+  Print_ColorOptions(num, GeneralOptions_Color, "General.", file);
+  Print_StringOptions(num, GeometryOptions_String, "Geometry.", file);
+  Print_NumberOptions(num, GeometryOptions_Number, "Geometry.", file);
+  Print_ColorOptions(num, GeometryOptions_Color, "Geometry.", file);
+  Print_StringOptions(num, MeshOptions_String, "Mesh.", file);
+  Print_NumberOptions(num, MeshOptions_Number, "Mesh.", file);
+  Print_ColorOptions(num, MeshOptions_Color, "Mesh.", file);
+  Print_StringOptions(num, PostProcessingOptions_String, "PostProcessing.", file);
+  Print_NumberOptions(num, PostProcessingOptions_Number, "PostProcessing.", file);
+  Print_ColorOptions(num, PostProcessingOptions_Color, "PostProcessing.", file);
   for(i=0; i<List_Nbr(Post_ViewList) ; i++){
-    Print_StringViewOptions(i, file);
-    Print_NumberViewOptions(i, file);
+    sprintf(tmp, "View[%d].", i);
+    Print_StringOptions(i, ViewOptions_String, tmp, file);
+    Print_NumberOptions(i, ViewOptions_Number, tmp, file);
+    Print_ColorOptions(i, ViewOptions_Color, tmp, file);
+    strcat(tmp, "ColorTable");
+    Print_ColorTable(i, tmp, file);
   }
-  fprintf(file, "\n");
-  Print_StringOptions(PrintOptions_String, "Print.", file);
-  Print_NumberOptions(PrintOptions_Number, "Print.", file);
-  Print_ColorOptions(PrintOptions_Color, "Print.", file);
+  Print_StringOptions(num, PrintOptions_String, "Print.", file);
+  Print_NumberOptions(num, PrintOptions_Number, "Print.", file);
+  Print_ColorOptions(num, PrintOptions_Color, "Print.", file);
 
   if(filename){
     Msg(INFO, "Options Output Complete '%s'", filename);
@@ -289,7 +291,7 @@ void Print_Context(char *filename){
   }
 }
 
-void Print_Configuration(char *filename){
+void Print_Configuration(int num, char *filename){
   FILE *file;
   
   file = fopen(filename,"w");
@@ -318,6 +320,7 @@ void Print_Configuration(char *filename){
   fclose(file);
 }
 
+
 /*
   3 rotations successives autour de x, y et z:
 
diff --git a/Common/Context.h b/Common/Context.h
index 23989f48a49ccc2a090b537fec6b56d2fdd029bc..b6529a03cce21a617651d7d36cf28cef6631c704 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -1,15 +1,8 @@
 #ifndef _CONTEXT_H_
 #define _CONTEXT_H_
 
-// Interface-independant context 
-
 #include "Const.h"
 
-#define GMSH_INT     1
-#define GMSH_LONG    2
-#define GMSH_FLOAT   3
-#define GMSH_DOUBLE  4
-
 // How RGBA values are packed and unpacked into/from a 4-byte integer 
 
 #  ifdef _LITTLE_ENDIAN
@@ -26,39 +19,18 @@
 #    define UNPACK_ALPHA(X)       ( (X) & 0xff )
 #  endif
 
-typedef struct{
-  int id;                       // the current rgbacolors id 
-  
-  // general colors 
-  unsigned int bg, fg, text, axes, small_axes;
-  
-  // geometry colors 
-  struct{
-    unsigned int point, line, surface, volume;
-    unsigned int point_sel, line_sel, surface_sel, volume_sel;
-    unsigned int point_hlt, line_hlt, surface_hlt, volume_hlt;
-    unsigned int tangents, normals;
-  }
-  geom;
-  
-  // mesh colors 
-  struct{
-    unsigned int vertex, vertex_supp, line, triangle, quadrangle;
-    unsigned int tetrahedron, hexahedron, prism, pyramid;
-    unsigned int carousel[10];
-    unsigned int tangents, normals;
-  }
-  mesh;
-  
-}rgbacolors;
+// Interface-independant context 
 
 class Context_T {
+
 public :
 
+  // general options
   char filename[NAME_STR_L];  // the name of the currently opened file
   char basefilename[NAME_STR_L]; // the same without the extension
   char *configfilename;       // the name of the configuration file
   char *display;              // forced display host:0.0 under X11 
+  int  terminal;              // show we print to the terminal console?
 
   int position[2];            // position of the menu window on the screen
   int gl_position[2];         // position of the graphic window on the screen
@@ -107,10 +79,8 @@ public :
   int gl_fontheight;          // font height
   int gl_fontascent;          // height of the font above the reference point
 
-  // OpenGL stuff 
   int viewport[4];            // current viewport 
-  double vxmin, vxmax, vymin, vymax;
-                              // current viewport in real coordinates 
+  double vxmin, vxmax, vymin, vymax; // current viewport in real coordinates 
   int light[6];               // status of light 
   float light_position[6][4]; // light sources positions 
   float shine;                // specular value 
@@ -119,9 +89,8 @@ public :
   double clip_plane[6][4];    // clip planes 
   double pixel_equiv_x, pixel_equiv_y ; 
                               // approximative equivalent model length of a pixel 
-  
-  rgbacolors color;           // all colors except postpro colormaps 
-  
+  int color_scheme ;
+
   // geometry options 
   struct{
     int vis_type;
@@ -177,53 +146,33 @@ public :
     int  font_size, gl_fonts;
   } print;
 
+  // color options
+  struct{
+    unsigned int bg, fg, text, axes, small_axes;
+    struct{
+      unsigned int point, line, surface, volume;
+      unsigned int point_sel, line_sel, surface_sel, volume_sel;
+      unsigned int point_hlt, line_hlt, surface_hlt, volume_hlt;
+      unsigned int tangents, normals;
+    } geom;
+    struct{
+      unsigned int vertex, vertex_supp, line, triangle, quadrangle;
+      unsigned int tetrahedron, hexahedron, prism, pyramid;
+      unsigned int carousel[10];
+      unsigned int tangents, normals;
+    } mesh;
+  } color;
+  
   // trackball functions 
   void buildRotmatrix(void);
   void setQuaternion (float p1x, float p1y, float p2x, float p2y);
   void addQuaternion (float p1x, float p1y, float p2x, float p2y);
 };
 
-typedef struct {
-  char *str ; 
-  int int1, int2, int3, int4 ;
-} StringX4Int;
-
-typedef struct {
-  char *str, **ptr, *def ;
-} StringXString ;
-
-typedef struct {
-  char *str;
-  int type;
-  void *ptr;
-  double def ;
-} StringXNumber ;
-
-typedef struct {
-  char *str ; 
-  unsigned int *ptr ;
-  unsigned int def1, def2, def3 ;
-} StringXColor ;
-
-StringXString * Get_StringOptionCategory(char * cat);
-StringXNumber * Get_NumberOptionCategory(char * cat);
-StringXColor * Get_ColorOptionCategory(char * cat);
-
-void Set_DefaultStringOptions(StringXString s[]);
-void Set_DefaultNumberOptions(StringXNumber s[]);
-void Set_DefaultColorOptions(StringXColor s[], int num);
-
-char ** Get_StringOption(char *str, StringXString s[]);
-void * Get_NumberOption(char *str, StringXNumber s[], int *type);
-unsigned int * Get_ColorOption(char *str, StringXColor s[]);
-
-void Print_StringOptions(StringXString s[], char *prefix, FILE *file);
-void Print_NumberOptions(StringXNumber s[], char *prefix, FILE *file);
-void Print_ColorOptions(StringXColor s[], char *prefix, FILE *file);
-
+void Init_Context (int num);
 void Init_Colors (int num);
-void Init_Context (void);
-void Print_Context(char *filename);
-void Print_Configuration(char *filename);
+void UpdateGUI_Context (int num);
+void Print_Context(int num, char *filename);
+void Print_Configuration(int num, char *filename);
 
 #endif
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
new file mode 100644
index 0000000000000000000000000000000000000000..763391ff3c5af8cdcfac98b9412b246e00fa0eb6
--- /dev/null
+++ b/Common/DefaultOptions.h
@@ -0,0 +1,427 @@
+#ifndef _DEFAULT_OPTIONS_H_
+#define _DEFAULT_OPTIONS_H_
+
+// Option Database (General, Geometry, Mesh, Post, View, Print), with
+// default values
+
+// STRINGS
+
+StringXString GeneralOptions_String[] = {
+  { "Display" , opt_general_display , "" },
+  { NULL , NULL , NULL }
+} ;
+
+StringXString GeometryOptions_String[] = {
+  { NULL , NULL ,  NULL }
+} ;
+
+StringXString MeshOptions_String[] = {
+  { NULL , NULL ,  NULL }
+} ;
+
+StringXString PostProcessingOptions_String[] = {
+  { NULL , NULL ,  NULL }
+} ;
+
+StringXString ViewOptions_String[] = {
+  { "Name"      , opt_view_name , "" },
+  { "Format"    , opt_view_format , "%.3e" },
+  { "FileName"  , opt_view_filename , "" },
+  { NULL , NULL , NULL }
+} ;
+
+StringXString PrintOptions_String[] = {
+  { "Font" ,  opt_print_font , "Courier" },
+  { NULL , NULL , NULL }
+} ;
+
+// NUMBERS
+
+StringXNumber GeneralOptions_Number[] = {
+  { "Viewport0"            , opt_general_viewport0 , 0. }, 
+  { "Viewport1"            , opt_general_viewport1 , 0. }, 
+  { "Viewport2"            , opt_general_viewport2 , 700. }, 
+  { "Viewport3"            , opt_general_viewport3 , 500. }, 
+  { "GraphicsPosition0"    , opt_general_graphics_position0 , 20. }, 
+  { "GraphicsPosition1"    , opt_general_graphics_position1 , 30. }, 
+  { "GraphicsFontSize"     , opt_general_graphics_fontsize , 11. }, 
+  { "MenuPosition0"        , opt_general_menu_position0 , 800. }, 
+  { "MenuPosition1"        , opt_general_menu_position1 , 50. }, 
+  { "MenuFontSize"         , opt_general_menu_fontsize , 12. }, 
+  { "CenterWindows"        , opt_general_center_windows , 1. }, 
+  { "Rotation0"            , opt_general_rotation0 , 0.0 }, 
+  { "Rotation1"            , opt_general_rotation1 , 0.0 }, 
+  { "Rotation2"            , opt_general_rotation2 , 0.0 }, 
+  { "TrackballQuaternion0" , opt_general_quaternion0 , 0.0 }, 
+  { "TrackballQuaternion1" , opt_general_quaternion1 , 0.0 }, 
+  { "TrackballQuaternion2" , opt_general_quaternion2 , 0.0 }, 
+  { "TrackballQuaternion3" , opt_general_quaternion3 , 1.0 }, 
+  { "Translation0"         , opt_general_translation0 , 0.0 }, 
+  { "Translation1"         , opt_general_translation1 , 0.0 }, 
+  { "Translation2"         , opt_general_translation2 , 0.0 }, 
+  { "Scale0"               , opt_general_scale0 , 1.0 }, 
+  { "Scale1"               , opt_general_scale1 , 1.0 }, 
+  { "Scale2"               , opt_general_scale2 , 1.0 }, 
+  { "Shininess"            , opt_general_shine , 0.4 }, 
+  { "ColorScheme"          , opt_general_color_scheme , 0. }, 
+  { "Verbosity"            , opt_general_verbosity , 2. },
+  { "Terminal"             , opt_general_terminal , 1. },
+  { "Orthographic"         , opt_general_orthographic , 1. }, 
+  { "FastRedraw"           , opt_general_fast_redraw , 1. },
+  { "Axes"                 , opt_general_axes , 1. },
+  { "SmallAxes"            , opt_general_small_axes , 1. },
+  { "DisplayLists"         , opt_general_display_lists , 0. },
+  { "AlphaBlending"        , opt_general_alpha_blending , 0. },
+  { "Trackball"            , opt_general_trackball , 1. },
+  { "ZoomFactor"           , opt_general_zoom_factor , 1.1 }, 
+  { "Clip0"                , opt_general_clip0 , 0. },
+  { "Clip0a"               , opt_general_clip0a , 0.0 }, 
+  { "Clip0b"               , opt_general_clip0b , 0.0 }, 
+  { "Clip0c"               , opt_general_clip0c , 0.0 }, 
+  { "Clip0d"               , opt_general_clip0d , 0.0 }, 
+  { "Clip1"                , opt_general_clip1 , 0. },
+  { "Clip1a"               , opt_general_clip1a , 0.0 }, 
+  { "Clip1b"               , opt_general_clip1b , 0.0 }, 
+  { "Clip1c"               , opt_general_clip1c , 0.0 }, 
+  { "Clip1d"               , opt_general_clip1d , 0.0 }, 
+  { "Clip2"                , opt_general_clip2 , 0. },
+  { "Clip2a"               , opt_general_clip2a , 0.0 }, 
+  { "Clip2b"               , opt_general_clip2b , 0.0 }, 
+  { "Clip2c"               , opt_general_clip2c , 0.0 }, 
+  { "Clip2d"               , opt_general_clip2d , 0.0 }, 
+  { "Clip3"                , opt_general_clip3 , 0. },
+  { "Clip3a"               , opt_general_clip3a , 0.0 }, 
+  { "Clip3b"               , opt_general_clip3b , 0.0 }, 
+  { "Clip3c"               , opt_general_clip3c , 0.0 }, 
+  { "Clip3d"               , opt_general_clip3d , 0.0 }, 
+  { "Clip4"                , opt_general_clip4 , 0. },
+  { "Clip4a"               , opt_general_clip4a , 0.0 }, 
+  { "Clip4b"               , opt_general_clip4b , 0.0 }, 
+  { "Clip4c"               , opt_general_clip4c , 0.0 }, 
+  { "Clip4d"               , opt_general_clip4d , 0.0 }, 
+  { "Clip5"                , opt_general_clip5 , 0. },
+  { "Clip5a"               , opt_general_clip5a , 0.0 }, 
+  { "Clip5b"               , opt_general_clip5b , 0.0 }, 
+  { "Clip5c"               , opt_general_clip5c , 0.0 }, 
+  { "Clip5d"               , opt_general_clip5d , 0.0 }, 
+  { "Light0"               , opt_general_light0 , 1. },
+  { "Light00"              , opt_general_light00 , 0.5 }, 
+  { "Light01"              , opt_general_light01 , 0.3 }, 
+  { "Light02"              , opt_general_light02 , 1.0 }, 
+  { "Light1"               , opt_general_light1 , 0. },
+  { "Light10"              , opt_general_light10 , 0.5 }, 
+  { "Light11"              , opt_general_light11 , 0.3 }, 
+  { "Light12"              , opt_general_light12 , 1.0 }, 
+  { "Light2"               , opt_general_light2 , 0. },
+  { "Light20"              , opt_general_light20 , 0.5 }, 
+  { "Light21"              , opt_general_light21 , 0.3 }, 
+  { "Light22"              , opt_general_light22 , 1.0 }, 
+  { "Light3"               , opt_general_light3 , 0. },
+  { "Light30"              , opt_general_light30 , 0.5 }, 
+  { "Light31"              , opt_general_light31 , 0.3 }, 
+  { "Light32"              , opt_general_light32 , 1.0 }, 
+  { "Light4"               , opt_general_light4 , 0. },
+  { "Light40"              , opt_general_light40 , 0.5 }, 
+  { "Light41"              , opt_general_light41 , 0.3 }, 
+  { "Light42"              , opt_general_light42 , 1.0 }, 
+  { "Light5"               , opt_general_light5 , 0. },
+  { "Light50"              , opt_general_light50 , 0.5 }, 
+  { "Light51"              , opt_general_light51 , 0.3 }, 
+  { "Light52"              , opt_general_light52 , 1.0 }, 
+  { NULL , NULL , 0. }
+} ;
+
+StringXNumber GeometryOptions_Number[] = {
+  { "Normals"         , opt_geometry_normals , 0. }, 
+  { "Tangents"        , opt_geometry_tangents , 0. }, 
+  { "Points"          , opt_geometry_points , 1. }, 
+  { "Lines"           , opt_geometry_lines , 1. }, 
+  { "Surfaces"        , opt_geometry_surfaces , 0. }, 
+  { "Volumes"         , opt_geometry_volumes , 0. }, 
+  { "PointsNumbers"   , opt_geometry_points_num , 0. }, 
+  { "LinesNumbers"    , opt_geometry_lines_num , 0. }, 
+  { "SurfacesNumbers" , opt_geometry_surfaces_num , 0. }, 
+  { "VolumesNumbers"  , opt_geometry_volumes_num , 0. }, 
+  { "HiddenLines"     , opt_geometry_hidden , 0. }, 
+  { "Shading"         , opt_geometry_shade , 0. }, 
+  { "Highlight"       , opt_geometry_highlight , 1. }, 
+  { "OldCircle"       , opt_geometry_old_circle , 0. }, 
+  { "ScalingFactor"   , opt_geometry_scaling_factor , 1.0 }, 
+  { NULL , NULL , 0. }
+} ;
+
+StringXNumber MeshOptions_Number[] = {
+  { "Quality"         , opt_mesh_quality , 0.0 }, 
+  { "Normals"         , opt_mesh_normals , 0.0 }, 
+  { "Tangents"        , opt_mesh_tangents , 0.0 }, 
+  { "Explode"         , opt_mesh_explode , 1.0 }, 
+  { "ScalingFactor"   , opt_mesh_scaling_factor , 1.0 }, 
+  { "CharacteristicLengthFactor" , opt_mesh_lc_factor , 1.0 }, 
+  { "RandomFactor"    , opt_mesh_rand_factor , 1.e-5 }, 
+  { "GammaLimit"      , opt_mesh_limit_gamma , 0.0 }, 
+  { "EtaLimit"        , opt_mesh_limit_eta , 0.0 }, 
+  { "RhoLimit"        , opt_mesh_limit_rho , 0.0 }, 
+  { "Points"          , opt_mesh_points , 1. }, 
+  { "Lines"           , opt_mesh_lines , 1. }, 
+  { "Surfaces"        , opt_mesh_surfaces , 1. }, 
+  { "Volumes"         , opt_mesh_volumes , 1. }, 
+  { "PointsNumbers"   , opt_mesh_points_num , 0. }, 
+  { "LinesNumbers"    , opt_mesh_lines_num , 0. }, 
+  { "SurfacesNumbers" , opt_mesh_surfaces_num , 0. }, 
+  { "VolumesNumbers"  , opt_mesh_volumes_num , 0. }, 
+  { "HiddenLines"     , opt_mesh_hidden , 0. }, 
+  { "Shading"         , opt_mesh_shade , 0. }, 
+  { "Format"          , opt_mesh_format , FORMAT_MSH }, 
+  { "Smoothing"       , opt_mesh_nb_smoothing , 0. }, 
+  { "Algorithm"       , opt_mesh_algo , DELAUNAY_OLDALGO }, 
+  { "PointInsertion"  , opt_mesh_point_insertion, CENTER_CIRCCIRC }, 
+  { "SpeedMax"        , opt_mesh_speed_max , 0. }, 
+  { "MinimumCirclePoints" , opt_mesh_min_circ_points, 7. }, 
+  { "Degree"          , opt_mesh_degree , 1. }, 
+  { "Dual"            , opt_mesh_dual , 0. }, 
+  { "Interactive"     , opt_mesh_interactive , 0. }, 
+  { "use_cut_plane"   , opt_mesh_use_cut_plane , 0  }, 
+  { "cut_planea"      , opt_mesh_cut_planea , 1. }, 
+  { "cut_planeb"      , opt_mesh_cut_planeb , 0. }, 
+  { "cut_planec"      , opt_mesh_cut_planec , 0. }, 
+  { "cut_planed"      , opt_mesh_cut_planed , 0. }, 
+  { NULL , NULL , 0. }
+} ;
+
+StringXNumber PostProcessingOptions_Number[] = {
+  { "Scales"           , opt_post_scales , 1. }, 
+  { "Link"             , opt_post_link , 0. }, 
+  { "Smoothing"        , opt_post_smooth , 0. }, 
+  { "AnimationDelay"   , opt_post_anim_delay , 0.25 }, 
+  { "NbViews"          , opt_post_nb_views , 0. }, 
+  { NULL , NULL , 0. }
+} ;
+
+StringXNumber ViewOptions_Number[] = {
+  { "NbTimeStep"       , opt_view_nb_timestep , 1. }, 
+  { "TimeStep"         , opt_view_timestep , 0. }, 
+  { "Min"              , opt_view_min , 1.e200 }, 
+  { "Max"              , opt_view_max , -1.e200 }, 
+  { "CustomMin"        , opt_view_custom_min , 0. }, 
+  { "CustomMax"        , opt_view_custom_max , 0. }, 
+  { "Offset0"          , opt_view_offset0 , 0. }, 
+  { "Offset1"          , opt_view_offset1 , 0. }, 
+  { "Offset2"          , opt_view_offset2 , 0. }, 
+  { "Raise0"           , opt_view_raise0 , 0. }, 
+  { "Raise1"           , opt_view_raise1 , 0. }, 
+  { "Raise2"           , opt_view_raise2 , 0. }, 
+  { "ArrowScale"       , opt_view_arrow_scale , 100. }, 
+  { "Visible"          , opt_view_visible , 1. }, 
+  { "IntervalsType"    , opt_view_intervals_type , DRAW_POST_ISO }, 
+  { "NbIso"            , opt_view_nb_iso , 15. }, 
+  { "Light"            , opt_view_light , 0. }, 
+  { "ShowElement"      , opt_view_show_element , 0. }, 
+  { "ShowTime"         , opt_view_show_time , 1. }, 
+  { "ShowScale"        , opt_view_show_scale , 1. }, 
+  { "TransparentScale" , opt_view_transparent_scale , 1. }, 
+  { "ScaleType"        , opt_view_scale_type , DRAW_POST_LINEAR }, 
+  { "RangeType"        , opt_view_range_type , DRAW_POST_DEFAULT }, 
+  { "ArrowType"        , opt_view_arrow_type , DRAW_POST_ARROW }, 
+  { "ArrowLocation"    , opt_view_arrow_location , DRAW_POST_LOCATE_COG }, 
+  { NULL , NULL , 0. }
+} ;
+
+StringXNumber PrintOptions_Number[] = {
+  { "Format"         , opt_print_format , FORMAT_AUTO }, 
+  { "EpsQuality"     , opt_print_eps_quality , 1 }, 
+  { "JpegQuality"    , opt_print_jpeg_quality , 85 }, 
+  { "GifDither"      , opt_print_gif_dither , 0 }, 
+  { "GifSort"        , opt_print_gif_sort , 1 }, 
+  { "GifInterlace"   , opt_print_gif_interlace , 0 }, 
+  { "GifTransparent" , opt_print_gif_transparent , 0 }, 
+  { "FontSize"       , opt_print_font_size , 12. }, 
+  { NULL , NULL , 0. }
+} ;
+
+// COLORS
+
+StringXColor GeneralOptions_Color[] = {
+  { "Background" , opt_general_color_background ,
+    PACK_COLOR(0,   0,   0,   255), 
+    PACK_COLOR(255, 255, 255, 255), 
+    PACK_COLOR(255, 255, 255, 255) },
+  { "Foreground" , opt_general_color_foreground ,
+    PACK_COLOR(255, 255, 255, 255),
+    PACK_COLOR(0,   0,   0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Text" , opt_general_color_text ,
+    PACK_COLOR(255, 255, 255, 255),
+    PACK_COLOR(0,   0,   0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Axes" , opt_general_color_axes ,
+    PACK_COLOR(255, 255, 0,   255),
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "SmallAxes" , opt_general_color_small_axes ,
+    PACK_COLOR(255, 255, 255, 255),
+    PACK_COLOR(0,   0,   0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { NULL , NULL ,  0, 0, 0 }
+} ;
+
+StringXColor GeometryOptions_Color[] = {
+  { "Points" , opt_geometry_color_points , 
+    PACK_COLOR(178, 182, 129, 255) ,
+    PACK_COLOR(178, 182, 129, 255) ,
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Lines" , opt_geometry_color_lines ,
+    PACK_COLOR(0,   0,   255, 255),
+    PACK_COLOR(0,   0,   255, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Surfaces" , opt_geometry_color_surfaces ,
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Volumes" , opt_geometry_color_volumes ,
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "PointsSelect" , opt_geometry_color_points_select ,
+    PACK_COLOR(255, 0,   0,   255),
+    PACK_COLOR(255, 0,   0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "LinesSelect" , opt_geometry_color_lines_select ,
+    PACK_COLOR(255, 0,   0,   255),
+    PACK_COLOR(255, 0,   0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "SurfacesSelect" , opt_geometry_color_surfaces_select ,
+    PACK_COLOR(255, 0,   0,   255),
+    PACK_COLOR(255, 0,   0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "VolumesSelect" , opt_geometry_color_volumes_select ,
+    PACK_COLOR(255, 0,   0,   255),
+    PACK_COLOR(255, 0,   0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "PointsHighlight" , opt_geometry_color_points_highlight ,
+    PACK_COLOR(0,   255, 0,   255),
+    PACK_COLOR(0,   255, 0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "LinesHighlight" , opt_geometry_color_lines_highlight ,
+    PACK_COLOR(0,   0,   255, 255),
+    PACK_COLOR(0,   0,   255, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "SurfacesHighlight" , opt_geometry_color_surfaces_highlight ,
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "VolumesHighlight" , opt_geometry_color_volumes_highlight ,
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Tangents" , opt_geometry_color_tangents ,
+    PACK_COLOR(255, 255, 0,   255),
+    PACK_COLOR(255, 255, 0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Normals" , opt_geometry_color_normals ,
+    PACK_COLOR(255, 0,   0,   255),
+    PACK_COLOR(255, 0,   0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { NULL , NULL , 0, 0, 0  }
+} ;
+
+StringXColor MeshOptions_Color[] = {
+  { "Points" , opt_mesh_color_points , 
+    PACK_COLOR(0  , 123, 59 , 255),
+    PACK_COLOR(0  , 123, 59 , 255),
+  },
+  { "PointsSupp" , opt_mesh_color_points_supp , 
+    PACK_COLOR(255, 0,   255, 255),
+    PACK_COLOR(255, 0,   255, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Lines" , opt_mesh_color_lines , 
+    PACK_COLOR(0,   255, 0,   255),
+    PACK_COLOR(0,   255, 0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Triangles" , opt_mesh_color_triangles ,
+    PACK_COLOR(0,   255, 0,   255),
+    PACK_COLOR(0,   255, 0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Quadrangles" , opt_mesh_color_quadrangles ,
+    PACK_COLOR(0,   255, 0,   255),
+    PACK_COLOR(0,   255, 0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Tetrahedra" , opt_mesh_color_tetrahedra ,
+    PACK_COLOR(0,   255, 0,   255),
+    PACK_COLOR(0,   255, 0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Hexahedra" , opt_mesh_color_hexahedra ,
+    PACK_COLOR(128, 255, 0,   255),
+    PACK_COLOR(128, 255, 0,   255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Prisms" , opt_mesh_color_prisms ,
+    PACK_COLOR(0,   255, 128, 255),
+    PACK_COLOR(0,   255, 128, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Pyramids" , opt_mesh_color_pyramid ,
+    PACK_COLOR(128, 255, 128, 255),
+    PACK_COLOR(128, 255, 128, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Tangents" , opt_mesh_color_tangents ,
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "Normals" , opt_mesh_color_normals ,
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(128, 128, 128, 255),
+    PACK_COLOR(0,   0,   0,   255) },
+  { "One" , opt_mesh_color_1 ,
+    PACK_COLOR(0  , 82 , 138, 255),
+    PACK_COLOR(0  , 82 , 138, 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { "Two" , opt_mesh_color_2 ,
+    PACK_COLOR(255, 0  , 0  , 255),
+    PACK_COLOR(255, 0  , 0  , 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { "Three" , opt_mesh_color_3 ,
+    PACK_COLOR(31 , 110, 171, 255),
+    PACK_COLOR(31 , 110, 171, 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { "Four" , opt_mesh_color_4 ,
+    PACK_COLOR(255, 255, 0  , 255),
+    PACK_COLOR(255, 255, 0  , 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { "Five" , opt_mesh_color_5 ,
+    PACK_COLOR(255, 0  , 255, 255),
+    PACK_COLOR(255, 0  , 255, 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { "Six" , opt_mesh_color_6 ,
+    PACK_COLOR(128, 128, 0  , 255),
+    PACK_COLOR(128, 128, 0  , 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { "Seven" , opt_mesh_color_7 ,
+    PACK_COLOR(128, 0  , 255, 255),
+    PACK_COLOR(128, 0  , 255, 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { "Eight" , opt_mesh_color_8 ,
+    PACK_COLOR(128, 128, 255, 255),
+    PACK_COLOR(128, 128, 255, 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { "Nine" , opt_mesh_color_9 ,
+    PACK_COLOR(128, 128, 255, 255),
+    PACK_COLOR(128, 128, 255, 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { "Ten" , opt_mesh_color_10 ,
+    PACK_COLOR(0  , 0  , 255, 255),
+    PACK_COLOR(0  , 0  , 255, 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { NULL , NULL , 0, 0, 0  }
+} ;
+
+StringXColor PostProcessingOptions_Color[] = {
+  { NULL , NULL ,  0, 0, 0 }
+} ;
+
+StringXColor ViewOptions_Color[] = {
+  { NULL , NULL ,  0, 0, 0 }
+} ;
+
+StringXColor PrintOptions_Color[] = {
+  { NULL , NULL ,  0, 0, 0 }
+} ;
+
+#endif
diff --git a/Common/GetOptions.cpp b/Common/GetOptions.cpp
index 81aa1c9c15a99f2300810398f65c63f85007ed02..cff7f72d85c076626f041dcbe9071acc0719e5f4 100644
--- a/Common/GetOptions.cpp
+++ b/Common/GetOptions.cpp
@@ -1,4 +1,4 @@
-// $Id: GetOptions.cpp,v 1.9 2001-02-05 20:32:32 geuzaine Exp $
+// $Id: GetOptions.cpp,v 1.10 2001-02-12 17:38:02 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -285,6 +285,9 @@ void Get_Options (int argc, char *argv[], int *nbfiles) {
           exit(1);
         }
       }
+      else if(!strcmp(argv[i]+1, "noterminal")){ 
+        CTX.terminal = 0; i++;
+      }
       else if(!strcmp(argv[i]+1, "alpha")){ 
         CTX.alpha = 1; i++;
       }
diff --git a/Common/Makefile b/Common/Makefile
index 1fee7ed723cb94a2e68b4dd79b4b4e1f45121e36..a34778d6e8cca2d369560ed9229805120cc42b2c 100644
--- a/Common/Makefile
+++ b/Common/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.11 2001-02-09 14:51:31 geuzaine Exp $
+# $Id: Makefile,v 1.12 2001-02-12 17:38:02 geuzaine Exp $
 #
 # Makefile for "libCommon.a"
 #
@@ -28,6 +28,7 @@ CFLAGS  = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE)\
 
 SRC =  	Context.cpp\
         Views.cpp\
+        Options.cpp\
         GetOptions.cpp\
         Timer.cpp\
         ColorTable.cpp
@@ -63,13 +64,14 @@ Context.o: Context.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   Const.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \
   ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h \
   ../Graphics/Draw.h ../Common/Views.h ../Common/Const.h \
-  ../Common/ColorTable.h Context.h trackball.c trackball.h
+  ../Common/ColorTable.h Context.h Options.h DefaultOptions.h trackball.c \
+  trackball.h
 Views.o: Views.cpp Gmsh.h Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h Views.h Const.h \
-  ColorTable.h Context.h
+  ColorTable.h Context.h Options.h
 GetOptions.o: GetOptions.cpp Gmsh.h Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
-  GmshVersion.h Const.h Context.h ../Geo/Geo.h ../Mesh/Mesh.h \
+  GmshUI.h GmshVersion.h Const.h Context.h ../Geo/Geo.h ../Mesh/Mesh.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
   ../Geo/ExtrudeParams.h ../Mesh/Metric.h Views.h ColorTable.h \
   ../Parser/OpenFile.h ../Common/Const.h
diff --git a/Common/Message.h b/Common/Message.h
index 39c4beb2344553244557a7705e3bd23d81a8eb55..a4b616e3fb0d0393ad1ed40d3fd931f47cac782d 100644
--- a/Common/Message.h
+++ b/Common/Message.h
@@ -40,6 +40,7 @@
 #define PARSER_INFO   28  // Info during syntax parsing
 #define LOG_INFO      29  // Info put only in the logfile
 
+#define DIRECT        30  // Direct message (no special formatting)
 
 #define FATAL_STR          "Fatal Error : "
 #define FATAL_NIL          "            : "
diff --git a/Common/Options.cpp b/Common/Options.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d5bfface088d9d1f5e446038401250fece973922
--- /dev/null
+++ b/Common/Options.cpp
@@ -0,0 +1,1434 @@
+// $Id: Options.cpp,v 1.1 2001-02-12 17:39:39 geuzaine Exp $
+
+#include "Gmsh.h"
+#include "GmshUI.h"
+#include "Geo.h"
+#include "Mesh.h"
+#include "Draw.h"
+#include "Context.h"
+#include "Options.h"
+
+// action is a combination of GMSH_SET, GMSH_GET, GMSH_GUI
+
+extern Context_T   CTX ;
+
+#ifdef _FLTK
+#include "GUI.h"
+extern GUI        *WID ;
+#endif
+
+#define NOVIEW Msg(WARNING, "View[%d] does not exist", num)
+
+//******************* Strings ***********************************
+
+char * opt_general_display(OPT_ARGS_STR){
+  if(action & GMSH_SET) CTX.display = val;
+  return CTX.display;
+}
+
+
+char * opt_view_name(OPT_ARGS_STR){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW;  return NULL; }
+  if(action & GMSH_SET) 
+    strcpy(v->Name, val);
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
+    WID->view_input[0]->value(v->Name);
+    WID->m_toggle_butt[num]->label(v->Name);
+  }
+#endif
+  return v->Name;
+}
+char * opt_view_format(OPT_ARGS_STR){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return NULL; }
+  if(action & GMSH_SET)
+    strcpy(v->Format, val);
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_input[1]->value(v->Format);
+#endif
+  return v->Format;
+}
+char * opt_view_filename(OPT_ARGS_STR){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return NULL; }
+  if(action & GMSH_SET)
+    strcpy(v->FileName, val);
+  return v->FileName;
+}
+
+
+char * opt_print_font(OPT_ARGS_STR){
+  if(action & GMSH_SET) CTX.print.font = val;
+  return CTX.print.font;
+}
+
+
+//******************* Numbers ***********************************
+
+
+double opt_general_viewport0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.viewport[0] = (int)val;
+  return CTX.viewport[0];
+}
+double opt_general_viewport1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.viewport[1] = (int)val;
+  return CTX.viewport[1];
+}
+double opt_general_viewport2(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.viewport[2] = (int)val;
+  return CTX.viewport[2];
+}
+double opt_general_viewport3(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.viewport[3] = (int)val;
+  return CTX.viewport[3];
+}
+double opt_general_graphics_position0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.gl_position[0] = (int)val;
+  return CTX.gl_position[0];
+}
+double opt_general_graphics_position1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.gl_position[1] = (int)val;
+  return CTX.gl_position[1];
+}
+double opt_general_graphics_fontsize(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.gl_fontsize = (int)val;
+  return CTX.gl_fontsize;
+}
+double opt_general_menu_position0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.position[0] = (int)val;
+  return CTX.position[0];
+}
+double opt_general_menu_position1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.position[1] = (int)val;
+  return CTX.position[1];
+}
+double opt_general_menu_fontsize(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.fontsize = (int)val;
+  return CTX.fontsize;
+}
+double opt_general_center_windows(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.center_windows = (int)val;
+  return CTX.center_windows;
+}
+double opt_general_rotation0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.r[0] = val;
+  return CTX.r[0];
+}
+double opt_general_rotation1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.r[1] = val;
+  return CTX.r[1];
+}
+double opt_general_rotation2(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.r[2] = val;
+  return CTX.r[3];
+}
+double opt_general_quaternion0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.quaternion[0] = val;
+  return CTX.quaternion[0];
+}
+double opt_general_quaternion1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.quaternion[1] = val;
+  return CTX.quaternion[1];
+}
+double opt_general_quaternion2(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.quaternion[2] = val;
+  return CTX.quaternion[2];
+}
+double opt_general_quaternion3(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.quaternion[3] = val;
+  return CTX.quaternion[3];
+}
+double opt_general_translation0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.t[0] = val;
+  return CTX.t[0];
+}
+double opt_general_translation1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.t[1] = val;
+  return CTX.t[1];
+}
+double opt_general_translation2(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.t[2] = val;
+  return CTX.t[2];
+}
+double opt_general_scale0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.s[0] = val;
+  return CTX.s[0];
+}
+double opt_general_scale1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.s[1] = val;
+  return CTX.s[1];
+}
+double opt_general_scale2(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.s[2] = val;
+  return CTX.s[2];
+}
+double opt_general_shine(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.shine = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_value[1]->value(CTX.shine);
+#endif
+  return CTX.shine;
+}
+double opt_general_verbosity(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.verbosity = (int)val;
+  return CTX.verbosity;
+}
+double opt_general_terminal(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.terminal = (int)val;
+  return CTX.terminal;
+}
+double opt_general_orthographic(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.ortho = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI)){
+    WID->gen_butt[6]->value(CTX.ortho);
+    WID->gen_butt[7]->value(!CTX.ortho);
+  }
+#endif
+  return CTX.ortho;
+}
+double opt_general_fast_redraw(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.fast = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[2]->value(CTX.fast);
+#endif
+  return CTX.fast;
+}
+double opt_general_axes(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.axes = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[0]->value(CTX.axes);
+#endif
+  return CTX.axes;
+}
+double opt_general_small_axes(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.small_axes = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[1]->value(CTX.small_axes);
+#endif
+  return CTX.small_axes;
+}
+double opt_general_display_lists(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.display_lists = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[3]->value(CTX.display_lists);
+#endif
+  return CTX.display_lists;
+}
+double opt_general_alpha_blending(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.alpha = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[4]->value(CTX.alpha);
+#endif
+  return CTX.alpha;
+}
+double opt_general_color_scheme(OPT_ARGS_NUM){
+  if(action & GMSH_SET){
+    CTX.color_scheme = (int)val;
+    if(CTX.color_scheme>2) CTX.color_scheme=0;
+    Init_Colors(0);
+  }
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_value[0]->value(CTX.color_scheme);
+#endif
+  return CTX.color_scheme;
+}
+double opt_general_trackball(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.useTrackball = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[5]->value(CTX.useTrackball);
+#endif
+  return CTX.useTrackball;
+}
+double opt_general_zoom_factor(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.zoom_factor = val;
+  return CTX.zoom_factor;
+}
+double opt_general_clip0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip[0] = (int)val;
+  return CTX.clip[0];
+}
+double opt_general_clip0a(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[0][0] = val;
+  return CTX.clip_plane[0][0];
+}
+double opt_general_clip0b(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[0][1] = val;
+  return CTX.clip_plane[0][1];
+}
+double opt_general_clip0c(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[0][2] = val;
+  return CTX.clip_plane[0][2];
+}
+double opt_general_clip0d(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[0][3] = val;
+  return CTX.clip_plane[0][3];
+}
+double opt_general_clip1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip[1] = (int)val;
+  return CTX.clip[1];
+}
+double opt_general_clip1a(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[1][0] = val;
+  return CTX.clip_plane[1][0];
+}
+double opt_general_clip1b(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[1][1] = val;
+  return CTX.clip_plane[1][1];
+}
+double opt_general_clip1c(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[1][2] = val;
+  return CTX.clip_plane[1][2];
+}
+double opt_general_clip1d(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[1][3] = val;
+  return CTX.clip_plane[1][3];
+}
+double opt_general_clip2(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip[2] = (int)val;
+  return CTX.clip[2];
+}
+double opt_general_clip2a(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[2][0] = val;
+  return CTX.clip_plane[2][0];
+}
+double opt_general_clip2b(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[2][1] = val;
+  return CTX.clip_plane[2][1];
+}
+double opt_general_clip2c(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[2][2] = val;
+  return CTX.clip_plane[2][2];
+}
+double opt_general_clip2d(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[2][3] = val;
+  return CTX.clip_plane[2][3];
+}
+double opt_general_clip3(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip[3] = (int)val;
+  return CTX.clip[3];
+}
+double opt_general_clip3a(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[3][0] = val;
+  return CTX.clip_plane[3][0];
+}
+double opt_general_clip3b(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[3][1] = val;
+  return CTX.clip_plane[3][1];
+}
+double opt_general_clip3c(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[3][2] = val;
+  return CTX.clip_plane[3][2];
+}
+double opt_general_clip3d(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[3][3] = val;
+  return CTX.clip_plane[3][3];
+}
+double opt_general_clip4(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip[4] = (int)val;
+  return CTX.clip[4];
+}
+double opt_general_clip4a(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[4][0] = val;
+  return CTX.clip_plane[4][0];
+}
+double opt_general_clip4b(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[4][1] = val;
+  return CTX.clip_plane[4][1];
+}
+double opt_general_clip4c(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[4][2] = val;
+  return CTX.clip_plane[4][2];
+}
+double opt_general_clip4d(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[4][3] = val;
+  return CTX.clip_plane[4][3];
+}
+double opt_general_clip5(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip[5] = (int)val;
+  return CTX.clip[5];
+}
+double opt_general_clip5a(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[5][0] = val;
+  return CTX.clip_plane[5][0];
+}
+double opt_general_clip5b(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[5][1] = val;
+  return CTX.clip_plane[5][1];
+}
+double opt_general_clip5c(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[5][2] = val;
+  return CTX.clip_plane[5][2];
+}
+double opt_general_clip5d(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.clip_plane[5][3] = val;
+  return CTX.clip_plane[5][3];
+}
+double opt_general_light0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light[0] = (int)val;
+  return CTX.light[0];
+}
+double opt_general_light00(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[0][0] = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_value[2]->value(CTX.light_position[0][0]);
+#endif
+  return CTX.light_position[0][0];
+}
+double opt_general_light01(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[0][1] = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_value[3]->value(CTX.light_position[0][1]);
+#endif
+  return CTX.light_position[0][1];
+}
+double opt_general_light02(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[0][2] = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_value[4]->value(CTX.light_position[0][2]);
+#endif
+  return CTX.light_position[0][2];
+}
+double opt_general_light1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light[1] = (int)val;
+  return CTX.light[1];
+}
+double opt_general_light10(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[1][0] = val;
+  return CTX.light_position[1][0];
+}
+double opt_general_light11(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[1][1] = val;
+  return CTX.light_position[1][1];
+}
+double opt_general_light12(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[1][2] = val;
+  return CTX.light_position[1][2];
+}
+double opt_general_light2(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light[2] = (int)val;
+  return CTX.light[2];
+}
+double opt_general_light20(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[2][0] = val;
+  return CTX.light_position[2][0];
+}
+double opt_general_light21(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[2][1] = val;
+  return CTX.light_position[2][1];
+}
+double opt_general_light22(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[2][2] = val;
+  return CTX.light_position[2][2];
+}
+double opt_general_light3(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light[3] = (int)val;
+  return CTX.light[3];
+}
+double opt_general_light30(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[3][0] = val;
+  return CTX.light_position[3][0];
+}
+double opt_general_light31(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[3][1] = val;
+  return CTX.light_position[3][1];
+}
+double opt_general_light32(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[3][2] = val;
+  return CTX.light_position[3][2];
+}
+double opt_general_light4(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light[4] = (int)val;
+  return CTX.light[4];
+}
+double opt_general_light40(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[4][0] = val;
+  return CTX.light_position[4][0];
+}
+double opt_general_light41(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[4][1] = val;
+  return CTX.light_position[4][1];
+}
+double opt_general_light42(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[4][2] = val;
+  return CTX.light_position[4][2];
+}
+double opt_general_light5(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light[5] = (int)val;
+  return CTX.light[5];
+}
+double opt_general_light50(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[5][0] = val;
+  return CTX.light_position[5][0];
+}
+double opt_general_light51(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[5][1] = val;
+  return CTX.light_position[5][1];
+}
+double opt_general_light52(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.light_position[5][2] = val;
+  return CTX.light_position[5][2];
+}
+
+
+
+double opt_geometry_normals(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.normals = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_value[0]->value(CTX.geom.normals);
+#endif
+  return CTX.geom.normals;
+}
+double opt_geometry_tangents(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.tangents = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_value[1]->value(CTX.geom.tangents);
+#endif
+  return CTX.geom.tangents;
+}
+double opt_geometry_points(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.points = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_butt[0]->value(CTX.geom.points);
+#endif
+  return CTX.geom.points;
+}
+double opt_geometry_lines(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.lines = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_butt[1]->value(CTX.geom.lines);
+#endif
+  return CTX.geom.lines;
+}
+double opt_geometry_surfaces(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.surfaces = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_butt[2]->value(CTX.geom.surfaces);
+#endif
+  return CTX.geom.surfaces;
+}
+double opt_geometry_volumes(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.volumes = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_butt[3]->value(CTX.geom.volumes);
+#endif
+  return CTX.geom.volumes;
+}
+double opt_geometry_points_num(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.points_num = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_butt[4]->value(CTX.geom.points_num);
+#endif
+  return CTX.geom.points_num;
+}
+double opt_geometry_lines_num(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.lines_num = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_butt[5]->value(CTX.geom.lines_num);
+#endif
+  return CTX.geom.lines_num;
+}
+double opt_geometry_surfaces_num(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.surfaces_num = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_butt[6]->value(CTX.geom.surfaces_num);
+#endif
+  return CTX.geom.surfaces_num;
+}
+double opt_geometry_volumes_num(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.volumes_num = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_butt[7]->value(CTX.geom.volumes_num);
+#endif
+  return CTX.geom.volumes_num;
+}
+double opt_geometry_hidden(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.hidden = (int)val;
+  return CTX.geom.hidden;
+}
+double opt_geometry_shade(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.shade = (int)val;
+  return CTX.geom.shade;
+}
+double opt_geometry_highlight(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.highlight = (int)val;
+  return CTX.geom.highlight;
+}
+double opt_geometry_old_circle(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.old_circle = (int)val;
+  return CTX.geom.old_circle;
+}
+double opt_geometry_scaling_factor(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.geom.scaling_factor = (int)val;
+  return CTX.geom.scaling_factor;
+}
+
+
+double opt_mesh_quality(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.quality = val;
+  return CTX.mesh.quality;
+}
+double opt_mesh_normals(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.normals = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_value[5]->value(CTX.mesh.normals);
+#endif
+  return CTX.mesh.normals;
+}
+double opt_mesh_tangents(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.tangents = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_value[1]->value(CTX.mesh.tangents);
+#endif
+  return CTX.mesh.tangents;
+}
+double opt_mesh_explode(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.explode = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_value[6]->value(CTX.mesh.explode);
+#endif
+  return CTX.mesh.explode;
+}
+double opt_mesh_scaling_factor(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.scaling_factor = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_value[1]->value(CTX.mesh.scaling_factor);
+#endif
+  return CTX.mesh.scaling_factor;
+}
+double opt_mesh_lc_factor(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.lc_factor = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_value[2]->value(CTX.mesh.lc_factor);
+#endif
+  return CTX.mesh.lc_factor;
+}
+double opt_mesh_rand_factor(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.rand_factor = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_value[3]->value(CTX.mesh.rand_factor);
+#endif
+  return CTX.mesh.rand_factor;
+}
+double opt_mesh_limit_gamma(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.limit_gamma = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_value[4]->value(CTX.mesh.limit_gamma);
+#endif
+  return CTX.mesh.limit_gamma;
+}
+double opt_mesh_limit_eta(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.limit_eta = val;
+  return CTX.mesh.limit_eta;
+}
+double opt_mesh_limit_rho(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.limit_rho = val;
+  return CTX.mesh.limit_rho;
+}
+double opt_mesh_points(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.points = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[3]->value(CTX.mesh.points);
+#endif
+  return CTX.mesh.points;
+}
+double opt_mesh_lines(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.lines = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[4]->value(CTX.mesh.lines);
+#endif
+  return CTX.mesh.lines;
+}
+double opt_mesh_surfaces(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.surfaces = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[5]->value(CTX.mesh.surfaces);
+#endif
+  return CTX.mesh.surfaces;
+}
+double opt_mesh_volumes(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.volumes = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[6]->value(CTX.mesh.volumes);
+#endif
+  return CTX.mesh.volumes;
+}
+double opt_mesh_points_num(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.points_num = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[7]->value(CTX.mesh.points_num);
+#endif
+  return CTX.mesh.points_num;
+}
+double opt_mesh_lines_num(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.lines_num = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[8]->value(CTX.mesh.lines_num);
+#endif
+  return CTX.mesh.lines_num;
+}
+double opt_mesh_surfaces_num(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.surfaces_num = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[9]->value(CTX.mesh.surfaces_num);
+#endif
+  return CTX.mesh.surfaces_num;
+}
+double opt_mesh_volumes_num(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.volumes_num = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[10]->value(CTX.mesh.volumes_num);
+#endif
+  return CTX.mesh.volumes_num;
+}
+double opt_mesh_hidden(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.hidden = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[11]->value(!CTX.mesh.hidden);
+#endif
+  return CTX.mesh.hidden;
+}
+double opt_mesh_shade(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.shade = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[13]->value(CTX.mesh.shade);
+#endif
+  return CTX.mesh.shade;
+}
+double opt_mesh_format(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.format = (int)val;
+  return CTX.mesh.format;
+}
+double opt_mesh_nb_smoothing(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.nb_smoothing = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_value[0]->value(CTX.mesh.nb_smoothing);
+#endif
+  return CTX.mesh.nb_smoothing;
+}
+double opt_mesh_algo(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.algo = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[2]->value(CTX.mesh.algo==DELAUNAY_NEWALGO);
+#endif
+  return CTX.mesh.algo;
+}
+double opt_mesh_point_insertion(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.point_insertion = (int)val;
+  return CTX.mesh.point_insertion;
+}
+double opt_mesh_speed_max(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.speed_max = (int)val;
+  return CTX.mesh.speed_max;
+}
+double opt_mesh_min_circ_points(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.min_circ_points = (int)val;
+  return CTX.mesh.min_circ_points;
+}
+double opt_mesh_degree(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.degree = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[0]->value(CTX.mesh.degree==2);
+#endif
+  return CTX.mesh.degree;
+}
+double opt_mesh_dual(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.dual = (int)val;
+  return CTX.mesh.dual;
+}
+double opt_mesh_interactive(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.interactive = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[1]->value(CTX.mesh.interactive);
+#endif
+  return CTX.mesh.interactive;
+}
+double opt_mesh_use_cut_plane(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.use_cut_plane = (int)val;
+  return CTX.mesh.use_cut_plane;
+}
+double opt_mesh_cut_planea(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.cut_planea = val;
+  return CTX.mesh.cut_planea;
+}
+double opt_mesh_cut_planeb(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.cut_planeb = val;
+  return CTX.mesh.cut_planeb;
+}
+double opt_mesh_cut_planec(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.cut_planec = val;
+  return CTX.mesh.cut_planec;
+}
+double opt_mesh_cut_planed(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.mesh.cut_planed = val;
+  return CTX.mesh.cut_planed;
+}
+
+
+
+double opt_post_scales(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.post.scales = (int)val;
+  return CTX.post.scales;
+}
+double opt_post_link(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.post.link = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI)){
+    WID->post_butt[0]->value(CTX.post.link==0);
+    WID->post_butt[1]->value(CTX.post.link==1);
+    WID->post_butt[2]->value(CTX.post.link==2);
+  }
+#endif
+  return CTX.post.link;
+}
+double opt_post_smooth(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.post.smooth = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->post_butt[3]->value(CTX.post.smooth);
+#endif
+  return CTX.post.smooth;
+}
+double opt_post_anim_delay(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.post.anim_delay = (val>=0.)? val : 0. ;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->post_value[0]->value(CTX.post.anim_delay);
+#endif
+  return CTX.post.anim_delay;
+}
+double opt_post_nb_views(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.post.nb_views = (int)val;
+  return CTX.post.nb_views;
+}
+
+
+
+double opt_view_nb_timestep(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->NbTimeStep = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[9]->maximum(v->NbTimeStep-1);
+#endif
+  return v->NbTimeStep;
+}
+double opt_view_timestep(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->TimeStep = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[9]->value(v->TimeStep);
+#endif
+  return v->TimeStep;
+}
+double opt_view_min(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->Min = val;
+  return v->Min;
+}
+double opt_view_max(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->Max = val;
+  return v->Max;
+}
+double opt_view_custom_min(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->CustomMin = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
+    WID->view_value[0]->value(v->CustomMin);
+  }
+#endif
+  return v->CustomMin;
+}
+double opt_view_custom_max(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->CustomMax = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[1]->value(v->CustomMax);
+#endif
+  return v->CustomMax;
+}
+double opt_view_offset0(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->Offset[0] = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[3]->value(v->Offset[0]);
+#endif
+  return v->Offset[0];
+}
+double opt_view_offset1(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->Offset[1] = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[4]->value(v->Offset[1]);
+#endif
+  return v->Offset[1];
+}
+double opt_view_offset2(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->Offset[2] = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[5]->value(v->Offset[2]);
+#endif
+  return v->Offset[2];
+}
+double opt_view_raise0(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->Raise[0] = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[6]->value(v->Raise[0]);
+#endif
+  return v->Raise[0];
+}
+double opt_view_raise1(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->Raise[1] = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[7]->value(v->Raise[1]);
+#endif
+  return v->Raise[1];
+}
+double opt_view_raise2(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->Raise[2] = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[8]->value(v->Raise[2]);
+#endif
+  return v->Raise[2];
+}
+double opt_view_arrow_scale(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->ArrowScale = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[10]->value(v->ArrowScale);
+#endif
+  return v->ArrowScale;
+}
+double opt_view_visible(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->Visible = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->m_toggle_butt[num]->value(v->Visible);
+#endif
+  return v->Visible;
+}
+double opt_view_intervals_type(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->IntervalsType = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
+    WID->view_butt[6]->value(v->IntervalsType==DRAW_POST_ISO);
+    WID->view_butt[7]->value(v->IntervalsType==DRAW_POST_DISCRETE);
+    WID->view_butt[8]->value(v->IntervalsType==DRAW_POST_CONTINUOUS);
+    WID->view_butt[9]->value(v->IntervalsType==DRAW_POST_NUMERIC);
+  }
+#endif
+  return v->IntervalsType;
+}
+double opt_view_nb_iso(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->NbIso = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_value[2]->value(v->NbIso);
+#endif
+  return v->NbIso;
+}
+double opt_view_light(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->Light = (int)val;
+  return v->Light;
+}
+double opt_view_show_element(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->ShowElement = (int)val;
+  return v->ShowElement;
+}
+double opt_view_show_time(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->ShowTime = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_butt[1]->value(v->ShowTime);
+#endif
+  return v->ShowTime;
+}
+double opt_view_show_scale(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->ShowScale = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_butt[0]->value(v->ShowScale);
+#endif
+  return v->ShowScale;
+}
+double opt_view_transparent_scale(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->TransparentScale = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_butt[2]->value(v->TransparentScale);
+#endif
+  return v->TransparentScale;
+}
+double opt_view_scale_type(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->ScaleType = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
+    WID->view_butt[4]->value(v->ScaleType==DRAW_POST_LINEAR);
+    WID->view_butt[5]->value(v->ScaleType==DRAW_POST_LOGARITHMIC);
+  }
+#endif
+  return v->ScaleType;
+}
+double opt_view_range_type(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->RangeType = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_butt[3]->value(v->RangeType==DRAW_POST_CUSTOM);
+#endif
+  return v->RangeType;
+}
+double opt_view_arrow_type(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->ArrowType = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
+    WID->view_butt[10]->value(v->ArrowType==DRAW_POST_SEGMENT);
+    WID->view_butt[11]->value(v->ArrowType==DRAW_POST_ARROW);
+    WID->view_butt[12]->value(v->ArrowType==DRAW_POST_CONE);
+    WID->view_butt[13]->value(v->ArrowType==DRAW_POST_DISPLACEMENT);
+  }
+#endif
+  return v->ArrowType;
+}
+double opt_view_arrow_location(OPT_ARGS_NUM){
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v){ NOVIEW; return 0.; }
+  if(action & GMSH_SET) 
+    v->ArrowLocation = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
+    WID->view_butt[14]->value(v->ArrowLocation==DRAW_POST_LOCATE_COG);
+    WID->view_butt[15]->value(v->ArrowLocation==DRAW_POST_LOCATE_VERTEX);
+  }
+#endif
+  return v->ArrowLocation;
+}
+
+
+double opt_print_format(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.print.format = (int)val;
+  return CTX.print.format;
+}
+double opt_print_eps_quality(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.print.eps_quality = (int)val;
+  return CTX.print.eps_quality;
+}
+double opt_print_jpeg_quality(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.print.jpeg_quality = (int)val;
+  return CTX.print.jpeg_quality;
+}
+double opt_print_gif_dither(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.print.gif_dither = (int)val;
+  return CTX.print.gif_dither;
+}
+double opt_print_gif_sort(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.print.gif_sort = (int)val;
+  return CTX.print.gif_sort;
+}
+double opt_print_gif_interlace(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.print.gif_interlace = (int)val;
+  return CTX.print.gif_interlace;
+}
+double opt_print_gif_transparent(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.print.gif_transparent = (int)val;
+  return CTX.print.gif_transparent;
+}
+double opt_print_font_size(OPT_ARGS_NUM){
+  if(action & GMSH_SET) 
+    CTX.print.font_size = (int)val;
+  return CTX.print.font_size;
+}
+
+
+//******************* Colors ***********************************
+
+
+unsigned int opt_general_color_background(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.bg = val;
+  return CTX.color.bg;
+}
+unsigned int opt_general_color_foreground(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.fg = val;
+  return CTX.color.fg;
+}
+unsigned int opt_general_color_text(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.text = val;
+  return CTX.color.text;
+}
+unsigned int opt_general_color_axes(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.axes = val;
+  return CTX.color.axes;
+}
+unsigned int opt_general_color_small_axes(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.small_axes = val;
+  return CTX.color.small_axes;
+}
+unsigned int opt_geometry_color_points(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.point = val;
+  return CTX.color.geom.point;
+} 
+unsigned int opt_geometry_color_lines(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.line = val;
+  return CTX.color.geom.line;
+}
+unsigned int opt_geometry_color_surfaces(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.surface = val;
+  return CTX.color.geom.surface;
+}
+unsigned int opt_geometry_color_volumes(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.volume = val;
+  return CTX.color.geom.volume;
+}
+unsigned int opt_geometry_color_points_select(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.point_sel = val;
+  return CTX.color.geom.point_sel;
+}
+unsigned int opt_geometry_color_lines_select(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.line_sel = val;
+  return CTX.color.geom.line_sel;
+}
+unsigned int opt_geometry_color_surfaces_select(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.surface_sel = val;
+  return CTX.color.geom.surface_sel;
+}
+unsigned int opt_geometry_color_volumes_select(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.volume_sel = val;
+  return CTX.color.geom.volume_sel;
+}
+unsigned int opt_geometry_color_points_highlight(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.point_hlt = val;
+  return CTX.color.geom.point_hlt;
+}
+unsigned int opt_geometry_color_lines_highlight(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.line_hlt = val;
+  return CTX.color.geom.line_hlt;
+}
+unsigned int opt_geometry_color_surfaces_highlight(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.surface_hlt = val;
+  return CTX.color.geom.surface_hlt;
+}
+unsigned int opt_geometry_color_volumes_highlight(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.volume_hlt = val;
+  return CTX.color.geom.volume_hlt;
+}
+unsigned int opt_geometry_color_tangents(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.tangents = val;
+  return CTX.color.geom.tangents;
+}
+unsigned int opt_geometry_color_normals(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.geom.normals = val;
+  return CTX.color.geom.normals;
+}
+unsigned int opt_mesh_color_points(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.vertex = val;
+  return CTX.color.mesh.vertex;
+} 
+unsigned int opt_mesh_color_points_supp(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.vertex_supp = val;
+  return CTX.color.mesh.vertex_supp;
+} 
+unsigned int opt_mesh_color_lines(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.line = val;
+  return CTX.color.mesh.line;
+} 
+unsigned int opt_mesh_color_triangles(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.triangle = val;
+  return CTX.color.mesh.triangle;
+}
+unsigned int opt_mesh_color_quadrangles(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.quadrangle = val;
+  return CTX.color.mesh.quadrangle;
+}
+unsigned int opt_mesh_color_tetrahedra(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.tetrahedron = val;
+  return CTX.color.mesh.tetrahedron;
+}
+unsigned int opt_mesh_color_hexahedra(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.hexahedron = val;
+  return CTX.color.mesh.hexahedron;
+}
+unsigned int opt_mesh_color_prisms(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.prism = val;
+  return CTX.color.mesh.prism;
+}
+unsigned int opt_mesh_color_pyramid(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.pyramid = val;
+  return CTX.color.mesh.pyramid;
+}
+unsigned int opt_mesh_color_tangents(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.tangents = val;
+  return CTX.color.mesh.tangents;
+}
+unsigned int opt_mesh_color_normals(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.normals = val;
+  return CTX.color.mesh.normals;
+}
+unsigned int opt_mesh_color_1(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.carousel[0] = val;
+  return CTX.color.mesh.carousel[0];
+}
+unsigned int opt_mesh_color_2(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.carousel[1] = val;
+  return CTX.color.mesh.carousel[1];
+}
+unsigned int opt_mesh_color_3(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.carousel[2] = val;
+  return CTX.color.mesh.carousel[2];
+}
+unsigned int opt_mesh_color_4(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.carousel[3] = val;
+  return CTX.color.mesh.carousel[3];
+}
+unsigned int opt_mesh_color_5(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.carousel[4] = val;
+  return CTX.color.mesh.carousel[4];
+}
+unsigned int opt_mesh_color_6(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.carousel[5] = val;
+  return CTX.color.mesh.carousel[5];
+}
+unsigned int opt_mesh_color_7(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.carousel[6] = val;
+  return CTX.color.mesh.carousel[6];
+}
+unsigned int opt_mesh_color_8(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.carousel[7] = val;
+  return CTX.color.mesh.carousel[7];
+}
+unsigned int opt_mesh_color_9(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.carousel[8] = val;
+  return CTX.color.mesh.carousel[8];
+}
+unsigned int opt_mesh_color_10(OPT_ARGS_COL){
+  if(action & GMSH_SET) 
+    CTX.color.mesh.carousel[9] = val;
+  return CTX.color.mesh.carousel[9];
+}
diff --git a/Common/Options.h b/Common/Options.h
index 396c7808db7efd9371c2dc1b8daa89270dff3ad3..8ec882d591fa93435a0b557731f964ea2ac14ddc 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -1,404 +1,312 @@
 #ifndef _OPTIONS_H_
 #define _OPTIONS_H_
 
-#include "Geo.h"
-#include "Mesh.h"
-#include "Draw.h"
-#include "Context.h"
+#define GMSH_SET       (1<<0)
+#define GMSH_GET       (1<<1)
+#define GMSH_GUI       (1<<2)
 
-extern Context_T   CTX ;
+#define OPT_ARGS_STR   int num, int action, char *val
+#define OPT_ARGS_NUM   int num, int action, double val
+#define OPT_ARGS_COL   int num, int action, unsigned int val
 
-// Option Database, with default values
+// Option Database (General, Geometry, Mesh, Post, View, Print), with
+// default values
 
 // STRINGS
 
-StringXString GeneralOptions_String[] = {
-  { "Display" , &CTX.display , "" },
-  { NULL , NULL , NULL }
-} ;
+char * opt_general_display(OPT_ARGS_STR);
+char * opt_view_name(OPT_ARGS_STR);
+char * opt_view_format(OPT_ARGS_STR);
+char * opt_view_filename(OPT_ARGS_STR);
+char * opt_print_font(OPT_ARGS_STR);
 
-StringXString GeometryOptions_String[] = {
-  { NULL , NULL ,  NULL }
-} ;
+// NUMBERS
 
-StringXString MeshOptions_String[] = {
-  { NULL , NULL ,  NULL }
-} ;
+double opt_general_viewport0(OPT_ARGS_NUM);
+double opt_general_viewport1(OPT_ARGS_NUM);
+double opt_general_viewport2(OPT_ARGS_NUM);
+double opt_general_viewport3(OPT_ARGS_NUM);
+double opt_general_graphics_position0(OPT_ARGS_NUM);
+double opt_general_graphics_position1(OPT_ARGS_NUM);
+double opt_general_graphics_fontsize(OPT_ARGS_NUM);
+double opt_general_menu_position0(OPT_ARGS_NUM);
+double opt_general_menu_position1(OPT_ARGS_NUM);
+double opt_general_menu_fontsize(OPT_ARGS_NUM);
+double opt_general_center_windows(OPT_ARGS_NUM);
+double opt_general_rotation0(OPT_ARGS_NUM);
+double opt_general_rotation1(OPT_ARGS_NUM);
+double opt_general_rotation2(OPT_ARGS_NUM);
+double opt_general_quaternion0(OPT_ARGS_NUM);
+double opt_general_quaternion1(OPT_ARGS_NUM);
+double opt_general_quaternion2(OPT_ARGS_NUM);
+double opt_general_quaternion3(OPT_ARGS_NUM);
+double opt_general_translation0(OPT_ARGS_NUM);
+double opt_general_translation1(OPT_ARGS_NUM);
+double opt_general_translation2(OPT_ARGS_NUM);
+double opt_general_scale0(OPT_ARGS_NUM);
+double opt_general_scale1(OPT_ARGS_NUM);
+double opt_general_scale2(OPT_ARGS_NUM);
+double opt_general_shine(OPT_ARGS_NUM);
+double opt_general_color_scheme(OPT_ARGS_NUM);
+double opt_general_verbosity(OPT_ARGS_NUM);
+double opt_general_terminal(OPT_ARGS_NUM);
+double opt_general_orthographic(OPT_ARGS_NUM);
+double opt_general_fast_redraw(OPT_ARGS_NUM);
+double opt_general_axes(OPT_ARGS_NUM);
+double opt_general_small_axes(OPT_ARGS_NUM);
+double opt_general_display_lists(OPT_ARGS_NUM);
+double opt_general_alpha_blending(OPT_ARGS_NUM);
+double opt_general_trackball(OPT_ARGS_NUM);
+double opt_general_zoom_factor(OPT_ARGS_NUM);
+double opt_general_clip0(OPT_ARGS_NUM);
+double opt_general_clip0a(OPT_ARGS_NUM);
+double opt_general_clip0b(OPT_ARGS_NUM);
+double opt_general_clip0c(OPT_ARGS_NUM);
+double opt_general_clip0d(OPT_ARGS_NUM);
+double opt_general_clip1(OPT_ARGS_NUM);
+double opt_general_clip1a(OPT_ARGS_NUM);
+double opt_general_clip1b(OPT_ARGS_NUM);
+double opt_general_clip1c(OPT_ARGS_NUM);
+double opt_general_clip1d(OPT_ARGS_NUM);
+double opt_general_clip2(OPT_ARGS_NUM);
+double opt_general_clip2a(OPT_ARGS_NUM);
+double opt_general_clip2b(OPT_ARGS_NUM);
+double opt_general_clip2c(OPT_ARGS_NUM);
+double opt_general_clip2d(OPT_ARGS_NUM);
+double opt_general_clip3(OPT_ARGS_NUM);
+double opt_general_clip3a(OPT_ARGS_NUM);
+double opt_general_clip3b(OPT_ARGS_NUM);
+double opt_general_clip3c(OPT_ARGS_NUM);
+double opt_general_clip3d(OPT_ARGS_NUM);
+double opt_general_clip4(OPT_ARGS_NUM);
+double opt_general_clip4a(OPT_ARGS_NUM);
+double opt_general_clip4b(OPT_ARGS_NUM);
+double opt_general_clip4c(OPT_ARGS_NUM);
+double opt_general_clip4d(OPT_ARGS_NUM);
+double opt_general_clip5(OPT_ARGS_NUM);
+double opt_general_clip5a(OPT_ARGS_NUM);
+double opt_general_clip5b(OPT_ARGS_NUM);
+double opt_general_clip5c(OPT_ARGS_NUM);
+double opt_general_clip5d(OPT_ARGS_NUM);
+double opt_general_light0(OPT_ARGS_NUM);
+double opt_general_light00(OPT_ARGS_NUM);
+double opt_general_light01(OPT_ARGS_NUM);
+double opt_general_light02(OPT_ARGS_NUM);
+double opt_general_light1(OPT_ARGS_NUM);
+double opt_general_light10(OPT_ARGS_NUM);
+double opt_general_light11(OPT_ARGS_NUM);
+double opt_general_light12(OPT_ARGS_NUM);
+double opt_general_light2(OPT_ARGS_NUM);
+double opt_general_light20(OPT_ARGS_NUM);
+double opt_general_light21(OPT_ARGS_NUM);
+double opt_general_light22(OPT_ARGS_NUM);
+double opt_general_light3(OPT_ARGS_NUM);
+double opt_general_light30(OPT_ARGS_NUM);
+double opt_general_light31(OPT_ARGS_NUM);
+double opt_general_light32(OPT_ARGS_NUM);
+double opt_general_light4(OPT_ARGS_NUM);
+double opt_general_light40(OPT_ARGS_NUM);
+double opt_general_light41(OPT_ARGS_NUM);
+double opt_general_light42(OPT_ARGS_NUM);
+double opt_general_light5(OPT_ARGS_NUM);
+double opt_general_light50(OPT_ARGS_NUM);
+double opt_general_light51(OPT_ARGS_NUM);
+double opt_general_light52(OPT_ARGS_NUM);
+double opt_geometry_normals(OPT_ARGS_NUM);
+double opt_geometry_tangents(OPT_ARGS_NUM);
+double opt_geometry_points(OPT_ARGS_NUM);
+double opt_geometry_lines(OPT_ARGS_NUM);
+double opt_geometry_surfaces(OPT_ARGS_NUM);
+double opt_geometry_volumes(OPT_ARGS_NUM);
+double opt_geometry_points_num(OPT_ARGS_NUM);
+double opt_geometry_lines_num(OPT_ARGS_NUM);
+double opt_geometry_surfaces_num(OPT_ARGS_NUM);
+double opt_geometry_volumes_num(OPT_ARGS_NUM);
+double opt_geometry_hidden(OPT_ARGS_NUM);
+double opt_geometry_shade(OPT_ARGS_NUM);
+double opt_geometry_highlight(OPT_ARGS_NUM);
+double opt_geometry_old_circle(OPT_ARGS_NUM);
+double opt_geometry_scaling_factor(OPT_ARGS_NUM);
+double opt_mesh_quality(OPT_ARGS_NUM);
+double opt_mesh_normals(OPT_ARGS_NUM);
+double opt_mesh_tangents(OPT_ARGS_NUM);
+double opt_mesh_explode(OPT_ARGS_NUM);
+double opt_mesh_scaling_factor(OPT_ARGS_NUM);
+double opt_mesh_lc_factor(OPT_ARGS_NUM);
+double opt_mesh_rand_factor(OPT_ARGS_NUM);
+double opt_mesh_limit_gamma(OPT_ARGS_NUM);
+double opt_mesh_limit_eta(OPT_ARGS_NUM);
+double opt_mesh_limit_rho(OPT_ARGS_NUM);
+double opt_mesh_points(OPT_ARGS_NUM);
+double opt_mesh_lines(OPT_ARGS_NUM);
+double opt_mesh_surfaces(OPT_ARGS_NUM);
+double opt_mesh_volumes(OPT_ARGS_NUM);
+double opt_mesh_points_num(OPT_ARGS_NUM);
+double opt_mesh_lines_num(OPT_ARGS_NUM);
+double opt_mesh_surfaces_num(OPT_ARGS_NUM);
+double opt_mesh_volumes_num(OPT_ARGS_NUM);
+double opt_mesh_hidden(OPT_ARGS_NUM);
+double opt_mesh_shade(OPT_ARGS_NUM);
+double opt_mesh_format(OPT_ARGS_NUM);
+double opt_mesh_nb_smoothing(OPT_ARGS_NUM);
+double opt_mesh_algo(OPT_ARGS_NUM);
+double opt_mesh_point_insertion(OPT_ARGS_NUM);
+double opt_mesh_speed_max(OPT_ARGS_NUM);
+double opt_mesh_min_circ_points(OPT_ARGS_NUM);
+double opt_mesh_degree(OPT_ARGS_NUM);
+double opt_mesh_dual(OPT_ARGS_NUM);
+double opt_mesh_interactive(OPT_ARGS_NUM);
+double opt_mesh_use_cut_plane(OPT_ARGS_NUM);
+double opt_mesh_cut_planea(OPT_ARGS_NUM);
+double opt_mesh_cut_planeb(OPT_ARGS_NUM);
+double opt_mesh_cut_planec(OPT_ARGS_NUM);
+double opt_mesh_cut_planed(OPT_ARGS_NUM);
+double opt_post_scales(OPT_ARGS_NUM);
+double opt_post_link(OPT_ARGS_NUM);
+double opt_post_smooth(OPT_ARGS_NUM);
+double opt_post_initial_visibility(OPT_ARGS_NUM);
+double opt_post_initial_intervals(OPT_ARGS_NUM);
+double opt_post_initial_nbiso(OPT_ARGS_NUM);
+double opt_post_anim_delay(OPT_ARGS_NUM);
+double opt_post_nb_views(OPT_ARGS_NUM);
+double opt_view_nb_timestep(OPT_ARGS_NUM);
+double opt_view_timestep(OPT_ARGS_NUM);
+double opt_view_min(OPT_ARGS_NUM);
+double opt_view_max(OPT_ARGS_NUM);
+double opt_view_custom_min(OPT_ARGS_NUM);
+double opt_view_custom_max(OPT_ARGS_NUM);
+double opt_view_offset0(OPT_ARGS_NUM);
+double opt_view_offset1(OPT_ARGS_NUM);
+double opt_view_offset2(OPT_ARGS_NUM);
+double opt_view_raise0(OPT_ARGS_NUM);
+double opt_view_raise1(OPT_ARGS_NUM);
+double opt_view_raise2(OPT_ARGS_NUM);
+double opt_view_arrow_scale(OPT_ARGS_NUM);
+double opt_view_visible(OPT_ARGS_NUM);
+double opt_view_intervals_type(OPT_ARGS_NUM);
+double opt_view_nb_iso(OPT_ARGS_NUM);
+double opt_view_light(OPT_ARGS_NUM);
+double opt_view_show_element(OPT_ARGS_NUM);
+double opt_view_show_time(OPT_ARGS_NUM);
+double opt_view_show_scale(OPT_ARGS_NUM);
+double opt_view_transparent_scale(OPT_ARGS_NUM);
+double opt_view_scale_type(OPT_ARGS_NUM);
+double opt_view_range_type(OPT_ARGS_NUM);
+double opt_view_arrow_type(OPT_ARGS_NUM);
+double opt_view_arrow_location(OPT_ARGS_NUM);
+double opt_print_format(OPT_ARGS_NUM);
+double opt_print_eps_quality(OPT_ARGS_NUM);
+double opt_print_jpeg_quality(OPT_ARGS_NUM);
+double opt_print_gif_dither(OPT_ARGS_NUM);
+double opt_print_gif_sort(OPT_ARGS_NUM);
+double opt_print_gif_interlace(OPT_ARGS_NUM);
+double opt_print_gif_transparent(OPT_ARGS_NUM);
+double opt_print_font_size(OPT_ARGS_NUM);
 
-StringXString PostProcessingOptions_String[] = {
-  { NULL , NULL ,  NULL }
-} ;
+// COLORS
 
-StringXString PrintOptions_String[] = {
-  { "Font" ,  &CTX.print.font , "Courier" },
-  { NULL , NULL , NULL }
-} ;
+unsigned int opt_general_color_background(OPT_ARGS_COL);
+unsigned int opt_general_color_foreground(OPT_ARGS_COL);
+unsigned int opt_general_color_text(OPT_ARGS_COL);
+unsigned int opt_general_color_axes(OPT_ARGS_COL);
+unsigned int opt_general_color_small_axes(OPT_ARGS_COL);
+unsigned int opt_geometry_color_points(OPT_ARGS_COL); 
+unsigned int opt_geometry_color_lines(OPT_ARGS_COL);
+unsigned int opt_geometry_color_surfaces(OPT_ARGS_COL);
+unsigned int opt_geometry_color_volumes(OPT_ARGS_COL);
+unsigned int opt_geometry_color_points_select(OPT_ARGS_COL);
+unsigned int opt_geometry_color_lines_select(OPT_ARGS_COL);
+unsigned int opt_geometry_color_surfaces_select(OPT_ARGS_COL);
+unsigned int opt_geometry_color_volumes_select(OPT_ARGS_COL);
+unsigned int opt_geometry_color_points_highlight(OPT_ARGS_COL);
+unsigned int opt_geometry_color_lines_highlight(OPT_ARGS_COL);
+unsigned int opt_geometry_color_surfaces_highlight(OPT_ARGS_COL);
+unsigned int opt_geometry_color_volumes_highlight(OPT_ARGS_COL);
+unsigned int opt_geometry_color_tangents(OPT_ARGS_COL);
+unsigned int opt_geometry_color_normals(OPT_ARGS_COL);
+unsigned int opt_mesh_color_points(OPT_ARGS_COL); 
+unsigned int opt_mesh_color_points_supp(OPT_ARGS_COL); 
+unsigned int opt_mesh_color_lines(OPT_ARGS_COL); 
+unsigned int opt_mesh_color_triangles(OPT_ARGS_COL);
+unsigned int opt_mesh_color_quadrangles(OPT_ARGS_COL);
+unsigned int opt_mesh_color_tetrahedra(OPT_ARGS_COL);
+unsigned int opt_mesh_color_hexahedra(OPT_ARGS_COL);
+unsigned int opt_mesh_color_prisms(OPT_ARGS_COL);
+unsigned int opt_mesh_color_pyramid(OPT_ARGS_COL);
+unsigned int opt_mesh_color_tangents(OPT_ARGS_COL);
+unsigned int opt_mesh_color_normals(OPT_ARGS_COL);
+unsigned int opt_mesh_color_1(OPT_ARGS_COL);
+unsigned int opt_mesh_color_2(OPT_ARGS_COL);
+unsigned int opt_mesh_color_3(OPT_ARGS_COL);
+unsigned int opt_mesh_color_4(OPT_ARGS_COL);
+unsigned int opt_mesh_color_5(OPT_ARGS_COL);
+unsigned int opt_mesh_color_6(OPT_ARGS_COL);
+unsigned int opt_mesh_color_7(OPT_ARGS_COL);
+unsigned int opt_mesh_color_8(OPT_ARGS_COL);
+unsigned int opt_mesh_color_9(OPT_ARGS_COL);
+unsigned int opt_mesh_color_10(OPT_ARGS_COL);
 
-// NUMBERS
 
-StringXNumber GeneralOptions_Number[] = {
-  { "Viewport0"            , GMSH_INT,    (void*)&CTX.viewport[0]    , 0. }, 
-  { "Viewport1"            , GMSH_INT,    (void*)&CTX.viewport[1]    , 0. }, 
-  { "Viewport2"            , GMSH_INT,    (void*)&CTX.viewport[2]    , 700. }, 
-  { "Viewport3"            , GMSH_INT,    (void*)&CTX.viewport[3]    , 500. }, 
-  { "GraphicsPosition0"    , GMSH_INT,    (void*)&CTX.gl_position[0] , 20. }, 
-  { "GraphicsPosition1"    , GMSH_INT,    (void*)&CTX.gl_position[1] , 30. }, 
-  { "GraphicsFontSize"     , GMSH_INT,    (void*)&CTX.gl_fontsize    , 11. }, 
-  { "MenuPosition0"        , GMSH_INT,    (void*)&CTX.position[0]    , 800. }, 
-  { "MenuPosition1"        , GMSH_INT,    (void*)&CTX.position[1]    , 50. }, 
-  { "MenuFontSize"         , GMSH_INT,    (void*)&CTX.fontsize       , 12. }, 
-  { "CenterWindows"        , GMSH_INT,    (void*)&CTX.center_windows , 1. }, 
-  { "Rotation0"            , GMSH_DOUBLE, (void*)&CTX.r[0]           , 0.0 }, 
-  { "Rotation1"            , GMSH_DOUBLE, (void*)&CTX.r[1]           , 0.0 }, 
-  { "Rotation2"            , GMSH_DOUBLE, (void*)&CTX.r[2]           , 0.0 }, 
-  { "TrackballQuaternion0" , GMSH_FLOAT,  (void*)&CTX.quaternion[0]  , 0.0 }, 
-  { "TrackballQuaternion1" , GMSH_FLOAT,  (void*)&CTX.quaternion[1]  , 0.0 }, 
-  { "TrackballQuaternion2" , GMSH_FLOAT,  (void*)&CTX.quaternion[2]  , 0.0 }, 
-  { "TrackballQuaternion3" , GMSH_FLOAT,  (void*)&CTX.quaternion[3]  , 1.0 }, 
-  { "Translation0"         , GMSH_DOUBLE, (void*)&CTX.t[0]           , 0.0 }, 
-  { "Translation1"         , GMSH_DOUBLE, (void*)&CTX.t[1]           , 0.0 }, 
-  { "Translation2"         , GMSH_DOUBLE, (void*)&CTX.t[2]           , 0.0 }, 
-  { "Scale0"               , GMSH_DOUBLE, (void*)&CTX.s[0]           , 1.0 }, 
-  { "Scale1"               , GMSH_DOUBLE, (void*)&CTX.s[1]           , 1.0 }, 
-  { "Scale2"               , GMSH_DOUBLE, (void*)&CTX.s[2]           , 1.0 }, 
-  { "Shininess"            , GMSH_FLOAT,  (void*)&CTX.shine          , 0.4 }, 
-  { "Verbosity"            , GMSH_INT,    (void*)&CTX.verbosity      , 2. },
-  { "Orthographic"         , GMSH_INT,    (void*)&CTX.ortho          , 1. }, 
-  { "FastRedraw"           , GMSH_INT,    (void*)&CTX.fast           , 1. },
-  { "Axes"                 , GMSH_INT,    (void*)&CTX.axes           , 1. },
-  { "SmallAxes"            , GMSH_INT,    (void*)&CTX.small_axes     , 1. },
-  { "DisplayLists"         , GMSH_INT,    (void*)&CTX.display_lists  , 0. },
-  { "SameVisual"           , GMSH_INT,    (void*)&CTX.same_visual    , 0. },
-  { "Flash"                , GMSH_INT,    (void*)&CTX.flash          , 0. },
-  { "AlphaBlending"        , GMSH_INT,    (void*)&CTX.alpha          , 0. },
-  { "Trackball"            , GMSH_INT,    (void*)&CTX.useTrackball   , 1. },
-  { "ZoomFactor"           , GMSH_DOUBLE, (void*)&CTX.zoom_factor    , 1.1 }, 
-  { "Clip0"                , GMSH_INT,    (void*)&CTX.clip[0]        , 0. },
-  { "Clip00"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[0][0] , 0.0 }, 
-  { "Clip01"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[0][1] , 0.0 }, 
-  { "Clip02"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[0][2] , 0.0 }, 
-  { "Clip03"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[0][3] , 0.0 }, 
-  { "Clip1"                , GMSH_INT,    (void*)&CTX.clip[1]          , 0. },
-  { "Clip10"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[1][0] , 0.0 }, 
-  { "Clip11"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[1][1] , 0.0 }, 
-  { "Clip12"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[1][2] , 0.0 }, 
-  { "Clip13"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[1][3] , 0.0 }, 
-  { "Clip2"                , GMSH_INT,    (void*)&CTX.clip[2]          , 0. },
-  { "Clip20"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[2][0] , 0.0 }, 
-  { "Clip21"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[2][1] , 0.0 }, 
-  { "Clip22"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[2][2] , 0.0 }, 
-  { "Clip23"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[2][3] , 0.0 }, 
-  { "Clip3"                , GMSH_INT,    (void*)&CTX.clip[3]          , 0. },
-  { "Clip30"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[3][0] , 0.0 }, 
-  { "Clip31"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[3][1] , 0.0 }, 
-  { "Clip32"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[3][2] , 0.0 }, 
-  { "Clip33"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[3][3] , 0.0 }, 
-  { "Clip4"                , GMSH_INT,    (void*)&CTX.clip[4]          , 0. },
-  { "Clip40"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[4][0] , 0.0 }, 
-  { "Clip41"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[4][1] , 0.0 }, 
-  { "Clip42"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[4][2] , 0.0 }, 
-  { "Clip43"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[4][3] , 0.0 }, 
-  { "Clip5"                , GMSH_INT,    (void*)&CTX.clip[5]          , 0. },
-  { "Clip50"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[5][0] , 0.0 }, 
-  { "Clip51"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[5][1] , 0.0 }, 
-  { "Clip52"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[5][2] , 0.0 }, 
-  { "Clip53"               , GMSH_DOUBLE, (void*)&CTX.clip_plane[5][3] , 0.0 }, 
-  { "Light0"               , GMSH_INT,    (void*)&CTX.light[0]         , 1. },
-  { "Light00"              , GMSH_FLOAT,  (void*)&CTX.light_position[0][0] , 0.5 }, 
-  { "Light01"              , GMSH_FLOAT,  (void*)&CTX.light_position[0][1] , 0.3 }, 
-  { "Light02"              , GMSH_FLOAT,  (void*)&CTX.light_position[0][2] , 1.0 }, 
-  { "Light03"              , GMSH_FLOAT,  (void*)&CTX.light_position[0][3] , 0.0 }, 
-  { "Light1"               , GMSH_INT,    (void*)&CTX.light[1]             , 0. },
-  { "Light10"              , GMSH_FLOAT,  (void*)&CTX.light_position[1][0] , 0.0 }, 
-  { "Light11"              , GMSH_FLOAT,  (void*)&CTX.light_position[1][1] , 0.0 }, 
-  { "Light12"              , GMSH_FLOAT,  (void*)&CTX.light_position[1][2] , 0.0 }, 
-  { "Light13"              , GMSH_FLOAT,  (void*)&CTX.light_position[1][3] , 0.0 }, 
-  { "Light2"               , GMSH_INT,    (void*)&CTX.light[2]             , 0. },
-  { "Light20"              , GMSH_FLOAT,  (void*)&CTX.light_position[2][0] , 0.0 }, 
-  { "Light21"              , GMSH_FLOAT,  (void*)&CTX.light_position[2][1] , 0.0 }, 
-  { "Light22"              , GMSH_FLOAT,  (void*)&CTX.light_position[2][2] , 0.0 }, 
-  { "Light23"              , GMSH_FLOAT,  (void*)&CTX.light_position[2][3] , 0.0 }, 
-  { "Light3"               , GMSH_INT,    (void*)&CTX.light[3]             , 0. },
-  { "Light30"              , GMSH_FLOAT,  (void*)&CTX.light_position[3][0] , 0.0 }, 
-  { "Light31"              , GMSH_FLOAT,  (void*)&CTX.light_position[3][1] , 0.0 }, 
-  { "Light32"              , GMSH_FLOAT,  (void*)&CTX.light_position[3][2] , 0.0 }, 
-  { "Light33"              , GMSH_FLOAT,  (void*)&CTX.light_position[3][3] , 0.0 }, 
-  { "Light4"               , GMSH_INT,    (void*)&CTX.light[4]             , 0. },
-  { "Light40"              , GMSH_FLOAT,  (void*)&CTX.light_position[4][0] , 0.0 }, 
-  { "Light41"              , GMSH_FLOAT,  (void*)&CTX.light_position[4][1] , 0.0 }, 
-  { "Light42"              , GMSH_FLOAT,  (void*)&CTX.light_position[4][2] , 0.0 }, 
-  { "Light43"              , GMSH_FLOAT,  (void*)&CTX.light_position[4][3] , 0.0 }, 
-  { "Light5"               , GMSH_INT,    (void*)&CTX.light[5]             , 0. },
-  { "Light50"              , GMSH_FLOAT,  (void*)&CTX.light_position[5][0] , 0.0 }, 
-  { "Light51"              , GMSH_FLOAT,  (void*)&CTX.light_position[5][1] , 0.0 }, 
-  { "Light52"              , GMSH_FLOAT,  (void*)&CTX.light_position[5][2] , 0.0 }, 
-  { "Light53"              , GMSH_FLOAT,  (void*)&CTX.light_position[5][3] , 0.0 }, 
-  { NULL                   , GMSH_DOUBLE, NULL , 0. }
-} ;
+// Data structures and global functions
 
-StringXNumber GeometryOptions_Number[] = {
-  { "Normals"         , GMSH_DOUBLE, (void*)&CTX.geom.normals      , 0. }, 
-  { "Tangents"        , GMSH_DOUBLE, (void*)&CTX.geom.tangents     , 0. }, 
-  { "Points"          , GMSH_INT,    (void*)&CTX.geom.points       , 1. }, 
-  { "Lines"           , GMSH_INT,    (void*)&CTX.geom.lines        , 1. }, 
-  { "Surfaces"        , GMSH_INT,    (void*)&CTX.geom.surfaces     , 0. }, 
-  { "Volumes"         , GMSH_INT,    (void*)&CTX.geom.volumes      , 0. }, 
-  { "PointsNumbers"   , GMSH_INT,    (void*)&CTX.geom.points_num   , 0. }, 
-  { "LinesNumbers"    , GMSH_INT,    (void*)&CTX.geom.lines_num    , 0. }, 
-  { "SurfacesNumbers" , GMSH_INT,    (void*)&CTX.geom.surfaces_num , 0. }, 
-  { "VolumesNumbers"  , GMSH_INT,    (void*)&CTX.geom.volumes_num  , 0. }, 
-  { "HiddenLines"     , GMSH_INT,    (void*)&CTX.geom.hidden       , 0. }, 
-  { "Shading"         , GMSH_INT,    (void*)&CTX.geom.shade        , 0. }, 
-  { "Highlight"       , GMSH_INT,    (void*)&CTX.geom.highlight    , 1. }, 
-  { "OldCircle"       , GMSH_INT,    (void*)&CTX.geom.old_circle   , 0. }, 
-  { "ScalingFactor"   , GMSH_DOUBLE, (void*)&CTX.geom.scaling_factor , 1.0 }, 
-  { NULL              , GMSH_DOUBLE, NULL , 0. }
-} ;
+typedef struct {
+  char *str ; 
+  int int1, int2, int3, int4 ;
+} StringX4Int;
 
-StringXNumber MeshOptions_Number[] = {
-  { "Quality"         , GMSH_DOUBLE, (void*)&CTX.mesh.quality        , 0.0 }, 
-  { "Normals"         , GMSH_DOUBLE, (void*)&CTX.mesh.normals        , 0.0 }, 
-  { "Tangents"        , GMSH_DOUBLE, (void*)&CTX.mesh.tangents       , 0.0 }, 
-  { "Explode"         , GMSH_DOUBLE, (void*)&CTX.mesh.explode        , 1.0 }, 
-  { "ScalingFactor"   , GMSH_DOUBLE, (void*)&CTX.mesh.scaling_factor , 1.0 }, 
-  { "CharacteristicLengthFactor" , 
-                        GMSH_DOUBLE, (void*)&CTX.mesh.lc_factor      , 1.0 }, 
-  { "RandomFactor"    , GMSH_DOUBLE, (void*)&CTX.mesh.rand_factor    , 1.e-5 }, 
-  { "GammaLimit"      , GMSH_DOUBLE, (void*)&CTX.mesh.limit_gamma    , 0.0 }, 
-  { "EtaLimit"        , GMSH_DOUBLE, (void*)&CTX.mesh.limit_eta      , 0.0 }, 
-  { "RhoLimit"        , GMSH_DOUBLE, (void*)&CTX.mesh.limit_rho      , 0.0 }, 
-  { "Points"          , GMSH_INT,    (void*)&CTX.mesh.points         , 1. }, 
-  { "Lines"           , GMSH_INT,    (void*)&CTX.mesh.lines          , 1. }, 
-  { "Surfaces"        , GMSH_INT,    (void*)&CTX.mesh.surfaces       , 1. }, 
-  { "Volumes"         , GMSH_INT,    (void*)&CTX.mesh.volumes        , 1. }, 
-  { "PointsNumbers"   , GMSH_INT,    (void*)&CTX.mesh.points_num     , 0. }, 
-  { "LinesNumbers"    , GMSH_INT,    (void*)&CTX.mesh.lines_num      , 0. }, 
-  { "SurfacesNumbers" , GMSH_INT,    (void*)&CTX.mesh.surfaces_num   , 0. }, 
-  { "VolumesNumbers"  , GMSH_INT,    (void*)&CTX.mesh.volumes_num    , 0. }, 
-  { "HiddenLines"     , GMSH_INT,    (void*)&CTX.mesh.hidden         , 0. }, 
-  { "Shading"         , GMSH_INT,    (void*)&CTX.mesh.shade          , 0. }, 
-  { "Format"          , GMSH_INT,    (void*)&CTX.mesh.format         , FORMAT_MSH }, 
-  { "Smoothing"       , GMSH_INT,    (void*)&CTX.mesh.nb_smoothing   , 0. }, 
-  { "Algorithm"       , GMSH_INT,    (void*)&CTX.mesh.algo           , DELAUNAY_OLDALGO }, 
-  { "PointInsertion"  , GMSH_INT,    (void*)&CTX.mesh.point_insertion, CENTER_CIRCCIRC }, 
-  { "SpeedMax"        , GMSH_INT,    (void*)&CTX.mesh.speed_max      , 0. }, 
-  { "MinimumCirclePoints" ,
-                        GMSH_INT,    (void*)&CTX.mesh.min_circ_points, 7. }, 
-  { "Degree"          , GMSH_INT,    (void*)&CTX.mesh.degree         , 1. }, 
-  { "Dual"            , GMSH_INT,    (void*)&CTX.mesh.dual           , 0. }, 
-  { "Interactive"     , GMSH_INT,    (void*)&CTX.mesh.interactive    , 0. }, 
-  { "use_cut_plane"   , GMSH_INT,    (void*)&CTX.mesh.use_cut_plane  , 0  }, 
-  { "cut_planea"      , GMSH_DOUBLE, (void*)&CTX.mesh.cut_planea      , 1. }, 
-  { "cut_planeb"      , GMSH_DOUBLE, (void*)&CTX.mesh.cut_planeb      , 0. }, 
-  { "cut_planec"      , GMSH_DOUBLE, (void*)&CTX.mesh.cut_planec      , 0. }, 
-  { "cut_planed"      , GMSH_DOUBLE, (void*)&CTX.mesh.cut_planed      , 0. }, 
-  { NULL              , GMSH_DOUBLE, NULL , 0. }
-} ;
+typedef struct {
+  char *str ;
+  char * (*function)(int num, int action, char *val) ;
+  char *def ;
+} StringXString ;
 
-StringXNumber PostProcessingOptions_Number[] = {
-  { "Scales"           , GMSH_INT,    (void*)&CTX.post.scales             , 1. }, 
-  { "Link"             , GMSH_INT,    (void*)&CTX.post.link               , 0. }, 
-  { "Smoothing"        , GMSH_INT,    (void*)&CTX.post.smooth             , 0. }, 
-  { "Visibility"       , GMSH_INT,    (void*)&CTX.post.initial_visibility , 1. }, 
-  { "IntervalsMode"    , GMSH_INT,    (void*)&CTX.post.initial_intervals  , DRAW_POST_ISO }, 
-  { "IntervalsNumber"  , GMSH_INT,    (void*)&CTX.post.initial_nbiso      , 15. }, 
-  { "AnimationDelay"   , GMSH_DOUBLE, (void*)&CTX.post.anim_delay         , 0.25 }, 
-  { "NbViews"          , GMSH_INT,    (void*)&CTX.post.nb_views           , 0. }, 
-  { NULL               , GMSH_DOUBLE, NULL , 0. }
-} ;
+typedef struct {
+  char *str;
+  double (*function)(int num, int action, double val) ;
+  double def ;
+} StringXNumber ;
 
-StringXNumber PrintOptions_Number[] = {
-  { "Format"         , GMSH_INT,    (void*)&CTX.print.format         , FORMAT_AUTO }, 
-  { "EpsQuality"     , GMSH_INT,    (void*)&CTX.print.eps_quality    , 1 }, 
-  { "JpegQuality"    , GMSH_INT,    (void*)&CTX.print.jpeg_quality   , 85 }, 
-  { "GifDither"      , GMSH_INT,    (void*)&CTX.print.gif_dither     , 0 }, 
-  { "GifSort"        , GMSH_INT,    (void*)&CTX.print.gif_sort       , 1 }, 
-  { "GifInterlace"   , GMSH_INT,    (void*)&CTX.print.gif_interlace  , 0 }, 
-  { "GifTransparent" , GMSH_INT,    (void*)&CTX.print.gif_transparent, 0 }, 
-  { "FontSize"       , GMSH_INT,    (void*)&CTX.print.font_size      , 12. }, 
-  { NULL             , GMSH_DOUBLE, NULL , 0. }
-} ;
+typedef struct {
+  char *str ; 
+  unsigned int (*function)(int num, int action, unsigned int val) ;
+  unsigned int def1, def2, def3 ;
+} StringXColor ;
 
-// COLORS
+StringXString * Get_StringOptionCategory(char * cat);
+StringXNumber * Get_NumberOptionCategory(char * cat);
+StringXColor * Get_ColorOptionCategory(char * cat);
+
+void Set_DefaultStringOptions(int num, StringXString s[]);
+void Set_DefaultNumberOptions(int num, StringXNumber s[]);
+void Set_DefaultColorOptions(int num, StringXColor s[], int scheme);
 
-StringXColor GeneralOptions_Color[] = {
-  { "Background" , &CTX.color.bg ,
-    PACK_COLOR(0,   0,   0,   255), 
-    PACK_COLOR(255, 255, 255, 255), 
-    PACK_COLOR(255, 255, 255, 255) },
-  { "Foreground" , &CTX.color.fg ,
-    PACK_COLOR(255, 255, 255, 255),
-    PACK_COLOR(0,   0,   0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Text"       , &CTX.color.text ,
-    PACK_COLOR(255, 255, 255, 255),
-    PACK_COLOR(0,   0,   0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Axes"       , &CTX.color.axes ,
-    PACK_COLOR(255, 255, 0,   255),
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "SmallAxes"  , &CTX.color.small_axes ,
-    PACK_COLOR(255, 255, 255, 255),
-    PACK_COLOR(0,   0,   0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { NULL         , NULL ,  0, 0, 0 }
-} ;
+void * Get_StringOption(char *str, StringXString s[]);
+void * Get_NumberOption(char *str, StringXNumber s[]);
+void * Get_ColorOption(char *str, StringXColor s[]);
 
-StringXColor GeometryOptions_Color[] = {
-  { "Points"             , &CTX.color.geom.point , 
-    PACK_COLOR(178, 182, 129, 255) ,
-    PACK_COLOR(178, 182, 129, 255) ,
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Lines"              , &CTX.color.geom.line ,
-    PACK_COLOR(0,   0,   255, 255),
-    PACK_COLOR(0,   0,   255, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Surfaces"           , &CTX.color.geom.surface ,
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Volumes"            , &CTX.color.geom.volume ,
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "PointsSelect"       , &CTX.color.geom.point_sel ,
-    PACK_COLOR(255, 0,   0,   255),
-    PACK_COLOR(255, 0,   0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "LinesSelect"        , &CTX.color.geom.line_sel ,
-    PACK_COLOR(255, 0,   0,   255),
-    PACK_COLOR(255, 0,   0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "SurfacesSelect"     , &CTX.color.geom.surface_sel ,
-    PACK_COLOR(255, 0,   0,   255),
-    PACK_COLOR(255, 0,   0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "VolumesSelect"      , &CTX.color.geom.volume_sel ,
-    PACK_COLOR(255, 0,   0,   255),
-    PACK_COLOR(255, 0,   0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "PointsHighlight"    , &CTX.color.geom.point_hlt ,
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "LinesHighlight"     , &CTX.color.geom.line_hlt ,
-    PACK_COLOR(0,   0,   255, 255),
-    PACK_COLOR(0,   0,   255, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "SurfacesHighlight"  , &CTX.color.geom.surface_hlt ,
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "VolumesHighlight"   , &CTX.color.geom.volume_hlt ,
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Tangents"           , &CTX.color.geom.tangents ,
-    PACK_COLOR(255, 255, 0,   255),
-    PACK_COLOR(255, 255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Normals"            , &CTX.color.geom.normals ,
-    PACK_COLOR(255, 0,   0,   255),
-    PACK_COLOR(255, 0,   0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { NULL                 , NULL , 0, 0, 0  }
-} ;
+void Print_StringOptions(int num, StringXString s[], char *prefix, FILE *file);
+void Print_NumberOptions(int num, StringXNumber s[], char *prefix, FILE *file);
+void Print_ColorOptions(int num, StringXColor s[], char *prefix, FILE *file);
 
-StringXColor MeshOptions_Color[] = {
-  { "Points"             , &CTX.color.mesh.vertex , 
-    PACK_COLOR(0  , 123, 59 , 255),
-    PACK_COLOR(0  , 123, 59 , 255),
-  },
-  { "PointsSupp"         , &CTX.color.mesh.vertex_supp , 
-    PACK_COLOR(255, 0,   255, 255),
-    PACK_COLOR(255, 0,   255, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Lines"              , &CTX.color.mesh.line , 
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Triangles"          , &CTX.color.mesh.triangle ,
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Quadrangles"        , &CTX.color.mesh.quadrangle ,
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Tetrahedra"         , &CTX.color.mesh.tetrahedron ,
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Hexahedra"          , &CTX.color.mesh.hexahedron ,
-    PACK_COLOR(128, 255, 0,   255),
-    PACK_COLOR(128, 255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Prisms"             , &CTX.color.mesh.prism ,
-    PACK_COLOR(0,   255, 128, 255),
-    PACK_COLOR(0,   255, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Pyramids"           , &CTX.color.mesh.pyramid ,
-    PACK_COLOR(128, 255, 128, 255),
-    PACK_COLOR(128, 255, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Tangents"           , &CTX.color.mesh.tangents ,
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Normals"            , &CTX.color.mesh.normals ,
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(128, 128, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "One"                , &CTX.color.mesh.carousel[0] ,
-    PACK_COLOR(0  , 82 , 138, 255),
-    PACK_COLOR(0  , 82 , 138, 255),
-    PACK_COLOR(255, 255, 255, 255) },
-  { "Two"                , &CTX.color.mesh.carousel[1] ,
-    PACK_COLOR(255, 0  , 0  , 255),
-    PACK_COLOR(255, 0  , 0  , 255),
-    PACK_COLOR(255, 255, 255, 255) },
-  { "Three"              , &CTX.color.mesh.carousel[2] ,
-    PACK_COLOR(31 , 110, 171, 255),
-    PACK_COLOR(31 , 110, 171, 255),
-    PACK_COLOR(255, 255, 255, 255) },
-  { "Four"               , &CTX.color.mesh.carousel[3] ,
-    PACK_COLOR(255, 255, 0  , 255),
-    PACK_COLOR(255, 255, 0  , 255),
-    PACK_COLOR(255, 255, 255, 255) },
-  { "Five"               , &CTX.color.mesh.carousel[4] ,
-    PACK_COLOR(255, 0  , 255, 255),
-    PACK_COLOR(255, 0  , 255, 255),
-    PACK_COLOR(255, 255, 255, 255) },
-  { "Six"                , &CTX.color.mesh.carousel[5] ,
-    PACK_COLOR(128, 128, 0  , 255),
-    PACK_COLOR(128, 128, 0  , 255),
-    PACK_COLOR(255, 255, 255, 255) },
-  { "Seven"              , &CTX.color.mesh.carousel[6] ,
-    PACK_COLOR(128, 0  , 255, 255),
-    PACK_COLOR(128, 0  , 255, 255),
-    PACK_COLOR(255, 255, 255, 255) },
-  { "Eight"              , &CTX.color.mesh.carousel[7] ,
-    PACK_COLOR(128, 128, 255, 255),
-    PACK_COLOR(128, 128, 255, 255),
-    PACK_COLOR(255, 255, 255, 255) },
-  { "Nine"               , &CTX.color.mesh.carousel[8] ,
-    PACK_COLOR(128, 128, 255, 255),
-    PACK_COLOR(128, 128, 255, 255),
-    PACK_COLOR(255, 255, 255, 255) },
-  { "Ten"                , &CTX.color.mesh.carousel[9] ,
-    PACK_COLOR(0  , 0  , 255, 255),
-    PACK_COLOR(0  , 0  , 255, 255),
-    PACK_COLOR(255, 255, 255, 255) },
-  { NULL                 , NULL , 0, 0, 0  }
-} ;
+extern StringXString GeneralOptions_String[] ;
+extern StringXString GeometryOptions_String[] ;
+extern StringXString MeshOptions_String[] ;
+extern StringXString PostProcessingOptions_String[] ;
+extern StringXString ViewOptions_String[] ;
+extern StringXString PrintOptions_String[] ;
 
-StringXColor PostProcessingOptions_Color[] = {
-  { NULL         , NULL ,  0, 0, 0 }
-} ;
+extern StringXNumber GeneralOptions_Number[] ;
+extern StringXNumber GeometryOptions_Number[] ;
+extern StringXNumber MeshOptions_Number[] ;
+extern StringXNumber PostProcessingOptions_Number[] ;
+extern StringXNumber ViewOptions_Number[] ;
+extern StringXNumber PrintOptions_Number[] ;
 
-StringXColor PrintOptions_Color[] = {
-  { NULL         , NULL ,  0, 0, 0 }
-} ;
+extern StringXColor GeneralOptions_Color[] ;
+extern StringXColor GeometryOptions_Color[] ;
+extern StringXColor MeshOptions_Color[] ;
+extern StringXColor PostProcessingOptions_Color[] ;
+extern StringXColor ViewOptions_Color[] ;
+extern StringXColor PrintOptions_Color[] ;
 
 #endif
diff --git a/Common/Views.cpp b/Common/Views.cpp
index 637e070930b6fac2cb9c06c2d6bd44ad81b88605..40a28eb922df62ab45f3bd235ff4809a75b71cd9 100644
--- a/Common/Views.cpp
+++ b/Common/Views.cpp
@@ -1,9 +1,10 @@
-// $Id: Views.cpp,v 1.28 2001-02-09 14:51:31 geuzaine Exp $
+// $Id: Views.cpp,v 1.29 2001-02-12 17:38:02 geuzaine Exp $
 
 #include <set>
 #include "Gmsh.h"
 #include "Views.h"
 #include "Context.h"
+#include "Options.h"
 #include "ColorTable.h"
 
 List_T  *Post_ViewList = NULL;
@@ -26,8 +27,23 @@ int fcmpPostViewDuplicateOf(const void *v1, const void *v2){
   return (((Post_View *)v1)->DuplicateOf - ((Post_View *)v2)->DuplicateOf);
 }
 
-void BeginView(int allocate){
-  ActualView = (Post_View*)Malloc(sizeof(Post_View));
+void BeginView(int allocate, int force_number){
+  Post_View v;
+
+  if(!Post_ViewList) Post_ViewList = List_Create(100,1,sizeof(Post_View));
+
+  if(!force_number){
+    v.Num = ++ActualViewNum;    
+    List_Add(Post_ViewList, &v);
+  }
+  else{
+    v.Num = force_number;    
+    List_Replace(Post_ViewList,&v,fcmpPostViewNum);
+  }
+
+  CTX.post.nb_views = List_Nbr(Post_ViewList);
+
+  ActualView = (Post_View*)List_PQuery(Post_ViewList, &v, fcmpPostViewNum);
 
   NbPoints = NbLines = NbTriangles = NbTetrahedra = 0;
 
@@ -68,30 +84,14 @@ void BeginView(int allocate){
   ActualView->Changed = 1;
   ActualView->Links = 0;
   ActualView->DuplicateOf = 0;
-  ActualView->Min = 1.e200;
-  ActualView->Max = -1.e200;
-  ActualView->NbIso = CTX.post.initial_nbiso;
-  ActualView->IntervalsType = CTX.post.initial_intervals;
-  ActualView->Light = 0;
-  ActualView->ShowElement = 0;
-  ActualView->ShowTime = 1;
-  ActualView->Visible = CTX.post.initial_visibility;
-  ActualView->TimeStep = 0;
-  ActualView->ArrowScale = 100.; 
-  ActualView->ArrowType = DRAW_POST_ARROW; 
-  ActualView->ArrowLocation = DRAW_POST_LOCATE_COG; 
-  ActualView->RangeType = DRAW_POST_DEFAULT; 
-  ActualView->ShowScale = 1;
-  ActualView->TransparentScale = 1;
-  ActualView->ScaleType = DRAW_POST_LINEAR; 
-  ActualView->Raise[0] = 0.0;
-  ActualView->Raise[1] = 0.0;
-  ActualView->Raise[2] = 0.0;
   ActualView->ScalarOnly = 1;
-  ActualView->NbTimeStep = 0;
+  ActualView->normals = NULL;
+
+  Set_DefaultStringOptions(ActualView->Num-1, ViewOptions_String);
+  Set_DefaultNumberOptions(ActualView->Num-1, ViewOptions_Number);
+  Set_DefaultColorOptions(ActualView->Num-1, ViewOptions_Color, 0);
   ActualView->CT.size = 255;
   ActualView->CT.ipar[COLORTABLE_MODE] = COLORTABLE_RGB;
-  ActualView->normals = 0;
   ColorTable_InitParam(1, &ActualView->CT, 1, 1);
   ColorTable_Recompute(&ActualView->CT, 1, 1);
 }
@@ -153,8 +153,8 @@ void Stat_TensorSimplex(int nbnod, int N, double *v){
   Msg(GERROR, "Tensor Field Views not Implemented Yet");
 }
 
-void EndView(int AddInUI, int Number, char *FileName, char *Name, 
-             double XOffset, double YOffset, double ZOffset){
+
+void EndView(int add_in_gui, int force_number, char *file_name, char *name){
   int i, nb;
   double d;
   extern int AddViewInUI(int , char *, int);
@@ -239,38 +239,24 @@ void EndView(int AddInUI, int Number, char *FileName, char *Name,
     }
   }
 
-  strcpy(ActualView->FileName,FileName);
-  strcpy(ActualView->Name,Name);
-  strcpy(ActualView->Format, "%.3e");
-  if(ActualView->Min > ActualView->Max)
-    ActualView->Min = ActualView->Max = 0.0 ;
-  ActualView->CustomMin = ActualView->Min;
-  ActualView->CustomMax = ActualView->Max;
-  ActualView->Offset[0] = XOffset*(CTX.range[0]?CTX.range[0]:CTX.lc)*1.e-3;
-  ActualView->Offset[1] = YOffset*(CTX.range[1]?CTX.range[1]:CTX.lc)*1.e-3;
-  ActualView->Offset[2] = ZOffset*(CTX.range[2]?CTX.range[2]:CTX.lc)*1.e-3;
-
-  /* j'en alloue directement le max pour eviter les problemes de
-     reallocation (avec CurrentView) */
-  if(!Post_ViewList) 
-    Post_ViewList = List_Create(100,1,sizeof(Post_View));
-
-  if(!Number){
-    ActualView->Num = ++ActualViewNum;    
-    List_Add(Post_ViewList,ActualView);
-    CTX.post.nb_views = List_Nbr(Post_ViewList);
-    if(AddInUI)
-      AddViewInUI(List_Nbr(Post_ViewList), ActualView->Name, ActualView->Num);
+  opt_view_name(ActualView->Num-1, GMSH_SET|GMSH_GUI, name);
+  opt_view_filename(ActualView->Num-1, GMSH_SET|GMSH_GUI, file_name);
+  opt_view_nb_timestep(ActualView->Num-1, GMSH_GUI, 0);
+  if(ActualView->Min > ActualView->Max){
+    opt_view_min(ActualView->Num-1, GMSH_SET|GMSH_GUI, 0.);
+    opt_view_max(ActualView->Num-1, GMSH_SET|GMSH_GUI, 0.);
   }
   else{
-    ActualView->Num = Number;    
-    List_Replace(Post_ViewList,ActualView,fcmpPostViewNum);
+    opt_view_min(ActualView->Num-1, GMSH_GUI, 0);
+    opt_view_max(ActualView->Num-1, GMSH_GUI, 0);
   }
+  opt_view_custom_min(ActualView->Num-1, GMSH_SET|GMSH_GUI, ActualView->Min);
+  opt_view_custom_max(ActualView->Num-1, GMSH_SET|GMSH_GUI, ActualView->Max);
 
-  // it's a test, smoothing views in the volume !!!
-  // in the future, we'll have normals smoothed
   if(CTX.post.smooth) ActualView->smooth();
-  ActualView = NULL;
+
+  if(!force_number && add_in_gui)
+    AddViewInUI(List_Nbr(Post_ViewList), ActualView->Name, ActualView->Num);
 }
 
 bool FreeView(int num){
@@ -357,119 +343,25 @@ void CopyViewOptions(Post_View *src, Post_View *dest){
   ColorTable_Paste(&dest->CT);
 }
 
-char *Get_StringViewOption(int num, char *str, int *type){
-  Post_View *v;
-
-  if(num < 0 || num >= List_Nbr(Post_ViewList)){
-    *type = -1 ;
-    return NULL ;
-  }
-  v = (Post_View*)List_Pointer(Post_ViewList, num);
-
-  if(!strcmp(str, "Format")) return v->Format ;
-  else if(!strcmp(str, "FileName")) return v->FileName ;
-  else if(!strcmp(str, "Name")) return v->Name ;
-  else return NULL ;
-
-}
-
-void Print_StringViewOptions(int num, FILE *file){
-  Post_View *v;
-
-  if(num < 0 || num >= List_Nbr(Post_ViewList))
-    return ;
-  v = (Post_View*)List_Pointer(Post_ViewList, num);
-
-  fprintf(file, "PostProcessing.View[%d].Format = \"%s\";\n", num, v->Format);
-  fprintf(file, "PostProcessing.View[%d].FileName = \"%s\";\n", num, v->FileName);
-  fprintf(file, "PostProcessing.View[%d].Name = \"%s\";\n", num, v->Name);
-}
-
-void *Get_NumberViewOption(int num, char *str, int *type){
+ColorTable *Get_ColorTable(int num){
   Post_View *v;
-
-  if(num < 0 || num >= List_Nbr(Post_ViewList)){
-    *type = -1 ;
-    return NULL ;
-  }
-  v = (Post_View*)List_Pointer(Post_ViewList, num);
-
-  if(!strcmp(str, "NbTimeStep")) { *type = GMSH_INT; return (void*)&v->NbTimeStep; }
-  else if(!strcmp(str, "TimeStep")) { *type = GMSH_INT; return (void*)&v->TimeStep; }
-  else if(!strcmp(str, "Min")) { *type = GMSH_DOUBLE; return (void*)&v->Min ; }
-  else if(!strcmp(str, "Max")) { *type = GMSH_DOUBLE ; return (void*)&v->Max ; }
-  else if(!strcmp(str, "CustomMin")) { *type = GMSH_DOUBLE ; return (void*)&v->CustomMin ; }
-  else if(!strcmp(str, "CustomMax")) { *type = GMSH_DOUBLE ; return (void*)&v->CustomMax ; }
-  else if(!strcmp(str, "Offset0")) { *type = GMSH_DOUBLE ; return (void*)&v->Offset[0] ; }
-  else if(!strcmp(str, "Offset1")) { *type = GMSH_DOUBLE ; return (void*)&v->Offset[1] ; }
-  else if(!strcmp(str, "Offset2")) { *type = GMSH_DOUBLE ; return (void*)&v->Offset[2] ; }
-  else if(!strcmp(str, "Raise0")) { *type = GMSH_DOUBLE ; return (void*)&v->Raise[0] ; }
-  else if(!strcmp(str, "Raise1")) { *type = GMSH_DOUBLE ; return (void*)&v->Raise[1] ; }
-  else if(!strcmp(str, "Raise2")) { *type = GMSH_DOUBLE ; return (void*)&v->Raise[2] ; }
-  else if(!strcmp(str, "ArrowScale")) { *type = GMSH_DOUBLE ; return (void*)&v->ArrowScale ; }
-  else if(!strcmp(str, "Visible")) { *type = GMSH_INT ; return (void*)&v->Visible ; }
-  else if(!strcmp(str, "IntervalsType")) { *type = GMSH_INT ; return (void*)&v->IntervalsType ; }
-  else if(!strcmp(str, "NbIso")) { *type = GMSH_INT ; return (void*)&v->NbIso ; }
-  else if(!strcmp(str, "Light")) { *type = GMSH_INT ; return (void*)&v->Light ; }
-  else if(!strcmp(str, "ShowElement")) { *type = GMSH_INT ; return (void*)&v->ShowElement ; }
-  else if(!strcmp(str, "ShowTime")) { *type = GMSH_INT ; return (void*)&v->ShowTime ; }
-  else if(!strcmp(str, "ShowScale")) { *type = GMSH_INT ; return (void*)&v->ShowScale ; }
-  else if(!strcmp(str, "TransparentScale")) { *type = GMSH_INT ; return (void*)&v->TransparentScale ; }
-  else if(!strcmp(str, "ScaleType")) { *type = GMSH_INT ; return (void*)&v->ScaleType ; }
-  else if(!strcmp(str, "RangeType")) { *type = GMSH_INT ; return (void*)&v->RangeType ; }
-  else if(!strcmp(str, "ArrowType")) { *type = GMSH_INT ; return (void*)&v->ArrowType ; }
-  else if(!strcmp(str, "ArrowLocation")) { *type = GMSH_INT ; return (void*)&v->ArrowLocation ; }
-  else{
+  if((v = (Post_View*)List_Pointer_Test(Post_ViewList, num)))
+    return &v->CT ;
+  else
     return NULL ;
-  }
 }
 
-void Print_NumberViewOptions(int num, FILE *file){
-  Post_View *v;
-
-  if(num < 0 || num >= List_Nbr(Post_ViewList))
-    return ;
-  v = (Post_View*)List_Pointer(Post_ViewList, num);
-
-  fprintf(file, "PostProcessing.View[%d].NbTimeStep = %d;\n", num, v->NbTimeStep);
-  fprintf(file, "PostProcessing.View[%d].TimeStep = %d;\n", num, v->TimeStep);
-  fprintf(file, "PostProcessing.View[%d].Min = %g;\n", num, v->Min);
-  fprintf(file, "PostProcessing.View[%d].Max = %g;\n", num, v->Max);
-  fprintf(file, "PostProcessing.View[%d].CustomMin = %g;\n", num, v->CustomMin);
-  fprintf(file, "PostProcessing.View[%d].CustomMax = %g;\n", num, v->CustomMax);
-  fprintf(file, "PostProcessing.View[%d].ArrowScale = %g;\n", num, v->ArrowScale);
-  fprintf(file, "PostProcessing.View[%d].Visible = %d;\n", num, v->Visible);
-  fprintf(file, "PostProcessing.View[%d].IntervalsType = %d;\n", num, v->IntervalsType);
-  fprintf(file, "PostProcessing.View[%d].NbIso = %d;\n", num, v->NbIso);
-  fprintf(file, "PostProcessing.View[%d].Light = %d;\n", num, v->Light);
-  fprintf(file, "PostProcessing.View[%d].ShowElement = %d;\n", num, v->ShowElement);
-  fprintf(file, "PostProcessing.View[%d].ShowTime = %d;\n", num, v->ShowTime);
-  fprintf(file, "PostProcessing.View[%d].ShowScale = %d;\n", num, v->ShowScale);
-  fprintf(file, "PostProcessing.View[%d].TransparentScale = %d;\n", num, v->TransparentScale);
-  fprintf(file, "PostProcessing.View[%d].ScaleType = %d;\n", num, v->ScaleType);
-  fprintf(file, "PostProcessing.View[%d].RangeType = %d;\n", num, v->RangeType);
-  fprintf(file, "PostProcessing.View[%d].ArrowType = %d;\n", num, v->ArrowType);
-  fprintf(file, "PostProcessing.View[%d].ArrowLocation = %d;\n", num, v->ArrowLocation);
-  fprintf(file, "PostProcessing.View[%d].Offset0 = %g;\n", num, v->Offset[0]);
-  fprintf(file, "PostProcessing.View[%d].Offset1 = %g;\n", num, v->Offset[1]);
-  fprintf(file, "PostProcessing.View[%d].Offset2 = %g;\n", num, v->Offset[2]);
-  fprintf(file, "PostProcessing.View[%d].Raise0 = %g;\n", num, v->Raise[0]);
-  fprintf(file, "PostProcessing.View[%d].Raise1 = %g;\n", num, v->Raise[1]);
-  fprintf(file, "PostProcessing.View[%d].Raise2 = %g;\n", num, v->Raise[2]);
-  fprintf(file, "PostProcessing.View[%d].Color = { ", num);
+void Print_ColorTable(int num, char *prefix, FILE *file){
+  char tmp[1024];
+  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
+  if(!v) return;
+  sprintf(tmp, "%s = {", prefix);
+  if(file) fprintf(file, "%s\n", tmp); else Msg(DIRECT, tmp);
   ColorTable_Print(&v->CT, file);
-  fprintf(file, " };\n");
-
+  sprintf(tmp, "};");
+  if(file) fprintf(file, "%s\n", tmp); else Msg(DIRECT, tmp);
 }
 
-ColorTable *Get_ColorTableViewOption(int num){
-  Post_View *v;
-
-  if(num < 0 || num >= List_Nbr(Post_ViewList))
-    return NULL ;
-  v = (Post_View*)List_Pointer(Post_ViewList, num);
-  return &v->CT ;
-}
 
 /* ------------------------------------------------------------------------ */
 /*  R e a d _ V i e w                                                       */
@@ -522,7 +414,7 @@ void Read_View(FILE *file, char *filename){
 
     if (!strncmp(&str[1], "View", 4)) {
 
-      BeginView(0);
+      BeginView(0, Force_ViewNumber);
 
       fscanf(file, "%s %d %d %d %d %d %d %d %d %d %d %d %d %d\n", 
              name, &ActualView->NbTimeStep,
@@ -598,7 +490,7 @@ void Read_View(FILE *file, char *filename){
           List_Nbr(ActualView->ST), List_Nbr(ActualView->VT), List_Nbr(ActualView->TT), 
           List_Nbr(ActualView->SS), List_Nbr(ActualView->VS), List_Nbr(ActualView->TS));
 
-      EndView(1, Force_ViewNumber, filename, name, 0., 0., 0.); 
+      EndView(1, Force_ViewNumber, filename, name); 
     }
 
     do {
diff --git a/Common/Views.h b/Common/Views.h
index ecdb9bee7b05540fd03d633c9837875acec8add9..c3b1115915a16e82417ff3bc1b6acfd17c37e00b 100644
--- a/Common/Views.h
+++ b/Common/Views.h
@@ -86,9 +86,8 @@ extern List_T *Post_ViewList;
 int fcmpPostViewNum(const void *v1, const void *v2);
 int fcmpPostViewDuplicateOf(const void *v1, const void *v2);
 
-void BeginView (int alloc);
-void EndView (int AddInUI, int Number, char *FileName, char *Name, 
-              double XOffset, double YOffset, double ZOffset);
+void BeginView (int alloc, int Number);
+void EndView (int AddInUI, int Number, char *FileName, char *Name);
 void FreeView(Post_View *v);
 bool FreeView(int);
 void Read_View(FILE *file, char *filename);
@@ -99,13 +98,7 @@ int CreateBGM(Post_View *ErrView, int OptiMethod, double Degree,
               double OptiValue, double *ObjFunct, char *OutFile);
 double ErrorInView(Post_View * ErrView, int *n);
 
-char *Get_StringViewOption(int num, char *str, int *type);
-void *Get_NumberViewOption(int num, char *str, int *type);
-void *Get_ArrayViewOption(int num, char *str, int *type);
-ColorTable *Get_ColorTableViewOption(int num);
-
-void Print_StringViewOptions(int num, FILE *file);
-void Print_NumberViewOptions(int num, FILE *file);
-void Print_ArrayViewOptions(int num, FILE *file);
+ColorTable *Get_ColorTable(int num);
+void Print_ColorTable(int num, char *prefix, FILE *file);
 
 #endif
diff --git a/DataStr/List.cpp b/DataStr/List.cpp
index 46138095c8847c5ed99909d8078bef41ae5b634c..58897c6e51f87d48f953f0405262866ce37b7745 100644
--- a/DataStr/List.cpp
+++ b/DataStr/List.cpp
@@ -1,4 +1,4 @@
-// $Id: List.cpp,v 1.13 2001-01-09 19:40:56 remacle Exp $
+// $Id: List.cpp,v 1.14 2001-02-12 17:38:02 geuzaine Exp $
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -156,7 +156,7 @@ void *List_Pointer_Fast(List_T *liste, int index)
 
 void *List_Pointer_Test(List_T *liste, int index)
 {
-  if ((index < 0) || (index >= liste->n))
+  if (!liste || (index < 0) || (index >= liste->n))
     return NULL;
     
   liste->isorder = 0;
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 7daea26fe6e83ffbbbd379a45d6a78c55c126315..95cf3abe974839470c427b6a58582d2b1167cb04 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.28 2001-02-08 16:32:15 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.29 2001-02-12 17:38:02 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -12,6 +12,7 @@
 #include "CreateFile.h"
 #include "OpenFile.h"
 #include "Context.h"
+#include "Options.h"
 #include "GUI.h"
 #include "Callbacks.h"
 
@@ -22,8 +23,6 @@ extern GUI       *WID;
 extern Mesh       M;
 extern Context_T  CTX;
 
-///////////////////////////////////////////////////////////////////////////////
-
 // Compatibility/local routines
 
 int AddViewInUI(int i, char *Name, int Num){
@@ -152,10 +151,6 @@ void cancel_cb(CALLBACK_ARGS){
   if(data) ((Fl_Window*)data)->hide();
 }
 
-void ok_cb(CALLBACK_ARGS){
-  Draw();
-}
-
 // Graphical window 
 
 void status_xyz1p_cb(CALLBACK_ARGS){
@@ -189,7 +184,7 @@ void status_xyz1p_cb(CALLBACK_ARGS){
     Draw(); 
     break;
   case 4 :
-    Print_Context(NULL);
+    Print_Context(0,NULL);
     break ;
   }
 }
@@ -260,7 +255,7 @@ void file_save_as_geo_cb(CALLBACK_ARGS) {
 void file_save_as_geo_options_cb(CALLBACK_ARGS) {
   char *newfile;
   if((newfile = fl_file_chooser("Save Options File", "*", NULL)))
-    Print_Context(newfile); 
+    Print_Context(0,newfile); 
 }
 
 void file_save_as_msh_cb(CALLBACK_ARGS) {
@@ -364,60 +359,28 @@ void file_quit_cb(CALLBACK_ARGS) {
 void opt_general_cb(CALLBACK_ARGS) {
   WID->create_general_options_window();
 }
-void opt_general_moving_axes_cb(CALLBACK_ARGS){
-  CTX.axes = !CTX.axes ;
-}
-void opt_general_small_axes_cb(CALLBACK_ARGS){
-  CTX.small_axes = !CTX.small_axes ;
-}
-void opt_general_fast_redraw_cb(CALLBACK_ARGS){
-  CTX.fast = !CTX.fast ;
-}
-void opt_general_display_lists_cb(CALLBACK_ARGS){
-  CTX.display_lists = !CTX.display_lists ;
-}
-void opt_general_alpha_blending_cb(CALLBACK_ARGS){
-  CTX.alpha = !CTX.alpha ;
-}
-void opt_general_trackball_cb(CALLBACK_ARGS){
-  CTX.useTrackball = !CTX.useTrackball ;
-}
-void opt_general_orthographic_cb(CALLBACK_ARGS){
-  if((int)data) CTX.ortho = 1;
-  else CTX.ortho = 0;
-}
-void opt_general_color_cb(CALLBACK_ARGS){
-  Init_Colors((int)((Fl_Value_Input*)w)->value());
+void opt_general_ok_cb(CALLBACK_ARGS){
+  opt_general_axes(0, GMSH_SET, WID->gen_butt[0]->value());
+  opt_general_small_axes(0, GMSH_SET, WID->gen_butt[1]->value());
+  opt_general_fast_redraw(0, GMSH_SET, WID->gen_butt[2]->value());
+  opt_general_display_lists(0, GMSH_SET, WID->gen_butt[3]->value());
+  opt_general_alpha_blending(0, GMSH_SET, WID->gen_butt[4]->value());
+  opt_general_trackball(0, GMSH_SET, WID->gen_butt[5]->value());
+  opt_general_orthographic(0, GMSH_SET, WID->gen_butt[6]->value());
+
+  opt_general_color_scheme(0,GMSH_SET, WID->gen_value[0]->value());
+  opt_general_shine(0, GMSH_SET, WID->gen_value[1]->value());
+  opt_general_light00(0, GMSH_SET, WID->gen_value[2]->value());
+  opt_general_light01(0, GMSH_SET, WID->gen_value[3]->value());
+  opt_general_light02(0, GMSH_SET, WID->gen_value[4]->value());
   Draw();
 }
-void opt_general_shininess_cb(CALLBACK_ARGS){
-  CTX.shine = ((Fl_Value_Input*)w)->value();
-}
-void opt_general_light_cb(CALLBACK_ARGS){
-  CTX.light_position[0][(int)data] = ((Fl_Value_Input*)w)->value();
-}
 
 // Option Geometry Menu
 
 void opt_geometry_cb(CALLBACK_ARGS) {
   WID->create_geometry_options_window();
 }
-void opt_geometry_entity_cb(CALLBACK_ARGS) {
-  switch((int)data){
-  case 0: CTX.geom.points = !CTX.geom.points; break;
-  case 1: CTX.geom.lines = !CTX.geom.lines; break;
-  case 2: CTX.geom.surfaces = !CTX.geom.surfaces; break;
-  case 3: CTX.geom.volumes = !CTX.geom.volumes; break;
-  }
-}
-void opt_geometry_num_cb(CALLBACK_ARGS) {
-  switch((int)data){
-  case 0: CTX.geom.points_num = !CTX.geom.points_num; break;
-  case 1: CTX.geom.lines_num = !CTX.geom.lines_num; break;
-  case 2: CTX.geom.surfaces_num = !CTX.geom.surfaces_num; break;
-  case 3: CTX.geom.volumes_num = !CTX.geom.volumes_num; break;
-  }
-}
 void opt_geometry_show_by_entity_num_cb(CALLBACK_ARGS) {
   char * c = (char*)((Fl_Input*)w)->value(); 
   if (!strcmp(c,"all") || !strcmp(c,"*")){
@@ -431,12 +394,19 @@ void opt_geometry_show_by_entity_num_cb(CALLBACK_ARGS) {
   }
   Draw();
 }
-
-void opt_geometry_normals_cb(CALLBACK_ARGS) {
-  CTX.geom.normals = ((Fl_Value_Input*)w)->value();
-}
-void opt_geometry_tangents_cb(CALLBACK_ARGS) {
-  CTX.geom.tangents = ((Fl_Value_Input*)w)->value();
+void opt_geometry_ok_cb(CALLBACK_ARGS) {
+  opt_geometry_points(0, GMSH_SET, WID->geo_butt[0]->value());
+  opt_geometry_lines(0, GMSH_SET, WID->geo_butt[1]->value());
+  opt_geometry_surfaces(0, GMSH_SET, WID->geo_butt[2]->value());
+  opt_geometry_volumes(0, GMSH_SET, WID->geo_butt[3]->value());
+  opt_geometry_points_num(0, GMSH_SET, WID->geo_butt[4]->value());
+  opt_geometry_lines_num(0, GMSH_SET, WID->geo_butt[5]->value());
+  opt_geometry_surfaces_num(0, GMSH_SET, WID->geo_butt[6]->value());
+  opt_geometry_volumes_num(0, GMSH_SET, WID->geo_butt[7]->value());
+
+  opt_geometry_normals(0, GMSH_SET, WID->geo_value[0]->value());
+  opt_geometry_tangents(0, GMSH_SET, WID->geo_value[1]->value());
+  Draw();
 }
 
 // Option Mesh Menu
@@ -444,63 +414,33 @@ void opt_geometry_tangents_cb(CALLBACK_ARGS) {
 void opt_mesh_cb(CALLBACK_ARGS) {
   WID->create_mesh_options_window();
 }
-void opt_mesh_entity_cb(CALLBACK_ARGS) {
-  switch((int)data){
-  case 0: CTX.mesh.points = !CTX.mesh.points; break;
-  case 1: CTX.mesh.lines = !CTX.mesh.lines; break;
-  case 2: CTX.mesh.surfaces = !CTX.mesh.surfaces; break;
-  case 3: CTX.mesh.volumes = !CTX.mesh.volumes; break;
-  }
-}
-void opt_mesh_num_cb(CALLBACK_ARGS) {
-  switch((int)data){
-  case 0: CTX.mesh.points_num = !CTX.mesh.points_num; break;
-  case 1: CTX.mesh.lines_num = !CTX.mesh.lines_num; break;
-  case 2: CTX.mesh.surfaces_num = !CTX.mesh.surfaces_num; break;
-  case 3: CTX.mesh.volumes_num = !CTX.mesh.volumes_num; break;
-  }
-}
 void opt_mesh_show_by_entity_num_cb(CALLBACK_ARGS) {
   opt_geometry_show_by_entity_num_cb(w,data);
 }
-void opt_mesh_show_by_quality_cb(CALLBACK_ARGS) {
-  CTX.mesh.limit_gamma = ((Fl_Value_Input*)w)->value();
-}
-void opt_mesh_normals_cb(CALLBACK_ARGS) {
-  CTX.mesh.normals = ((Fl_Value_Input*)w)->value();
-}
-void opt_mesh_degree_cb(CALLBACK_ARGS){
-  if(CTX.mesh.degree==2) CTX.mesh.degree = 1;
-  else CTX.mesh.degree = 2;
-}
-void opt_mesh_algo_cb(CALLBACK_ARGS){
-  if(CTX.mesh.algo==DELAUNAY_OLDALGO) CTX.mesh.algo = DELAUNAY_NEWALGO;
-  else CTX.mesh.algo = DELAUNAY_OLDALGO;
-}
-void opt_mesh_smoothing_cb(CALLBACK_ARGS){
-  CTX.mesh.nb_smoothing = (int)((Fl_Value_Input*)w)->value();
-}
-void opt_mesh_scaling_factor_cb(CALLBACK_ARGS){
-  CTX.mesh.scaling_factor = ((Fl_Value_Input*)w)->value();
-}
-void opt_mesh_lc_factor_cb(CALLBACK_ARGS){
-  CTX.mesh.lc_factor = ((Fl_Value_Input*)w)->value();
-}
-void opt_mesh_rand_factor_cb(CALLBACK_ARGS){
-  CTX.mesh.rand_factor = ((Fl_Value_Input*)w)->value();
-}
-void opt_mesh_interactive_cb(CALLBACK_ARGS){
-  CTX.mesh.interactive = !CTX.mesh.interactive;
-}
-void opt_mesh_explode_cb(CALLBACK_ARGS){
-  CTX.mesh.explode = ((Fl_Value_Input*)w)->value();
-}
-void opt_mesh_aspect_cb(CALLBACK_ARGS){
-  switch((int)data){
-  case 0 : CTX.mesh.hidden = 0; CTX.mesh.shade = 0; break; 
-  case 1 : CTX.mesh.hidden = 1; CTX.mesh.shade = 0; break; 
-  case 2 : CTX.mesh.hidden = 1; CTX.mesh.shade = 1; break; 
-  }
+void opt_mesh_ok_cb(CALLBACK_ARGS) {
+  opt_mesh_degree(0, GMSH_SET, WID->mesh_butt[0]->value()?2:1);
+  opt_mesh_interactive(0, GMSH_SET, WID->mesh_butt[1]->value());
+  opt_mesh_algo(0, GMSH_SET, WID->mesh_butt[2]->value()?DELAUNAY_NEWALGO:DELAUNAY_OLDALGO);
+  opt_mesh_points(0, GMSH_SET, WID->mesh_butt[3]->value());
+  opt_mesh_lines(0, GMSH_SET, WID->mesh_butt[4]->value());
+  opt_mesh_surfaces(0, GMSH_SET, WID->mesh_butt[5]->value());
+  opt_mesh_volumes(0, GMSH_SET, WID->mesh_butt[6]->value());
+  opt_mesh_points_num(0, GMSH_SET, WID->mesh_butt[7]->value());
+  opt_mesh_lines_num(0, GMSH_SET, WID->mesh_butt[8]->value());
+  opt_mesh_surfaces_num(0, GMSH_SET, WID->mesh_butt[9]->value());
+  opt_mesh_volumes_num(0, GMSH_SET, WID->mesh_butt[10]->value());
+  opt_mesh_hidden(0, GMSH_SET, !WID->mesh_butt[11]->value());
+  opt_mesh_shade(0, GMSH_SET, WID->mesh_butt[13]->value());
+
+  opt_mesh_nb_smoothing(0, GMSH_SET, WID->mesh_value[0]->value());
+  opt_mesh_scaling_factor(0, GMSH_SET, WID->mesh_value[1]->value());
+  opt_mesh_lc_factor(0, GMSH_SET, WID->mesh_value[2]->value());
+  opt_mesh_rand_factor(0, GMSH_SET, WID->mesh_value[3]->value());
+  opt_mesh_limit_gamma(0, GMSH_SET, WID->mesh_value[4]->value());
+  opt_mesh_normals(0, GMSH_SET, WID->mesh_value[5]->value());
+  opt_mesh_explode(0, GMSH_SET, WID->mesh_value[6]->value());
+
+  Draw();
 }
 
 // Option Post Menu
@@ -508,14 +448,12 @@ void opt_mesh_aspect_cb(CALLBACK_ARGS){
 void opt_post_cb(CALLBACK_ARGS) {
   WID->create_post_options_window();
 }
-void opt_post_link_cb(CALLBACK_ARGS) {
-  CTX.post.link = (int)data;
-}
-void opt_post_smooth_cb(CALLBACK_ARGS) {
-  CTX.post.smooth = !CTX.post.smooth;
-}
-void opt_post_anim_delay_cb(CALLBACK_ARGS) {
-  CTX.post.anim_delay = ((Fl_Value_Input*)w)->value();
+void opt_post_ok_cb(CALLBACK_ARGS) {
+  opt_post_link(0, GMSH_SET, WID->post_butt[0]->value()?0:(WID->post_butt[1]->value()?1:2));
+  opt_post_smooth(0, GMSH_SET, WID->post_butt[3]->value());
+
+  opt_post_anim_delay(0, GMSH_SET, WID->post_value[0]->value());
+  Draw();
 }
 
 // Option Statistics Menu
@@ -1318,8 +1256,8 @@ void view_duplicate_cb(CALLBACK_ARGS){
 
   v1 = (Post_View*)List_Pointer(Post_ViewList,(int)data);
 
-  BeginView(0);
-  EndView(0, 0, v1->FileName, v1->Name, 0., 0., 0.);
+  BeginView(0, 0);
+  EndView(0, 0, v1->FileName, v1->Name);
 
   v2 = (Post_View*)List_Pointer(Post_ViewList,List_Nbr(Post_ViewList)-1);
 
@@ -1362,26 +1300,6 @@ void view_duplicate_cb(CALLBACK_ARGS){
   Draw();
 }
 
-void view_lighting_cb(CALLBACK_ARGS){
-  Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
-  v->Light = !v->Light;
-  v->Changed = 1;
-  Draw() ;
-}
-void view_elements_cb(CALLBACK_ARGS){
-  Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
-  v->ShowElement = !v->ShowElement;
-  v->Changed = 1;
-  Draw() ;
-}
-void view_applybgmesh_cb(CALLBACK_ARGS){
-  Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
-  BGMWithView(v); 
-}
-void view_options_cb(CALLBACK_ARGS){
-  WID->create_view_window((int)data);
-}
-
 #define STARTVIEWMOD					\
   Post_View *v;						\
   int i;						\
@@ -1395,152 +1313,38 @@ void view_options_cb(CALLBACK_ARGS){
     }						\
   }
 
-void view_options_show_scale_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->ShowScale = ((Fl_Check_Button*)w)->value() ;
-  ENDVIEWMOD
-}
-void view_options_show_time_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->ShowTime = ((Fl_Check_Button*)w)->value() ;
-  ENDVIEWMOD
-}
-void view_options_transparent_scale_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->TransparentScale = ((Fl_Check_Button*)w)->value() ;
-  ENDVIEWMOD
-}
-void view_options_name_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    strcpy(v->Name, ((Fl_Input*)w)->value()) ;
-  ENDVIEWMOD
-}
-void view_options_format_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    strcpy(v->Format, ((Fl_Input*)w)->value()) ;
-  ENDVIEWMOD
-}
-void view_options_custom_range_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      WID->activate_custom(1);
-      v->RangeType = DRAW_POST_CUSTOM;
-    }
-    else{
-      WID->activate_custom(0);
-      v->RangeType = DRAW_POST_DEFAULT;
-    }
-    v->Changed = 1;
-  ENDVIEWMOD
-}
-void view_options_custom_min_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->CustomMin = ((Fl_Value_Input*)w)->value() ;
-    v->Changed = 1;
-  ENDVIEWMOD
-}
-void view_options_custom_max_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->CustomMax = ((Fl_Value_Input*)w)->value() ;
-    v->Changed = 1;
-  ENDVIEWMOD
-}
-void view_options_linear_range_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->ScaleType = DRAW_POST_LINEAR;
-    }
-    else{
-      v->ScaleType = DRAW_POST_LOGARITHMIC;
-    }
-    v->Changed = 1;
-  ENDVIEWMOD
-}
-void view_options_logarithmic_range_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->ScaleType = DRAW_POST_LOGARITHMIC;
-    }
-    else{
-      v->ScaleType = DRAW_POST_LINEAR;
-    }
-    v->Changed = 1;
-  ENDVIEWMOD
-}
-void view_options_nbiso_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->NbIso = (int)((Fl_Value_Input*)w)->value() ;
-    v->Changed = 1;
-  ENDVIEWMOD
-}
-void view_options_iso_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->IntervalsType = DRAW_POST_ISO;
-      v->Changed = 1;
-    }
-  ENDVIEWMOD
-}
-void view_options_fillediso_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->IntervalsType = DRAW_POST_DISCRETE;
-      v->Changed = 1;
-    }
-  ENDVIEWMOD
-}
-void view_options_continuousiso_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->IntervalsType = DRAW_POST_CONTINUOUS;
-      v->Changed = 1;
-    }
-  ENDVIEWMOD
-}
-void view_options_numericiso_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->IntervalsType = DRAW_POST_NUMERIC;
-      v->Changed = 1;
-    }
-  ENDVIEWMOD
-}
-void view_options_xoffset_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->Offset[0] = ((Fl_Value_Input*)w)->value() ;
-    v->Changed = 1;
-  ENDVIEWMOD
-}
-void view_options_yoffset_cb(CALLBACK_ARGS){
+void view_lighting_cb(CALLBACK_ARGS){
   STARTVIEWMOD
-    v->Offset[1] = ((Fl_Value_Input*)w)->value() ;
+    v->Light = !v->Light;
     v->Changed = 1;
   ENDVIEWMOD
+  Draw() ;
 }
-void view_options_zoffset_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->Offset[2] = ((Fl_Value_Input*)w)->value() ;
-    v->Changed = 1;
-  ENDVIEWMOD
+void view_elements_cb(CALLBACK_ARGS){
+  Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
+  v->ShowElement = !v->ShowElement;
+  v->Changed = 1;
+  Draw() ;
 }
-void view_options_xraise_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->Raise[0] = ((Fl_Value_Input*)w)->value() ;
-    v->Changed = 1;
-  ENDVIEWMOD
+void view_applybgmesh_cb(CALLBACK_ARGS){
+  Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
+  BGMWithView(v); 
 }
-void view_options_yraise_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->Raise[1] = ((Fl_Value_Input*)w)->value() ;
-    v->Changed = 1;
-  ENDVIEWMOD
+void view_options_cb(CALLBACK_ARGS){
+  WID->create_view_options_window((int)data);
 }
-void view_options_zraise_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->Raise[2] = ((Fl_Value_Input*)w)->value() ;
-    v->Changed = 1;
-  ENDVIEWMOD
+
+void view_options_custom_cb(CALLBACK_ARGS){
+  if(WID->view_butt[3]->value()){
+    WID->view_value[0]->activate();
+    WID->view_value[1]->activate();
+  }
+  else{
+    WID->view_value[0]->deactivate();
+    WID->view_value[1]->deactivate();
+  }
 }
+
 void view_options_timestep_cb(CALLBACK_ARGS){
   int ii = (int)((Fl_Value_Input*)w)->value();
   STARTVIEWMOD
@@ -1551,59 +1355,45 @@ void view_options_timestep_cb(CALLBACK_ARGS){
   ENDVIEWMOD
   Draw();
 }
-void view_options_vector_line_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->ArrowType = DRAW_POST_SEGMENT;
-      v->Changed = 1;
-    }
-  ENDVIEWMOD
-}
-void view_options_vector_arrow_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->ArrowType = DRAW_POST_ARROW;
-      v->Changed = 1;
-    }
-  ENDVIEWMOD
-}
-void view_options_vector_cone_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->ArrowType = DRAW_POST_CONE;
-      v->Changed = 1;
-    }
-  ENDVIEWMOD
-}
-void view_options_vector_displacement_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->ArrowType = DRAW_POST_DISPLACEMENT;
-      v->Changed = 1;
-    }
-  ENDVIEWMOD
-}
-void view_options_vector_scale_cb(CALLBACK_ARGS){
+
+void view_options_ok_cb(CALLBACK_ARGS){
   STARTVIEWMOD
-    v->ArrowScale = ((Fl_Value_Input*)w)->value() ;
+    opt_view_show_scale(i, GMSH_SET, WID->view_butt[0]->value());
+    opt_view_show_time(i, GMSH_SET, WID->view_butt[1]->value());
+    opt_view_transparent_scale(i, GMSH_SET, WID->view_butt[2]->value());
+    opt_view_range_type(i, GMSH_SET, WID->view_butt[3]->value()?DRAW_POST_CUSTOM:DRAW_POST_DEFAULT);
+    opt_view_scale_type(i, GMSH_SET, WID->view_butt[4]->value()?DRAW_POST_LINEAR:DRAW_POST_LOGARITHMIC);
+    opt_view_intervals_type(i, GMSH_SET, 
+			    WID->view_butt[6]->value()?DRAW_POST_ISO:
+			    WID->view_butt[7]->value()?DRAW_POST_DISCRETE:
+			    WID->view_butt[8]->value()?DRAW_POST_CONTINUOUS:
+			    DRAW_POST_NUMERIC);
+    opt_view_arrow_type(i, GMSH_SET, 
+			WID->view_butt[10]->value()?DRAW_POST_SEGMENT:
+			WID->view_butt[11]->value()?DRAW_POST_ARROW:
+			WID->view_butt[12]->value()?DRAW_POST_CONE:
+			DRAW_POST_DISPLACEMENT);
+    opt_view_arrow_location(i, GMSH_SET, 
+			    WID->view_butt[14]->value()?DRAW_POST_LOCATE_COG:
+			    DRAW_POST_LOCATE_VERTEX);
+
+    opt_view_custom_min(i, GMSH_SET, WID->view_value[0]->value());
+    opt_view_custom_max(i, GMSH_SET, WID->view_value[1]->value());
+    opt_view_nb_iso(i, GMSH_SET, WID->view_value[2]->value());
+    opt_view_offset0(i, GMSH_SET, WID->view_value[3]->value());
+    opt_view_offset1(i, GMSH_SET, WID->view_value[4]->value());
+    opt_view_offset2(i, GMSH_SET, WID->view_value[5]->value());
+    opt_view_raise0(i, GMSH_SET, WID->view_value[6]->value());
+    opt_view_raise1(i, GMSH_SET, WID->view_value[7]->value());
+    opt_view_raise2(i, GMSH_SET, WID->view_value[8]->value());
+    opt_view_timestep(i, GMSH_SET, WID->view_value[9]->value());
+    opt_view_arrow_scale(i, GMSH_SET, WID->view_value[10]->value());
+
+    opt_view_name(i, GMSH_SET, (char*)WID->view_input[0]->value());
+    opt_view_format(i, GMSH_SET, (char*)WID->view_input[1]->value());
     v->Changed = 1;
   ENDVIEWMOD
-}
-void view_options_vector_cog_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->ArrowLocation = DRAW_POST_LOCATE_COG;
-      v->Changed = 1;
-    }
-  ENDVIEWMOD
-}
-void view_options_vector_vertex_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    if(((Fl_Check_Button*)w)->value()){
-      v->ArrowLocation = DRAW_POST_LOCATE_VERTEX;
-      v->Changed = 1;
-    }
-  ENDVIEWMOD
+  Draw();
 }
 
 #undef STARTVIEWMOD
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index bf8ba990cf649353a46a586d97c0ae0a128e244c..e2c90cdc7f7c35abb4bd825d0a5775eb68ef9a41 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -44,50 +44,24 @@ void file_quit_cb(CALLBACK_ARGS) ;
 // Option General Menu
 
 void opt_general_cb(CALLBACK_ARGS) ;
-void opt_general_moving_axes_cb(CALLBACK_ARGS) ;
-void opt_general_small_axes_cb(CALLBACK_ARGS) ;
-void opt_general_fast_redraw_cb(CALLBACK_ARGS) ;
-void opt_general_display_lists_cb(CALLBACK_ARGS) ;
-void opt_general_alpha_blending_cb(CALLBACK_ARGS) ;
-void opt_general_trackball_cb(CALLBACK_ARGS) ;
-void opt_general_orthographic_cb(CALLBACK_ARGS) ;
-void opt_general_color_cb(CALLBACK_ARGS) ;
-void opt_general_shininess_cb(CALLBACK_ARGS) ;
-void opt_general_light_cb(CALLBACK_ARGS) ;
+void opt_general_ok_cb(CALLBACK_ARGS) ;
 
 // Option Geometry Menu
 
 void opt_geometry_cb(CALLBACK_ARGS) ;
-void opt_geometry_entity_cb(CALLBACK_ARGS) ;
-void opt_geometry_num_cb(CALLBACK_ARGS) ;
 void opt_geometry_show_by_entity_num_cb(CALLBACK_ARGS) ;
-void opt_geometry_normals_cb(CALLBACK_ARGS) ;
-void opt_geometry_tangents_cb(CALLBACK_ARGS) ;
+void opt_geometry_ok_cb(CALLBACK_ARGS) ;
 
 // Option Mesh Menu
 
 void opt_mesh_cb(CALLBACK_ARGS) ;
-void opt_mesh_entity_cb(CALLBACK_ARGS) ;
-void opt_mesh_num_cb(CALLBACK_ARGS) ;
 void opt_mesh_show_by_entity_num_cb(CALLBACK_ARGS) ;
-void opt_mesh_show_by_quality_cb(CALLBACK_ARGS) ;
-void opt_mesh_normals_cb(CALLBACK_ARGS) ;
-void opt_mesh_degree_cb(CALLBACK_ARGS) ;
-void opt_mesh_algo_cb(CALLBACK_ARGS) ;
-void opt_mesh_smoothing_cb(CALLBACK_ARGS) ;
-void opt_mesh_scaling_factor_cb(CALLBACK_ARGS) ;
-void opt_mesh_lc_factor_cb(CALLBACK_ARGS) ;
-void opt_mesh_rand_factor_cb(CALLBACK_ARGS) ;
-void opt_mesh_interactive_cb(CALLBACK_ARGS) ;
-void opt_mesh_explode_cb(CALLBACK_ARGS) ;
-void opt_mesh_aspect_cb(CALLBACK_ARGS) ;
+void opt_mesh_ok_cb(CALLBACK_ARGS) ;
 
 // Option Post Menu
 
 void opt_post_cb(CALLBACK_ARGS) ;
-void opt_post_link_cb(CALLBACK_ARGS) ;
-void opt_post_smooth_cb(CALLBACK_ARGS) ;
-void opt_post_anim_delay_cb(CALLBACK_ARGS) ;
+void opt_post_ok_cb(CALLBACK_ARGS) ;
 
 // Option Statistics Menu
 
@@ -213,35 +187,9 @@ void view_lighting_cb(CALLBACK_ARGS) ;
 void view_elements_cb(CALLBACK_ARGS) ;
 void view_applybgmesh_cb(CALLBACK_ARGS) ;
 void view_options_cb(CALLBACK_ARGS) ;
-void view_options_show_scale_cb(CALLBACK_ARGS) ;
-void view_options_show_time_cb(CALLBACK_ARGS) ;
-void view_options_transparent_scale_cb(CALLBACK_ARGS) ;
-void view_options_name_cb(CALLBACK_ARGS) ;
-void view_options_format_cb(CALLBACK_ARGS) ;
-void view_options_custom_range_cb(CALLBACK_ARGS) ;
-void view_options_custom_min_cb(CALLBACK_ARGS) ;
-void view_options_custom_max_cb(CALLBACK_ARGS) ;
-void view_options_linear_range_cb(CALLBACK_ARGS) ;
-void view_options_logarithmic_range_cb(CALLBACK_ARGS) ;
-void view_options_nbiso_cb(CALLBACK_ARGS) ;
-void view_options_iso_cb(CALLBACK_ARGS) ;
-void view_options_fillediso_cb(CALLBACK_ARGS) ;
-void view_options_continuousiso_cb(CALLBACK_ARGS) ;
-void view_options_numericiso_cb(CALLBACK_ARGS) ;
-void view_options_xoffset_cb(CALLBACK_ARGS) ;
-void view_options_yoffset_cb(CALLBACK_ARGS) ;
-void view_options_zoffset_cb(CALLBACK_ARGS) ;
-void view_options_xraise_cb(CALLBACK_ARGS) ;
-void view_options_yraise_cb(CALLBACK_ARGS) ;
-void view_options_zraise_cb(CALLBACK_ARGS) ;
+void view_options_custom_cb(CALLBACK_ARGS) ;
 void view_options_timestep_cb(CALLBACK_ARGS) ;
-void view_options_vector_line_cb(CALLBACK_ARGS) ;
-void view_options_vector_arrow_cb(CALLBACK_ARGS) ;
-void view_options_vector_cone_cb(CALLBACK_ARGS) ;
-void view_options_vector_displacement_cb(CALLBACK_ARGS) ;
-void view_options_vector_scale_cb(CALLBACK_ARGS) ;
-void view_options_vector_cog_cb(CALLBACK_ARGS) ;
-void view_options_vector_vertex_cb(CALLBACK_ARGS) ;
+void view_options_ok_cb(CALLBACK_ARGS) ;
 
 #endif
 
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 4454865921d55987db47c14f1e7de7f0d59da8d6..48ea3d7ba8ea6eb777ed18bf3d63c1535700b080 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.43 2001-02-09 12:32:59 geuzaine Exp $
+// $Id: GUI.cpp,v 1.44 2001-02-12 17:38:02 geuzaine Exp $
 
 // To make the interface as visually consistent as possible, please:
 // - use the BH, BW, WB, IW values for button heights/widths, window borders, etc.
@@ -9,6 +9,7 @@
 #include "GmshUI.h"
 #include "GmshVersion.h"
 #include "Context.h"
+#include "Options.h"
 #include "Const.h"
 #include "Geo.h"
 #include "Mesh.h"
@@ -279,48 +280,34 @@ int GUI::global_shortcuts(int event){
     return 1;
   }
   else if(Fl::test_shortcut('s')){
-    CTX.post.anim_delay += 0.01 ;
-    post_value[0]->value(CTX.post.anim_delay);
-    post_value[0]->redraw();
+    opt_post_anim_delay(0,GMSH_SET|GMSH_GUI,opt_post_anim_delay(0,GMSH_GET,0) + 0.01);
     return 1;
   }
   else if(Fl::test_shortcut(FL_SHIFT+'s')){
-    CTX.post.anim_delay -= 0.01 ;
-    if(CTX.post.anim_delay < 0.) CTX.post.anim_delay = 0. ;
-    post_value[0]->value(CTX.post.anim_delay);
-    post_value[0]->redraw();
+    opt_post_anim_delay(0,GMSH_SET|GMSH_GUI,opt_post_anim_delay(0,GMSH_GET,0) - 0.01);
     return 1;
   }
   else if(Fl::test_shortcut(FL_CTRL+'z')){
-    g_window->iconize();
+    g_window->iconize() ;
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'f')){
-    CTX.fast = !CTX.fast; 
-    gen_butt[2]->value(CTX.fast);
-    gen_butt[2]->redraw();
+    opt_general_fast_redraw(0,GMSH_SET|GMSH_GUI,!opt_general_fast_redraw(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'b')){
-    CTX.post.scales = !CTX.post.scales; 
+    opt_post_scales(0,GMSH_SET|GMSH_GUI,!opt_post_scales(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'o')){
-    CTX.ortho = !CTX.ortho ;
-    gen_butt[6]->value(CTX.ortho);
-    gen_butt[6]->redraw();
-    gen_butt[7]->value(!CTX.ortho);
-    gen_butt[7]->redraw();
+    opt_general_orthographic(0,GMSH_SET|GMSH_GUI,!opt_general_orthographic(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'c')){
-    if(CTX.color.id==0) Init_Colors(1);
-    else if(CTX.color.id==1) Init_Colors(2);
-    else Init_Colors(0);
-    gen_value[0]->value(CTX.color.id);
+    opt_general_color_scheme(0,GMSH_SET|GMSH_GUI,opt_general_color_scheme(0,GMSH_GET,0)+1);
     redraw_opengl();
     return 1;
   }
@@ -332,12 +319,8 @@ int GUI::global_shortcuts(int event){
     else{
       CTX.mesh.hidden = 0; CTX.mesh.shade = 0; 
     }
-    mesh_butt[11]->value(!CTX.mesh.hidden);
-    mesh_butt[11]->redraw();
-    mesh_butt[12]->value(CTX.mesh.hidden);
-    mesh_butt[12]->redraw();
-    mesh_butt[13]->value(CTX.mesh.shade);
-    mesh_butt[13]->redraw();
+    opt_mesh_hidden(0,GMSH_GUI,0);
+    opt_mesh_shade(0,GMSH_GUI,0);
     redraw_opengl();
     return 1;
   }
@@ -354,102 +337,66 @@ int GUI::global_shortcuts(int event){
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+FL_SHIFT+'a')){
-    CTX.axes = !CTX.axes;
-    gen_butt[0]->value(CTX.axes);
-    gen_butt[0]->redraw();
+    opt_general_axes(0,GMSH_SET|GMSH_GUI,!opt_general_axes(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'a')){
-    CTX.small_axes = !CTX.small_axes;
-    gen_butt[1]->value(CTX.small_axes);
-    gen_butt[1]->redraw();
+    opt_general_small_axes(0,GMSH_SET|GMSH_GUI,!opt_general_small_axes(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'p')){
-    CTX.geom.points = !CTX.geom.points;
-    geo_butt[0]->value(CTX.geom.points);
-    geo_butt[0]->redraw();
+    opt_geometry_points(0,GMSH_SET|GMSH_GUI,!opt_geometry_points(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'l')){
-    CTX.geom.lines = !CTX.geom.lines;
-    geo_butt[1]->value(CTX.geom.lines);
-    geo_butt[1]->redraw();
+    opt_geometry_lines(0,GMSH_SET|GMSH_GUI,!opt_geometry_lines(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'s')){
-    CTX.geom.surfaces = !CTX.geom.surfaces;
-    geo_butt[2]->value(CTX.geom.surfaces);
-    geo_butt[2]->redraw();
+    opt_geometry_surfaces(0,GMSH_SET|GMSH_GUI,!opt_geometry_surfaces(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'v')){
-    CTX.geom.volumes = !CTX.geom.volumes;
-    geo_butt[3]->value(CTX.geom.volumes);
-    geo_butt[3]->redraw();
+    opt_geometry_volumes(0,GMSH_SET|GMSH_GUI,!opt_geometry_volumes(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+FL_SHIFT+'p')){
-    CTX.mesh.points = !CTX.mesh.points;
-    mesh_butt[3]->value(CTX.mesh.points);
-    mesh_butt[3]->redraw();
+    opt_mesh_points(0,GMSH_SET|GMSH_GUI,!opt_mesh_points(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+FL_SHIFT+'l')){
-    CTX.mesh.lines = !CTX.mesh.lines;
-    mesh_butt[4]->value(CTX.mesh.lines);
-    mesh_butt[4]->redraw();
+    opt_mesh_lines(0,GMSH_SET|GMSH_GUI,!opt_mesh_lines(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+FL_SHIFT+'s')){
-    CTX.mesh.surfaces = !CTX.mesh.surfaces;
-    mesh_butt[5]->value(CTX.mesh.surfaces);
-    mesh_butt[5]->redraw();
+    opt_mesh_surfaces(0,GMSH_SET|GMSH_GUI,!opt_mesh_surfaces(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+FL_SHIFT+'v')){
-    CTX.mesh.volumes = !CTX.mesh.volumes;
-    mesh_butt[6]->value(CTX.mesh.volumes);
-    mesh_butt[6]->redraw();
+    opt_mesh_volumes(0,GMSH_SET|GMSH_GUI,!opt_mesh_volumes(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'m')){
-    CTX.mesh.points   = !CTX.mesh.points;
-    CTX.mesh.lines    = !CTX.mesh.lines;
-    CTX.mesh.surfaces = !CTX.mesh.surfaces;
-    CTX.mesh.volumes  = !CTX.mesh.volumes;
-    mesh_butt[3]->value(CTX.mesh.points);
-    mesh_butt[3]->redraw();
-    mesh_butt[4]->value(CTX.mesh.lines);
-    mesh_butt[4]->redraw();
-    mesh_butt[5]->value(CTX.mesh.surfaces);
-    mesh_butt[5]->redraw();
-    mesh_butt[6]->value(CTX.mesh.volumes);
-    mesh_butt[6]->redraw();
+    opt_mesh_points(0,GMSH_SET|GMSH_GUI,!opt_mesh_points(0,GMSH_GET,0));
+    opt_mesh_lines(0,GMSH_SET|GMSH_GUI,!opt_mesh_lines(0,GMSH_GET,0));
+    opt_mesh_surfaces(0,GMSH_SET|GMSH_GUI,!opt_mesh_surfaces(0,GMSH_GET,0));
+    opt_mesh_volumes(0,GMSH_SET|GMSH_GUI,!opt_mesh_volumes(0,GMSH_GET,0));
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'t')){
     MarkAllViewsChanged(1);
-    if(init_view_window){
-      Post_View *v = (Post_View*)List_Pointer(Post_ViewList, view_number);
-      view_butt[6]->value(v->IntervalsType==DRAW_POST_ISO);
-      view_butt[6]->redraw();
-      view_butt[7]->value(v->IntervalsType==DRAW_POST_DISCRETE);
-      view_butt[7]->redraw();
-      view_butt[8]->value(v->IntervalsType==DRAW_POST_CONTINUOUS);
-      view_butt[8]->redraw();
-    }
+    opt_view_intervals_type(view_number, GMSH_GUI, 0);
     redraw_opengl();
     return 1;
   }
@@ -517,6 +464,7 @@ GUI::GUI(int argc, char **argv) {
   create_geometry_options_window();
   create_mesh_options_window();
   create_post_options_window();
+  create_view_options_window(-1);
   create_message_window();
   create_help_window();
   create_about_window();
@@ -903,23 +851,11 @@ void GUI::create_general_options_window(){
 	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Display");
 	o->labelsize(CTX.fontsize);
         gen_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Show moving axes");
-	gen_butt[0]->callback(opt_general_moving_axes_cb);
-	gen_butt[0]->value(CTX.axes);
         gen_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Show small axes");
-	gen_butt[1]->callback(opt_general_small_axes_cb);
-	gen_butt[1]->value(CTX.small_axes);
         gen_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Enable fast redraw");
-	gen_butt[2]->callback(opt_general_fast_redraw_cb);
-	gen_butt[2]->value(CTX.fast);
         gen_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Use display lists");
-	gen_butt[3]->callback(opt_general_display_lists_cb);
-	gen_butt[3]->value(CTX.display_lists);
         gen_butt[4] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Enable alpha blending");
-	gen_butt[4]->callback(opt_general_alpha_blending_cb);
-	gen_butt[4]->value(CTX.alpha);
         gen_butt[5] = new Fl_Check_Button(2*WB, 2*WB+6*BH, BW, BH, "Use trackball rotation mode");
-	gen_butt[5]->callback(opt_general_trackball_cb);
-	gen_butt[5]->value(CTX.useTrackball);
 	for(i=0 ; i<6 ; i++){
 	  gen_butt[i]->type(FL_TOGGLE_BUTTON);
 	  gen_butt[i]->down_box(FL_DOWN_BOX);
@@ -933,11 +869,7 @@ void GUI::create_general_options_window(){
 	o->labelsize(CTX.fontsize);
         o->hide();
         gen_butt[6] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Orthographic");
-	gen_butt[6]->callback(opt_general_orthographic_cb, (void*)1);
-	gen_butt[6]->value(CTX.ortho);
         gen_butt[7] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Perspective");
-	gen_butt[7]->callback(opt_general_orthographic_cb, (void*)0);
-	gen_butt[7]->value(!CTX.ortho);
 	for(i=6 ; i<8 ; i++){
 	  gen_butt[i]->type(FL_RADIO_BUTTON);
 	  gen_butt[i]->labelsize(CTX.fontsize);
@@ -953,32 +885,22 @@ void GUI::create_general_options_window(){
 	gen_value[0]->minimum(0); 
 	gen_value[0]->maximum(2); 
 	gen_value[0]->step(1);
-	gen_value[0]->value(CTX.color.id);
-	gen_value[0]->callback(opt_general_color_cb);
 	gen_value[1] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Material shininess");
 	gen_value[1]->minimum(0); 
 	gen_value[1]->maximum(10);
 	gen_value[1]->step(0.1);
-	gen_value[1]->value(CTX.shine);
-	gen_value[1]->callback(opt_general_shininess_cb);
         gen_value[2] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Light position X");
 	gen_value[2]->minimum(-1); 
 	gen_value[2]->maximum(1);
 	gen_value[2]->step(0.01);
-	gen_value[2]->value(CTX.light_position[0][0]);
-	gen_value[2]->callback(opt_general_light_cb, (void*)0);
         gen_value[3] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Light position Y");
 	gen_value[3]->minimum(-1); 
 	gen_value[3]->maximum(1); 
 	gen_value[3]->step(0.01);
-	gen_value[3]->value(CTX.light_position[0][1]);
-	gen_value[3]->callback(opt_general_light_cb, (void*)1);
         gen_value[4] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Light position Z");
 	gen_value[4]->minimum(-1); 
 	gen_value[4]->maximum(1); 
 	gen_value[4]->step(0.01);
-	gen_value[4]->value(CTX.light_position[0][2]);
-	gen_value[4]->callback(opt_general_light_cb, (void*)2);
 	for(i=0 ; i<5 ; i++){
 	  gen_value[i]->labelsize(CTX.fontsize);
 	  gen_value[i]->type(FL_HORIZONTAL);
@@ -993,7 +915,7 @@ void GUI::create_general_options_window(){
     { 
       Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
       o->labelsize(CTX.fontsize);
-      o->callback(ok_cb);
+      o->callback(opt_general_ok_cb);
     }
     { 
       Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "cancel");
@@ -1036,29 +958,13 @@ void GUI::create_geometry_options_window(){
 	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Visibility");
 	o->labelsize(CTX.fontsize);
         geo_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Points");
-	geo_butt[0]->callback(opt_geometry_entity_cb, (void*)0);
-	geo_butt[0]->value(CTX.geom.points);
         geo_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, IW, BH, "Curves");
-	geo_butt[1]->callback(opt_geometry_entity_cb, (void*)1);
-	geo_butt[1]->value(CTX.geom.lines);
         geo_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, IW, BH, "Surfaces");
-	geo_butt[2]->callback(opt_geometry_entity_cb, (void*)2);
-	geo_butt[2]->value(CTX.geom.surfaces);
         geo_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, IW, BH, "Volumes");
-	geo_butt[3]->callback(opt_geometry_entity_cb, (void*)3);
-	geo_butt[3]->value(CTX.geom.volumes);
         geo_butt[4] = new Fl_Check_Button(width/2, 2*WB+1*BH, IW, BH, "Point numbers");
-	geo_butt[4]->callback(opt_geometry_num_cb, (void*)0);
-	geo_butt[4]->value(CTX.geom.points_num);
         geo_butt[5] = new Fl_Check_Button(width/2, 2*WB+2*BH, IW, BH, "Curve numbers");
-	geo_butt[5]->callback(opt_geometry_num_cb, (void*)1);
-	geo_butt[5]->value(CTX.geom.lines_num);
         geo_butt[6] = new Fl_Check_Button(width/2, 2*WB+3*BH, IW, BH, "Surface numbers");
-	geo_butt[6]->callback(opt_geometry_num_cb, (void*)2);
-	geo_butt[6]->value(CTX.geom.surfaces_num);
         geo_butt[7] = new Fl_Check_Button(width/2, 2*WB+4*BH, IW, BH, "Volume numbers");
-	geo_butt[7]->callback(opt_geometry_num_cb, (void*)3);
-	geo_butt[7]->value(CTX.geom.volumes_num);
 	for(i=0 ; i<8 ; i++){
 	  geo_butt[i]->type(FL_TOGGLE_BUTTON);
 	  geo_butt[i]->down_box(FL_DOWN_BOX);
@@ -1067,24 +973,19 @@ void GUI::create_geometry_options_window(){
 	}
 
         geo_input = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Show by entity number");
-	geo_input->callback(opt_geometry_show_by_entity_num_cb);
-	geo_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED);
 	geo_input->labelsize(CTX.fontsize);
 	geo_input->align(FL_ALIGN_RIGHT);
+	geo_input->callback(opt_geometry_show_by_entity_num_cb);
+	geo_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED);
 
 	geo_value[0] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Normals");
 	geo_value[0]->minimum(0); 
 	geo_value[0]->maximum(100);
 	geo_value[0]->step(0.1);
-	geo_value[0]->callback(opt_geometry_normals_cb);
-	geo_value[0]->value(CTX.geom.normals);
-
         geo_value[1] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Tangents");
 	geo_value[1]->minimum(0);
 	geo_value[1]->maximum(100);
 	geo_value[1]->step(0.1);
-	geo_value[1]->callback(opt_geometry_tangents_cb);
-	geo_value[1]->value(CTX.mesh.tangents);
 	for(i=0 ; i<2 ; i++){
 	  geo_value[i]->labelsize(CTX.fontsize);
 	  geo_value[i]->type(FL_HORIZONTAL);
@@ -1099,7 +1000,7 @@ void GUI::create_geometry_options_window(){
     { 
       Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
       o->labelsize(CTX.fontsize);
-      o->callback(ok_cb);
+      o->callback(opt_geometry_ok_cb);
     }
     { 
       Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "cancel");
@@ -1143,14 +1044,8 @@ void GUI::create_mesh_options_window(){
 	o->labelsize(CTX.fontsize);
         o->hide();
         mesh_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Second order elements");
-	mesh_butt[0]->callback(opt_mesh_degree_cb, (void*)0);
-	mesh_butt[0]->value(CTX.mesh.degree==2);
         mesh_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Interactive");
-	mesh_butt[1]->callback(opt_mesh_interactive_cb, (void*)0);
-	mesh_butt[1]->value(CTX.mesh.interactive);
         mesh_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Anisotropic");
-	mesh_butt[2]->callback(opt_mesh_algo_cb, (void*)0);
-	mesh_butt[2]->value(CTX.mesh.algo==DELAUNAY_NEWALGO);
 	for(i=0 ; i<3 ; i++){
 	  mesh_butt[i]->type(FL_TOGGLE_BUTTON);
 	  mesh_butt[i]->down_box(FL_DOWN_BOX);
@@ -1161,62 +1056,36 @@ void GUI::create_mesh_options_window(){
 	mesh_value[0]->minimum(0);
 	mesh_value[0]->maximum(100); 
 	mesh_value[0]->step(1);
-	mesh_value[0]->callback(opt_mesh_smoothing_cb);
-	mesh_value[0]->value(CTX.mesh.nb_smoothing);
         mesh_value[1] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Mesh scaling factor");
 	mesh_value[1]->minimum(0);
 	mesh_value[1]->maximum(100); 
 	mesh_value[1]->step(0.001);
-	mesh_value[1]->callback(opt_mesh_scaling_factor_cb);
-	mesh_value[1]->value(CTX.mesh.scaling_factor);
         mesh_value[2] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Characteristic length scaling factor");
 	mesh_value[2]->minimum(0);
 	mesh_value[2]->maximum(100); 
 	mesh_value[2]->step(0.001);
-	mesh_value[2]->callback(opt_mesh_lc_factor_cb);
-	mesh_value[2]->value(CTX.mesh.lc_factor);
         mesh_value[3] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Random perturbation factor");
 	mesh_value[3]->minimum(1.e-6);
 	mesh_value[3]->maximum(1.e-1); 
 	mesh_value[3]->step(1.e-6);
-	mesh_value[3]->callback(opt_mesh_rand_factor_cb);
-	mesh_value[3]->value(CTX.mesh.rand_factor);
-
 	for(i = 0 ; i<4 ; i++){
 	  mesh_value[i]->labelsize(CTX.fontsize);
 	  mesh_value[i]->type(FL_HORIZONTAL);
 	  mesh_value[i]->align(FL_ALIGN_RIGHT);
 	}
-
         o->end();
       }
       { 
 	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Visibility");
 	o->labelsize(CTX.fontsize);
         mesh_butt[3] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Points");
-	mesh_butt[3]->callback(opt_mesh_entity_cb, (void*)0);
-	mesh_butt[3]->value(CTX.mesh.points);
         mesh_butt[4] = new Fl_Check_Button(2*WB, 2*WB+2*BH, IW, BH, "Curves");
-	mesh_butt[4]->callback(opt_mesh_entity_cb, (void*)1);
-	mesh_butt[4]->value(CTX.mesh.lines);
         mesh_butt[5] = new Fl_Check_Button(2*WB, 2*WB+3*BH, IW, BH, "Surfaces");
-	mesh_butt[5]->callback(opt_mesh_entity_cb, (void*)2);
-	mesh_butt[5]->value(CTX.mesh.surfaces);
         mesh_butt[6] = new Fl_Check_Button(2*WB, 2*WB+4*BH, IW, BH, "Volumes");
-	mesh_butt[6]->callback(opt_mesh_entity_cb, (void*)3);
-	mesh_butt[6]->value(CTX.mesh.volumes);
         mesh_butt[7] = new Fl_Check_Button(width/2, 2*WB+1*BH, IW, BH, "Point Numbers");
-	mesh_butt[7]->callback(opt_mesh_num_cb, (void*)0);
-	mesh_butt[7]->value(CTX.mesh.points_num);
         mesh_butt[8] = new Fl_Check_Button(width/2, 2*WB+2*BH, IW, BH, "Curve Numbers");
-	mesh_butt[8]->callback(opt_mesh_num_cb, (void*)1);
-	mesh_butt[8]->value(CTX.mesh.lines_num);
         mesh_butt[9] = new Fl_Check_Button(width/2, 2*WB+3*BH, IW, BH, "Surface Numbers");
-	mesh_butt[9]->callback(opt_mesh_num_cb, (void*)2);
-	mesh_butt[9]->value(CTX.mesh.surfaces_num);
         mesh_butt[10] = new Fl_Check_Button(width/2, 2*WB+4*BH, IW, BH, "Volume Numbers");
-	mesh_butt[10]->callback(opt_mesh_num_cb, (void*)3);
-	mesh_butt[10]->value(CTX.mesh.volumes_num);
 	for(i=3 ; i<11 ; i++){
 	  mesh_butt[i]->type(FL_TOGGLE_BUTTON);
 	  mesh_butt[i]->down_box(FL_DOWN_BOX);
@@ -1224,24 +1093,20 @@ void GUI::create_mesh_options_window(){
 	  mesh_butt[i]->selection_color(FL_YELLOW);
 	}
         mesh_input = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Show by entity Number");
-	mesh_input->callback(opt_mesh_show_by_entity_num_cb);
-	mesh_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED);
 	mesh_input->labelsize(CTX.fontsize);
 	mesh_input->align(FL_ALIGN_RIGHT);
+	mesh_input->callback(opt_mesh_show_by_entity_num_cb);
+	mesh_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED);
 
-        mesh_value[1] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Show by element quality");
-	mesh_value[1]->minimum(0); 
-	mesh_value[1]->maximum(1);
-	mesh_value[1]->step(0.001);
-	mesh_value[1]->callback(opt_mesh_show_by_quality_cb);
-	mesh_value[1]->value(CTX.mesh.limit_gamma);
-	mesh_value[2] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Normals");
-	mesh_value[2]->minimum(0); 
-	mesh_value[2]->maximum(100);
-	mesh_value[2]->step(1);
-	mesh_value[2]->callback(opt_mesh_normals_cb);
-	mesh_value[2]->value(CTX.mesh.normals);
-	for(i=1 ; i<3 ; i++){
+        mesh_value[4] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Show by element quality");
+	mesh_value[4]->minimum(0); 
+	mesh_value[4]->maximum(1);
+	mesh_value[4]->step(0.001);
+	mesh_value[5] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Normals");
+	mesh_value[5]->minimum(0); 
+	mesh_value[5]->maximum(100);
+	mesh_value[5]->step(1);
+	for(i=4 ; i<6 ; i++){
 	  mesh_value[i]->labelsize(CTX.fontsize);
 	  mesh_value[i]->type(FL_HORIZONTAL);
 	  mesh_value[i]->align(FL_ALIGN_RIGHT);
@@ -1253,29 +1118,21 @@ void GUI::create_mesh_options_window(){
 	o->labelsize(CTX.fontsize);
         o->hide();
         mesh_butt[11] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Wireframe");
-	mesh_butt[11]->callback(opt_mesh_aspect_cb, (void*)0);
-	mesh_butt[11]->value(!CTX.mesh.hidden);
         mesh_butt[12] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Hidden lines");
-	mesh_butt[12]->callback(opt_mesh_aspect_cb, (void*)1);
-	mesh_butt[12]->value(CTX.mesh.hidden);
         mesh_butt[13] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Solid");
-	mesh_butt[13]->callback(opt_mesh_aspect_cb, (void*)2);
-	mesh_butt[13]->value(CTX.mesh.shade);
 	for(i=11 ; i<14 ; i++){
 	  mesh_butt[i]->type(FL_RADIO_BUTTON);
 	  mesh_butt[i]->down_box(FL_DOWN_BOX);
 	  mesh_butt[i]->labelsize(CTX.fontsize);
 	  mesh_butt[i]->selection_color(FL_YELLOW);
 	}
-        mesh_value[4] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Explode elements");
-	mesh_value[4]->minimum(0);
-	mesh_value[4]->maximum(1);
-	mesh_value[4]->step(0.01);
-	mesh_value[4]->callback(opt_mesh_explode_cb);
-	mesh_value[4]->value(CTX.mesh.explode);
-	mesh_value[4]->labelsize(CTX.fontsize);
-	mesh_value[4]->type(FL_HORIZONTAL);
-	mesh_value[4]->align(FL_ALIGN_RIGHT);
+        mesh_value[6] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Explode elements");
+	mesh_value[6]->minimum(0);
+	mesh_value[6]->maximum(1);
+	mesh_value[6]->step(0.01);
+	mesh_value[6]->labelsize(CTX.fontsize);
+	mesh_value[6]->type(FL_HORIZONTAL);
+	mesh_value[6]->align(FL_ALIGN_RIGHT);
         o->end();
       }
       o->end();
@@ -1284,7 +1141,7 @@ void GUI::create_mesh_options_window(){
     { 
       Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
       o->labelsize(CTX.fontsize);
-      o->callback(ok_cb);
+      o->callback(opt_mesh_ok_cb);
     }
     { 
       Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "cancel");
@@ -1328,14 +1185,8 @@ void GUI::create_post_options_window(){
 	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Links");
 	o->labelsize(CTX.fontsize);
         post_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "No link between views");
-	post_butt[0]->callback(opt_post_link_cb, (void*)0);
-	post_butt[0]->value(CTX.post.link==0);
         post_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Link visible views");
-	post_butt[1]->callback(opt_post_link_cb, (void*)1);
-	post_butt[1]->value(CTX.post.link==1);
         post_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Link all views");
-	post_butt[2]->callback(opt_post_link_cb, (void*)2);
-	post_butt[2]->value(CTX.post.link==2);
 	for(i=0 ; i<3 ; i++){
 	  post_butt[i]->type(FL_RADIO_BUTTON);
 	  post_butt[i]->labelsize(CTX.fontsize);
@@ -1347,8 +1198,6 @@ void GUI::create_post_options_window(){
 	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Smoothing");
 	o->labelsize(CTX.fontsize);
         post_butt[3] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Smooth");
-	post_butt[3]->callback(opt_post_smooth_cb);
-	post_butt[3]->value(CTX.post.smooth);
 	post_butt[3]->type(FL_TOGGLE_BUTTON);
 	post_butt[3]->down_box(FL_DOWN_BOX);
 	post_butt[3]->labelsize(CTX.fontsize);
@@ -1363,8 +1212,6 @@ void GUI::create_post_options_window(){
 	post_value[0]->minimum(0);
 	post_value[0]->maximum(10); 
 	post_value[0]->step(0.01);
-	post_value[0]->callback(opt_post_anim_delay_cb);
-	post_value[0]->value(CTX.post.anim_delay);
 	post_value[0]->labelsize(CTX.fontsize);
 	post_value[0]->type(FL_HORIZONTAL);
 	post_value[0]->align(FL_ALIGN_RIGHT);
@@ -1376,7 +1223,7 @@ void GUI::create_post_options_window(){
     { 
       Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
       o->labelsize(CTX.fontsize);
-      o->callback(ok_cb);
+      o->callback(opt_post_ok_cb);
     }
     { 
       Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "cancel");
@@ -1719,7 +1566,7 @@ void GUI::create_about_window(){
 
 //************************* Create the window for view options *************************
 
-void GUI::create_view_window(int num){
+void GUI::create_view_options_window(int num){
   int i;
 
   if(!init_view_window){
@@ -1757,7 +1604,7 @@ void GUI::create_view_window(int num){
 	  view_butt[i]->labelsize(CTX.fontsize);
 	  view_butt[i]->selection_color(FL_YELLOW);
 	}
-	view_input[0] = new Fl_Input(2*WB, 2*WB+4*BH, IW, BH, "Title");
+	view_input[0] = new Fl_Input(2*WB, 2*WB+4*BH, IW, BH, "Name");
 	view_input[1] = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Format");
 	for(i=0 ; i<2 ; i++){
 	  view_input[i]->labelsize(CTX.fontsize);
@@ -1775,6 +1622,7 @@ void GUI::create_view_window(int num){
 	view_butt[3]->down_box(FL_DOWN_BOX);
 	view_butt[3]->labelsize(CTX.fontsize);
 	view_butt[3]->selection_color(FL_YELLOW);
+	view_butt[3]->callback(view_options_custom_cb);
 
         view_value[0] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Minimum");
         view_value[1] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Maximum");
@@ -1896,7 +1744,7 @@ void GUI::create_view_window(int num){
     { 
       Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
       o->labelsize(CTX.fontsize);
-      o->callback(ok_cb);
+      o->callback(view_options_ok_cb);
     }
     { 
       Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "cancel");
@@ -1911,13 +1759,13 @@ void GUI::create_view_window(int num){
     view_window->resizable(view_colorbar_window);
     view_window->end();
   }
-
-  update_view_window(num);
-  
-  if(view_window->shown())
-    view_window->redraw();
-  else
-    view_window->show();
+  else{
+    update_view_window(num);
+    if(view_window->shown())
+      view_window->redraw();
+    else
+      view_window->show();
+  }
 
 }
 
@@ -1933,66 +1781,40 @@ void GUI::update_view_window(int num){
   view_window->label(buffer);
 
   // colobar
-  view_butt[0]->callback(view_options_show_scale_cb, (void*)num);
-  view_butt[0]->value(v->ShowScale);
-  view_butt[1]->callback(view_options_show_time_cb, (void*)num);
-  view_butt[1]->value(v->ShowTime);
-  view_butt[2]->callback(view_options_transparent_scale_cb, (void*)num);
-  view_butt[2]->value(v->TransparentScale);
-  view_input[0]->callback(view_options_name_cb, (void*)num);
-  view_input[0]->value(v->Name);
-  view_input[1]->callback(view_options_format_cb, (void*)num);
-  view_input[1]->value(v->Format);
+  opt_view_show_scale(num, GMSH_GUI, 0);
+  opt_view_show_time(num, GMSH_GUI, 0);
+  opt_view_transparent_scale(num, GMSH_GUI, 0);
+  opt_view_name(num, GMSH_GUI, NULL);
+  opt_view_format(num, GMSH_GUI, NULL);
   view_colorbar_window->update(v->Name, v->Min, v->Max, &v->CT, &v->Changed);
 
   // range
-  if(v->RangeType==DRAW_POST_CUSTOM) activate_custom(1);
-  else activate_custom(0);
-  view_butt[3]->callback(view_options_custom_range_cb, (void*)num);
-  view_butt[3]->value(v->RangeType==DRAW_POST_CUSTOM);
-  view_value[0]->callback(view_options_custom_min_cb, (void*)num);
-  view_value[0]->value(v->CustomMin);
-  view_value[1]->callback(view_options_custom_max_cb, (void*)num);
-  view_value[1]->value(v->CustomMax);
+  opt_view_range_type(num, GMSH_GUI, 0);
+  view_options_custom_cb(0,0);
+  opt_view_custom_min(num, GMSH_GUI, 0);
+  opt_view_custom_max(num, GMSH_GUI, 0);
   val = v->CustomMax-v->CustomMin ;
   for(i=0 ; i<2 ; i++){
     view_value[i]->step(val,1000); 
     view_value[i]->minimum(v->CustomMin); 
     view_value[i]->maximum(v->CustomMax); 
   }
-  view_butt[4]->callback(view_options_linear_range_cb, (void*)num);
-  view_butt[4]->value(v->ScaleType==DRAW_POST_LINEAR);
-  view_butt[5]->callback(view_options_logarithmic_range_cb, (void*)num);
-  view_butt[5]->value(v->ScaleType==DRAW_POST_LOGARITHMIC);
+  opt_view_scale_type(num, GMSH_GUI, 0);
 
   // intervals
-  view_value[2]->callback(view_options_nbiso_cb, (void*)num);
-  view_value[2]->value(v->NbIso);
-  view_butt[6]->callback(view_options_iso_cb, (void*)num);
-  view_butt[6]->value(v->IntervalsType==DRAW_POST_ISO);
-  view_butt[7]->callback(view_options_fillediso_cb, (void*)num);
-  view_butt[7]->value(v->IntervalsType==DRAW_POST_DISCRETE);
-  view_butt[8]->callback(view_options_continuousiso_cb, (void*)num);
-  view_butt[8]->value(v->IntervalsType==DRAW_POST_CONTINUOUS);
-  view_butt[9]->callback(view_options_numericiso_cb, (void*)num);
-  view_butt[9]->value(v->IntervalsType==DRAW_POST_NUMERIC);
+  opt_view_nb_iso(num, GMSH_GUI, 0);
+  opt_view_intervals_type(num, GMSH_GUI, 0);
 
   // offset/raise
-  view_value[3]->callback(view_options_xoffset_cb, (void*)num);
-  view_value[3]->value(v->Offset[0]);
-  view_value[4]->callback(view_options_yoffset_cb, (void*)num);
-  view_value[4]->value(v->Offset[1]);
-  view_value[5]->callback(view_options_zoffset_cb, (void*)num);
-  view_value[5]->value(v->Offset[2]);
-  view_value[6]->callback(view_options_xraise_cb, (void*)num);
-  view_value[6]->value(v->Raise[0]);
-  view_value[7]->callback(view_options_yraise_cb, (void*)num);
-  view_value[7]->value(v->Raise[1]);
-  view_value[8]->callback(view_options_zraise_cb, (void*)num);
-  view_value[8]->value(v->Raise[2]);
+  opt_view_offset0(num, GMSH_GUI, 0);
+  opt_view_offset1(num, GMSH_GUI, 0);
+  opt_view_offset2(num, GMSH_GUI, 0);
+  opt_view_raise0(num, GMSH_GUI, 0);
+  opt_view_raise1(num, GMSH_GUI, 0);
+  opt_view_raise2(num, GMSH_GUI, 0);
   val = 10.*CTX.lc ;
   for(i=3 ; i<9 ; i++){
-    view_value[i]->step(val,10000); 
+    view_value[i]->step(val,1000); 
     view_value[i]->minimum(-val); 
     view_value[i]->maximum(val); 
   }
@@ -2001,40 +1823,15 @@ void GUI::update_view_window(int num){
   if(v->NbTimeStep==1) view_timestep->deactivate();
   else view_timestep->activate();
   view_value[9]->callback(view_options_timestep_cb, (void*)num);
-  view_value[9]->value(v->TimeStep);
-  view_value[9]->maximum(v->NbTimeStep-1); 
+  opt_view_timestep(num, GMSH_GUI, 0);
 
   // vector
   if(v->ScalarOnly) view_vector->deactivate();
   else view_vector->activate();
-  view_butt[10]->callback(view_options_vector_line_cb, (void*)num);
-  view_butt[10]->value(v->ArrowType==DRAW_POST_SEGMENT);
-  view_butt[11]->callback(view_options_vector_arrow_cb, (void*)num);
-  view_butt[11]->value(v->ArrowType==DRAW_POST_ARROW);
-  view_butt[12]->callback(view_options_vector_cone_cb, (void*)num);
-  view_butt[12]->value(v->ArrowType==DRAW_POST_CONE);
-  view_butt[13]->callback(view_options_vector_displacement_cb, (void*)num);
-  view_butt[13]->value(v->ArrowType==DRAW_POST_DISPLACEMENT);
-  view_value[10]->callback(view_options_vector_scale_cb, (void*)num);
-  view_value[10]->value(v->ArrowScale);
-  view_butt[14]->callback(view_options_vector_cog_cb, (void*)num);
-  view_butt[14]->value(v->ArrowLocation==DRAW_POST_LOCATE_COG);
-  view_butt[15]->callback(view_options_vector_vertex_cb, (void*)num);
-  view_butt[15]->value(v->ArrowLocation==DRAW_POST_LOCATE_VERTEX);
-
-}
-
-// Handle activation of cutom min/max
+  opt_view_arrow_type(num, GMSH_GUI, 0);
+  opt_view_arrow_scale(num, GMSH_GUI, 0);
+  opt_view_arrow_location(num, GMSH_GUI, 0);
 
-void GUI::activate_custom(int val){
-  if(val){
-    view_value[0]->activate();
-    view_value[1]->activate();
-  }
-  else{
-    view_value[0]->deactivate();
-    view_value[1]->deactivate();
-  }
 }
 
 //*************** Create the window for geometry context dependant definitions *********
@@ -2075,14 +1872,10 @@ void GUI::create_geometry_context_window(int num){
       { 
 	g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Point");
 	g[1]->labelsize(CTX.fontsize);
-	context_geometry_input[2] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, 
-						  "X coordinate");
-	context_geometry_input[3] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, 
-						  "Y coordinate");
-	context_geometry_input[4] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, 
-						  "Z coordinate");
-	context_geometry_input[5] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, 
-						  "Characteristic length");
+	context_geometry_input[2] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X coordinate");
+	context_geometry_input[3] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y coordinate");
+	context_geometry_input[4] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z coordinate");
+	context_geometry_input[5] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "Characteristic length");
 	for(i=2 ; i<6 ; i++){
 	  context_geometry_input[i]->labelsize(CTX.fontsize);
 	  context_geometry_input[i]->align(FL_ALIGN_RIGHT);
@@ -2116,20 +1909,13 @@ void GUI::create_geometry_context_window(int num){
       { 
 	g[3] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Rotation");
 	g[3]->labelsize(CTX.fontsize);
-	context_geometry_input[9]  = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, 
-						   "X coordinate of an axis point");
-	context_geometry_input[10] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, 
-						   "Y coordinate of an axis point");
-	context_geometry_input[11] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, 
-						   "Z coordinate of an axis point");
-	context_geometry_input[12] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, 
-						   "X component of direction");
-	context_geometry_input[13] = new Fl_Input (2*WB, 2*WB+5*BH, IW, BH, 
-						   "Y component of direction");
-	context_geometry_input[14] = new Fl_Input (2*WB, 2*WB+6*BH, IW, BH, 
-						   "Z component of direction");
-	context_geometry_input[15] = new Fl_Input (2*WB, 2*WB+7*BH, IW, BH, 
-						   "Angle in radians");
+	context_geometry_input[9]  = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X coordinate of an axis point");
+	context_geometry_input[10] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y coordinate of an axis point");
+	context_geometry_input[11] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z coordinate of an axis point");
+	context_geometry_input[12] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "X component of direction");
+	context_geometry_input[13] = new Fl_Input (2*WB, 2*WB+5*BH, IW, BH, "Y component of direction");
+	context_geometry_input[14] = new Fl_Input (2*WB, 2*WB+6*BH, IW, BH, "Z component of direction");
+	context_geometry_input[15] = new Fl_Input (2*WB, 2*WB+7*BH, IW, BH, "Angle in radians");
 	for(i=9 ; i<16 ; i++){
 	  context_geometry_input[i]->labelsize(CTX.fontsize);
 	  context_geometry_input[i]->align(FL_ALIGN_RIGHT);
@@ -2145,14 +1931,10 @@ void GUI::create_geometry_context_window(int num){
       { 
 	g[4] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Scale");
 	g[4]->labelsize(CTX.fontsize);
-	context_geometry_input[16] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, 
-						   "X component of direction");
-	context_geometry_input[17] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, 
-						   "Y component of direction");
-	context_geometry_input[18] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, 
-						   "Z component of direction");
-	context_geometry_input[19] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, 
-						   "Factor");
+	context_geometry_input[16] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X component of direction");
+	context_geometry_input[17] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y component of direction");
+	context_geometry_input[18] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z component of direction");
+	context_geometry_input[19] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "Factor");
 	for(i=16 ; i<20 ; i++){
 	  context_geometry_input[i]->labelsize(CTX.fontsize);
 	  context_geometry_input[i]->align(FL_ALIGN_RIGHT);
@@ -2168,14 +1950,10 @@ void GUI::create_geometry_context_window(int num){
       { 
 	g[5] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Symmetry");
 	g[5]->labelsize(CTX.fontsize);
-	context_geometry_input[20] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, 
-						   "1st plane equation coefficient");
-	context_geometry_input[21] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, 
-						   "2nd plane equation coefficient");
-	context_geometry_input[22] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH,
-						   "3rd plane equation coefficient");
-	context_geometry_input[23] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH,
-						   "4th plane equation coefficient");
+	context_geometry_input[20] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "1st plane equation coefficient");
+	context_geometry_input[21] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "2nd plane equation coefficient");
+	context_geometry_input[22] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "3rd plane equation coefficient");
+	context_geometry_input[23] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "4th plane equation coefficient");
 	for(i=20 ; i<24 ; i++){
 	  context_geometry_input[i]->labelsize(CTX.fontsize);
 	  context_geometry_input[i]->align(FL_ALIGN_RIGHT);
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index 50bf5c9dfdce2aa972264cf5bfec3bde5141c32f..f4092b89cb42db9b923232b40708b5c5b0a729d7 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -59,9 +59,7 @@ extern    Context_Item menu_mesh_define[];
 extern        Context_Item menu_mesh_define_transfinite[]; 
 extern Context_Item menu_post[]; 
 
-// The GUI class contains only the important widgets. All these
-// widgets should stay private, and be accessed only by the public
-// member functions.
+// The GUI class contains only the important widgets (which can be set/queried).
 
 class GUI{
 
@@ -80,6 +78,8 @@ class GUI{
 
   // We keep the following widgets for easy further reference
 
+public:
+
   // menu window
   int init_menu_window;
   Fl_Window        *m_window ;
@@ -161,7 +161,6 @@ class GUI{
   Fl_Window        *context_mesh_window ;
   Fl_Input         *context_mesh_input[20] ;
 
-public:
 
   // the constructor
   GUI(int argc, char **argv);
@@ -173,8 +172,8 @@ public:
   void create_geometry_options_window();
   void create_mesh_options_window();
   void create_post_options_window();
+  void create_view_options_window(int numview);
   void create_statistics_window();
-  void create_view_window(int numview);
   void create_message_window();
   void create_help_window();
   void create_about_window();
@@ -201,7 +200,6 @@ public:
   void set_statistics();
   void update_view_window(int numview);
   void set_title(char *str);
-  void activate_custom(int val);
   void add_handler();
   int  global_shortcuts(int event);
   int  try_selection, quit_selection, end_selection;
diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp
index 62127d1c8da84d3358584a88b3da65a3f3b368aa..c1dce00915f9ea952c168323fd7e4b43a175769a 100644
--- a/Fltk/Main.cpp
+++ b/Fltk/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.15 2001-02-04 10:23:56 geuzaine Exp $
+// $Id: Main.cpp,v 1.16 2001-02-12 17:38:03 geuzaine Exp $
 
 #include <signal.h>
 
@@ -25,7 +25,7 @@ int main(int argc, char *argv[]){
  
   // Gmsh default context options
   
-  Init_Context();
+  Init_Context(0);
 
   // This does not work with FLTK right now...
   CTX.overlay = 0 ;
@@ -35,7 +35,7 @@ int main(int argc, char *argv[]){
 
   Get_Options(argc, argv, &nbf);
 
-  if(CTX.verbosity)
+  if(CTX.verbosity && CTX.terminal)
     fprintf(stderr, "%s, Version %.2f\n", gmsh_progname, GMSH_VERSION);
 
   // Initialize the static Mesh
@@ -94,6 +94,10 @@ int main(int argc, char *argv[]){
   
   WID = new GUI(argc, argv);
 
+  // Set all options in the GUI
+
+  UpdateGUI_Context(0);
+
   // The GUI is ready
   CTX.interactive = 0 ; 
 
diff --git a/Fltk/Makefile b/Fltk/Makefile
index 27f54e8439e8591ebc415e5e2799b942cb02d329..7c4328c5944283e9e7dddffa644af8f91b8d0451 100644
--- a/Fltk/Makefile
+++ b/Fltk/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.7 2001-02-09 14:51:31 geuzaine Exp $
+# $Id: Makefile,v 1.8 2001-02-12 17:38:03 geuzaine Exp $
 #
 # Makefile for "libFltk.a"
 #
@@ -78,11 +78,12 @@ Message.o: Message.cpp ../Common/Gmsh.h ../Common/Message.h \
 GUI.o: GUI.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
   ../Common/GmshUI.h ../Common/GmshVersion.h ../Common/Context.h \
-  ../Common/Const.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
-  ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \
-  ../Mesh/Metric.h ../Graphics/Draw.h ../Common/Views.h \
-  ../Common/ColorTable.h GUI.h Opengl_Window.h Colorbar_Window.h \
-  Callbacks.h ../Common/Bitmaps.h ../Common/GetOptions.h Help.h
+  ../Common/Const.h ../Common/Options.h ../Geo/Geo.h ../Mesh/Mesh.h \
+  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
+  ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \
+  ../Common/Views.h ../Common/ColorTable.h GUI.h Opengl_Window.h \
+  Colorbar_Window.h Callbacks.h ../Common/Bitmaps.h \
+  ../Common/GetOptions.h Help.h
 Callbacks.o: Callbacks.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \
@@ -90,8 +91,16 @@ Callbacks.o: Callbacks.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h \
   ../Graphics/Draw.h ../Common/Views.h ../Common/Const.h \
   ../Common/ColorTable.h ../Common/Timer.h ../Geo/Visibility.h \
-  ../Graphics/CreateFile.h ../Parser/OpenFile.h ../Common/Context.h GUI.h \
-  Opengl_Window.h Colorbar_Window.h Callbacks.h
+  ../Graphics/CreateFile.h ../Parser/OpenFile.h ../Common/Context.h \
+  ../Common/Options.h GUI.h Opengl_Window.h Colorbar_Window.h Callbacks.h
+Options.o: Options.cpp ../Common/Gmsh.h ../Common/Message.h \
+  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h GUI.h \
+  Opengl_Window.h Colorbar_Window.h ../Common/ColorTable.h ../Geo/Geo.h \
+  ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
+  ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \
+  ../Common/Views.h ../Common/Const.h ../Common/Context.h \
+  ../Common/Options.h
 Opengl.o: Opengl.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \
diff --git a/Fltk/Message.cpp b/Fltk/Message.cpp
index fc4f3aaa8c47949fdc356f515f4c4eac89f8e716..a38a18b404001536d6c3071ebc048c565706f6ca 100644
--- a/Fltk/Message.cpp
+++ b/Fltk/Message.cpp
@@ -1,4 +1,4 @@
-// $Id: Message.cpp,v 1.11 2001-02-04 10:23:56 geuzaine Exp $
+// $Id: Message.cpp,v 1.12 2001-02-12 17:38:03 geuzaine Exp $
 
 #include <signal.h>
 #ifndef WIN32
@@ -51,6 +51,8 @@ void Msg(int level, char *fmt, ...){
   char     *str = NULL;
 
   switch(level){
+  case DIRECT : verb = 2; break ;
+
   case STATUS1N : log = 0; //fallthrough
   case STATUS1  : verb = 1; window = 0; break ;
   case STATUS2N : log = 0; //fallthrough
@@ -112,7 +114,7 @@ void Msg(int level, char *fmt, ...){
       if(str) strcat(buff1, str);
       vsprintf(buff2, fmt, args); 
       strcat(buff1,buff2);
-      fprintf(stderr, "%s\n", &buff1[3]);
+      if(CTX.terminal) fprintf(stderr, "%s\n", &buff1[3]);
       if(WID && !CTX.interactive){
 	if(verb<2)
 	  WID->add_message(buff1);
@@ -138,7 +140,7 @@ void Msg(int level, char *fmt, ...){
 void Exit(int level){
   if(!CTX.interactive){
     WID->get_position(CTX.position, CTX.gl_position);
-    Print_Configuration(CTX.configfilename);
+    Print_Configuration(0, CTX.configfilename);
   }
   exit(level);
 }
@@ -161,8 +163,8 @@ void GetResources(long *s, long *us, long *mem){
 
 }
 
-void PrintResources(FILE *stream, char *fmt, long s, long us, long mem){
-  fprintf(stream, "Resources = %scpu %ld.%ld s / mem %ld kb\n", fmt, s, us, mem);
+void PrintResources(char *fmt, long s, long us, long mem){
+  Msg(DIRECT, "Resources = %scpu %ld.%ld s / mem %ld kb\n", fmt, s, us, mem);
 }
 
 double Cpu(void){
diff --git a/Makefile b/Makefile
index 53e62e901c509704c1edf8e934458490559adcc3..b664a0ecb8fd3dffec56caddbae72bc07051dcbf 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.58 2001-02-09 15:06:19 geuzaine Exp $
+# $Id: Makefile,v 1.59 2001-02-12 17:38:02 geuzaine Exp $
 # ----------------------------------------------------------------------
 #  Makefile for Gmsh  
 # ----------------------------------------------------------------------
@@ -7,7 +7,7 @@
 
                  MAKE = make
                    CC = c++
-                FLAGS = -O
+                FLAGS = -g -Wall
                    RM = rm
               RMFLAGS = -f 
 
diff --git a/Motif/CbFile.cpp b/Motif/CbFile.cpp
index 8743653e521a3816f9185ccefda6f489b0bd91a5..0b3932e51bc7fe92eec05e4d832eda2a6d9e8081 100644
--- a/Motif/CbFile.cpp
+++ b/Motif/CbFile.cpp
@@ -1,4 +1,4 @@
-// $Id: CbFile.cpp,v 1.4 2001-02-08 16:32:15 geuzaine Exp $
+// $Id: CbFile.cpp,v 1.5 2001-02-12 17:38:03 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -62,7 +62,7 @@ void FileCb(Widget w, XtPointer client_data, XtPointer call_data){
   case FILE_LOAD_GEOM       : OpenProblem(c); Draw(); break;
   case FILE_LOAD_POST       : MergeProblem(c); ColorBarRedraw(); Draw(); break;
   case FILE_SAVE_AS         : SaveToDisk(c, WID.ED.saveAsDialog, CreateOutputFile); break;
-  case FILE_SAVE_OPTIONS_AS : Print_Context(c); break;
+  case FILE_SAVE_OPTIONS_AS : Print_Context(0,c); break;
   default :
     Msg(WARNING, "Unknown event in FileCb : %d", (long int)client_data); 
     break;
diff --git a/Motif/CbInput.cpp b/Motif/CbInput.cpp
index 90613144c4ef4680fadb4d9ba42fbcfab2e38c8d..e5da3fa8ff3681d20f2cf6845dac683f3212eb8c 100644
--- a/Motif/CbInput.cpp
+++ b/Motif/CbInput.cpp
@@ -1,4 +1,4 @@
-// $Id: CbInput.cpp,v 1.5 2001-02-03 14:03:46 geuzaine Exp $
+// $Id: CbInput.cpp,v 1.6 2001-02-12 17:38:03 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -6,6 +6,7 @@
 #include "Draw.h"
 #include "Widgets.h"
 #include "Context.h"
+#include "Options.h"
 #include "XContext.h"
 #include "Register.h"
 
@@ -204,10 +205,8 @@ void KeyboardAccel(XEvent *event){
         Msg(INFO, "Highlight Disabled");
       break;
     case XK_c : case XK_C :
-      if(CTX.color.id==0) Init_Colors(1);
-      else if(CTX.color.id==1) Init_Colors(2);
-      else Init_Colors(0);
-      XtVaSetValues(WID.OD.miscColorSchemeScale,XmNvalue, CTX.color.id, NULL);
+      opt_general_color_scheme(0,GMSH_SET,opt_general_color_scheme(0,GMSH_GET,0)+1);
+      XtVaSetValues(WID.OD.miscColorSchemeScale,XmNvalue, CTX.color_scheme, NULL);
       XmUpdateDisplay(WID.OD.miscColorSchemeScale);  
       Draw();
       break;
diff --git a/Motif/CbOptions.cpp b/Motif/CbOptions.cpp
index f72989b4bb61c42b33c600c471a6979f290fbe4a..2cf6b66f6f257123b723fbe71f66610562c2c247 100644
--- a/Motif/CbOptions.cpp
+++ b/Motif/CbOptions.cpp
@@ -1,4 +1,4 @@
-// $Id: CbOptions.cpp,v 1.5 2001-02-03 14:03:46 geuzaine Exp $
+// $Id: CbOptions.cpp,v 1.6 2001-02-12 17:38:03 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -51,7 +51,9 @@ void OptionsCb (Widget w, XtPointer client_data, XtPointer call_data){
   case OPTIONS_ALPHA_BLENDING: CTX.alpha = !CTX.alpha; break;
   case OPTIONS_TRACKBALL     : CTX.useTrackball = !CTX.useTrackball; break;
   case OPTIONS_COLOR_SCHEME_SCALE: 
-    XmScaleGetValue(WID.OD.miscColorSchemeScale, &e); Init_Colors(e);
+    XmScaleGetValue(WID.OD.miscColorSchemeScale, &e); 
+    CTX.color_scheme=e;
+    Init_Colors(0);
     Draw();
     break ;
   case OPTIONS_ORTHOGRAPHIC  : CTX.ortho = 1; break;
@@ -116,7 +118,7 @@ void OptionsCb (Widget w, XtPointer client_data, XtPointer call_data){
             CTX.r[0],CTX.r[1],CTX.r[2],
             CTX.t[0],CTX.t[1],CTX.t[2],
             CTX.s[0],CTX.s[1],CTX.s[2]);
-    Print_Context(NULL);
+    Print_Context(0, NULL);
     break ;
 
     /* save */
diff --git a/Motif/CbPost.cpp b/Motif/CbPost.cpp
index aa28ed636e29d2233c6f117d94f71c884c407a15..dcbdf0f72f3b001eab5ffdbabd045e77c8975fef 100644
--- a/Motif/CbPost.cpp
+++ b/Motif/CbPost.cpp
@@ -1,4 +1,4 @@
-// $Id: CbPost.cpp,v 1.4 2001-01-29 08:43:45 geuzaine Exp $
+// $Id: CbPost.cpp,v 1.5 2001-02-12 17:38:03 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -104,8 +104,8 @@ void DuplicateViewCb (Widget w, XtPointer client_data, XtPointer call_data){
 
   v1 = (Post_View*)List_Pointer(Post_ViewList,(long int)client_data-1);
 
-  BeginView(0);
-  EndView(0, 0, v1->FileName, v1->Name, 0., 0., 0.);
+  BeginView(0, 0);
+  EndView(0, 0, v1->FileName, v1->Name);
 
   v2 = (Post_View*)List_Pointer(Post_ViewList,List_Nbr(Post_ViewList)-1);
 
diff --git a/Motif/Main.cpp b/Motif/Main.cpp
index 2e3ed91c5cf7cf7372d616077890ada45334248c..63feaae2c5edbb4c7b49aba970c69594a51cf2a0 100644
--- a/Motif/Main.cpp
+++ b/Motif/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.8 2001-02-03 14:03:46 geuzaine Exp $
+// $Id: Main.cpp,v 1.9 2001-02-12 17:38:03 geuzaine Exp $
 
 #include <signal.h>
 
@@ -46,7 +46,7 @@ int main(int argc, char *argv[]){
  
   /* Gmsh default context options */
   
-  Init_Context();
+  Init_Context(0);
 
   /* Command line options */
 
diff --git a/Motif/Message.cpp b/Motif/Message.cpp
index 43408b4dff787ece5adc92a20ec1cf804c1cf0f9..bcc239b2772033141262ba9a9304d3c5ac8aafdd 100644
--- a/Motif/Message.cpp
+++ b/Motif/Message.cpp
@@ -1,4 +1,4 @@
-// $Id: Message.cpp,v 1.5 2001-01-24 11:24:06 geuzaine Exp $
+// $Id: Message.cpp,v 1.6 2001-02-12 17:38:03 geuzaine Exp $
 
 #include <signal.h>
 #include <sys/resource.h>
@@ -67,6 +67,10 @@ void Msg(int level, char *fmt, ...){
   va_start (args, fmt);
 
   switch(level){
+  case DIRECT :
+    vfprintf(stderr, fmt, args); 
+    fprintf(stderr, "\n");
+    break;
   case FATAL :
     fprintf(stderr, FATAL_STR);
     vfprintf(stderr, fmt, args); 
diff --git a/Motif/Widgets.cpp b/Motif/Widgets.cpp
index 6ffa4039d6d0702ac2de969d0f90beee4e09c796..0851d7a7e5c8be0f42f130c86f54ef421869a6f5 100644
--- a/Motif/Widgets.cpp
+++ b/Motif/Widgets.cpp
@@ -1,4 +1,4 @@
-// $Id: Widgets.cpp,v 1.2 2001-02-03 14:03:46 geuzaine Exp $
+// $Id: Widgets.cpp,v 1.3 2001-02-12 17:38:03 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -1334,7 +1334,7 @@ void CreateWidgets_OD(Widgets_T *w){
   XtSetArg(arg[i], XmNmaximum, 2); i++;
   XtSetArg(arg[i], XmNdecimalPoints, 0); i++;
   XtSetArg(arg[i], XmNshowValue, True); i++;
-  XtSetArg(arg[i], XmNvalue, CTX.color.id); i++;
+  XtSetArg(arg[i], XmNvalue, CTX.color_scheme); i++;
   XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++;
   w->OD.miscColorSchemeScale = XmCreateScale(w->OD.miscColorSchemeFrameRowCol, "ODmiscColorSchemeScale", arg, i);
   XtManageChild(w->OD.miscColorSchemeScale);
diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l
index 225f44eea2c70aaa656396315f22ee00ce166d9f..995276c8d8f152d63b161eeda3a6a23717bdf43b 100644
--- a/Parser/Gmsh.l
+++ b/Parser/Gmsh.l
@@ -1,6 +1,6 @@
 %{
 
-// $Id: Gmsh.l,v 1.25 2001-01-08 08:05:47 geuzaine Exp $
+// $Id: Gmsh.l,v 1.26 2001-02-12 17:38:03 geuzaine Exp $
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -110,6 +110,7 @@ Circle                  return tCircle;
 Coherence               return tCoherence;
 Complex                 return tComplex;
 Color                   return tColor;
+ColorTable              return tColorTable;
 CatmullRom		return tSpline;
 Call                    return tCall;
 
@@ -186,7 +187,6 @@ Trimmed			return tTrimmed;
 
 Using                   return tUsing;
 
-View                    return tView;
 Volume                  return tVolume;
 
 With			return tWith;
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 5dd9dca4d97f6dedd8072ebf1fc4384556ed5ab8..9eef6f2a8f06564bd0d1b7533bf8ea8d2b790b53 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -65,28 +65,28 @@
 #define	tDelete	315
 #define	tCoherence	316
 #define	tIntersect	317
-#define	tView	318
-#define	tAttractor	319
-#define	tLayers	320
-#define	tScalarTetrahedron	321
-#define	tVectorTetrahedron	322
-#define	tTensorTetrahedron	323
-#define	tScalarTriangle	324
-#define	tVectorTriangle	325
-#define	tTensorTriangle	326
-#define	tScalarLine	327
-#define	tVectorLine	328
-#define	tTensorLine	329
-#define	tScalarPoint	330
-#define	tVectorPoint	331
-#define	tTensorPoint	332
-#define	tBSpline	333
-#define	tNurbs	334
-#define	tOrder	335
-#define	tWith	336
-#define	tBounds	337
-#define	tKnots	338
-#define	tColor	339
+#define	tAttractor	318
+#define	tLayers	319
+#define	tScalarTetrahedron	320
+#define	tVectorTetrahedron	321
+#define	tTensorTetrahedron	322
+#define	tScalarTriangle	323
+#define	tVectorTriangle	324
+#define	tTensorTriangle	325
+#define	tScalarLine	326
+#define	tVectorLine	327
+#define	tTensorLine	328
+#define	tScalarPoint	329
+#define	tVectorPoint	330
+#define	tTensorPoint	331
+#define	tBSpline	332
+#define	tNurbs	333
+#define	tOrder	334
+#define	tWith	335
+#define	tBounds	336
+#define	tKnots	337
+#define	tColor	338
+#define	tColorTable	339
 #define	tFor	340
 #define	tIn	341
 #define	tEndFor	342
@@ -169,7 +169,7 @@
 #line 1 "Gmsh.y"
  
 
-// $Id: Gmsh.tab.cpp,v 1.70 2001-02-08 16:32:15 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.71 2001-02-12 17:38:03 geuzaine Exp $
 
 #include <stdarg.h>
 
@@ -180,6 +180,7 @@
 #include "CAD.h"
 #include "DataBase.h"
 #include "Mesh.h"
+#include "Draw.h"
 #include "Create.h"
 #include "Views.h"
 #include "StepGeomDatabase.h"
@@ -196,11 +197,10 @@
 #include <alloca.h>
 #endif
 
-
-
 int     Force_ViewNumber = 0 ;
 List_T *Symbol_L;
 
+extern Context_T  CTX;
 extern Mesh      *THEM;
 extern Post_View *ActualView;
 
@@ -222,12 +222,12 @@ static ExtrudeParams  extr;
 static List_T         *ListOfDouble_L,*ListOfDouble2_L;
 static List_T         *ListOfListOfDouble_L, *ListOfColor_L=NULL;
 static char           *str;
-static void           *pNumOpt;
-static char          **pStrOpt, *pStrViewOpt;
-static unsigned int   *pColOpt;
 static StringXString  *pStrCat;
 static StringXNumber  *pNumCat;
 static StringXColor   *pColCat;
+static double         (*pNumOpt)(int num, int action, double value);
+static char*          (*pStrOpt)(int num, int action, char *value);
+static unsigned int   (*pColOpt)(int num, int action, unsigned int value);
 
 char *strsave(char *ptr);
 void  yyerror (char *s);
@@ -254,11 +254,11 @@ typedef union {
 
 
 
-#define	YYFINAL		1546
+#define	YYFINAL		1487
 #define	YYFLAG		-32768
 #define	YYNTBASE	182
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 417 ? yytranslate[x] : 261)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 417 ? yytranslate[x] : 263)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -320,259 +320,240 @@ static const short yyprhs[] = {     0,
    684,   704,   706,   710,   711,   731,   733,   737,   738,   764,
    766,   770,   771,   797,   799,   803,   804,   830,   832,   836,
    837,   869,   871,   875,   876,   908,   910,   914,   915,   947,
-   952,   960,   967,   971,   978,   982,   989,   994,  1002,  1007,
-  1015,  1020,  1028,  1033,  1041,  1048,  1060,  1067,  1079,  1086,
-  1098,  1105,  1117,  1124,  1136,  1143,  1155,  1161,  1173,  1179,
-  1191,  1200,  1212,  1220,  1229,  1242,  1249,  1255,  1263,  1271,
-  1284,  1292,  1302,  1320,  1328,  1337,  1346,  1354,  1366,  1372,
-  1381,  1394,  1403,  1426,  1447,  1456,  1465,  1471,  1480,  1488,
-  1497,  1503,  1515,  1521,  1531,  1533,  1535,  1537,  1538,  1541,
-  1546,  1551,  1558,  1562,  1566,  1570,  1573,  1576,  1583,  1592,
-  1601,  1612,  1614,  1617,  1619,  1623,  1628,  1630,  1639,  1652,
-  1661,  1674,  1683,  1696,  1708,  1724,  1726,  1729,  1739,  1742,
-  1749,  1759,  1769,  1778,  1787,  1796,  1803,  1808,  1811,  1814,
-  1816,  1819,  1821,  1823,  1825,  1827,  1829,  1831,  1835,  1838,
-  1841,  1844,  1848,  1852,  1856,  1860,  1864,  1868,  1872,  1876,
-  1880,  1884,  1888,  1892,  1896,  1900,  1906,  1911,  1916,  1921,
-  1926,  1931,  1936,  1941,  1946,  1951,  1956,  1963,  1968,  1973,
-  1978,  1983,  1988,  1993,  2000,  2007,  2014,  2019,  2021,  2023,
-  2025,  2030,  2033,  2039,  2042,  2048,  2052,  2061,  2066,  2076,
-  2081,  2091,  2095,  2101,  2103,  2106,  2109,  2113,  2117,  2129,
-  2139,  2147,  2155,  2156,  2160,  2162,  2166,  2167,  2171,  2175,
-  2177,  2181,  2182,  2184,  2188,  2192,  2194,  2196,  2200,  2204,
-  2208,  2214,  2224,  2232,  2238,  2240,  2246,  2250,  2259,  2261,
-  2265,  2267,  2272
+   949,   951,   953,   955,   957,   959,   961,   966,   974,   981,
+   985,   992,   999,  1009,  1016,  1026,  1032,  1041,  1050,  1062,
+  1072,  1080,  1089,  1102,  1109,  1115,  1123,  1131,  1144,  1152,
+  1162,  1180,  1188,  1197,  1206,  1214,  1226,  1232,  1241,  1254,
+  1263,  1286,  1307,  1316,  1325,  1331,  1340,  1348,  1357,  1363,
+  1375,  1381,  1391,  1393,  1395,  1397,  1398,  1401,  1406,  1411,
+  1418,  1422,  1426,  1430,  1433,  1436,  1443,  1452,  1461,  1472,
+  1474,  1477,  1479,  1483,  1488,  1490,  1499,  1512,  1521,  1534,
+  1543,  1556,  1568,  1584,  1586,  1589,  1599,  1602,  1609,  1619,
+  1629,  1638,  1647,  1656,  1663,  1668,  1671,  1674,  1676,  1679,
+  1681,  1683,  1685,  1687,  1689,  1691,  1695,  1698,  1701,  1704,
+  1708,  1712,  1716,  1720,  1724,  1728,  1732,  1736,  1740,  1744,
+  1748,  1752,  1756,  1760,  1766,  1771,  1776,  1781,  1786,  1791,
+  1796,  1801,  1806,  1811,  1816,  1823,  1828,  1833,  1838,  1843,
+  1848,  1853,  1860,  1867,  1874,  1879,  1881,  1883,  1885,  1890,
+  1893,  1899,  1903,  1910,  1915,  1923,  1927,  1933,  1935,  1938,
+  1941,  1945,  1949,  1961,  1971,  1979,  1987,  1988,  1992,  1994,
+  1998,  1999,  2003,  2007,  2009,  2013,  2014,  2016,  2020,  2024,
+  2026,  2028,  2032,  2036,  2040,  2046,  2056,  2064,  2070,  2072,
+  2078,  2082,  2089,  2091,  2095,  2097,  2102
 };
 
 static const short yyrhs[] = {   184,
      0,   183,     0,   189,     0,     1,     6,     0,   140,     0,
-   143,   144,   244,   244,   244,   145,   146,   142,   244,   244,
-   244,   142,   244,   244,   244,   142,   244,   244,   244,   147,
+   143,   144,   246,   246,   246,   145,   146,   142,   246,   246,
+   246,   142,   246,   246,   246,   142,   246,   246,   246,   147,
    148,     0,   141,     0,     0,   184,   185,     0,   186,     0,
    188,     0,   187,     0,   114,     6,     0,   115,     6,     0,
    117,     6,     0,   116,     6,     0,   118,     6,     0,   119,
-   174,   251,   179,     5,   175,     6,     0,   120,   174,   251,
-   175,     6,     0,   121,   174,     5,   179,     5,   179,   251,
-   179,   251,   179,     5,   179,     5,   179,     5,   175,     6,
-     0,     3,     7,    98,   174,     5,   179,   249,   175,     6,
-     0,     3,     7,    97,   174,     5,   179,   246,   179,   255,
-   179,   245,   179,   245,   179,   245,   179,   255,   179,   255,
-   179,   245,   175,     6,     0,     3,     7,    96,   174,     5,
-   179,   246,   179,   246,   179,   253,   179,   245,   179,   245,
-   179,   245,   179,   245,   179,   255,   179,   255,   179,   255,
-   179,   255,   179,   245,   175,     6,     0,     3,     7,   104,
-   174,     5,   179,     3,   179,     3,   179,     3,   179,   245,
+   174,   253,   179,     5,   175,     6,     0,   120,   174,   253,
+   175,     6,     0,   121,   174,     5,   179,     5,   179,   253,
+   179,   253,   179,     5,   179,     5,   179,     5,   175,     6,
+     0,     3,     7,    98,   174,     5,   179,   251,   175,     6,
+     0,     3,     7,    97,   174,     5,   179,   248,   179,   257,
+   179,   247,   179,   247,   179,   247,   179,   257,   179,   257,
+   179,   247,   175,     6,     0,     3,     7,    96,   174,     5,
+   179,   248,   179,   248,   179,   255,   179,   247,   179,   247,
+   179,   247,   179,   247,   179,   257,   179,   257,   179,   257,
+   179,   257,   179,   247,   175,     6,     0,     3,     7,   104,
+   174,     5,   179,     3,   179,     3,   179,     3,   179,   247,
    175,     6,     0,     3,     7,   108,   174,     5,   179,     3,
-   179,   245,   175,     6,     0,     3,     7,   125,   174,     5,
-   179,     3,   179,   245,   175,     6,     0,     3,     7,   106,
-   174,     5,   179,   165,   179,   165,   179,   246,   179,   245,
-   175,     6,     0,     3,     7,   109,   174,     5,   179,   255,
-   175,     6,     0,     3,     7,   110,   174,     5,   179,   255,
-   179,     3,   179,   245,   175,     6,     0,     3,     7,   105,
+   179,   247,   175,     6,     0,     3,     7,   125,   174,     5,
+   179,     3,   179,   247,   175,     6,     0,     3,     7,   106,
+   174,     5,   179,   165,   179,   165,   179,   248,   179,   247,
+   175,     6,     0,     3,     7,   109,   174,     5,   179,   257,
+   175,     6,     0,     3,     7,   110,   174,     5,   179,   257,
+   179,     3,   179,   247,   175,     6,     0,     3,     7,   105,
    174,     5,   179,     3,   175,     6,     0,     3,     7,   111,
-   174,     5,   179,     3,   179,   246,   175,     6,     0,     3,
+   174,     5,   179,     3,   179,   248,   175,     6,     0,     3,
      7,   113,   174,     5,   179,     3,   179,     3,   179,     3,
-   175,     6,     0,     3,     7,   112,   174,     5,   179,   249,
+   175,     6,     0,     3,     7,   112,   174,     5,   179,   251,
    175,     6,     0,     3,     7,   107,   174,     5,   179,     3,
    175,     6,     0,     3,     7,    37,   174,     5,   179,     3,
    179,     3,   175,     6,     0,     3,     7,   123,   174,     5,
-   179,   255,   175,     6,     0,     3,     7,   124,   174,     5,
-   179,   255,   179,     3,   175,     6,     0,     3,     7,   122,
+   179,   257,   175,     6,     0,     3,     7,   124,   174,     5,
+   179,   257,   179,     3,   175,     6,     0,     3,     7,   122,
    174,     5,   179,     3,   175,     6,     0,     3,     7,   126,
-   174,     5,   179,     3,   179,   246,   175,     6,     0,     3,
-     7,   127,   174,     5,   179,     3,   179,   246,   179,   246,
+   174,     5,   179,     3,   179,   248,   175,     6,     0,     3,
+     7,   127,   174,     5,   179,     3,   179,   248,   179,   248,
    175,     6,     0,     3,     7,   134,   174,     5,   179,     3,
-   179,   246,   179,   246,   175,     6,     0,     3,     7,   128,
-   174,     5,   179,     3,   179,   246,   175,     6,     0,     3,
-     7,   138,   174,     5,   179,     3,   179,   246,   179,   246,
+   179,   248,   179,   248,   175,     6,     0,     3,     7,   128,
+   174,     5,   179,     3,   179,   248,   175,     6,     0,     3,
+     7,   138,   174,     5,   179,     3,   179,   248,   179,   248,
    175,     6,     0,     3,     7,   129,   174,     5,   179,     3,
-   179,   255,   179,   255,   179,   245,   179,   245,   175,     6,
-     0,     3,     7,   130,   174,     5,   179,   255,   175,     6,
-     0,     3,     7,   131,   174,   132,   179,   245,   179,     3,
-   175,     6,     0,     3,     7,   133,   174,     5,   179,   255,
-   179,   245,   175,     6,     0,     3,     7,   135,   174,     5,
+   179,   257,   179,   257,   179,   247,   179,   247,   175,     6,
+     0,     3,     7,   130,   174,     5,   179,   257,   175,     6,
+     0,     3,     7,   131,   174,   132,   179,   247,   179,     3,
+   175,     6,     0,     3,     7,   133,   174,     5,   179,   257,
+   179,   247,   175,     6,     0,     3,     7,   135,   174,     5,
    179,     5,   179,     3,   179,     3,   175,     6,     0,     3,
      7,   136,   174,     5,   179,     5,   179,     3,   175,     6,
      0,     3,     7,   137,   174,     3,   179,     3,   175,     6,
-     0,     0,   189,   190,     0,   192,     0,   191,     0,   230,
-     0,   231,     0,   232,     0,   235,     0,   236,     0,   239,
-     0,   242,     0,   243,     0,   238,     0,   237,     0,    31,
-   174,     5,   175,     6,     0,    31,   174,     5,   179,   256,
-   175,     6,     0,    64,     5,   180,   193,   181,     6,     0,
-    64,     5,     4,   249,   180,   193,   181,     6,     0,     0,
+     0,     0,   189,   190,     0,   192,     0,   191,     0,   232,
+     0,   233,     0,   234,     0,   237,     0,   238,     0,   241,
+     0,   244,     0,   245,     0,   240,     0,   239,     0,    31,
+   174,     5,   175,     6,     0,    31,   174,     5,   179,   258,
+   175,     6,     0,     4,     5,   180,   193,   181,     6,     0,
+     4,     5,     4,   251,   180,   193,   181,     6,     0,     0,
    193,   195,     0,   193,   198,     0,   193,   201,     0,   193,
    204,     0,   193,   207,     0,   193,   210,     0,   193,   213,
      0,   193,   216,     0,   193,   219,     0,   193,   222,     0,
-   193,   225,     0,   193,   228,     0,   246,     0,   194,   179,
-   246,     0,     0,    76,   174,   246,   179,   246,   179,   246,
-   175,   196,   180,   194,   181,     6,     0,   246,     0,   197,
-   179,   246,     0,     0,    77,   174,   246,   179,   246,   179,
-   246,   175,   199,   180,   197,   181,     6,     0,   246,     0,
-   200,   179,   246,     0,     0,    78,   174,   246,   179,   246,
-   179,   246,   175,   202,   180,   200,   181,     6,     0,   246,
-     0,   203,   179,   246,     0,     0,    73,   174,   246,   179,
-   246,   179,   246,   179,   246,   179,   246,   179,   246,   175,
-   205,   180,   203,   181,     6,     0,   246,     0,   206,   179,
-   246,     0,     0,    74,   174,   246,   179,   246,   179,   246,
-   179,   246,   179,   246,   179,   246,   175,   208,   180,   206,
-   181,     6,     0,   246,     0,   209,   179,   246,     0,     0,
-    75,   174,   246,   179,   246,   179,   246,   179,   246,   179,
-   246,   179,   246,   175,   211,   180,   209,   181,     6,     0,
-   246,     0,   212,   179,   246,     0,     0,    70,   174,   246,
-   179,   246,   179,   246,   179,   246,   179,   246,   179,   246,
-   179,   246,   179,   246,   179,   246,   175,   214,   180,   212,
-   181,     6,     0,   246,     0,   215,   179,   246,     0,     0,
-    71,   174,   246,   179,   246,   179,   246,   179,   246,   179,
-   246,   179,   246,   179,   246,   179,   246,   179,   246,   175,
-   217,   180,   215,   181,     6,     0,   246,     0,   218,   179,
-   246,     0,     0,    72,   174,   246,   179,   246,   179,   246,
-   179,   246,   179,   246,   179,   246,   179,   246,   179,   246,
-   179,   246,   175,   220,   180,   218,   181,     6,     0,   246,
-     0,   221,   179,   246,     0,     0,    67,   174,   246,   179,
-   246,   179,   246,   179,   246,   179,   246,   179,   246,   179,
-   246,   179,   246,   179,   246,   179,   246,   179,   246,   179,
-   246,   175,   223,   180,   221,   181,     6,     0,   246,     0,
-   224,   179,   246,     0,     0,    68,   174,   246,   179,   246,
-   179,   246,   179,   246,   179,   246,   179,   246,   179,   246,
-   179,   246,   179,   246,   179,   246,   179,   246,   179,   246,
-   175,   226,   180,   224,   181,     6,     0,   246,     0,   227,
-   179,   246,     0,     0,    69,   174,   246,   179,   246,   179,
-   246,   179,   246,   179,   246,   179,   246,   179,   246,   179,
-   246,   179,   246,   179,   246,   179,   246,   179,   246,   175,
-   229,   180,   227,   181,     6,     0,     4,     7,   246,     6,
-     0,     4,   176,   246,   177,     7,   246,     6,     0,     4,
-   176,   177,     7,   255,     6,     0,     4,   170,     6,     0,
-     4,   176,   246,   177,   170,     6,     0,     4,   171,     6,
-     0,     4,   176,   246,   177,   171,     6,     0,     4,   149,
-   246,     6,     0,     4,   176,   246,   177,   149,   246,     6,
-     0,     4,   150,   246,     6,     0,     4,   176,   246,   177,
-   150,   246,     6,     0,     4,   151,   246,     6,     0,     4,
-   176,   246,   177,   151,   246,     6,     0,     4,   152,   246,
-     6,     0,     4,   176,   246,   177,   152,   246,     6,     0,
-     4,   178,     4,     7,     5,     6,     0,     4,   178,    64,
-   176,   246,   177,   178,     4,     7,     5,     6,     0,     4,
-   178,     4,     7,   246,     6,     0,     4,   178,    64,   176,
-   246,   177,   178,     4,     7,   246,     6,     0,     4,   178,
-     4,   149,   246,     6,     0,     4,   178,    64,   176,   246,
-   177,   178,     4,   149,   246,     6,     0,     4,   178,     4,
-   150,   246,     6,     0,     4,   178,    64,   176,   246,   177,
-   178,     4,   150,   246,     6,     0,     4,   178,     4,   151,
-   246,     6,     0,     4,   178,    64,   176,   246,   177,   178,
-     4,   151,   246,     6,     0,     4,   178,     4,   152,   246,
-     6,     0,     4,   178,    64,   176,   246,   177,   178,     4,
-   152,   246,     6,     0,     4,   178,     4,   170,     6,     0,
-     4,   178,    64,   176,   246,   177,   178,     4,   170,   246,
-     6,     0,     4,   178,     4,   171,     6,     0,     4,   178,
-    64,   176,   246,   177,   178,     4,   171,   246,     6,     0,
-     4,   178,    85,   178,     4,     7,   257,     6,     0,     4,
-   178,    64,   176,   246,   177,   178,    85,     7,   258,     6,
-     0,    34,   174,   246,   175,     7,   249,     6,     0,    49,
-    34,   174,   246,   175,     7,   255,     6,     0,    65,    34,
-   255,     7,   180,   246,   179,   246,   179,   246,   181,     6,
-     0,    41,    42,   255,     7,   246,     6,     0,    34,   180,
-   246,   181,     6,     0,    37,   174,   246,   175,     7,   255,
-     6,     0,    39,   174,   246,   175,     7,   255,     6,     0,
-    65,    37,   255,     7,   180,   246,   179,   246,   179,   246,
-   181,     6,     0,    35,   174,   246,   175,     7,   255,     6,
-     0,    35,   174,   246,   175,     7,   255,    45,   249,     6,
-     0,    43,   174,   246,   175,     7,   180,   246,   179,   246,
+   193,   225,     0,   193,   228,     0,   248,     0,   194,   179,
+   248,     0,     0,    75,   174,   248,   179,   248,   179,   248,
+   175,   196,   180,   194,   181,     6,     0,   248,     0,   197,
+   179,   248,     0,     0,    76,   174,   248,   179,   248,   179,
+   248,   175,   199,   180,   197,   181,     6,     0,   248,     0,
+   200,   179,   248,     0,     0,    77,   174,   248,   179,   248,
+   179,   248,   175,   202,   180,   200,   181,     6,     0,   248,
+     0,   203,   179,   248,     0,     0,    72,   174,   248,   179,
+   248,   179,   248,   179,   248,   179,   248,   179,   248,   175,
+   205,   180,   203,   181,     6,     0,   248,     0,   206,   179,
+   248,     0,     0,    73,   174,   248,   179,   248,   179,   248,
+   179,   248,   179,   248,   179,   248,   175,   208,   180,   206,
+   181,     6,     0,   248,     0,   209,   179,   248,     0,     0,
+    74,   174,   248,   179,   248,   179,   248,   179,   248,   179,
+   248,   179,   248,   175,   211,   180,   209,   181,     6,     0,
+   248,     0,   212,   179,   248,     0,     0,    69,   174,   248,
+   179,   248,   179,   248,   179,   248,   179,   248,   179,   248,
+   179,   248,   179,   248,   179,   248,   175,   214,   180,   212,
+   181,     6,     0,   248,     0,   215,   179,   248,     0,     0,
+    70,   174,   248,   179,   248,   179,   248,   179,   248,   179,
+   248,   179,   248,   179,   248,   179,   248,   179,   248,   175,
+   217,   180,   215,   181,     6,     0,   248,     0,   218,   179,
+   248,     0,     0,    71,   174,   248,   179,   248,   179,   248,
+   179,   248,   179,   248,   179,   248,   179,   248,   179,   248,
+   179,   248,   175,   220,   180,   218,   181,     6,     0,   248,
+     0,   221,   179,   248,     0,     0,    66,   174,   248,   179,
+   248,   179,   248,   179,   248,   179,   248,   179,   248,   179,
+   248,   179,   248,   179,   248,   179,   248,   179,   248,   179,
+   248,   175,   223,   180,   221,   181,     6,     0,   248,     0,
+   224,   179,   248,     0,     0,    67,   174,   248,   179,   248,
+   179,   248,   179,   248,   179,   248,   179,   248,   179,   248,
+   179,   248,   179,   248,   179,   248,   179,   248,   179,   248,
+   175,   226,   180,   224,   181,     6,     0,   248,     0,   227,
+   179,   248,     0,     0,    68,   174,   248,   179,   248,   179,
+   248,   179,   248,   179,   248,   179,   248,   179,   248,   179,
+   248,   179,   248,   179,   248,   179,   248,   179,   248,   175,
+   229,   180,   227,   181,     6,     0,     7,     0,   149,     0,
+   150,     0,   151,     0,   152,     0,   170,     0,   171,     0,
+     4,   230,   248,     6,     0,     4,   176,   248,   177,   230,
+   248,     6,     0,     4,   176,   177,     7,   257,     6,     0,
+     4,   231,     6,     0,     4,   176,   248,   177,   231,     6,
+     0,     4,   178,     4,     7,     5,     6,     0,     4,   176,
+   248,   177,   178,     4,     7,     5,     6,     0,     4,   178,
+     4,   230,   248,     6,     0,     4,   176,   248,   177,   178,
+     4,   230,   248,     6,     0,     4,   178,     4,   231,     6,
+     0,     4,   176,   248,   177,   178,     4,   231,     6,     0,
+     4,   178,    84,   178,     4,     7,   259,     6,     0,     4,
+   176,   248,   177,   178,    84,   178,     4,     7,   259,     6,
+     0,     4,   176,   248,   177,   178,    85,     7,   260,     6,
+     0,    34,   174,   248,   175,     7,   251,     6,     0,    49,
+    34,   174,   248,   175,     7,   257,     6,     0,    64,    34,
+   257,     7,   180,   248,   179,   248,   179,   248,   181,     6,
+     0,    41,    42,   257,     7,   248,     6,     0,    34,   180,
+   248,   181,     6,     0,    37,   174,   248,   175,     7,   257,
+     6,     0,    39,   174,   248,   175,     7,   257,     6,     0,
+    64,    37,   257,     7,   180,   248,   179,   248,   179,   248,
+   181,     6,     0,    35,   174,   248,   175,     7,   257,     6,
+     0,    35,   174,   248,   175,     7,   257,    45,   251,     6,
+     0,    43,   174,   248,   175,     7,   180,   248,   179,   248,
    179,     5,   179,     5,   179,     5,   181,     6,     0,    36,
-   174,   246,   175,     7,   255,     6,     0,    49,    37,   174,
-   246,   175,     7,   255,     6,     0,    37,    59,   174,   246,
-   175,     7,   255,     6,     0,    79,   174,   246,   175,     7,
-   255,     6,     0,    80,   174,   246,   175,     7,   255,    84,
-   255,    81,   246,     6,     0,    37,   180,   246,   181,     6,
-     0,    45,    38,   174,   246,   175,     7,   255,     6,     0,
-   139,    38,   174,   246,   175,     7,   180,   246,   179,   255,
-   181,     6,     0,    46,    38,   174,   246,   175,     7,   255,
-     6,     0,    80,    38,    82,    83,   174,   246,   175,     7,
-   253,    84,   180,   255,   179,   255,   181,    81,   180,   246,
-   179,   246,   181,     6,     0,    80,    38,   174,   246,   175,
-     7,   253,    84,   180,   255,   179,   255,   181,    81,   180,
-   246,   179,   246,   181,     6,     0,    49,    38,   174,   246,
-   175,     7,   255,     6,     0,    38,    59,   174,   246,   175,
-     7,   255,     6,     0,    38,   180,   246,   181,     6,     0,
-    48,    40,   174,   246,   175,     7,   255,     6,     0,    40,
-   174,   246,   175,     7,   255,     6,     0,    49,    40,   174,
-   246,   175,     7,   255,     6,     0,    54,   249,   180,   233,
-   181,     0,    53,   180,   249,   179,   249,   179,   246,   181,
-   180,   233,   181,     0,    55,   249,   180,   233,   181,     0,
-    56,   180,   249,   179,   246,   181,   180,   233,   181,     0,
-   235,     0,   234,     0,   232,     0,     0,   234,   231,     0,
-    58,   180,   234,   181,     0,    61,   180,   234,   181,     0,
-    61,    64,   176,   246,   177,     6,     0,    61,    95,     6,
-     0,     4,   260,     6,     0,     4,   246,     6,     0,    91,
-     6,     0,    33,     6,     0,    86,   174,   246,     8,   246,
-   175,     0,    86,   174,   246,     8,   246,     8,   246,   175,
-     0,    86,     4,    87,   180,   246,     8,   246,   181,     0,
-    86,     4,    87,   180,   246,     8,   246,     8,   246,   181,
+   174,   248,   175,     7,   257,     6,     0,    49,    37,   174,
+   248,   175,     7,   257,     6,     0,    37,    59,   174,   248,
+   175,     7,   257,     6,     0,    78,   174,   248,   175,     7,
+   257,     6,     0,    79,   174,   248,   175,     7,   257,    83,
+   257,    80,   248,     6,     0,    37,   180,   248,   181,     6,
+     0,    45,    38,   174,   248,   175,     7,   257,     6,     0,
+   139,    38,   174,   248,   175,     7,   180,   248,   179,   257,
+   181,     6,     0,    46,    38,   174,   248,   175,     7,   257,
+     6,     0,    79,    38,    81,    82,   174,   248,   175,     7,
+   255,    83,   180,   257,   179,   257,   181,    80,   180,   248,
+   179,   248,   181,     6,     0,    79,    38,   174,   248,   175,
+     7,   255,    83,   180,   257,   179,   257,   181,    80,   180,
+   248,   179,   248,   181,     6,     0,    49,    38,   174,   248,
+   175,     7,   257,     6,     0,    38,    59,   174,   248,   175,
+     7,   257,     6,     0,    38,   180,   248,   181,     6,     0,
+    48,    40,   174,   248,   175,     7,   257,     6,     0,    40,
+   174,   248,   175,     7,   257,     6,     0,    49,    40,   174,
+   248,   175,     7,   257,     6,     0,    54,   251,   180,   235,
+   181,     0,    53,   180,   251,   179,   251,   179,   248,   181,
+   180,   235,   181,     0,    55,   251,   180,   235,   181,     0,
+    56,   180,   251,   179,   248,   181,   180,   235,   181,     0,
+   237,     0,   236,     0,   234,     0,     0,   236,   233,     0,
+    58,   180,   236,   181,     0,    61,   180,   236,   181,     0,
+    61,     4,   176,   248,   177,     6,     0,    61,    95,     6,
+     0,     4,   262,     6,     0,     4,   248,     6,     0,    91,
+     6,     0,    33,     6,     0,    86,   174,   248,     8,   248,
+   175,     0,    86,   174,   248,     8,   248,     8,   248,   175,
+     0,    86,     4,    87,   180,   248,     8,   248,   181,     0,
+    86,     4,    87,   180,   248,     8,   248,     8,   248,   181,
      0,    88,     0,    94,     4,     0,    92,     0,    93,     4,
-     6,     0,    89,   174,   246,   175,     0,    90,     0,    57,
-    34,   180,   246,   179,   249,   181,     6,     0,    57,    34,
-   180,   246,   179,   249,   179,   249,   179,   246,   181,     6,
-     0,    57,    37,   180,   246,   179,   249,   181,     6,     0,
-    57,    37,   180,   246,   179,   249,   179,   249,   179,   246,
-   181,     6,     0,    57,    38,   180,   246,   179,   249,   181,
-     6,     0,    57,    38,   180,   246,   179,   249,   179,   249,
-   179,   246,   181,     6,     0,    57,    38,   180,   246,   179,
-   249,   181,   180,   240,   181,     6,     0,    57,    38,   180,
-   246,   179,   249,   179,   249,   179,   246,   181,   180,   240,
-   181,     6,     0,   241,     0,   240,   241,     0,    66,   180,
-   255,   179,   255,   179,   255,   181,     6,     0,    60,     6,
-     0,    47,    37,   255,     7,   246,     6,     0,    47,    37,
-   255,     7,   246,    50,    52,   246,     6,     0,    47,    37,
-   255,     7,   246,    50,    51,   246,     6,     0,    47,    38,
-   180,   246,   181,     7,   255,     6,     0,    44,    38,   180,
-   246,   181,     7,   255,     6,     0,    47,    40,   180,   246,
-   181,     7,   255,     6,     0,    60,    38,   255,     7,   246,
-     6,     0,    60,    38,   255,     6,     0,    62,     6,     0,
+     6,     0,    89,   174,   248,   175,     0,    90,     0,    57,
+    34,   180,   248,   179,   251,   181,     6,     0,    57,    34,
+   180,   248,   179,   251,   179,   251,   179,   248,   181,     6,
+     0,    57,    37,   180,   248,   179,   251,   181,     6,     0,
+    57,    37,   180,   248,   179,   251,   179,   251,   179,   248,
+   181,     6,     0,    57,    38,   180,   248,   179,   251,   181,
+     6,     0,    57,    38,   180,   248,   179,   251,   179,   251,
+   179,   248,   181,     6,     0,    57,    38,   180,   248,   179,
+   251,   181,   180,   242,   181,     6,     0,    57,    38,   180,
+   248,   179,   251,   179,   251,   179,   248,   181,   180,   242,
+   181,     6,     0,   243,     0,   242,   243,     0,    65,   180,
+   257,   179,   257,   179,   257,   181,     6,     0,    60,     6,
+     0,    47,    37,   257,     7,   248,     6,     0,    47,    37,
+   257,     7,   248,    50,    52,   248,     6,     0,    47,    37,
+   257,     7,   248,    50,    51,   248,     6,     0,    47,    38,
+   180,   248,   181,     7,   257,     6,     0,    44,    38,   180,
+   248,   181,     7,   257,     6,     0,    47,    40,   180,   248,
+   181,     7,   257,     6,     0,    60,    38,   257,     7,   248,
+     6,     0,    60,    38,   257,     6,     0,    62,     6,     0,
     63,     6,     0,     3,     0,   164,     3,     0,    99,     0,
-   100,     0,   101,     0,   102,     0,   103,     0,   247,     0,
-   174,   246,   175,     0,   164,   246,     0,   163,   246,     0,
-   169,   246,     0,   246,   164,   246,     0,   246,   163,   246,
-     0,   246,   165,   246,     0,   246,   166,   246,     0,   246,
-   167,   246,     0,   246,   173,   246,     0,   246,   159,   246,
-     0,   246,   161,   246,     0,   246,   160,   246,     0,   246,
-   162,   246,     0,   246,   156,   246,     0,   246,   157,   246,
-     0,   246,   155,   246,     0,   246,   154,   246,     0,   246,
-   153,   246,     8,   246,     0,    10,   174,   246,   175,     0,
-    11,   174,   246,   175,     0,    12,   174,   246,   175,     0,
-    13,   174,   246,   175,     0,    14,   174,   246,   175,     0,
-    15,   174,   246,   175,     0,    16,   174,   246,   175,     0,
-    17,   174,   246,   175,     0,    18,   174,   246,   175,     0,
-    20,   174,   246,   175,     0,    21,   174,   246,   179,   246,
-   175,     0,    22,   174,   246,   175,     0,    23,   174,   246,
-   175,     0,    24,   174,   246,   175,     0,    25,   174,   246,
-   175,     0,    26,   174,   246,   175,     0,    27,   174,   246,
-   175,     0,    28,   174,   246,   179,   246,   175,     0,    29,
-   174,   246,   179,   246,   175,     0,    30,   174,   246,   179,
-   246,   175,     0,    19,   174,   246,   175,     0,     3,     0,
-     9,     0,     4,     0,     4,   176,   246,   177,     0,     4,
-   170,     0,     4,   176,   246,   177,   170,     0,     4,   171,
-     0,     4,   176,   246,   177,   171,     0,     4,   178,     4,
-     0,     4,   178,    64,   176,   246,   177,   178,     4,     0,
-     4,   178,     4,   170,     0,     4,   178,    64,   176,   246,
-   177,   178,     4,   170,     0,     4,   178,     4,   171,     0,
-     4,   178,    64,   176,   246,   177,   178,     4,   171,     0,
-   246,     8,   246,     0,   246,     8,   246,     8,   246,     0,
-   250,     0,   164,   249,     0,   163,   249,     0,   249,   164,
-   249,     0,   249,   163,   249,     0,   180,   246,   179,   246,
-   179,   246,   179,   246,   179,   246,   181,     0,   180,   246,
-   179,   246,   179,   246,   179,   246,   181,     0,   180,   246,
-   179,   246,   179,   246,   181,     0,   174,   246,   179,   246,
-   179,   246,   175,     0,     0,   174,   252,   175,     0,     5,
-     0,   252,   179,     5,     0,     0,   180,   254,   181,     0,
-   174,   254,   175,     0,   255,     0,   254,   179,   255,     0,
-     0,   246,     0,     4,   176,   177,     0,   180,   256,   181,
-     0,   246,     0,   248,     0,     4,   176,   177,     0,   256,
-   179,   246,     0,   256,   179,   248,     0,   256,   179,     4,
-   176,   177,     0,   180,   246,   179,   246,   179,   246,   179,
-   246,   181,     0,   180,   246,   179,   246,   179,   246,   181,
-     0,   180,     4,   179,   246,   181,     0,     4,     0,     4,
-   178,    85,   178,     4,     0,   180,   259,   181,     0,     4,
-   178,    64,   176,   246,   177,   178,    85,     0,   257,     0,
-   259,   179,   257,     0,     5,     0,    32,   174,     5,   175,
-     0,    32,   174,     5,   179,   256,   175,     0
+   100,     0,   101,     0,   102,     0,   103,     0,   249,     0,
+   174,   248,   175,     0,   164,   248,     0,   163,   248,     0,
+   169,   248,     0,   248,   164,   248,     0,   248,   163,   248,
+     0,   248,   165,   248,     0,   248,   166,   248,     0,   248,
+   167,   248,     0,   248,   173,   248,     0,   248,   159,   248,
+     0,   248,   161,   248,     0,   248,   160,   248,     0,   248,
+   162,   248,     0,   248,   156,   248,     0,   248,   157,   248,
+     0,   248,   155,   248,     0,   248,   154,   248,     0,   248,
+   153,   248,     8,   248,     0,    10,   174,   248,   175,     0,
+    11,   174,   248,   175,     0,    12,   174,   248,   175,     0,
+    13,   174,   248,   175,     0,    14,   174,   248,   175,     0,
+    15,   174,   248,   175,     0,    16,   174,   248,   175,     0,
+    17,   174,   248,   175,     0,    18,   174,   248,   175,     0,
+    20,   174,   248,   175,     0,    21,   174,   248,   179,   248,
+   175,     0,    22,   174,   248,   175,     0,    23,   174,   248,
+   175,     0,    24,   174,   248,   175,     0,    25,   174,   248,
+   175,     0,    26,   174,   248,   175,     0,    27,   174,   248,
+   175,     0,    28,   174,   248,   179,   248,   175,     0,    29,
+   174,   248,   179,   248,   175,     0,    30,   174,   248,   179,
+   248,   175,     0,    19,   174,   248,   175,     0,     3,     0,
+     9,     0,     4,     0,     4,   176,   248,   177,     0,     4,
+   231,     0,     4,   176,   248,   177,   231,     0,     4,   178,
+     4,     0,     4,   176,   248,   177,   178,     4,     0,     4,
+   178,     4,   231,     0,     4,   176,   248,   177,   178,     4,
+   231,     0,   248,     8,   248,     0,   248,     8,   248,     8,
+   248,     0,   252,     0,   164,   251,     0,   163,   251,     0,
+   251,   164,   251,     0,   251,   163,   251,     0,   180,   248,
+   179,   248,   179,   248,   179,   248,   179,   248,   181,     0,
+   180,   248,   179,   248,   179,   248,   179,   248,   181,     0,
+   180,   248,   179,   248,   179,   248,   181,     0,   174,   248,
+   179,   248,   179,   248,   175,     0,     0,   174,   254,   175,
+     0,     5,     0,   254,   179,     5,     0,     0,   180,   256,
+   181,     0,   174,   256,   175,     0,   257,     0,   256,   179,
+   257,     0,     0,   248,     0,     4,   176,   177,     0,   180,
+   258,   181,     0,   248,     0,   250,     0,     4,   176,   177,
+     0,   258,   179,   248,     0,   258,   179,   250,     0,   258,
+   179,     4,   176,   177,     0,   180,   248,   179,   248,   179,
+   248,   179,   248,   181,     0,   180,   248,   179,   248,   179,
+   248,   181,     0,   180,     4,   179,   248,   181,     0,     4,
+     0,     4,   178,    84,   178,     4,     0,   180,   261,   181,
+     0,     4,   176,   248,   177,   178,    85,     0,   259,     0,
+   261,   179,   259,     0,     5,     0,    32,   174,     5,   175,
+     0,    32,   174,     5,   179,   258,   175,     0
 };
 
 #endif
@@ -585,35 +566,33 @@ static const short yyrline[] = { 0,
    285,   288,   293,   297,   301,   305,   310,   314,   317,   321,
    325,   329,   333,   337,   341,   344,   348,   351,   355,   358,
    367,   371,   377,   379,   380,   381,   382,   383,   384,   385,
-   386,   387,   388,   389,   392,   398,   427,   432,   438,   443,
+   386,   387,   388,   389,   392,   397,   425,   431,   438,   443,
    444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
    454,   457,   460,   464,   470,   476,   479,   483,   489,   495,
    498,   502,   508,   514,   517,   521,   529,   535,   538,   542,
    550,   556,   559,   563,   571,   577,   580,   584,   596,   602,
    605,   609,   621,   627,   630,   634,   646,   652,   655,   659,
    672,   678,   681,   685,   698,   704,   707,   711,   724,   736,
-   752,   764,   777,   786,   798,   806,   818,   826,   838,   846,
-   858,   866,   878,   890,   909,   922,   940,   957,   978,   995,
-  1016,  1033,  1054,  1071,  1092,  1113,  1139,  1156,  1177,  1194,
-  1217,  1230,  1255,  1266,  1272,  1291,  1302,  1310,  1316,  1322,
-  1341,  1347,  1363,  1370,  1376,  1382,  1388,  1394,  1413,  1425,
-  1431,  1450,  1471,  1479,  1485,  1491,  1497,  1509,  1515,  1521,
-  1533,  1539,  1544,  1549,  1556,  1558,  1559,  1562,  1567,  1578,
-  1596,  1604,  1608,  1619,  1678,  1697,  1701,  1721,  1737,  1751,
-  1776,  1801,  1827,  1833,  1838,  1843,  1847,  1857,  1863,  1869,
-  1873,  1877,  1881,  1885,  1890,  1897,  1901,  1906,  1924,  1934,
-  1952,  1969,  1986,  2007,  2027,  2047,  2064,  2088,  2093,  2104,
-  2106,  2109,  2111,  2112,  2113,  2114,  2117,  2119,  2120,  2121,
-  2122,  2123,  2124,  2125,  2126,  2133,  2134,  2135,  2136,  2137,
-  2138,  2139,  2140,  2141,  2142,  2143,  2144,  2145,  2146,  2147,
-  2148,  2149,  2150,  2151,  2152,  2153,  2154,  2155,  2156,  2157,
-  2158,  2159,  2160,  2161,  2162,  2163,  2164,  2169,  2174,  2178,
-  2190,  2208,  2220,  2238,  2250,  2270,  2291,  2315,  2336,  2360,
-  2381,  2406,  2413,  2426,  2433,  2437,  2441,  2445,  2450,  2455,
-  2459,  2463,  2469,  2473,  2478,  2482,  2487,  2491,  2495,  2501,
-  2507,  2513,  2517,  2523,  2538,  2545,  2551,  2560,  2572,  2576,
-  2584,  2597,  2602,  2606,  2611,  2616,  2634,  2639,  2660,  2669,
-  2675,  2680,  2684
+   738,   739,   740,   741,   743,   745,   747,   778,   812,   826,
+   835,   850,   862,   876,   899,   923,   935,   949,   961,   973,
+   994,  1005,  1011,  1030,  1041,  1049,  1055,  1061,  1080,  1086,
+  1102,  1109,  1115,  1121,  1127,  1133,  1152,  1164,  1170,  1189,
+  1210,  1218,  1224,  1230,  1236,  1248,  1254,  1260,  1272,  1278,
+  1283,  1288,  1295,  1297,  1298,  1301,  1306,  1317,  1335,  1343,
+  1348,  1359,  1414,  1433,  1437,  1457,  1473,  1487,  1512,  1537,
+  1563,  1569,  1574,  1579,  1583,  1593,  1599,  1605,  1609,  1613,
+  1617,  1621,  1626,  1633,  1637,  1642,  1660,  1670,  1688,  1705,
+  1722,  1743,  1763,  1783,  1800,  1824,  1829,  1840,  1842,  1845,
+  1847,  1848,  1849,  1850,  1853,  1855,  1856,  1857,  1858,  1859,
+  1860,  1861,  1862,  1869,  1870,  1871,  1872,  1873,  1874,  1875,
+  1876,  1877,  1878,  1879,  1880,  1881,  1882,  1883,  1884,  1885,
+  1886,  1887,  1888,  1889,  1890,  1891,  1892,  1893,  1894,  1895,
+  1896,  1897,  1898,  1899,  1900,  1905,  1910,  1914,  1925,  1942,
+  1953,  1972,  1988,  2004,  2020,  2037,  2044,  2057,  2062,  2066,
+  2070,  2074,  2079,  2084,  2088,  2092,  2098,  2102,  2107,  2111,
+  2116,  2120,  2124,  2130,  2136,  2142,  2146,  2152,  2167,  2174,
+  2180,  2189,  2201,  2205,  2213,  2226,  2231,  2235,  2240,  2245,
+  2263,  2268,  2285,  2294,  2300,  2305,  2309
 };
 #endif
 
@@ -628,16 +607,16 @@ static const char * const yytname[] = {   "$","error","$undefined.","tDOUBLE",
 "tCharacteristic","tLength","tParametric","tElliptic","tPlane","tRuled","tTransfinite",
 "tComplex","tPhysical","tUsing","tBump","tProgression","tRotate","tTranslate",
 "tSymmetry","tDilate","tExtrude","tDuplicata","tLoop","tRecombine","tDelete",
-"tCoherence","tIntersect","tView","tAttractor","tLayers","tScalarTetrahedron",
-"tVectorTetrahedron","tTensorTetrahedron","tScalarTriangle","tVectorTriangle",
-"tTensorTriangle","tScalarLine","tVectorLine","tTensorLine","tScalarPoint","tVectorPoint",
-"tTensorPoint","tBSpline","tNurbs","tOrder","tWith","tBounds","tKnots","tColor",
-"tFor","tIn","tEndFor","tIf","tEndIf","tExit","tReturn","tCall","tFunction",
-"tMesh","tB_SPLINE_SURFACE_WITH_KNOTS","tB_SPLINE_CURVE_WITH_KNOTS","tCARTESIAN_POINT",
-"tTRUE","tFALSE","tUNSPECIFIED","tU","tV","tEDGE_CURVE","tVERTEX_POINT","tORIENTED_EDGE",
-"tPLANE","tFACE_OUTER_BOUND","tEDGE_LOOP","tADVANCED_FACE","tVECTOR","tDIRECTION",
-"tAXIS2_PLACEMENT_3D","tISO","tENDISO","tENDSEC","tDATA","tHEADER","tFILE_DESCRIPTION",
-"tFILE_SCHEMA","tFILE_NAME","tMANIFOLD_SOLID_BREP","tCLOSED_SHELL","tADVANCED_BREP_SHAPE_REPRESENTATION",
+"tCoherence","tIntersect","tAttractor","tLayers","tScalarTetrahedron","tVectorTetrahedron",
+"tTensorTetrahedron","tScalarTriangle","tVectorTriangle","tTensorTriangle","tScalarLine",
+"tVectorLine","tTensorLine","tScalarPoint","tVectorPoint","tTensorPoint","tBSpline",
+"tNurbs","tOrder","tWith","tBounds","tKnots","tColor","tColorTable","tFor","tIn",
+"tEndFor","tIf","tEndIf","tExit","tReturn","tCall","tFunction","tMesh","tB_SPLINE_SURFACE_WITH_KNOTS",
+"tB_SPLINE_CURVE_WITH_KNOTS","tCARTESIAN_POINT","tTRUE","tFALSE","tUNSPECIFIED",
+"tU","tV","tEDGE_CURVE","tVERTEX_POINT","tORIENTED_EDGE","tPLANE","tFACE_OUTER_BOUND",
+"tEDGE_LOOP","tADVANCED_FACE","tVECTOR","tDIRECTION","tAXIS2_PLACEMENT_3D","tISO",
+"tENDISO","tENDSEC","tDATA","tHEADER","tFILE_DESCRIPTION","tFILE_SCHEMA","tFILE_NAME",
+"tMANIFOLD_SOLID_BREP","tCLOSED_SHELL","tADVANCED_BREP_SHAPE_REPRESENTATION",
 "tFACE_BOUND","tCYLINDRICAL_SURFACE","tCONICAL_SURFACE","tCIRCLE","tTRIMMED_CURVE",
 "tGEOMETRIC_SET","tCOMPOSITE_CURVE_SEGMENT","tCONTINUOUS","tCOMPOSITE_CURVE",
 "tTOROIDAL_SURFACE","tPRODUCT_DEFINITION","tPRODUCT_DEFINITION_SHAPE","tSHAPE_DEFINITION_REPRESENTATION",
@@ -654,13 +633,13 @@ static const char * const yytname[] = {   "$","error","$undefined.","tDOUBLE",
 "ScalarTriangleValues","ScalarTriangle","@7","VectorTriangleValues","VectorTriangle",
 "@8","TensorTriangleValues","TensorTriangle","@9","ScalarTetrahedronValues",
 "ScalarTetrahedron","@10","VectorTetrahedronValues","VectorTetrahedron","@11",
-"TensorTetrahedronValues","TensorTetrahedron","@12","Affectation","Shape","Transform",
-"MultipleShape","ListOfShapes","Duplicata","Delete","Command","Loop","Extrude",
-"ExtrudeParameters","ExtrudeParameter","Transfini","Coherence","SignedDouble",
-"BoolExpr","FExpr","FExpr_Single","FExpr_Range","VExpr","VExpr_Single","ListOfStrings",
-"RecursiveListOfStrings","ListOfListOfDouble","RecursiveListOfListOfDouble",
-"ListOfDouble","RecursiveListOfDouble","ColorExpr","ListOfColor","RecursiveListOfColor",
-"StringExpr", NULL
+"TensorTetrahedronValues","TensorTetrahedron","@12","NumericAffectation","NumericIncrement",
+"Affectation","Shape","Transform","MultipleShape","ListOfShapes","Duplicata",
+"Delete","Command","Loop","Extrude","ExtrudeParameters","ExtrudeParameter","Transfini",
+"Coherence","SignedDouble","BoolExpr","FExpr","FExpr_Single","FExpr_Range","VExpr",
+"VExpr_Single","ListOfStrings","RecursiveListOfStrings","ListOfListOfDouble",
+"RecursiveListOfListOfDouble","ListOfDouble","RecursiveListOfDouble","ColorExpr",
+"ListOfColor","RecursiveListOfColor","StringExpr", NULL
 };
 #endif
 
@@ -678,28 +657,26 @@ static const short yyr1[] = {     0,
    207,   209,   209,   211,   210,   212,   212,   214,   213,   215,
    215,   217,   216,   218,   218,   220,   219,   221,   221,   223,
    222,   224,   224,   226,   225,   227,   227,   229,   228,   230,
-   230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
-   230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
-   230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
-   230,   230,   231,   231,   231,   231,   231,   231,   231,   231,
-   231,   231,   231,   231,   231,   231,   231,   231,   231,   231,
-   231,   231,   231,   231,   231,   231,   231,   231,   231,   231,
-   232,   232,   232,   232,   233,   233,   233,   234,   234,   235,
-   236,   236,   236,   237,   237,   237,   237,   238,   238,   238,
-   238,   238,   238,   238,   238,   238,   238,   239,   239,   239,
-   239,   239,   239,   239,   239,   240,   240,   241,   241,   242,
-   242,   242,   242,   242,   242,   242,   242,   243,   243,   244,
-   244,   245,   245,   245,   245,   245,   246,   246,   246,   246,
-   246,   246,   246,   246,   246,   246,   246,   246,   246,   246,
-   246,   246,   246,   246,   246,   246,   246,   246,   246,   246,
-   246,   246,   246,   246,   246,   246,   246,   246,   246,   246,
-   246,   246,   246,   246,   246,   246,   246,   247,   247,   247,
-   247,   247,   247,   247,   247,   247,   247,   247,   247,   247,
-   247,   248,   248,   249,   249,   249,   249,   249,   250,   250,
-   250,   250,   251,   251,   252,   252,   253,   253,   253,   254,
-   254,   255,   255,   255,   255,   256,   256,   256,   256,   256,
-   256,   257,   257,   257,   257,   257,   258,   258,   259,   259,
-   260,   260,   260
+   230,   230,   230,   230,   231,   231,   232,   232,   232,   232,
+   232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+   233,   233,   233,   233,   233,   233,   233,   233,   233,   233,
+   233,   233,   233,   233,   233,   233,   233,   233,   233,   233,
+   233,   233,   233,   233,   233,   233,   233,   233,   234,   234,
+   234,   234,   235,   235,   235,   236,   236,   237,   238,   238,
+   238,   239,   239,   239,   239,   240,   240,   240,   240,   240,
+   240,   240,   240,   240,   240,   241,   241,   241,   241,   241,
+   241,   241,   241,   242,   242,   243,   243,   244,   244,   244,
+   244,   244,   244,   244,   244,   245,   245,   246,   246,   247,
+   247,   247,   247,   247,   248,   248,   248,   248,   248,   248,
+   248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
+   248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
+   248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
+   248,   248,   248,   248,   248,   249,   249,   249,   249,   249,
+   249,   249,   249,   249,   249,   250,   250,   251,   251,   251,
+   251,   251,   252,   252,   252,   252,   253,   253,   254,   254,
+   255,   255,   255,   256,   256,   257,   257,   257,   257,   258,
+   258,   258,   258,   258,   258,   259,   259,   259,   259,   259,
+   260,   260,   261,   261,   262,   262,   262
 };
 
 static const short yyr2[] = {     0,
@@ -715,29 +692,27 @@ static const short yyr2[] = {     0,
      3,     0,    13,     1,     3,     0,    19,     1,     3,     0,
     19,     1,     3,     0,    19,     1,     3,     0,    25,     1,
      3,     0,    25,     1,     3,     0,    25,     1,     3,     0,
-    31,     1,     3,     0,    31,     1,     3,     0,    31,     4,
-     7,     6,     3,     6,     3,     6,     4,     7,     4,     7,
-     4,     7,     4,     7,     6,    11,     6,    11,     6,    11,
-     6,    11,     6,    11,     6,    11,     5,    11,     5,    11,
-     8,    11,     7,     8,    12,     6,     5,     7,     7,    12,
-     7,     9,    17,     7,     8,     8,     7,    11,     5,     8,
-    12,     8,    22,    20,     8,     8,     5,     8,     7,     8,
-     5,    11,     5,     9,     1,     1,     1,     0,     2,     4,
-     4,     6,     3,     3,     3,     2,     2,     6,     8,     8,
-    10,     1,     2,     1,     3,     4,     1,     8,    12,     8,
-    12,     8,    12,    11,    15,     1,     2,     9,     2,     6,
-     9,     9,     8,     8,     8,     6,     4,     2,     2,     1,
-     2,     1,     1,     1,     1,     1,     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,     1,     1,     1,
-     4,     2,     5,     2,     5,     3,     8,     4,     9,     4,
-     9,     3,     5,     1,     2,     2,     3,     3,    11,     9,
-     7,     7,     0,     3,     1,     3,     0,     3,     3,     1,
-     3,     0,     1,     3,     3,     1,     1,     3,     3,     3,
-     5,     9,     7,     5,     1,     5,     3,     8,     1,     3,
-     1,     4,     6
+    31,     1,     3,     0,    31,     1,     3,     0,    31,     1,
+     1,     1,     1,     1,     1,     1,     4,     7,     6,     3,
+     6,     6,     9,     6,     9,     5,     8,     8,    11,     9,
+     7,     8,    12,     6,     5,     7,     7,    12,     7,     9,
+    17,     7,     8,     8,     7,    11,     5,     8,    12,     8,
+    22,    20,     8,     8,     5,     8,     7,     8,     5,    11,
+     5,     9,     1,     1,     1,     0,     2,     4,     4,     6,
+     3,     3,     3,     2,     2,     6,     8,     8,    10,     1,
+     2,     1,     3,     4,     1,     8,    12,     8,    12,     8,
+    12,    11,    15,     1,     2,     9,     2,     6,     9,     9,
+     8,     8,     8,     6,     4,     2,     2,     1,     2,     1,
+     1,     1,     1,     1,     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,     1,     1,     1,     4,     2,
+     5,     3,     6,     4,     7,     3,     5,     1,     2,     2,
+     3,     3,    11,     9,     7,     7,     0,     3,     1,     3,
+     0,     3,     3,     1,     3,     0,     1,     3,     3,     1,
+     1,     3,     3,     3,     5,     9,     7,     5,     1,     5,
+     3,     6,     1,     3,     1,     4,     6
 };
 
 static const short yydefact[] = {     0,
@@ -746,1338 +721,1227 @@ static const short yydefact[] = {     0,
     12,    11,     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,   212,     0,   217,     0,   214,
-     0,     0,     0,    52,    54,    53,    55,    56,    57,    58,
-    59,    64,    63,    60,    61,    62,   240,     0,     0,     0,
-    13,    14,    16,    15,    17,   313,   313,     0,   288,   290,
-   341,     0,   289,     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,   247,     0,
-     0,   207,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   322,     0,     0,     0,     0,   322,     0,
+     0,     0,     0,     0,   200,     0,   205,     0,   202,     0,
+     0,     0,    52,    54,    53,    55,    56,    57,    58,    59,
+    64,    63,    60,    61,    62,   228,     0,     0,     0,    13,
+    14,    16,    15,    17,   297,   297,     0,   276,   278,   325,
+   130,   277,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   304,     0,     0,     0,     0,     0,   198,   322,
-     0,     0,   198,   238,   239,     0,   322,   322,     0,     0,
-     0,     0,     0,     0,   206,     0,   213,     0,   241,     0,
+     0,     0,     0,     0,   131,   132,   133,   134,     0,     0,
+     0,   135,   136,     0,     0,     0,     0,     0,     0,   235,
+     0,     0,   195,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   306,     0,     0,     0,     0,   306,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   288,     0,     0,     0,     0,     0,   186,
+   306,     0,     0,   186,   226,   227,   306,   306,     0,     0,
+     0,     0,     0,     0,   194,     0,   201,     0,   229,     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,   292,   294,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   280,     0,    69,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   250,   249,   251,   133,   135,
-     0,     0,     0,     0,     0,     0,   205,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   204,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   290,     0,   323,     0,     0,
+     0,   238,   237,   239,     0,     0,     0,     0,     0,     0,
+   140,   193,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   192,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   306,   305,     0,     0,     0,     0,   198,   198,
-     0,     0,     0,     0,     0,     0,     0,   203,     0,     0,
-    69,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   215,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   278,     0,   307,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   290,   289,     0,
+     0,     0,     0,   186,   186,     0,     0,     0,     0,     0,
+     0,     0,   191,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   203,     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,   315,     0,     0,     0,     0,     0,   296,
-     0,   130,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   299,     0,     0,     0,
+     0,     0,   282,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   137,   139,   141,   143,   248,   322,
+     0,     0,     0,     0,     0,     0,     0,   236,   306,     0,
+   130,     0,     0,     0,   137,     0,   253,   252,   250,   251,
+   246,   248,   247,   249,   241,   240,   242,   243,   244,   245,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   265,   264,   262,   263,   258,   260,   259,   261,   253,
-   252,   254,   255,   256,   257,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   290,
-   326,   327,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   308,
-   307,   197,     0,   196,   195,     0,     0,     0,     0,     0,
-   200,   199,   237,     0,     0,   201,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   216,     0,     0,     0,
+     0,     0,     0,     0,   278,   310,   311,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   292,   291,   185,     0,   184,   183,
+     0,     0,     0,     0,     0,   188,   187,   225,     0,     0,
+   189,     0,     0,     0,     0,     0,     0,     0,     0,   204,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   314,
-     0,     0,    19,     0,   291,   298,   300,     0,   267,   268,
-   269,   270,   271,   272,   273,   274,   275,   287,   276,     0,
-   278,   279,   280,   281,   282,   283,     0,     0,     0,   342,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   157,   159,     0,     0,     0,
-    65,     0,     0,   167,   322,   322,     0,   322,   179,     0,
-   187,   322,   322,   324,     0,     0,     0,   325,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   191,   193,     0,     0,     0,     0,
-     0,     0,    69,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    70,    71,    72,    73,
-    74,    75,    76,    77,    78,    79,    80,    81,     0,     0,
-   322,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   322,   322,     0,
-     0,     0,     0,   322,   322,     0,     0,     0,     0,     0,
-   322,     0,   322,     0,     0,     0,     0,     0,   316,     0,
-   313,   293,   295,     0,     0,     0,     0,     0,     0,   132,
-     0,     0,     0,     0,     0,   134,   136,   145,   147,   149,
-   151,   153,   155,     0,     0,   266,     0,     0,     0,     0,
-   322,     0,   322,     0,     0,   328,   302,   290,   329,   330,
-   166,     0,   322,   322,   322,   230,     0,   322,   322,   322,
-   322,   322,   322,   322,     0,     0,     0,     0,     0,     0,
-     0,   236,   202,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    67,     0,     0,     0,
-     0,   317,     0,     0,     0,   208,     0,     0,     0,     0,
+     0,     0,   298,     0,     0,    19,     0,   279,   284,    69,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,   255,   256,   257,   258,   259,
+   260,   261,   262,   263,   275,   264,     0,   266,   267,   268,
+   269,   270,   271,     0,     0,     0,   326,     0,     0,     0,
+     0,     0,     0,     0,   146,     0,     0,    65,     0,     0,
+   155,   306,   306,     0,   306,   167,     0,   175,   306,   306,
+   308,     0,     0,     0,   309,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   242,   243,   244,   245,   246,     0,     0,     0,     0,
-     0,     0,     0,    18,     0,     0,   277,   284,   285,   286,
-   343,   131,   138,   140,   142,   144,     0,   335,     0,     0,
-    66,   163,   171,     0,   174,     0,   168,     0,   169,   189,
+     0,   179,   181,     0,     0,     0,     0,     0,     0,     0,
+     0,   306,     0,     0,   306,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   306,   306,
+     0,     0,     0,     0,   306,   306,     0,     0,     0,     0,
+     0,   306,     0,   306,     0,     0,     0,     0,     0,   300,
+     0,   297,     0,   281,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    67,     0,     0,
+     0,     0,     0,   139,     0,     0,     0,     0,   141,   142,
+   144,     0,   254,     0,     0,     0,     0,   306,     0,   306,
+     0,     0,   312,   286,   278,   313,   314,   154,     0,   306,
+   306,   306,   218,     0,   306,   306,   306,   306,   306,   306,
+   306,     0,     0,     0,     0,     0,     0,     0,   224,   190,
+     0,     0,     0,     0,   301,     0,     0,     0,   196,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   198,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   230,   231,   232,   233,   234,     0,
+     0,     0,     0,     0,     0,     0,    18,     0,   283,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   177,     0,   322,   322,     0,   322,     0,     0,     0,     0,
-     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   265,   272,   273,   274,   327,   130,     0,     0,
+     0,     0,   138,   319,     0,     0,    66,   151,   159,     0,
+   162,     0,   156,     0,   157,   177,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   322,     0,     0,     0,     0,     0,     0,     0,     0,
-   313,     0,     0,     0,     0,   290,     0,   161,     0,   176,
-   186,   303,   331,     0,   234,   180,   182,     0,     0,   233,
-   235,   188,   164,   175,   185,   190,     0,   312,     0,   311,
-     0,     0,   218,     0,   220,     0,   222,     0,    68,     0,
+     0,     0,     0,     0,   186,     0,     0,     0,     0,     0,
+     0,     0,     0,   165,     0,   306,   306,     0,   306,     0,
+     0,     0,     0,     0,     0,   306,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   317,     0,   320,     0,     0,     0,     0,
-   210,   209,     0,     0,     0,     0,     0,    21,     0,    30,
-     0,    34,     0,    28,     0,     0,    33,     0,    38,    36,
-     0,     0,     0,     0,     0,     0,    45,     0,     0,     0,
-     0,     0,    50,     0,     0,   297,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   172,     0,   232,
-   231,   198,     0,   194,     0,     0,     0,     0,     0,     0,
-   226,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   319,   322,   318,   322,
-     0,     0,   322,     0,     0,   317,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   322,     0,
-     0,     0,     0,     0,     0,     0,   299,   301,     0,     0,
+     0,     0,     0,     0,   306,     0,     0,     0,     0,     0,
+     0,     0,     0,   297,   285,    68,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   310,     0,     0,     0,   229,
-   322,     0,   227,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   321,     0,
-     0,   211,     0,     0,    35,     0,     0,     0,     0,    25,
-     0,    31,     0,    37,    26,    39,     0,    42,     0,    46,
-    47,     0,     0,    49,     0,     0,   146,   148,   150,   152,
-   154,   156,   158,   160,     0,   339,     0,   162,   336,   334,
-     0,     0,   192,     0,     0,     0,     0,     0,   224,     0,
+   147,     0,     0,     0,     0,     0,   278,     0,   148,     0,
+   164,   174,   287,   315,     0,   222,   168,   170,     0,     0,
+   221,   223,   176,   152,   163,   173,   178,     0,   296,     0,
+   295,     0,     0,   206,     0,   208,     0,   210,     0,     0,
+     0,   301,     0,   304,     0,     0,     0,     0,   198,   197,
+     0,     0,     0,     0,     0,    21,     0,    30,     0,    34,
+     0,    28,     0,     0,    33,     0,    38,    36,     0,     0,
+     0,     0,     0,     0,    45,     0,     0,     0,     0,     0,
+    50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   143,   145,     0,     0,   323,
+     0,   150,     0,     0,     0,   160,     0,   220,   219,   186,
+     0,   182,     0,     0,     0,     0,     0,     0,   214,     0,
+     0,     0,   303,   306,   302,   306,     0,     0,   306,     0,
+     0,   301,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   306,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   322,   322,   178,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   321,     0,     0,
+     0,     0,     0,     0,   294,     0,     0,     0,   217,   306,
+     0,   215,     0,     0,     0,   305,     0,     0,   199,     0,
+     0,    35,     0,     0,     0,     0,    25,     0,    31,     0,
+    37,    26,    39,     0,    42,     0,    46,    47,     0,     0,
+    49,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   149,     0,   324,   320,   318,
+     0,     0,   180,     0,     0,     0,     0,     0,   212,     0,
+     0,   306,   306,   166,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   337,     0,     0,   309,   219,   221,   223,     0,
-   322,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    84,    88,    92,   165,   170,     0,     0,   181,     0,     0,
-     0,     0,     0,    29,    32,    40,     0,    41,    48,    43,
-     0,     0,   340,     0,   333,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    84,    88,    92,
+     0,     0,     0,   293,   207,   209,   211,     0,   306,   153,
+   158,     0,     0,   169,     0,     0,     0,     0,     0,    29,
+    32,    40,     0,    41,    48,    43,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   322,
+     0,   317,     0,     0,     0,   306,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   322,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   322,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   306,
+     0,     0,     0,     0,     0,    24,    27,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    82,
+     0,    86,     0,    90,   316,     0,   213,     0,     0,     0,
+     0,     0,   306,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    24,    27,     0,     0,     0,   332,     0,   225,     0,
+     0,     0,     0,     0,     0,     0,     0,    44,    20,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    83,    85,
+    87,    89,    91,    93,   161,   216,     0,     0,     0,     0,
+   306,     0,     0,     0,     0,     0,     0,    96,   100,   104,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    82,     0,    86,     0,    90,     0,     0,     0,     0,   322,
+     0,     0,     0,     0,     0,     0,     6,   306,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   172,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    94,
+     0,    98,     0,   102,     0,   306,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   171,
+     0,    22,     0,     0,     0,     0,     0,     0,    95,    97,
+    99,   101,   103,   105,   306,     0,     0,     0,   108,   112,
+   116,     0,     0,     0,     0,     0,     0,     0,   306,     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,    44,    20,   338,   173,   228,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    83,
-    85,    87,    89,    91,    93,     0,     0,     0,     0,   322,
-     0,     0,     0,     0,     0,     0,    96,   100,   104,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     6,   322,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   184,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    94,     0,
-    98,     0,   102,     0,   322,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   183,     0,
-    22,     0,     0,     0,     0,     0,     0,    95,    97,    99,
-   101,   103,   105,   322,     0,     0,     0,   108,   112,   116,
-     0,     0,     0,     0,     0,     0,     0,   322,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   106,
-     0,   110,     0,   114,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   107,   109,
-   111,   113,   115,   117,     0,   120,   124,   128,    23,     0,
-     0,     0,     0,     0,     0,     0,   118,     0,   122,     0,
-   126,     0,     0,     0,     0,     0,     0,   119,   121,   123,
-   125,   127,   129,     0,     0,     0
+   106,     0,   110,     0,   114,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   107,
+   109,   111,   113,   115,   117,     0,   120,   124,   128,    23,
+     0,     0,     0,     0,     0,     0,     0,   118,     0,   122,
+     0,   126,     0,     0,     0,     0,     0,     0,   119,   121,
+   123,   125,   127,   129,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1544,
-     5,     6,    19,    20,    21,    22,     7,    64,    65,    66,
-   488,  1320,   637,  1268,  1322,   638,  1269,  1324,   639,  1270,
-  1428,   640,  1401,  1430,   641,  1402,  1432,   642,  1403,  1489,
-   643,  1475,  1491,   644,  1476,  1493,   645,  1477,  1526,   646,
-  1520,  1528,   647,  1521,  1530,   648,  1522,    67,   482,   472,
-   473,   474,   475,    71,    72,    73,    74,  1040,  1041,    75,
-    76,    79,   807,   298,   129,   452,   162,   163,   222,   375,
-   885,   975,   976,   453,   830,  1099,  1167,   130
+static const short yydefgoto[] = {  1485,
+     5,     6,    19,    20,    21,    22,     7,    63,    64,    65,
+   375,  1259,   534,  1207,  1261,   535,  1208,  1263,   536,  1209,
+  1369,   537,  1342,  1371,   538,  1343,  1373,   539,  1344,  1430,
+   540,  1416,  1432,   541,  1417,  1434,   542,  1418,  1467,   543,
+  1461,  1469,   544,  1462,  1471,   545,  1463,   127,   227,    66,
+   467,   457,   458,   459,   460,    70,    71,    72,    73,  1018,
+  1019,    74,    75,    78,   770,   293,   130,   437,   163,   164,
+   222,   368,   848,   943,   944,   438,   806,   905,  1001,   131
 };
 
-static const short yypact[] = {  2450,
-    71,-32768,-32768,   -27,-32768,   118,  2568,-32768,     7,   156,
-   124,   168,   179,   224,   235,    87,    94,   129,-32768,-32768,
--32768,-32768,   319,   146,   350,   -99,   151,   207,   -41,   -46,
-   213,   260,   393,   279,   392,   400,   422,   562,   426,    45,
-   334,   101,   101,   344,   117,   345,   443,   -40,   479,   540,
-   551,   351,   401,   -26,    10,-32768,   409,-32768,   583,-32768,
-   597,   606,   578,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   625,     7,  2606,
--32768,-32768,-32768,-32768,-32768,   456,   456,   630,-32768,    24,
--32768,  1584,-32768,   462,   466,   468,   471,   474,   483,   484,
-   486,   509,   515,   525,   526,   527,   529,   532,   533,   534,
-   541,   542,   543,   545,   546,  1584,  1584,  1584,  1584,  1584,
-  1584,  1584,   647,   699,  1584,   349,    16,   256,-32768,   715,
-   720,-32768,  1584,  1584,  1584,  1584,   552,  1584,  1584,   553,
-  1584,  1584,  1584,    23,  1584,   548,   555,   556,    23,   564,
-   565,   557,   572,   573,   574,   579,   101,   101,   101,  1584,
-  1584,    80,-32768,   113,   101,   602,   612,   613,-32768,    23,
-   618,   748,-32768,-32768,-32768,    -2,    23,    23,  1584,   -25,
-  1584,   708,  1584,  1584,-32768,   790,-32768,   626,-32768,     7,
-   627,   628,   629,   631,   633,   634,   635,   636,   637,   638,
-   639,   643,   649,   653,   654,   656,   657,   658,   659,   660,
-   662,   663,   664,   665,   666,   667,   668,   669,   670,   671,
-   793,   672,   674,   675,-32768,-32768,  1584,    63,   862,  1584,
-  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,
-  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,
-   799,   910,   950,  1055,  1080,   673,   673,   673,-32768,-32768,
-  5429,   840,  5279,    18,   677,   680,-32768,  1584,  1584,  1584,
-  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,
-  1584,  1584,-32768,   -13,  5452,  2679,  5475,  5498,  1584,  5521,
-  2702,  1584,  2725,  5544,  5567,   463,  1612,  6901,   848,  5590,
-  1584,  1584,  1584,   852,  1584,  1584,  1584,  1584,  1584,  1584,
-  1584,   148,-32768,-32768,  1549,  1975,   101,   101,   524,   524,
-   288,  1584,  1584,  1584,    25,   283,  1584,-32768,  2398,   101,
--32768,   853,   854,  5613,   779,  1584,  5636,   683,   812,  5659,
--32768,  1584,   719,   860,   865,   866,   867,   868,   869,   870,
-   871,   872,   873,   875,   876,   877,   878,   879,   880,   884,
-   885,   886,   887,   889,   890,   891,   735,   893,   894,   895,
-   896,   899,   898,-32768,    26,   900,   901,   907,  5304,  -141,
-   728,-32768,  5682,  5705,  5728,  5751,  5774,  5797,  5820,  5843,
-  5866,  5889,  5912,  2421,  5935,  5958,  5981,  6004,  6027,  6050,
-  2526,  3116,  3137,    88,-32768,-32768,-32768,-32768,-32768,    23,
-   121,  1164,  1584,  1584,  1584,  1584,   908,   911,  1584,   902,
-  2183,   403,   458,   388,   388,   366,   366,   366,   366,   355,
-   355,   673,   673,   673,   673,   912,  1612,   906,   913,   914,
-   915,  6073,   917,   919,  6096,   921,   922,   923,   652,   473,
-  2210,-32768,  -125,  1584,   924,  2748,  6119,  6142,  1584,  2771,
-  2794,  6165,  6188,  6211,  6234,  6257,   101,  1584,  1584,-32768,
--32768,-32768,   747,  2629,-32768,   751,  1584,  3158,  3179,  3200,
--32768,-32768,-32768,  1584,  5329,-32768,   264,   330,   753,   754,
-   928,   762,  6280,   942,  1584,  1584,-32768,  6303,   804,   772,
-   773,   774,   775,   776,   780,   781,   782,   783,   785,   791,
-   801,   802,   803,   807,   808,   809,   810,   811,   822,   823,
-   826,   827,   828,   829,   830,   831,   832,   841,   851,-32768,
-   978,   818,-32768,   855,   -84,-32768,-32768,  1584,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1584,
--32768,-32768,-32768,-32768,-32768,-32768,  1584,  1584,  1584,-32768,
-  1612,  1027,  1584,  1584,  1584,  1584,  1584,  1030,  1031,  1033,
-  1274,  1361,  1693,  1725,  1746,-32768,-32768,  5354,  1034,  1584,
--32768,   123,   101,-32768,    23,    23,  1035,    23,-32768,  1036,
--32768,    23,    23,-32768,   746,  1584,  1640,-32768,  1767,   864,
-  1038,  1040,  1041,   531,  1042,  1043,  1044,  1045,  1046,  1048,
-  1049,   295,  3221,  3242,-32768,-32768,  2817,   101,   101,   101,
-  1782,  1051,-32768,   904,   905,   916,   934,   946,   947,   972,
-   973,   975,   976,   977,   979,  1054,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1584,  1584,
-    23,  1584,  1061,    23,  2231,   624,  1073,   939,  1037,  1584,
-  1584,   101,  1081,  1082,   987,  1084,  1085,    23,    23,  1086,
-   101,  1151,  1152,    23,    23,  1153,  1154,  1155,  1156,  1157,
-    23,   611,    23,  1158,  1159,  1160,  1163,  1167,-32768,  1165,
-   456,-32768,-32768,  5379,  6326,  6349,  6372,  6395,   142,-32768,
-  1804,  1819,  1834,  1857,  1888,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   984,     0,  6901,  1166,     9,    78,  1189,
-    23,  1190,    23,  1191,  1192,-32768,  2258,   476,  2210,-32768,
--32768,  1584,    23,    23,    23,-32768,   343,    23,    23,    23,
-    23,    23,    23,    23,  1584,  1584,  1584,  1047,   -72,   261,
-   269,-32768,-32768,   432,  1584,  1584,  1584,  1584,  1584,  1584,
-  1584,  1584,  1584,  1584,  1584,  1584,-32768,  3263,  3284,  1207,
-  6418,   -48,  1141,  1584,  1584,-32768,  1050,     7,  1053,  3305,
-  3326,   -75,  1059,  1074,  1069,  1075,  1072,  1079,  1076,  1077,
-   -39,  1078,  1083,  1099,  1096,  1097,  1102,  1103,  1104,  1106,
-  1111,-32768,-32768,-32768,-32768,-32768,  1108,  1109,  1112,  1114,
-  1116,  1119,  1117,-32768,  1118,  1120,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,    72,  1121,  1668,  1220,
--32768,-32768,-32768,   101,-32768,  1253,-32768,  1254,-32768,-32768,
-  1584,  1115,  3347,  1255,  1284,  1294,  1584,  1584,  1295,  1296,
-  1297,  1299,  1300,  1301,  1302,  2840,  6441,  2592,   524,   101,
-  1303,   101,  1304,   101,     2,  1305,  3368,  3389,  3410,  3431,
-  3452,  3473,  3494,  3515,  3536,  3557,  3578,  3599,  1584,  1584,
--32768,  1316,    23,    23,  1228,    23,   431,  6464,  1584,     7,
-  1322,  1584,    23,  1323,  1327,  1325,  1169,  1326,   611,  1329,
-  1333,  1584,  1331,  1336,  1334,  1335,  1339,   611,  1584,  1584,
-  1584,    23,  1337,  1341,   611,  1584,  1342,  1343,  1344,  1584,
-   456,  1345,   145,  1340,  1263,    20,  3620,-32768,    13,-32768,
--32768,  6901,-32768,  1584,-32768,-32768,-32768,  1909,  1946,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,  1171,-32768,  1584,-32768,
-  1174,   299,-32768,   301,-32768,   312,-32768,    99,-32768,  1584,
-  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,
-  1584,  3641,  3662,   -48,   175,-32768,   -73,  1172,  1275,  1584,
--32768,-32768,  3683,     7,  1182,  3704,  1185,-32768,  1186,-32768,
-  1187,-32768,  1193,-32768,  1194,  6487,-32768,  1195,-32768,-32768,
-  1196,  1197,  6510,  3725,  6533,  1198,-32768,  1200,  1201,  3746,
-  1199,  1204,-32768,  3767,  1203,   286,  1556,  1584,  1584,  1584,
-  1584,  1584,  1584,     1,  1202,  1584,  1584,-32768,  3788,-32768,
--32768,   524,  2621,-32768,  1584,  1584,  1584,  1363,  1205,   -38,
--32768,  3809,  3830,  3851,  3872,  3893,  3914,  3935,  3956,  3977,
-  3998,  4019,  4040,  1584,  1584,  1286,-32768,    23,-32768,    23,
-  1584,  2863,    23,  1241,  1378,   -48,   611,  1392,  1584,  1390,
-   611,  1391,  1395,  1397,  1398,  1399,  1584,  1402,    23,  1403,
-  1404,  1584,  1408,  1406,  1584,  1396,-32768,-32768,  1407,  1996,
-  2019,  2050,  2071,  2098,  2120,  2141,  1243,     0,  1417,  1421,
-  2886,  4061,  1427,  1245,  1584,-32768,  2909,  2932,  2955,-32768,
-    23,  1439,-32768,  1584,  1584,  1584,  1584,  1584,  1584,  1584,
-  1584,  1584,  1584,  1584,  1584,  2978,  3001,  1266,-32768,  1269,
-  2162,-32768,  1268,     7,-32768,  1271,  1272,  1273,  4082,-32768,
-  1278,-32768,  1279,-32768,-32768,-32768,  6556,-32768,  1276,-32768,
--32768,  6579,  1287,-32768,  6602,  1285,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  1405,-32768,   -50,-32768,-32768,-32768,
-  1584,  1288,-32768,  3024,  1457,  1460,     3,  1291,-32768,  4103,
-  4124,  4145,  4166,  4187,  4208,  4229,  4250,  4271,  6625,  6648,
-  6671,  1465,  1466,    23,    23,-32768,  1471,     7,   611,   611,
-   611,   611,  1473,  1475,  1478,   611,  1479,  1480,  1481,  1485,
-  1315,     0,-32768,  2650,  1487,-32768,-32768,-32768,-32768,    99,
-    23,  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,  1584,
--32768,-32768,-32768,-32768,-32768,  1314,  1313,-32768,     7,  1317,
-  1319,  1324,  1328,-32768,-32768,-32768,  1350,-32768,-32768,-32768,
-  1351,  1584,-32768,  1584,-32768,  1352,    12,  1353,  4292,  4313,
-  4334,  4355,  4376,  4397,  4418,  4439,  4460,  1330,  1332,  1356,
-    23,  1423,  1364,   611,   611,  1499,  1501,   611,  1503,  5404,
-  3047,  1514,  1527,    23,  1584,  1584,  1584,  1584,  1584,  1584,
-  1584,  1584,  1584,  1584,  1584,  1584,  1357,  1359,     7,  1362,
-  1365,-32768,-32768,  1367,  1368,  1372,-32768,  1370,-32768,  1381,
-  4481,  4502,  4523,  4544,  4565,  4586,  4607,  4628,  4649,   -37,
-  6901,    50,  6901,    61,  6901,  1459,  1584,     7,   611,    23,
-  1539,  1540,  1504,  1557,  1558,  1584,  1584,  1584,  1584,  1584,
-  1584,  1584,  1584,  1584,  1584,  1585,  1584,  1586,  1584,  1611,
-  1410,  4670,     7,  1440,  1441,-32768,-32768,-32768,-32768,-32768,
-  4691,  4712,  4733,  4754,  4775,  4796,  6694,  6717,  6740,  6901,
--32768,  6901,-32768,  6901,-32768,  1584,  1584,  1498,   611,    23,
-  1584,  1584,  1584,  1584,  1584,  1584,-32768,-32768,-32768,  4817,
-  3070,  1470,  1467,  1468,  4838,  4859,  4880,  4901,  4922,  4943,
-  1493,  1494,  1495,  1584,  1642,-32768,    23,   611,  1584,  1584,
-  1584,  1584,  1584,  1584,  1584,  1584,  1584,  3093,-32768,  1497,
-  1526,  4964,  4985,  5006,  5027,  5048,  5069,   176,  6901,   262,
-  6901,   268,  6901,  1711,    23,  1712,  1584,  1584,  1584,  1584,
-  1584,  1584,  1584,  1715,  1584,  1717,  1584,  1718,-32768,  1548,
--32768,  5090,  5111,  5132,  6763,  6786,  6809,  6901,-32768,  6901,
--32768,  6901,-32768,    23,  1584,  1584,  1584,-32768,-32768,-32768,
-  1550,  5153,  5174,  5195,  1552,  1553,  1554,    23,  1584,  1584,
-  1584,  1584,  1584,  1584,  1559,  5216,  5237,  5258,   298,  6901,
-   305,  6901,   313,  6901,   611,  1584,  1584,  1584,  1584,  1729,
-  1584,  1730,  1584,  1731,  1564,  6832,  6855,  6878,  6901,-32768,
-  6901,-32768,  6901,-32768,  1734,-32768,-32768,-32768,-32768,  1561,
-  1562,  1563,  1584,  1584,  1584,   317,  6901,   338,  6901,   430,
-  6901,  1584,  1738,  1584,  1739,  1584,  1740,  6901,-32768,  6901,
--32768,  6901,-32768,  1749,  1750,-32768
+static const short yypact[] = {  2025,
+    67,-32768,-32768,  -112,-32768,   235,  2171,-32768,     8,   111,
+   124,   134,   183,   200,   225,   102,   114,   139,-32768,-32768,
+-32768,-32768,   311,   145,   249,   -15,   194,   195,   -39,   -37,
+   201,   204,   343,   221,   229,   260,   369,   117,   384,   512,
+   265,   -32,   -32,   274,   199,   296,   403,     4,   444,   447,
+    73,   284,   -24,     6,-32768,   309,-32768,   478,-32768,   511,
+   531,   498,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   536,     8,  2193,-32768,
+-32768,-32768,-32768,-32768,   370,   370,   542,-32768,   187,     2,
+-32768,-32768,   394,   398,   402,   407,   414,   421,   425,   427,
+   428,   429,   432,   433,   436,   437,   438,   439,   442,   443,
+   445,   468,   482,   483,-32768,-32768,-32768,-32768,    65,    65,
+    65,-32768,-32768,    65,   611,    19,    65,   552,   508,-32768,
+   612,   653,-32768,    65,    65,    65,    65,   485,    65,    65,
+   486,    65,    65,    65,    24,    65,   496,   503,   504,    24,
+   499,   500,   510,   513,   514,   515,   516,   -32,   -32,   -32,
+    65,    65,   -36,-32768,   -11,   -32,   502,   505,   518,-32768,
+    24,   517,   685,-32768,-32768,-32768,    24,    24,    65,   -52,
+    65,   605,    65,    65,-32768,   688,-32768,   521,-32768,     8,
+   522,   528,   529,   530,   532,   533,   534,   535,   538,   539,
+   543,   546,   547,   548,   549,   580,   592,   593,   594,   598,
+   607,   609,   610,   613,   616,   617,   618,   619,   622,   623,
+   700,   537,   595,   600,    65,   706,-32768,   -32,-32768,    65,
+    65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+    65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+   781,   625,   625,   625,  4940,   800,  4840,   252,   639,   649,
+-32768,-32768,    65,    65,    65,    65,    65,    65,    65,    65,
+    65,    65,    65,    65,    65,    65,    65,-32768,   -50,  4963,
+  1638,  4986,  5009,    65,  5032,  2179,    65,  2202,  5055,  5078,
+   362,   715,  6412,   811,  5101,    65,    65,    65,   814,    65,
+    65,    65,    65,    65,    65,    65,   129,-32768,-32768,  2593,
+  2614,   -32,   -32,   141,   141,   198,    65,    65,    65,  1864,
+    60,    65,-32768,  1910,   816,   817,  5124,   743,    65,  5147,
+   646,   757,  5170,-32768,    65,   682,   823,   838,   839,   840,
+   841,   843,   847,   848,   849,   850,   852,   853,   854,   856,
+   857,   858,   871,   875,   876,   877,   878,   880,   881,   755,
+   883,   885,   886,   900,   903,   904,-32768,    26,   910,   902,
+   921,  4865,   115,   107,   424,  5193,  5216,  5239,  5262,  5285,
+  5308,  5331,  5354,  5377,  5400,  5423,  2635,  5446,  5469,  5492,
+  5515,  5538,  5561,  2656,  2677,  2698,    93,-32768,    24,   196,
+   922,    65,   925,   924,-32768,  1661,   400,   674,   305,   305,
+   340,   340,   340,   340,   144,   144,   625,   625,   625,   625,
+   926,   715,   928,   927,   944,   945,  5584,   946,   948,  5607,
+   951,   952,   953,  1063,   404,  1682,-32768,   -13,    65,   956,
+  2225,  5630,  5653,    65,  2248,  2271,  5676,  5699,  5722,  5745,
+  5768,   -32,    65,    65,-32768,-32768,-32768,   777,  1956,-32768,
+   785,    65,  2719,  2740,  2761,-32768,-32768,-32768,    65,  4890,
+-32768,   788,   790,   965,   791,  5791,   966,    65,    65,-32768,
+  5814,   828,   796,   798,   799,   801,   804,   805,   806,   807,
+   808,   809,   810,   815,   821,   822,   824,   826,   830,   831,
+   832,   834,   835,   836,   842,   844,   845,   863,   864,   865,
+   866,   867,-32768,   974,   818,-32768,   868,  -107,-32768,-32768,
+   833,   855,   874,   879,   882,   884,   887,   888,   889,   890,
+   891,   894,   989,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,    65,-32768,-32768,-32768,
+-32768,-32768,-32768,    65,    65,    65,-32768,   715,   990,    52,
+    65,   996,  1000,   783,-32768,  1010,    65,-32768,   185,   -32,
+-32768,    24,    24,  1011,    24,-32768,  1012,-32768,    24,    24,
+-32768,  1503,    65,  1559,-32768,   958,   846,  1015,  1020,  1042,
+   364,  1043,  1045,  1047,  1048,  1050,  1052,  1053,   233,  2782,
+  2803,-32768,-32768,  2294,   -32,   -32,   -32,   993,  1064,    65,
+    65,    24,    65,  1062,    24,  1706,   596,  1087,   954,  1092,
+    65,    65,   -32,  1094,  1095,   934,  1097,  1098,    24,    24,
+  1099,   -32,  1100,  1101,    24,    24,  1102,  1103,  1104,  1106,
+  1113,    24,   409,    24,  1124,  1123,  1125,  1126,  1129,-32768,
+  1127,   370,  1130,-32768,   827,    65,    65,    65,    65,    65,
+    65,    65,    65,    65,    65,    65,    65,-32768,  5837,  5860,
+  5883,  5906,   230,-32768,   277,   957,  1138,  1120,-32768,-32768,
+-32768,     3,  6412,  1145,     7,    20,  1155,    24,  1156,    24,
+  1157,  1158,-32768,  1721,   408,  1682,-32768,-32768,    65,    24,
+    24,    24,-32768,   253,    24,    24,    24,    24,    24,    24,
+    24,    65,    65,    65,   985,   -55,   -30,     0,-32768,-32768,
+  2824,  2845,  1161,  5929,    -7,  1086,    65,    65,-32768,   991,
+     8,   994,  2866,  2887,  -105,   995,   997,   998,  1001,   999,
+  1004,  1002,  1003,  -103,  1005,  1014,  1016,  1006,  1007,  1008,
+  1013,  1018,  1019,  1024,-32768,-32768,-32768,-32768,-32768,  1021,
+  1022,  1035,  1036,  1037,  1044,  1038,-32768,  1039,   115,  1164,
+  2908,  2929,  2950,  2971,  2992,  3013,  3034,  3055,  3076,  3097,
+  3118,  3139,-32768,-32768,-32768,-32768,-32768,  1170,    65,  1174,
+  1186,     5,-32768,  1017,  1587,  1187,-32768,-32768,-32768,   -32,
+-32768,  1188,-32768,  1215,-32768,-32768,    65,  1531,  3160,  1216,
+  1217,  1218,    65,    65,  1219,  1222,  1223,  1224,  1225,  1227,
+  1228,  2317,  5952,  1581,   141,   -32,  1229,   -32,  1230,   -32,
+    11,    65,    65,-32768,  1231,    24,    24,  1159,    24,   227,
+  5975,    65,     8,  1236,    65,    24,  1235,  1240,  1238,  1080,
+  1242,   409,  1243,  1247,    65,  1245,  1249,  1257,  1259,  1264,
+   409,    65,    65,    65,    24,  1262,  1266,   409,    65,  1267,
+  1268,  1272,    65,   370,-32768,-32768,    65,    65,    65,    65,
+    65,    65,    65,    65,    65,    65,    65,    65,  1282,  1302,
+-32768,  1239,  1096,     3,  1283,  1206,    87,  3181,-32768,    13,
+-32768,-32768,  6412,-32768,    65,-32768,-32768,-32768,  1465,  1491,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1111,-32768,    65,
+-32768,  1115,   254,-32768,   256,-32768,   273,-32768,    40,  3202,
+  3223,    -7,   231,-32768,    51,  1112,  1226,    65,-32768,-32768,
+  3244,     8,  1122,  3265,  1119,-32768,  1128,-32768,  1131,-32768,
+  1134,-32768,  1132,  5998,-32768,  1133,-32768,-32768,  1139,  1140,
+  6021,  3286,  6044,  1137,-32768,  1142,  1143,  3307,  1141,  1144,
+-32768,  3328,  1146,  3349,  3370,  3391,  3412,  3433,  3454,  3475,
+  3496,  3517,  3538,  3559,  3580,-32768,-32768,     3,    65,-32768,
+    81,-32768,  1135,    65,    65,-32768,  3601,-32768,-32768,   141,
+  2017,-32768,    65,    65,    65,  1299,  1160,   -35,-32768,    65,
+    65,  1241,-32768,    24,-32768,    24,    65,  2340,    24,  1179,
+  1317,    -7,   409,  1323,    65,  1330,   409,  1331,  1335,  1333,
+  1336,  1337,    65,  1338,    24,  1339,  1340,    65,  1344,  1342,
+    65,  1345,    65,    65,    65,    65,    65,    65,    65,    65,
+    65,    65,    65,    65,  1343,  4915,     3,-32768,  1347,  2363,
+  3622,  1348,  1171,    65,-32768,  2386,  2409,  2432,-32768,    24,
+  1356,-32768,  2455,  2478,  1184,-32768,  1162,  1617,-32768,  1173,
+     8,-32768,  1189,  1191,  1192,  3643,-32768,  1197,-32768,  1200,
+-32768,-32768,-32768,  6067,-32768,  1198,-32768,-32768,  6090,  1201,
+-32768,  6113,  1199,  3664,  3685,  3706,  3727,  3748,  3769,  3790,
+  3811,  3832,  6136,  6159,  6182,-32768,  1202,-32768,-32768,-32768,
+    65,  1203,-32768,  2501,  1373,  1375,    12,  1207,-32768,  1381,
+  1382,    24,    24,-32768,  1383,     8,   409,   409,   409,   409,
+  1384,  1385,  1386,   409,  1387,  1388,  1389,  1391,    65,    65,
+    65,    65,    65,    65,    65,    65,    65,-32768,-32768,-32768,
+  1318,  2113,  1399,-32768,-32768,-32768,-32768,    40,    24,-32768,
+-32768,  1232,  1237,-32768,     8,  1233,  1234,  1250,  1251,-32768,
+-32768,-32768,  1248,-32768,-32768,-32768,  1252,  3853,  3874,  3895,
+  3916,  3937,  3958,  3979,  4000,  4021,  1253,  1254,  1255,-32768,
+    65,-32768,  1258,    -3,  1260,    24,  1325,  1265,   409,   409,
+  1402,  1404,   409,  1415,    65,    65,    65,    65,    65,    65,
+    65,    65,    65,    65,    65,    65,  2524,  1417,  1422,    24,
+  1263,  1269,     8,  1261,  1274,-32768,-32768,  1270,  1271,  4042,
+  4063,  4084,  4105,  4126,  4147,  4168,  4189,  4210,   163,  6412,
+   234,  6412,   261,  6412,-32768,  1279,-32768,  1289,  1352,    65,
+     8,   409,    24,  1441,  1442,    65,    65,    65,    65,    65,
+    65,    65,    65,    65,    65,  1445,    65,  1466,    65,  1467,
+  1468,  1470,  1297,  4231,     8,  1300,  1301,-32768,-32768,  4252,
+  4273,  4294,  4315,  4336,  4357,  6205,  6228,  6251,  6412,-32768,
+  6412,-32768,  6412,-32768,-32768,-32768,    65,    65,  1334,   409,
+    24,    65,    65,    65,    65,    65,    65,-32768,-32768,-32768,
+  4378,  2547,  1341,  1304,  1306,  4399,  4420,  4441,  4462,  4483,
+  4504,  1298,  1307,  1308,    65,  1480,-32768,    24,   409,    65,
+    65,    65,    65,    65,    65,    65,    65,    65,  2570,-32768,
+  1311,  1316,  4525,  4546,  4567,  4588,  4609,  4630,   270,  6412,
+   278,  6412,   298,  6412,  1486,    24,  1487,    65,    65,    65,
+    65,    65,    65,    65,  1492,    65,  1502,    65,  1504,-32768,
+  1332,-32768,  4651,  4672,  4693,  6274,  6297,  6320,  6412,-32768,
+  6412,-32768,  6412,-32768,    24,    65,    65,    65,-32768,-32768,
+-32768,  1357,  4714,  4735,  4756,  1329,  1358,  1359,    24,    65,
+    65,    65,    65,    65,    65,  1413,  4777,  4798,  4819,   307,
+  6412,   372,  6412,   406,  6412,   409,    65,    65,    65,    65,
+  1558,    65,  1560,    65,  1561,  1362,  6343,  6366,  6389,  6412,
+-32768,  6412,-32768,  6412,-32768,  1588,-32768,-32768,-32768,-32768,
+  1454,  1455,  1456,    65,    65,    65,   411,  6412,   412,  6412,
+   415,  6412,    65,  1589,    65,  1631,    65,  1633,  6412,-32768,
+  6412,-32768,  6412,-32768,  1565,  1593,-32768
 };
 
 static const short yypgoto[] = {-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-  1128,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+  1121,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1747,  1748,
-  -314,   211,  1752,-32768,-32768,-32768,-32768,   536, -1029,-32768,
--32768,   -76,  -892,   -23,-32768,  1168,   -12,-32768,   -86,-32768,
-  -916,   882,   814,  -420, -1077,-32768,-32768,-32768
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  -253,    -2,-32768,
+  1635,  1636,  -313,   264,  1642,-32768,-32768,-32768,-32768,   484,
+ -1014,-32768,-32768,   -75,  -847,   -23,-32768,  1066,   131,-32768,
+   -85,-32768,  -887,   829,   784,  -406,  -892,-32768,-32768,-32768
 };
 
 
-#define	YYLAST		7074
-
-
-static const short yytable[] = {   128,
-   223,   330,   190,   828,  1097,   476,   993,   957,  1219,    77,
-  1113,   180,   140,   182,   832,  1002,   582,   137,  1028,   264,
-  1166,  1038,  1009,   171,   412,    89,   296,  1039,   536,   537,
-   164,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-   112,   113,   114,   597,   172,   598,   335,  1056,    26,    27,
-    28,    29,    30,    31,    32,    33,   380,    34,   229,    36,
-    37,  1038,    39,    40,   133,   923,     8,  1039,   153,   265,
-   134,   154,   155,   833,   156,   692,   693,   317,   318,    52,
-   317,   318,   252,   253,   254,   255,   256,   257,   258,   894,
-   266,   261,   263,    53,    54,  1058,   860,  1059,   861,   285,
-   286,   287,   288,   343,   290,   291,     9,   293,   294,   295,
-    10,   300,   834,   317,   318,   883,   381,   563,  1212,    81,
-  1213,   884,   138,   141,  1253,   903,   315,   316,   139,   173,
-   699,  1345,  1112,  1346,   312,   313,   314,   181,   336,  1136,
-   166,  1017,   321,   167,   168,   334,   924,   337,  1038,   339,
-   340,   436,    80,    63,  1039,   437,   413,   414,   415,   416,
-    78,   317,   318,    82,  1137,   317,   318,   331,  1141,   829,
-  1098,   958,  1220,   183,    83,   120,   121,   417,   418,   225,
-   226,   122,  1283,   225,   226,   227,   125,   228,  1026,   227,
-   530,   228,   297,   379,   531,   481,   383,   384,   385,   386,
-   387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
-   397,   398,   399,   400,   401,   402,   403,  1113,  1347,    84,
-  1348,    11,    12,    13,    14,    15,    16,    17,    18,  1349,
-    85,  1350,   317,   318,   421,   422,   423,   424,   425,   426,
-   427,   428,   429,   430,   431,   432,   433,   434,   435,   319,
-    86,   267,   560,   158,   159,   442,   561,    87,   445,   564,
-   565,   566,   567,   451,   160,   317,   318,   456,   457,   458,
-   161,   460,   461,   462,   463,   464,   465,   466,   483,   484,
-   568,   569,   320,  1018,  1019,  1020,  1021,   717,   478,   479,
-   480,   597,    88,   485,   470,   471,  1240,  1241,  1242,  1243,
-   317,   318,   493,  1247,  1022,  1023,   821,   487,   498,   131,
-   597,    89,    90,    91,   135,    92,   467,    93,    94,    95,
-    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-   106,   107,   108,   109,   110,   111,   112,   113,   114,  1057,
-   115,    89,    90,  1058,  1443,   132,  1444,    93,    94,    95,
-    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-   106,   107,   108,   109,   110,   111,   112,   113,   114,   325,
-   136,  1300,  1301,   329,   177,  1304,   142,   178,   571,   572,
-   573,   574,   575,   847,   848,   578,   624,   625,   626,   627,
-   628,   629,   630,   631,   632,   633,   634,   635,   268,   269,
-   270,   271,   272,   451,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,   317,   318,   379,   317,   318,   282,   146,
-   599,   317,   318,   143,   144,   604,  1354,   147,   980,   862,
-  1445,   863,  1446,   623,   613,   614,  1447,   864,  1448,   865,
-   317,   318,   145,   617,   612,  1087,  1088,   317,   318,   148,
-   621,   317,   318,   317,   318,   152,   477,   116,   117,   118,
-   119,   655,   656,   745,   317,   318,  1499,  1035,  1500,  1036,
-   170,   120,   121,  1501,   174,  1502,  1393,   122,   123,   124,
-  1037,  1503,   125,  1504,   126,  1532,   127,  1533,   624,   625,
-   626,   627,   628,   629,   630,   631,   632,   633,   634,   635,
-   636,   120,   121,   157,   694,  1421,  1534,   122,  1535,   279,
-   280,   281,   125,   165,   169,   262,   695,   282,   277,   278,
-   279,   280,   281,   696,   697,   698,   736,   451,   282,   701,
-   702,   703,   704,   705,   951,   175,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,   176,   716,   270,   271,   272,
-   282,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-   718,   379,   727,   729,   179,   282,    41,    42,    43,    44,
-   737,    46,   184,   268,   269,   270,   271,   272,   185,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,   149,   150,
-   186,   151,  1505,   282,   815,   749,   750,   751,  1536,   187,
-  1537,   981,   866,   271,   272,   188,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,   768,   769,   189,   771,   221,
-   282,   775,   225,   226,   224,   230,   780,   781,   449,   231,
-   228,   232,   225,   226,   233,   225,   226,   234,   595,   782,
-   228,   842,   259,   228,    89,    90,   235,   236,   791,   237,
+#define	YYLAST		6585
+
+
+static const short yytable[] = {   129,
+   223,   461,   190,  1082,   402,   228,   804,   172,   903,   182,
+    76,  1000,   808,   180,   961,   579,   938,  1177,  1006,   138,
+   128,   141,   258,   970,  1016,   809,    88,   291,   328,  1017,
+   977,     9,    92,    93,    94,    95,    96,    97,    98,    99,
+   100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+   110,   111,   112,   113,  1022,   685,  1016,   312,   313,   312,
+   313,  1017,   122,   123,   810,   468,   469,    88,    89,   857,
+   663,   866,     8,    92,    93,    94,    95,    96,    97,    98,
+    99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+   109,   110,   111,   112,   113,   252,   253,   254,   173,  1016,
+   255,   257,   259,   260,  1017,  1065,   177,   312,   313,   178,
+   280,   281,   282,   283,   336,   285,   286,    79,   288,   289,
+   290,   329,   295,   836,   421,   837,   312,   313,   422,    80,
+   159,   160,   312,   313,   139,   686,   687,   310,   311,    81,
+   140,   161,   142,   314,  1093,  1081,   571,   162,   838,   181,
+   839,   312,   313,   150,   151,   327,   152,   330,   134,   332,
+   333,   683,   312,   313,   135,   594,   846,   595,   315,   312,
+   313,    77,   847,   165,  1128,   312,   313,  1239,   840,   183,
+   841,   229,   805,   174,   904,  1094,   119,   120,    82,  1098,
+   939,  1178,   121,    41,    42,    43,    44,   124,    46,  1082,
+   513,   372,    91,   292,   514,    83,   376,   377,   378,   379,
+   380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+   390,   391,   392,   393,   394,   395,   396,   119,   120,  1024,
+    84,  1025,   167,   121,   948,   168,   169,    10,   124,   406,
+   407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
+   417,   418,   419,   420,   133,   403,   122,   123,   401,  1067,
+   427,  1068,   225,   430,   226,  1004,   147,   567,   436,   312,
+   313,   568,   441,   442,   443,    85,   445,   446,   447,   448,
+   449,   450,   451,   798,   122,   123,   520,    86,   307,   308,
+   309,   312,   313,   463,   464,   465,   316,   148,   470,  1186,
+  1187,  1188,  1189,   823,   824,   476,  1193,   452,   274,   275,
+   276,   481,    87,    88,    89,    90,   277,    91,   132,    92,
+    93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+   113,  1285,   114,  1286,   115,   116,   117,   118,    11,    12,
+    13,    14,    15,    16,    17,    18,   122,   123,   374,   694,
+   312,   313,   225,   594,   226,   122,   123,   136,   137,   713,
+   519,  1244,  1245,   570,   143,  1248,   462,   144,   574,   263,
+   264,   265,   266,   267,   145,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,   146,   312,   313,   572,   436,   277,
+   115,   116,   117,   118,   797,  1023,   149,   949,   594,  1024,
+   372,   722,  1287,   714,  1288,   596,   312,   313,   312,   313,
+   601,   122,   123,   153,  1296,   115,   116,   117,   118,   610,
+   611,   799,  1013,   320,  1014,   312,   313,   324,   614,  1289,
+   171,  1290,   455,   456,   158,   618,   122,   123,  1384,   175,
+  1385,  1015,   176,   166,   626,   627,  1386,   179,  1387,   115,
+   116,   117,   118,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,  1334,   119,   120,   170,  1388,   277,  1389,   121,
+   122,   123,   184,   185,   124,  1440,   125,  1441,   126,   521,
+   522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
+   532,  1362,   272,   273,   274,   275,   276,   765,   766,   767,
+   768,   769,   277,   262,   186,   664,   263,   264,   265,   266,
+   267,   932,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,   122,   123,   679,   187,   188,   277,   434,   189,   226,
+   680,   681,   682,   221,   436,   154,   224,   688,   155,   156,
+  1442,   157,  1443,   693,   265,   266,   267,   261,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,   230,   372,   704,
+   706,   231,   277,   122,   123,   232,   778,   122,   123,   592,
+   233,   226,   609,   818,  1444,   226,  1445,   234,  1446,  1473,
+  1475,  1474,  1476,  1477,   235,  1478,   731,   732,   236,   734,
+   237,   238,   239,   738,   533,   240,   241,   743,   744,   242,
+   243,   244,   245,    88,    89,   246,   247,   278,   248,    92,
     93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
    103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-   113,   114,   238,   268,   269,   270,   271,   272,   239,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,   240,   241,
-   242,   890,   243,   282,   260,   244,   245,   246,   843,   802,
-   803,   804,   805,   806,   247,   248,   249,  1104,   250,   251,
-   283,   856,   857,   858,   284,   289,   292,   301,   302,   303,
-   307,   867,   868,   869,   870,   871,   872,   873,   874,   875,
-   876,   877,   878,   305,   306,   308,   309,   310,    89,    90,
-   887,   888,   311,   328,    93,    94,    95,    96,    97,    98,
+   113,   249,   781,   782,   783,   784,   785,   786,   787,   788,
+   789,   790,   791,   792,   405,   250,   251,   279,   284,   287,
+   263,   264,   265,   266,   267,   853,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,   296,   297,   298,   300,   301,
+   277,   317,   800,   302,   318,   819,   303,   304,   305,   306,
+   323,   331,   322,   334,   335,   337,  1073,   319,   832,   833,
+   834,   338,   339,   340,   367,   341,   342,   343,   344,   373,
+   695,   345,   346,   850,   851,   369,   347,    88,   435,   348,
+   349,   350,   351,    92,    93,    94,    95,    96,    97,    98,
     99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-   109,   110,   111,   112,   113,   114,   268,   269,   270,   271,
-   272,   322,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,   323,   324,   327,   338,   341,   282,   374,   776,   342,
-   344,   345,   346,   404,   347,   927,   348,   349,   350,   351,
-   352,   353,   354,   984,   120,   121,   355,   932,   379,   496,
-   122,   929,   356,   938,   939,   125,   357,   358,   594,   359,
-   360,   361,   362,   363,  1015,   364,   365,   366,   367,   368,
-   369,   370,   371,   372,   373,   282,   410,   952,   377,   954,
-   376,   956,   419,   378,   454,   972,   973,   420,   459,   489,
-   490,   492,   495,   499,   500,   983,   523,   382,   986,   501,
-   502,   503,   504,   505,   506,   507,   508,   509,   996,   510,
-   511,   512,   513,   514,   515,  1003,  1004,  1005,   516,   517,
-   518,   519,  1010,   520,   521,   522,  1014,   524,   525,   526,
-   527,   528,   529,   538,   532,   579,   533,  1064,   120,   121,
-  1029,   534,   583,   576,   122,   405,   577,   581,   584,   125,
-   585,   586,   726,   588,   589,  1033,   591,   615,   592,   593,
-   600,   616,   649,   650,   651,   652,  1042,  1043,  1044,  1045,
-  1046,  1047,  1048,  1049,  1050,  1051,  1052,  1053,   654,   658,
-   659,   660,   661,   662,   663,   406,  1062,   299,   664,   665,
-   666,   667,   304,   668,   268,   269,   270,   271,   272,   669,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,   670,
-   671,   672,   689,   326,   282,   673,   674,   675,   676,   677,
-   332,   333,   690,  1090,  1091,  1092,  1093,  1094,  1095,  1096,
-   678,   679,  1101,  1102,   680,   681,   682,   683,   684,   685,
-   686,  1107,  1108,  1109,   268,   269,   270,   271,   272,   687,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,   688,
-  1126,  1127,   700,   691,   282,   706,   707,  1131,   708,   779,
-   715,   721,   723,   732,   733,  1139,   734,   735,   738,   739,
-   740,   741,   742,  1147,   743,   744,   753,  1198,  1152,   767,
-   407,  1155,   268,   269,   270,   271,   272,   772,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,   755,   756,   777,
-   778,  1174,   282,   783,   784,   408,   786,   787,   790,   757,
-  1180,  1181,  1182,  1183,  1184,  1185,  1186,  1187,  1188,  1189,
-  1190,  1191,   268,   269,   270,   271,   272,   758,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,    89,    90,   759,
-   760,  1239,   282,    93,    94,    95,    96,    97,    98,    99,
-   100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-   110,   111,   112,   113,   114,   761,   762,  1214,   763,   764,
-   765,   785,   766,   792,   793,   796,   797,   798,   799,   800,
-   809,   827,  1273,   810,   811,   812,    89,    90,   570,   813,
-   814,   831,    93,    94,    95,    96,    97,    98,    99,   100,
+   109,   110,   111,   112,   113,   726,   727,   728,   263,   264,
+   265,   266,   267,   352,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,   745,   479,   353,   354,   355,   277,   370,
+   739,   356,   754,   119,   120,   900,   885,   952,   371,   121,
+   357,   908,   358,   359,   124,   397,   360,   256,   691,   361,
+   362,   363,   364,   913,   372,   365,   366,   277,   983,   919,
+   920,   263,   264,   265,   266,   267,   399,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,   404,   439,   940,   941,
+   444,   277,   472,   473,   475,   478,   482,   483,   951,   266,
+   267,   954,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,   964,   484,   485,   486,   487,   277,   488,   971,   972,
+   973,   489,   490,   491,   492,   978,   493,   494,   495,   982,
+   496,   497,   498,   984,   985,   986,   987,   988,   989,   990,
+   991,   992,   993,   994,   995,   499,  1030,   119,   120,   500,
+   501,   502,   503,   121,   504,   505,   506,   507,   124,   508,
+   509,  1007,   521,   522,   523,   524,   525,   526,   527,   528,
+   529,   530,   531,   532,   510,   511,  1011,   516,   512,   263,
+   264,   265,   266,   267,   515,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,  1028,   517,   573,   576,   294,   277,
+   575,   578,   581,   299,   580,   263,   264,   265,   266,   267,
+   910,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+   582,   583,   585,   586,   321,   277,   588,   612,   589,   590,
+   325,   326,   597,   708,   623,   613,   933,   620,   935,   621,
+   937,   622,   625,   629,   630,  1066,   631,   632,   660,   633,
+  1070,  1071,   634,   635,   636,   637,   638,   639,   640,  1076,
+  1077,  1078,   661,   641,   678,   684,  1083,  1084,   729,   642,
+   643,   689,   644,  1088,   645,   690,   666,   780,   646,   647,
+   648,  1096,   649,   650,   651,  1146,   692,   698,   700,  1104,
+   652,   710,   653,   654,  1109,   709,   711,  1112,   667,  1114,
+  1115,  1116,  1117,  1118,  1119,  1120,  1121,  1122,  1123,  1124,
+  1125,   655,   656,   657,   658,   659,   662,   668,   712,   715,
+  1134,   716,   669,   717,   718,   670,   719,   671,   720,   721,
+   672,   673,   674,   675,   676,    88,    89,   677,   735,   730,
+  1185,    92,    93,    94,    95,    96,    97,    98,    99,   100,
    101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-   111,   112,   113,   114,   835,   837,   839,   840,  1259,  1260,
-  1261,  1262,  1263,  1264,  1265,  1266,  1267,   268,   269,   270,
-   271,   272,   881,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,  1328,   562,   886,   928,   859,   282,  1280,   889,
-  1281,   891,   268,   269,   270,   271,   272,   895,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,   897,   896,   898,
-   899,  1353,   282,   900,   901,   902,   904,   905,   930,   931,
-   935,  1311,  1312,  1313,  1314,  1315,  1316,  1317,  1318,  1319,
-  1321,  1323,  1325,   906,   907,   908,  1378,   120,   121,   709,
-   909,   910,   911,   122,   912,   913,   914,   915,   125,   936,
-   916,   933,   917,   919,   918,   920,   921,   922,   925,   937,
-   940,   941,   942,  1352,   943,   944,   945,   946,   953,   955,
-   959,   978,  1361,  1362,  1363,  1364,  1365,  1366,  1367,  1368,
-  1369,  1370,   974,  1372,   985,  1374,   120,   121,   988,   989,
-   990,   992,   122,   991,   994,   995,   997,   125,   998,   999,
-  1000,  1001,  1007,  1008,  1011,  1012,  1024,  1025,  1016,  1013,
-  1032,  1060,  1390,  1391,  1034,  1061,  1065,  1395,  1396,  1397,
-  1398,  1399,  1400,  1067,  1068,  1069,   710,  1070,  1110,  1128,
-  1074,  1075,  1071,  1073,  1080,  1081,  1079,  1083,  1084,  1100,
-  1418,  1086,  1134,  1135,  1111,  1422,  1423,  1424,  1425,  1426,
-  1427,  1429,  1431,  1433,  1138,  1140,  1142,  1143,   719,   720,
-  1156,   722,  1144,  1145,  1146,   724,   725,  1148,  1150,  1151,
-  1153,  1154,  1157,  1452,  1453,  1454,  1455,  1456,  1457,  1458,
-  1165,  1460,  1168,  1462,  1169,  1173,   268,   269,   270,   271,
-   272,  1172,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,  1472,  1473,  1474,  1179,  1194,   282,  1195,  1197,  1199,
-  1200,  1201,  1203,  1204,  1206,  1486,  1487,  1488,  1490,  1492,
-  1494,  1208,  1217,  1210,   770,  1218,  1215,   773,  1211,  1221,
-  1234,  1235,  1506,  1507,  1508,  1509,  1238,  1511,  1244,  1513,
-  1245,   788,   789,  1246,  1248,  1249,  1250,   794,   795,  1251,
-  1252,  1256,  1271,  1272,   801,  1274,   808,  1275,  1276,  1527,
-  1529,  1531,  1277,  1298,  1302,  1299,  1303,  1305,  1538,  1294,
-  1540,  1295,  1542,   268,   269,   270,   271,   272,  1308,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,  1278,  1279,
-  1282,  1284,  1309,   282,   836,  1296,   838,  1326,  1327,  1351,
-  1329,  1331,  1332,  1330,  1356,  1357,   844,   845,   846,  1333,
-  1334,   849,   850,   851,   852,   853,   854,   855,    89,    90,
-  1089,  1335,  1359,  1360,    93,    94,    95,    96,    97,    98,
-    99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-   109,   110,   111,   112,   113,   114,    89,    90,  1358,  1376,
-  1371,  1373,    93,    94,    95,    96,    97,    98,    99,   100,
+   111,   112,   113,   740,   742,   741,   746,   747,   748,   749,
+   750,   753,   755,   756,   759,   760,   761,  1172,   762,  1218,
+   263,   264,   265,   266,   267,   763,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,   803,   772,   773,   775,   774,
+   277,   776,   777,   779,   801,  1198,  1199,  1200,  1201,  1202,
+  1203,  1204,  1205,  1206,   802,   263,   264,   265,   266,   267,
+   807,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+   811,   813,   815,   816,   835,   277,   844,  1271,   849,   886,
+   852,   859,   854,   858,   899,   861,   860,   862,   863,   901,
+   864,   865,   569,   867,   870,   871,   872,  1237,   868,   902,
+   869,   873,   909,   911,   906,  1295,   874,   875,   876,   877,
+   878,  1250,  1251,  1252,  1253,  1254,  1255,  1256,  1257,  1258,
+  1260,  1262,  1264,   879,   880,   881,   883,   884,   882,  1319,
+   912,   916,   917,   918,   921,   119,   120,   922,   923,   924,
+   925,   121,   926,   927,   934,   936,   124,   942,   953,   591,
+   956,   946,   957,   958,   959,   998,  1294,   960,   962,   963,
+   965,   966,  1300,  1301,  1302,  1303,  1304,  1305,  1306,  1307,
+  1308,  1309,   967,  1311,   968,  1313,   969,   975,   976,   979,
+   980,   999,   263,   264,   265,   266,   267,   981,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,   996,  1002,  1003,
+  1010,  1026,   277,  1331,  1332,  1012,  1031,  1033,  1336,  1337,
+  1338,  1339,  1340,  1341,  1079,  1027,  1034,   997,  1036,  1035,
+  1037,  1039,  1069,  1040,  1041,  1045,  1046,  1047,  1050,  1049,
+  1091,  1359,  1092,  1085,  1052,  1095,  1363,  1364,  1365,  1366,
+  1367,  1368,  1370,  1372,  1374,  1097,  1099,  1100,  1101,  1080,
+  1143,  1102,  1103,  1105,  1107,  1108,  1110,  1111,  1126,  1113,
+  1129,  1133,  1132,  1145,  1393,  1394,  1395,  1396,  1397,  1398,
+  1399,  1139,  1401,  1142,  1403,   696,   697,  1147,   699,  1148,
+  1149,  1151,   701,   702,  1152,  1156,  1154,  1158,  1175,  1171,
+  1176,  1173,  1413,  1414,  1415,  1179,  1180,  1181,  1184,  1190,
+  1191,  1192,  1194,  1195,  1196,  1197,  1427,  1428,  1429,  1431,
+  1433,  1435,  1210,  1213,  1242,   733,  1243,  1246,   736,  1247,
+  1216,  1219,  1220,  1447,  1448,  1449,  1450,  1217,  1452,  1249,
+  1454,  1266,   751,   752,  1221,  1222,  1223,  1267,   757,   758,
+  1224,  1293,  1234,  1235,  1236,   764,  1238,   771,  1240,  1272,
+  1468,  1470,  1472,  1269,  1274,  1275,  1298,  1299,  1270,  1479,
+  1310,  1481,  1273,  1483,   263,   264,   265,   266,   267,  1291,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,  1292,
+  1008,  1312,  1314,  1315,   277,  1316,  1317,  1356,  1320,  1321,
+  1333,   812,  1348,   814,  1349,  1360,  1357,  1358,  1347,  1376,
+  1377,  1390,  1392,   820,   821,   822,  1009,  1400,   825,   826,
+   827,   828,   829,   830,   831,    88,    89,  1402,  1423,  1404,
+  1405,    92,    93,    94,    95,    96,    97,    98,    99,   100,
    101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-   111,   112,   113,   114,    89,   450,  1375,  1406,  1379,  1380,
+   111,   112,   113,    88,    89,  1419,  1456,  1424,  1425,    92,
     93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
    103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-   113,   114,    89,   728,  1392,  1407,  1408,  1419,    93,    94,
+   113,    88,   705,  1451,  1486,  1453,  1455,    92,    93,    94,
     95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-    89,   926,  1415,  1416,  1417,  1435,    93,    94,    95,    96,
+   105,   106,   107,   108,   109,   110,   111,   112,   113,    88,
+   907,  1436,  1487,  1460,  1480,    92,    93,    94,    95,    96,
     97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-   107,   108,   109,   110,   111,   112,   113,   114,   711,   979,
-  1436,   268,   269,   270,   271,   272,   987,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,  1449,  1451,   120,   121,
-  1459,   282,  1461,  1463,   122,  1006,  1464,   468,  1478,   125,
-   712,  1482,  1483,  1484,  1510,  1512,  1514,  1495,  1515,  1519,
-  1523,  1524,  1525,  1539,  1541,  1543,   120,   121,  1545,  1546,
-   754,   713,   122,    68,    69,  1257,     0,   125,    70,     0,
-     0,     0,     0,     0,   730,   977,     0,     0,     0,     0,
-     0,     0,   731,     0,   120,   121,     0,     0,     0,     0,
-   122,     0,     0,     0,     0,   125,     0,   752,     0,     0,
+   107,   108,   109,   110,   111,   112,   113,   263,   264,   265,
+   266,   267,  1144,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,   947,  1464,  1465,  1466,  1482,   277,  1484,   955,
+   665,    67,    68,   263,   264,   265,   266,   267,    69,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,   974,   707,
+     0,  1214,     0,   277,     0,   119,   120,     0,   577,     0,
+     0,   121,     0,     0,     0,   945,   124,     0,     0,   703,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   593,
+     0,     0,     0,   119,   120,     0,     0,     0,     0,   121,
+     0,     0,     0,     0,   124,     0,     0,   914,     0,     0,
+     0,     0,     0,   737,     0,     0,     0,     0,     0,     0,
+     0,   119,   120,     0,     0,     0,     0,   121,   817,     0,
+     0,     0,   124,   263,   264,   265,   266,   267,     0,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,   119,
+   120,     0,     0,   277,     0,   121,     0,     0,     0,   930,
+   124,   931,     0,     0,     0,     0,     0,     0,     0,   263,
+   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,  1086,     0,  1087,
+   277,     0,  1090,   263,   264,   265,   266,   267,   424,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,  1106,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,     0,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,     0,     0,     0,   263,   264,
+   265,   266,   267,  1138,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,   263,   264,   265,   266,   267,   277,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,     0,     0,     0,    26,    27,    28,
+    29,    30,    31,    32,    33,     0,    34,     0,    36,    37,
+     0,    39,    40,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,  1182,  1183,    51,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   120,   121,     0,     0,     0,     0,   122,   822,
-     0,     0,     0,   125,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   823,     0,     0,     0,     0,     0,
-   120,   121,     0,     0,     0,     0,   122,     0,     0,   824,
-     0,   125,     0,     0,     0,   268,   269,   270,   271,   272,
-     0,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,   825,     0,     0,   282,     0,     0,     0,     0,
-     0,  1129,     0,  1130,     0,     0,  1133,   268,   269,   270,
-   271,   272,     0,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,  1149,   826,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,     0,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,  1030,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,  1178,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,   268,   269,   270,   271,   272,   282,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,  1031,     0,     0,   282,     0,   268,   269,   270,   271,
-   272,     0,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,   268,   269,   270,   271,   272,   282,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,   268,   269,   270,   271,
-   272,   282,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,  1158,     0,     0,     0,     0,   282,  1236,  1237,   268,
-   269,   270,   271,   272,     0,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,  1159,     0,     0,     0,     0,   282,
-     0,     0,     0,     0,  1258,     0,     0,     0,     0,     0,
-   268,   269,   270,   271,   272,     0,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,  1160,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,  1161,     0,     0,     0,
-     0,   282,     0,     0,  1297,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,  1310,   268,   269,
-   270,   271,   272,  1162,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,     0,
-     0,     0,     0,     0,     0,  1163,     0,   268,   269,   270,
-   271,   272,     0,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,  1355,     0,     0,  1164,   282,   268,   269,
-   270,   271,   272,   469,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,  1196,   282,     0,
-     0,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-   580,   282,     0,  1394,     0,     0,     0,     0,     0,     0,
-     0,     0,   268,   269,   270,   271,   272,     0,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,   596,     0,     0,
-  1420,     0,   282,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,   774,     0,
-     0,     0,     0,   282,     0,     0,     0,     0,  1450,     0,
-   268,   269,   270,   271,   272,     0,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,   841,     0,     0,     0,     0,
-   282,     0,   268,   269,   270,   271,   272,  1471,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,  1485,   282,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,     0,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-     0,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,     0,     0,     0,     0,
-     0,     0,   268,   269,   270,   271,   272,     0,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,     0,     0,     0,     0,     0,     0,
-   268,   269,   270,   271,   272,     0,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,    26,    27,    28,    29,    30,    31,    32,    33,     0,
-    34,     0,    36,    37,     0,    39,    40,     0,     0,    -8,
-     1,     0,    -8,   -51,     0,     0,     0,     0,     0,     0,
-     0,     0,    52,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    53,    54,     0,     0,
-   -51,     0,   -51,   -51,   -51,   -51,   -51,   -51,   -51,   -51,
+     0,    52,    53,    26,    27,    28,    29,    30,    31,    32,
+    33,     0,    34,     0,    36,    37,     0,    39,    40,     0,
+     0,     0,  1215,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    51,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    52,    53,    26,
+    27,    28,    29,    30,    31,    32,    33,     0,    34,  1241,
+    36,    37,    62,    39,    40,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
+     0,     0,     0,  1268,    -8,     1,     0,    -8,   -51,     0,
+     0,     0,     0,    52,    53,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   466,     0,     0,     0,    62,     0,
+     0,     0,     0,     0,     0,   -51,  1297,   -51,   -51,   -51,
+   -51,   -51,   -51,   -51,   -51,   -51,     0,   -51,   -51,   -51,
+   -51,   -51,   -51,   -51,     0,     0,     0,   -51,   -51,   -51,
+   -51,   -51,   -51,     0,   -51,   -51,   -51,   -51,   -51,     0,
+   471,     0,     0,     0,    62,     0,     0,     0,     0,     0,
+     0,     0,   -51,   -51,  1335,     0,     0,     0,     0,     0,
    -51,     0,   -51,   -51,   -51,   -51,   -51,   -51,   -51,     0,
-     0,     0,   -51,   -51,   -51,   -51,   -51,   -51,     0,   -51,
-   -51,   -51,   -51,   -51,   -51,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   -51,   -51,
-     0,     0,     0,     0,     0,   -51,    63,   -51,   -51,   -51,
-   -51,   -51,   -51,   -51,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    -8,    -8,    -8,    -8,    -8,    -8,    -8,
-    -8,    23,     0,   268,   269,   270,   271,   272,   486,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,   -51,     2,
-     3,     0,     4,   282,     0,     0,     0,     0,    24,   550,
-    25,    26,    27,    28,    29,    30,    31,    32,    33,     0,
-    34,    35,    36,    37,    38,    39,    40,     0,     0,     0,
-    41,    42,    43,    44,    45,    46,     0,    47,    48,    49,
-    50,    51,    52,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   191,     0,     0,     0,    53,    54,     0,     0,
-     0,     0,     0,    55,     0,    56,    57,    58,    59,    60,
-    61,    62,    26,    27,    28,    29,    30,    31,    32,    33,
-     0,    34,     0,    36,    37,     0,    39,    40,   268,   269,
-   270,   271,   272,     0,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,    52,     0,     0,     0,     0,   282,     0,
-     0,   192,   193,   194,   557,     0,    63,    53,    54,   195,
-   196,   197,   198,   199,   200,   201,   202,   203,   204,     0,
-     0,     0,     0,     0,     0,     0,     0,   205,   206,   207,
-   208,   209,   210,   211,   212,   213,   214,     0,   215,   216,
-   217,   218,   219,   220,   268,   269,   270,   271,   272,     0,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,     0,     0,    63,     0,     0,
-   949,     0,   950,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,     0,     0,     0,     0,     0,  1105,
-     0,  1106,   268,   269,   270,   271,   272,     0,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,     0,     0,     0,     0,     0,  1254,     0,
-  1255,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,     0,   268,   269,   270,   271,   272,   439,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,     0,     0,   268,   269,   270,
-   271,   272,   444,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,     0,     0,
-   268,   269,   270,   271,   272,   446,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,     0,     0,   268,   269,   270,   271,   272,   601,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,     0,     0,   268,   269,   270,   271,
-   272,   605,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,     0,   268,
-   269,   270,   271,   272,   606,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-     0,     0,   268,   269,   270,   271,   272,   748,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,     0,     0,   268,   269,   270,   271,   272,
-   947,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,     0,     0,   268,   269,
-   270,   271,   272,  1132,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,     0,
-     0,   268,   269,   270,   271,   272,  1170,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,     0,   268,   269,   270,   271,   272,  1175,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,     0,     0,   268,   269,   270,
-   271,   272,  1176,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,     0,     0,
-   268,   269,   270,   271,   272,  1177,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,     0,     0,   268,   269,   270,   271,   272,  1192,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,     0,     0,   268,   269,   270,   271,
-   272,  1193,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,     0,   268,
-   269,   270,   271,   272,  1216,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-     0,     0,   268,   269,   270,   271,   272,  1307,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,     0,     0,   268,   269,   270,   271,   272,
-  1405,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,     0,     0,   268,   269,
-   270,   271,   272,  1434,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,   558,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,   559,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,   618,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,   268,   269,   270,   271,   272,   619,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,   620,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,   746,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-   747,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,   268,   269,   270,   271,
-   272,   879,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,   268,   269,   270,
-   271,   272,   880,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,   892,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,   893,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,   934,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,   960,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,   268,   269,   270,   271,   272,   961,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,   962,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,   963,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-   964,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,   268,   269,   270,   271,
-   272,   965,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,   268,   269,   270,
-   271,   272,   966,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,   967,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,   968,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,   969,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,   970,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,   268,   269,   270,   271,   272,   971,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,  1027,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,  1054,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-  1055,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,   268,   269,   270,   271,
-   272,  1063,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,   268,   269,   270,
-   271,   272,  1066,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,  1077,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,  1082,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,  1085,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,  1103,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,   268,   269,   270,   271,   272,  1114,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,  1115,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,  1116,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-  1117,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,   268,   269,   270,   271,
-   272,  1118,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,   268,   269,   270,
-   271,   272,  1119,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,  1120,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,  1121,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,  1122,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,  1123,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,   268,   269,   270,   271,   272,  1124,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,  1125,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,  1171,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-  1202,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,   268,   269,   270,   271,
-   272,  1222,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,   268,   269,   270,
-   271,   272,  1223,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,  1224,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,  1225,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,  1226,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,  1227,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,   268,   269,   270,   271,   272,  1228,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,  1229,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,  1230,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-  1285,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,   268,   269,   270,   271,
-   272,  1286,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,   268,   269,   270,
-   271,   272,  1287,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,  1288,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,  1289,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,  1290,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,  1291,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,   268,   269,   270,   271,   272,  1292,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,  1293,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,  1336,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-  1337,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,   268,   269,   270,   271,
-   272,  1338,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,   268,   269,   270,
-   271,   272,  1339,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,  1340,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,  1341,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,  1342,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,  1343,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,   268,   269,   270,   271,   272,  1344,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,  1377,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,  1381,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-  1382,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,   268,   269,   270,   271,
-   272,  1383,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,   268,   269,   270,
-   271,   272,  1384,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,  1385,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,  1386,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,  1404,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,  1409,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,   268,   269,   270,   271,   272,  1410,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,  1411,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,  1412,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-  1413,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,   268,   269,   270,   271,
-   272,  1414,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,   268,   269,   270,
-   271,   272,  1437,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,  1438,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,  1439,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,  1440,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,  1441,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,   268,   269,   270,   271,   272,  1442,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,   268,   269,   270,   271,   272,  1465,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,   268,   269,   270,   271,   272,  1466,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,   268,   269,   270,   271,   272,
-  1467,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,   268,   269,   270,   271,
-   272,  1479,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,   268,   269,   270,
-   271,   272,  1480,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,   268,   269,
-   270,   271,   272,  1481,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,   268,
-   269,   270,   271,   272,  1496,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-   268,   269,   270,   271,   272,  1497,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,   268,   269,   270,   271,   272,  1498,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,     0,     0,   411,   268,   269,   270,   271,
-   272,     0,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,     0,     0,
-   535,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,     0,     0,   622,   268,   269,   270,   271,
-   272,     0,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,     0,     0,
-   714,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,     0,     0,   816,   268,   269,   270,   271,
-   272,     0,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,     0,     0,
-  1306,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,   409,   268,   269,   270,   271,   272,     0,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,     0,   438,   268,   269,   270,
-   271,   272,     0,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,     0,   440,
-   268,   269,   270,   271,   272,     0,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,     0,   441,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,     0,   443,   268,   269,   270,   271,
-   272,     0,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,   447,   268,
-   269,   270,   271,   272,     0,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-     0,   448,   268,   269,   270,   271,   272,     0,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,     0,   455,   268,   269,   270,   271,   272,
-     0,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,     0,   491,   268,   269,
-   270,   271,   272,     0,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,     0,
-   494,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,   497,   268,   269,   270,   271,   272,     0,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,     0,   539,   268,   269,   270,
-   271,   272,     0,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,     0,   540,
-   268,   269,   270,   271,   272,     0,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,     0,   541,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,     0,   542,   268,   269,   270,   271,
-   272,     0,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,   543,   268,
-   269,   270,   271,   272,     0,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-     0,   544,   268,   269,   270,   271,   272,     0,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,     0,   545,   268,   269,   270,   271,   272,
-     0,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,     0,   546,   268,   269,
-   270,   271,   272,     0,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,     0,
-   547,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,   548,   268,   269,   270,   271,   272,     0,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,     0,   549,   268,   269,   270,
-   271,   272,     0,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,     0,   551,
-   268,   269,   270,   271,   272,     0,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,     0,   552,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,     0,   553,   268,   269,   270,   271,
-   272,     0,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,   554,   268,
-   269,   270,   271,   272,     0,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-     0,   555,   268,   269,   270,   271,   272,     0,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,     0,   556,   268,   269,   270,   271,   272,
-     0,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,     0,   587,   268,   269,
-   270,   271,   272,     0,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,     0,
-   590,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,   602,   268,   269,   270,   271,   272,     0,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,     0,   603,   268,   269,   270,
-   271,   272,     0,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,     0,   607,
-   268,   269,   270,   271,   272,     0,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,     0,   608,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,     0,   609,   268,   269,   270,   271,
-   272,     0,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,   610,   268,
-   269,   270,   271,   272,     0,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-     0,   611,   268,   269,   270,   271,   272,     0,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,     0,   653,   268,   269,   270,   271,   272,
-     0,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,     0,   657,   268,   269,
-   270,   271,   272,     0,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,     0,
-   817,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,   818,   268,   269,   270,   271,   272,     0,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,     0,   819,   268,   269,   270,
-   271,   272,     0,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,     0,   820,
-   268,   269,   270,   271,   272,     0,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,     0,   882,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,     0,   948,   268,   269,   270,   271,
-   272,     0,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,   982,   268,
-   269,   270,   271,   272,     0,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-     0,  1072,   268,   269,   270,   271,   272,     0,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,     0,  1076,   268,   269,   270,   271,   272,
-     0,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,     0,  1078,   268,   269,
-   270,   271,   272,     0,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,     0,
-  1205,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,  1207,   268,   269,   270,   271,   272,     0,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,     0,  1209,   268,   269,   270,
-   271,   272,     0,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,     0,  1231,
-   268,   269,   270,   271,   272,     0,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,     0,  1232,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282,     0,  1233,   268,   269,   270,   271,
-   272,     0,   273,   274,   275,   276,   277,   278,   279,   280,
-   281,     0,     0,     0,     0,     0,   282,     0,  1387,   268,
-   269,   270,   271,   272,     0,   273,   274,   275,   276,   277,
-   278,   279,   280,   281,     0,     0,     0,     0,     0,   282,
-     0,  1388,   268,   269,   270,   271,   272,     0,   273,   274,
-   275,   276,   277,   278,   279,   280,   281,     0,     0,     0,
-     0,     0,   282,     0,  1389,   268,   269,   270,   271,   272,
-     0,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     0,     0,     0,     0,     0,   282,     0,  1468,   268,   269,
-   270,   271,   272,     0,   273,   274,   275,   276,   277,   278,
-   279,   280,   281,     0,     0,     0,     0,     0,   282,     0,
-  1469,   268,   269,   270,   271,   272,     0,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,     0,     0,     0,     0,
-     0,   282,     0,  1470,   268,   269,   270,   271,   272,     0,
-   273,   274,   275,   276,   277,   278,   279,   280,   281,     0,
-     0,     0,     0,     0,   282,     0,  1516,   268,   269,   270,
-   271,   272,     0,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,     0,     0,     0,     0,     0,   282,     0,  1517,
-   268,   269,   270,   271,   272,     0,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,     0,     0,     0,     0,     0,
-   282,     0,  1518,   268,   269,   270,   271,   272,     0,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,     0,     0,
-     0,     0,     0,   282
+     0,  1361,     0,     0,     0,     0,     0,     0,    -8,    -8,
+    -8,    -8,    -8,    -8,    -8,    -8,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,  1391,
+     0,     0,     0,   -51,     2,     3,     0,     4,     0,   263,
+   264,   265,   266,   267,    23,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,  1412,   277,
+     0,     0,     0,     0,     0,  1074,     0,  1075,     0,     0,
+     0,    24,  1426,    25,    26,    27,    28,    29,    30,    31,
+    32,    33,     0,    34,    35,    36,    37,    38,    39,    40,
+     0,     0,     0,    41,    42,    43,    44,    45,    46,   191,
+    47,    48,    49,    50,    51,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    52,    53,
+     0,     0,     0,     0,     0,     0,    54,     0,    55,    56,
+    57,    58,    59,    60,    61,   263,   264,   265,   266,   267,
+     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,     0,     0,   192,   193,
+   194,  1211,     0,  1212,     0,     0,   195,   196,   197,   198,
+   199,   200,   201,   202,   203,   204,     0,     0,     0,    62,
+     0,     0,     0,     0,   205,   206,   207,   208,   209,   210,
+   211,   212,   213,   214,     0,   215,   216,   217,   218,   219,
+   220,   263,   264,   265,   266,   267,     0,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,     0,     0,   263,   264,   265,   266,   267,   429,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,     0,     0,   263,   264,   265,
+   266,   267,   431,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,     0,     0,
+   263,   264,   265,   266,   267,   598,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,     0,     0,   263,   264,   265,   266,   267,   602,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,     0,     0,   263,   264,   265,   266,
+   267,   603,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,     0,     0,   263,
+   264,   265,   266,   267,   725,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+     0,     0,   263,   264,   265,   266,   267,   928,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,     0,   263,   264,   265,   266,   267,
+  1089,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,     0,     0,   263,   264,
+   265,   266,   267,  1130,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
+     0,   263,   264,   265,   266,   267,  1135,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,     0,     0,   263,   264,   265,   266,   267,  1136,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,     0,     0,   263,   264,   265,
+   266,   267,  1137,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,     0,     0,
+   263,   264,   265,   266,   267,  1140,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,     0,     0,   263,   264,   265,   266,   267,  1141,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,     0,     0,   263,   264,   265,   266,
+   267,  1174,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,     0,     0,   263,
+   264,   265,   266,   267,  1265,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+     0,     0,   263,   264,   265,   266,   267,  1346,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,     0,   263,   264,   265,   266,   267,
+  1375,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,   453,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,   454,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,   557,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,   564,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,   565,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,   566,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,   615,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,   263,   264,   265,   266,   267,   616,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,   617,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
+   723,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,   724,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,   842,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,   843,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,   855,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,   856,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,   887,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,   888,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,   263,   264,   265,   266,   267,   889,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,   890,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
+   891,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,   892,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,   893,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,   894,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,   895,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,   896,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,   897,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,   898,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,   263,   264,   265,   266,   267,   915,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,  1005,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
+  1020,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,  1021,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,  1029,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,  1032,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,  1043,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,  1048,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,  1051,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,  1053,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,   263,   264,   265,   266,   267,  1054,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,  1055,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
+  1056,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,  1057,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,  1058,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,  1059,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,  1060,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,  1061,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,  1062,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,  1063,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,   263,   264,   265,   266,   267,  1064,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,  1072,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
+  1131,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,  1150,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,  1159,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,  1160,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,  1161,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,  1162,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,  1163,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,  1164,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,   263,   264,   265,   266,   267,  1165,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,  1166,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
+  1167,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,  1225,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,  1226,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,  1227,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,  1228,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,  1229,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,  1230,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,  1231,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,   263,   264,   265,   266,   267,  1232,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,  1233,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
+  1276,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,  1277,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,  1278,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,  1279,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,  1280,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,  1281,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,  1282,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,  1283,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,   263,   264,   265,   266,   267,  1284,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,  1318,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
+  1322,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,  1323,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,  1324,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,  1325,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,  1326,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,  1327,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,  1345,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,  1350,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,   263,   264,   265,   266,   267,  1351,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,  1352,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
+  1353,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,  1354,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,  1355,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,  1378,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,  1379,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,  1380,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,  1381,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,  1382,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,   263,   264,   265,   266,   267,  1383,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,   263,   264,   265,   266,   267,  1406,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
+  1407,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
+   267,  1408,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
+   266,   267,  1420,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
+   265,   266,   267,  1421,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
+   264,   265,   266,   267,  1422,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+   263,   264,   265,   266,   267,  1437,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,   263,   264,   265,   266,   267,  1438,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,   263,   264,   265,   266,   267,  1439,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,     0,     0,   400,   263,   264,   265,
+   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,     0,     0,
+     0,   518,   263,   264,   265,   266,   267,     0,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,     0,     0,   619,   263,   264,   265,
+   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,     0,     0,
+     0,  1127,   263,   264,   265,   266,   267,     0,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,   398,   263,   264,   265,   266,   267,
+     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,     0,   423,   263,   264,
+   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
+   425,   263,   264,   265,   266,   267,     0,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,     0,   426,   263,   264,   265,   266,   267,     0,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,     0,   428,   263,   264,   265,
+   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,     0,   432,
+   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,     0,   433,   263,   264,   265,   266,   267,     0,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,     0,   440,   263,   264,   265,   266,
+   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,     0,   474,   263,
+   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+     0,   477,   263,   264,   265,   266,   267,     0,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,   480,   263,   264,   265,   266,   267,
+     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,     0,   546,   263,   264,
+   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
+   547,   263,   264,   265,   266,   267,     0,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,     0,   548,   263,   264,   265,   266,   267,     0,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,     0,   549,   263,   264,   265,
+   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,     0,   550,
+   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,     0,   551,   263,   264,   265,   266,   267,     0,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,     0,   552,   263,   264,   265,   266,
+   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,     0,   553,   263,
+   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+     0,   554,   263,   264,   265,   266,   267,     0,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,   555,   263,   264,   265,   266,   267,
+     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,     0,   556,   263,   264,
+   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
+   558,   263,   264,   265,   266,   267,     0,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,     0,   559,   263,   264,   265,   266,   267,     0,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,     0,   560,   263,   264,   265,
+   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,     0,   561,
+   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,     0,   562,   263,   264,   265,   266,   267,     0,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,     0,   563,   263,   264,   265,   266,
+   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,     0,   584,   263,
+   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+     0,   587,   263,   264,   265,   266,   267,     0,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,   599,   263,   264,   265,   266,   267,
+     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,     0,   600,   263,   264,
+   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
+   604,   263,   264,   265,   266,   267,     0,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,     0,   605,   263,   264,   265,   266,   267,     0,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,     0,   606,   263,   264,   265,
+   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,     0,   607,
+   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,     0,   608,   263,   264,   265,   266,   267,     0,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,     0,   624,   263,   264,   265,   266,
+   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,     0,   628,   263,
+   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+     0,   793,   263,   264,   265,   266,   267,     0,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,   794,   263,   264,   265,   266,   267,
+     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,     0,   795,   263,   264,
+   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
+   796,   263,   264,   265,   266,   267,     0,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,     0,   845,   263,   264,   265,   266,   267,     0,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,     0,   929,   263,   264,   265,
+   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,     0,   950,
+   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,     0,  1038,   263,   264,   265,   266,   267,     0,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,     0,  1042,   263,   264,   265,   266,
+   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,     0,  1044,   263,
+   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+     0,  1153,   263,   264,   265,   266,   267,     0,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,  1155,   263,   264,   265,   266,   267,
+     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,     0,  1157,   263,   264,
+   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
+  1168,   263,   264,   265,   266,   267,     0,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,     0,  1169,   263,   264,   265,   266,   267,     0,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277,     0,  1170,   263,   264,   265,
+   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
+   275,   276,     0,     0,     0,     0,     0,   277,     0,  1328,
+   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
+   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
+   277,     0,  1329,   263,   264,   265,   266,   267,     0,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
+     0,     0,     0,   277,     0,  1330,   263,   264,   265,   266,
+   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,     0,     0,     0,     0,     0,   277,     0,  1409,   263,
+   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
+   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
+     0,  1410,   263,   264,   265,   266,   267,     0,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
+     0,     0,   277,     0,  1411,   263,   264,   265,   266,   267,
+     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     0,     0,     0,     0,     0,   277,     0,  1457,   263,   264,
+   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
+  1458,   263,   264,   265,   266,   267,     0,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
+     0,   277,     0,  1459,   263,   264,   265,   266,   267,     0,
+   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
+     0,     0,     0,     0,   277
 };
 
 static const short yycheck[] = {    23,
-    87,     4,    79,     4,     4,   320,   899,     6,     6,     3,
-  1040,    38,    59,     4,     6,   908,   437,    59,     6,     4,
-  1098,    60,   915,    64,     7,     3,     4,    66,   170,   171,
-    43,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    28,    29,    30,   179,    95,   181,    82,   974,    34,    35,
-    36,    37,    38,    39,    40,    41,     4,    43,    92,    45,
-    46,    60,    48,    49,   174,     4,     6,    66,    34,    64,
-   180,    37,    38,     6,    40,   170,   171,   163,   164,    65,
-   163,   164,   116,   117,   118,   119,   120,   121,   122,   175,
-    85,   125,   126,    79,    80,   179,   179,   181,   181,   133,
-   134,   135,   136,   190,   138,   139,   144,   141,   142,   143,
-     3,   145,    45,   163,   164,   174,    64,     7,   179,     6,
-   181,   180,   174,   180,  1212,   175,   160,   161,   180,   180,
-   561,   179,   181,   181,   157,   158,   159,   174,   174,  1066,
-    34,     7,   165,    37,    38,   179,    85,   181,    60,   183,
-   184,   175,     7,   139,    66,   179,   149,   150,   151,   152,
-   164,   163,   164,     6,  1067,   163,   164,   180,  1071,   180,
-   180,   180,   180,   174,     6,   163,   164,   170,   171,   170,
-   171,   169,   181,   170,   171,   176,   174,   178,   179,   176,
-   175,   178,   180,   227,   179,   181,   230,   231,   232,   233,
+    86,   315,    78,  1018,   258,     4,     4,     4,     4,     4,
+     3,   904,     6,    38,   862,   422,     6,     6,     6,    59,
+    23,    59,     4,   871,    60,     6,     3,     4,    81,    65,
+   878,   144,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,   942,     4,    60,   163,   164,   163,
+   164,    65,   170,   171,    45,     6,     7,     3,     4,   175,
+   178,   175,     6,     9,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,   119,   120,   121,    95,    60,
+   124,   125,    84,   127,    65,   998,    34,   163,   164,    37,
+   134,   135,   136,   137,   190,   139,   140,     7,   142,   143,
+   144,   174,   146,   179,   175,   181,   163,   164,   179,     6,
+   163,   164,   163,   164,   174,    84,    85,   161,   162,     6,
+   180,   174,   180,   180,  1032,   181,   400,   180,   179,   174,
+   181,   163,   164,    37,    38,   179,    40,   181,   174,   183,
+   184,   568,   163,   164,   180,   179,   174,   181,   180,   163,
+   164,   164,   180,    43,  1067,   163,   164,   181,   179,   174,
+   181,   180,   180,   180,   180,  1033,   163,   164,     6,  1037,
+   180,   180,   169,    53,    54,    55,    56,   174,    58,  1214,
+   175,   225,     7,   180,   179,     6,   230,   231,   232,   233,
    234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-   244,   245,   246,   247,   248,   249,   250,  1257,   179,     6,
-   181,   114,   115,   116,   117,   118,   119,   120,   121,   179,
-     6,   181,   163,   164,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,   282,   180,
-   174,     6,   175,   163,   164,   289,   179,   174,   292,   149,
-   150,   151,   152,   297,   174,   163,   164,   301,   302,   303,
-   180,   305,   306,   307,   308,   309,   310,   311,     6,     7,
-   170,   171,   180,   149,   150,   151,   152,   175,   322,   323,
-   324,   179,   174,   327,   317,   318,  1199,  1200,  1201,  1202,
-   163,   164,   336,  1206,   170,   171,   175,   330,   342,   174,
-   179,     3,     4,     5,   174,     7,   179,     9,    10,    11,
-    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,   175,
-    32,     3,     4,   179,   179,     6,   181,     9,    10,    11,
-    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,   169,
-   174,  1274,  1275,   173,    34,  1278,   174,    37,   412,   413,
-   414,   415,   416,    51,    52,   419,    67,    68,    69,    70,
-    71,    72,    73,    74,    75,    76,    77,    78,   153,   154,
-   155,   156,   157,   437,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,   163,   164,   449,   163,   164,   173,    38,
-   454,   163,   164,   174,    42,   459,  1329,    38,     8,   179,
-   179,   181,   181,   180,   468,   469,   179,   179,   181,   181,
-   163,   164,   174,   477,   467,   170,   171,   163,   164,    38,
-   484,   163,   164,   163,   164,    40,   179,   149,   150,   151,
-   152,   495,   496,   179,   163,   164,   179,   179,   181,   179,
-    38,   163,   164,   179,     6,   181,  1379,   169,   170,   171,
-   179,   179,   174,   181,   176,   179,   178,   181,    67,    68,
-    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-   181,   163,   164,   180,   538,  1408,   179,   169,   181,   165,
-   166,   167,   174,   180,   180,   177,   550,   173,   163,   164,
-   165,   166,   167,   557,   558,   559,     6,   561,   173,   563,
-   564,   565,   566,   567,   859,     6,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,     5,   580,   155,   156,   157,
-   173,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   583,   595,   596,   597,   174,   173,    53,    54,    55,    56,
-    50,    58,   174,   153,   154,   155,   156,   157,     6,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    37,    38,
-     4,    40,  1495,   173,   691,   618,   619,   620,   179,     4,
-   181,   181,   181,   156,   157,    38,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   649,   650,     3,   652,   174,
-   173,     8,   170,   171,     5,   174,   660,   661,   176,   174,
-   178,   174,   170,   171,   174,   170,   171,   174,   176,   662,
-   178,   176,     6,   178,     3,     4,   174,   174,   671,   174,
-     9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,    30,   174,   153,   154,   155,   156,   157,   174,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,   174,   174,
-   174,   778,   174,   173,     6,   174,   174,   174,   732,    99,
-   100,   101,   102,   103,   174,   174,   174,  1032,   174,   174,
-     6,   745,   746,   747,     5,   174,   174,   180,   174,   174,
-   174,   755,   756,   757,   758,   759,   760,   761,   762,   763,
-   764,   765,   766,   180,   180,   174,   174,   174,     3,     4,
-   774,   775,   174,     6,     9,    10,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,    26,    27,    28,    29,    30,   153,   154,   155,   156,
-   157,   180,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   180,   180,   176,    87,     6,   173,     5,   175,   174,
-   174,   174,   174,     5,   174,   829,   174,   174,   174,   174,
-   174,   174,   174,   890,   163,   164,   174,   841,   842,     8,
-   169,   834,   174,   847,   848,   174,   174,   174,   177,   174,
-   174,   174,   174,   174,   921,   174,   174,   174,   174,   174,
-   174,   174,   174,   174,   174,   173,     7,   860,   175,   862,
-   179,   864,   176,   179,     7,   879,   880,   178,     7,     7,
-     7,    83,   180,   145,     5,   889,   132,     6,   892,     5,
-     5,     5,     5,     5,     5,     5,     5,     5,   902,     5,
-     5,     5,     5,     5,     5,   909,   910,   911,     5,     5,
-     5,     5,   916,     5,     5,     5,   920,     5,     5,     5,
-     5,     3,     5,   176,     5,     4,     6,   984,   163,   164,
-   934,     5,     7,     6,   169,     6,     6,     6,     6,   174,
-     7,     7,   177,     7,     6,   949,     6,   181,     7,     7,
-     7,   181,   180,   180,     7,   174,   960,   961,   962,   963,
-   964,   965,   966,   967,   968,   969,   970,   971,     7,   146,
-   179,   179,   179,   179,   179,     6,   980,   144,   179,   179,
-   179,   179,   149,   179,   153,   154,   155,   156,   157,   179,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,   179,
-   179,   179,     5,   170,   173,   179,   179,   179,   179,   179,
-   177,   178,   175,  1017,  1018,  1019,  1020,  1021,  1022,  1023,
-   179,   179,  1026,  1027,   179,   179,   179,   179,   179,   179,
-   179,  1035,  1036,  1037,   153,   154,   155,   156,   157,   179,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,   179,
-  1054,  1055,     6,   179,   173,     6,     6,  1061,     6,     3,
-     7,     7,     7,   180,     7,  1069,     7,     7,     7,     7,
-     7,     7,     7,  1077,     7,     7,     6,  1134,  1082,     6,
-     6,  1085,   153,   154,   155,   156,   157,     7,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   174,   174,     7,
-   142,  1105,   173,     3,     3,     6,     3,     3,     3,   174,
-  1114,  1115,  1116,  1117,  1118,  1119,  1120,  1121,  1122,  1123,
-  1124,  1125,   153,   154,   155,   156,   157,   174,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,     3,     4,   174,
-   174,  1198,   173,     9,    10,    11,    12,    13,    14,    15,
+   244,   245,   246,   247,   248,   249,   250,   163,   164,   179,
+     6,   181,    34,   169,     8,    37,    38,     3,   174,   263,
+   264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     6,   258,   170,   171,     7,   179,
+   284,   181,   176,   287,   178,   179,    38,   175,   292,   163,
+   164,   179,   296,   297,   298,   174,   300,   301,   302,   303,
+   304,   305,   306,     7,   170,   171,   180,   174,   158,   159,
+   160,   163,   164,   317,   318,   319,   166,    38,   322,  1147,
+  1148,  1149,  1150,    51,    52,   329,  1154,   179,   165,   166,
+   167,   335,   174,     3,     4,     5,   173,     7,   174,     9,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,   179,    32,   181,   149,   150,   151,   152,   114,   115,
+   116,   117,   118,   119,   120,   121,   170,   171,   228,   175,
+   163,   164,   176,   179,   178,   170,   171,   174,   174,     6,
+   373,  1219,  1220,   178,   174,  1223,   179,   174,   402,   153,
+   154,   155,   156,   157,    42,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,   174,   163,   164,   400,   422,   173,
+   149,   150,   151,   152,   175,   175,    38,   181,   179,   179,
+   434,   179,   179,    50,   181,   439,   163,   164,   163,   164,
+   444,   170,   171,    40,  1272,   149,   150,   151,   152,   453,
+   454,   685,   179,   170,   179,   163,   164,   174,   462,   179,
+    38,   181,   312,   313,   180,   469,   170,   171,   179,     6,
+   181,   179,     6,   180,   478,   479,   179,   174,   181,   149,
+   150,   151,   152,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,  1320,   163,   164,   180,   179,   173,   181,   169,
+   170,   171,   174,     6,   174,   179,   176,   181,   178,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,  1349,   163,   164,   165,   166,   167,    99,   100,   101,
+   102,   103,   173,     6,     4,   518,   153,   154,   155,   156,
+   157,   835,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,   170,   171,   557,     4,    38,   173,   176,     3,   178,
+   564,   565,   566,   174,   568,    34,     5,   571,    37,    38,
+   179,    40,   181,   577,   155,   156,   157,     6,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,   174,   592,   593,
+   594,   174,   173,   170,   171,   174,   662,   170,   171,   176,
+   174,   178,   452,   176,   179,   178,   181,   174,  1436,   179,
+   179,   181,   181,   179,   174,   181,   620,   621,   174,   623,
+   174,   174,   174,     8,   181,   174,   174,   631,   632,   174,
+   174,   174,   174,     3,     4,   174,   174,     6,   174,     9,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,   174,   666,   667,   668,   669,   670,   671,   672,   673,
+   674,   675,   676,   677,     6,   174,   174,     5,   174,   174,
+   153,   154,   155,   156,   157,   741,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,   180,   174,   174,   180,   180,
+   173,   180,   685,   174,   180,   709,   174,   174,   174,   174,
+     6,    87,   176,     6,   174,   174,  1010,   180,   722,   723,
+   724,   174,   174,   174,     5,   174,   174,   174,   174,     4,
+   580,   174,   174,   737,   738,   179,   174,     3,     4,   174,
+   174,   174,   174,     9,    10,    11,    12,    13,    14,    15,
     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,   174,   174,  1171,   174,   174,
-   174,   165,   174,     3,     3,     3,     3,     3,     3,     3,
-     3,   178,  1239,     5,     5,     3,     3,     4,     5,     3,
-     6,     6,     9,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,     6,     6,     6,     6,  1222,  1223,
-  1224,  1225,  1226,  1227,  1228,  1229,  1230,   153,   154,   155,
+    26,    27,    28,    29,    30,   615,   616,   617,   153,   154,
+   155,   156,   157,   174,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   633,     8,   174,   174,   174,   173,   175,
+   175,   174,   642,   163,   164,   799,   779,   853,   179,   169,
+   174,   805,   174,   174,   174,     5,   174,   177,     6,   174,
+   174,   174,   174,   817,   818,   174,   174,   173,   884,   823,
+   824,   153,   154,   155,   156,   157,     7,   159,   160,   161,
+   162,   163,   164,   165,   166,   167,   178,     7,   842,   843,
+     7,   173,     7,     7,    82,   180,   145,     5,   852,   156,
+   157,   855,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,   865,     5,     5,     5,     5,   173,     5,   872,   873,
+   874,     5,     5,     5,     5,   879,     5,     5,     5,   883,
+     5,     5,     5,   887,   888,   889,   890,   891,   892,   893,
+   894,   895,   896,   897,   898,     5,   952,   163,   164,     5,
+     5,     5,     5,   169,     5,     5,   132,     5,   174,     5,
+     5,   915,    66,    67,    68,    69,    70,    71,    72,    73,
+    74,    75,    76,    77,     5,     3,   930,     6,     5,   153,
+   154,   155,   156,   157,     5,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,   948,     5,     5,     4,   145,   173,
+     6,     6,     6,   150,     7,   153,   154,   155,   156,   157,
+   810,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     7,     7,     7,     6,   171,   173,     6,   181,     7,     7,
+   177,   178,     7,     6,   174,   181,   836,   180,   838,   180,
+   840,     7,     7,   146,   179,   999,   179,   179,     5,   179,
+  1004,  1005,   179,   179,   179,   179,   179,   179,   179,  1013,
+  1014,  1015,   175,   179,     6,     6,  1020,  1021,     6,   179,
+   179,     6,   179,  1027,   179,     6,   174,   181,   179,   179,
+   179,  1035,   179,   179,   179,  1091,     7,     7,     7,  1043,
+   179,     7,   179,   179,  1048,   180,     7,  1051,   174,  1053,
+  1054,  1055,  1056,  1057,  1058,  1059,  1060,  1061,  1062,  1063,
+  1064,   179,   179,   179,   179,   179,   179,   174,     7,     7,
+  1074,     7,   174,     7,     7,   174,     7,   174,     7,     7,
+   174,   174,   174,   174,   174,     3,     4,   174,     7,     6,
+  1146,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    28,    29,    30,     7,     3,   142,     3,     3,   165,     3,
+     3,     3,     3,     3,     3,     3,     3,  1131,     3,  1185,
+   153,   154,   155,   156,   157,     3,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,     6,     3,     5,     3,     5,
+   173,     3,     6,     4,   178,  1159,  1160,  1161,  1162,  1163,
+  1164,  1165,  1166,  1167,     7,   153,   154,   155,   156,   157,
+     6,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     6,     6,     6,     6,   180,   173,     6,  1243,    83,     6,
+   180,   175,   179,   179,     5,   175,   179,   179,   175,     6,
+   179,   179,   399,   179,   179,   179,   179,  1211,   175,     4,
+   175,   179,     6,     6,   178,  1271,   179,   179,   175,   179,
+   179,  1225,  1226,  1227,  1228,  1229,  1230,  1231,  1232,  1233,
+  1234,  1235,  1236,   179,   179,   179,   179,   179,   175,  1295,
+     6,     6,     6,     6,     6,   163,   164,     6,     6,     6,
+     6,   169,     6,     6,     6,     6,   174,     7,     3,   177,
+     6,    83,     3,     6,   165,     7,  1270,     6,     6,     3,
+     6,     3,  1276,  1277,  1278,  1279,  1280,  1281,  1282,  1283,
+  1284,  1285,     6,  1287,     6,  1289,     3,     6,     3,     3,
+     3,   176,   153,   154,   155,   156,   157,     6,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,     6,     6,    84,
+   180,   180,   173,  1317,  1318,   181,   175,   179,  1322,  1323,
+  1324,  1325,  1326,  1327,     6,    80,   179,     6,   175,   179,
+   179,   179,   178,   175,   175,   179,   175,   175,   175,   179,
+   142,  1345,     6,    83,   179,     3,  1350,  1351,  1352,  1353,
+  1354,  1355,  1356,  1357,  1358,     6,     6,     3,     6,   180,
+   179,     6,     6,     6,     6,     6,     3,     6,     6,     5,
+     4,   181,     5,   181,  1378,  1379,  1380,  1381,  1382,  1383,
+  1384,     6,  1386,   180,  1388,   582,   583,   179,   585,   179,
+   179,   175,   589,   590,   175,   175,   179,   179,     6,   178,
+     6,   179,  1406,  1407,  1408,   179,     6,     6,     6,     6,
+     6,     6,     6,     6,     6,     5,  1420,  1421,  1422,  1423,
+  1424,  1425,    85,     5,    80,   622,   142,     6,   625,     6,
+   179,   179,   179,  1437,  1438,  1439,  1440,   181,  1442,     5,
+  1444,     5,   639,   640,   175,   175,   179,     6,   645,   646,
+   179,    80,   180,   180,   180,   652,   179,   654,   179,   179,
+  1464,  1465,  1466,   181,   175,   175,     6,     6,   180,  1473,
+     6,  1475,   179,  1477,   153,   154,   155,   156,   157,   181,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,   181,
+     6,     6,     6,     6,   173,     6,   180,   180,   179,   179,
+   147,   698,   179,   700,   179,     6,   180,   180,   148,   179,
+   175,     6,     6,   710,   711,   712,     6,     6,   715,   716,
+   717,   718,   719,   720,   721,     3,     4,     6,   180,     6,
+   179,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    28,    29,    30,     3,     4,   179,   175,   180,   180,     9,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,     3,     4,     6,     0,     6,     6,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,    24,    25,    26,    27,    28,    29,    30,     3,
+     4,   179,     0,     6,     6,     9,    10,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+    24,    25,    26,    27,    28,    29,    30,   153,   154,   155,
    156,   157,     6,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,  1299,   410,    84,     6,   180,   173,  1252,   180,
-  1254,   179,   153,   154,   155,   156,   157,   179,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   179,   175,   175,
-   179,  1328,   173,   175,   179,   179,   179,   175,     6,     6,
-     6,  1285,  1286,  1287,  1288,  1289,  1290,  1291,  1292,  1293,
-  1294,  1295,  1296,   175,   179,   179,  1353,   163,   164,     6,
-   179,   179,   179,   169,   179,   175,   179,   179,   174,     6,
-   179,   177,   179,   175,   179,   179,   179,   178,   178,     6,
-     6,     6,     6,  1327,     6,     6,     6,     6,     6,     6,
-     6,    84,  1336,  1337,  1338,  1339,  1340,  1341,  1342,  1343,
-  1344,  1345,     7,  1347,     3,  1349,   163,   164,     6,     3,
-     6,     6,   169,   165,     6,     3,     6,   174,     3,     6,
-     6,     3,     6,     3,     3,     3,     7,    85,     4,     6,
-   180,   180,  1376,  1377,   181,    81,   175,  1381,  1382,  1383,
-  1384,  1385,  1386,   179,   179,   179,     6,   175,     6,    84,
-   175,   175,   179,   179,   175,   175,   179,   179,   175,   178,
-  1404,   179,   142,     6,   180,  1409,  1410,  1411,  1412,  1413,
-  1414,  1415,  1416,  1417,     3,     6,     6,     3,   585,   586,
-     5,   588,     6,     6,     6,   592,   593,     6,     6,     6,
-     3,     6,     6,  1437,  1438,  1439,  1440,  1441,  1442,  1443,
-   178,  1445,     6,  1447,     4,   181,   153,   154,   155,   156,
-   157,     5,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,  1465,  1466,  1467,     6,   180,   173,   179,   181,   179,
-   179,   179,   175,   175,   179,  1479,  1480,  1481,  1482,  1483,
-  1484,   175,     6,   179,   651,     6,   179,   654,    64,   179,
-     6,     6,  1496,  1497,  1498,  1499,     6,  1501,     6,  1503,
-     6,   668,   669,     6,     6,     6,     6,   674,   675,     5,
-   176,     5,   179,   181,   681,   179,   683,   179,   175,  1523,
-  1524,  1525,   175,    81,     6,   142,     6,     5,  1532,   180,
-  1534,   180,  1536,   153,   154,   155,   156,   157,     5,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,   179,   179,
-   179,   179,     6,   173,   721,   180,   723,   181,   180,    81,
-   179,   175,   175,   179,     6,     6,   733,   734,   735,   178,
-   181,   738,   739,   740,   741,   742,   743,   744,     3,     4,
-     5,   181,     6,     6,     9,    10,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,    26,    27,    28,    29,    30,     3,     4,    85,   180,
-     6,     6,     9,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,     3,     4,     6,   148,   179,   179,
-     9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,    30,     3,     4,   147,   179,   179,     6,     9,    10,
-    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-     3,     4,   180,   180,   180,   179,     9,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,    24,    25,    26,    27,    28,    29,    30,     6,   886,
-   175,   153,   154,   155,   156,   157,   893,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,     6,     6,   163,   164,
-     6,   173,     6,     6,   169,   912,   179,   179,   179,   174,
-     6,   180,   180,   180,     6,     6,     6,   179,   175,     6,
-   180,   180,   180,     6,     6,     6,   163,   164,     0,     0,
-   623,     6,   169,     7,     7,  1220,    -1,   174,     7,    -1,
-    -1,    -1,    -1,    -1,   597,   884,    -1,    -1,    -1,    -1,
-    -1,    -1,     6,    -1,   163,   164,    -1,    -1,    -1,    -1,
-   169,    -1,    -1,    -1,    -1,   174,    -1,     6,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   163,   164,    -1,    -1,    -1,    -1,   169,     6,
-    -1,    -1,    -1,   174,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,     6,    -1,    -1,    -1,    -1,    -1,
-   163,   164,    -1,    -1,    -1,    -1,   169,    -1,    -1,     6,
-    -1,   174,    -1,    -1,    -1,   153,   154,   155,   156,   157,
-    -1,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,     6,    -1,    -1,   173,    -1,    -1,    -1,    -1,
-    -1,  1058,    -1,  1060,    -1,    -1,  1063,   153,   154,   155,
-   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,  1079,     6,    -1,    -1,    -1,   173,   153,   154,
-   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,    -1,     6,    -1,    -1,    -1,   173,   153,
-   154,   155,   156,   157,  1111,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,   153,   154,   155,   156,   157,   173,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,     6,    -1,    -1,   173,    -1,   153,   154,   155,   156,
-   157,    -1,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   153,   154,   155,   156,   157,   173,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   153,   154,   155,   156,
-   157,   173,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,     6,    -1,    -1,    -1,    -1,   173,  1194,  1195,   153,
+   166,   167,   849,   180,   180,   180,     6,   173,     6,   856,
+   520,     7,     7,   153,   154,   155,   156,   157,     7,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   875,   594,
+    -1,  1178,    -1,   173,    -1,   163,   164,    -1,     8,    -1,
+    -1,   169,    -1,    -1,    -1,   847,   174,    -1,    -1,   177,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
+    -1,    -1,    -1,   163,   164,    -1,    -1,    -1,    -1,   169,
+    -1,    -1,    -1,    -1,   174,    -1,    -1,   177,    -1,    -1,
+    -1,    -1,    -1,     8,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   163,   164,    -1,    -1,    -1,    -1,   169,     8,    -1,
+    -1,    -1,   174,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,   163,
+   164,    -1,    -1,   173,    -1,   169,    -1,    -1,    -1,   179,
+   174,   181,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,
    154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,     6,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,    -1,    -1,  1221,    -1,    -1,    -1,    -1,    -1,
-   153,   154,   155,   156,   157,    -1,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,     6,    -1,    -1,    -1,    -1,
-   173,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,     6,    -1,    -1,    -1,
-    -1,   173,    -1,    -1,  1271,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1284,   153,   154,
-   155,   156,   157,     6,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
-    -1,    -1,    -1,    -1,    -1,     6,    -1,   153,   154,   155,
-   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,  1330,    -1,    -1,     6,   173,   153,   154,
-   155,   156,   157,   179,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,    -1,    -1,    -1,    -1,     6,   173,    -1,
-    -1,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-     8,   173,    -1,  1380,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   153,   154,   155,   156,   157,    -1,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,     8,    -1,    -1,
-  1407,    -1,   173,   153,   154,   155,   156,   157,    -1,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,     8,    -1,
-    -1,    -1,    -1,   173,    -1,    -1,    -1,    -1,  1435,    -1,
+   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
    153,   154,   155,   156,   157,    -1,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,     8,    -1,    -1,    -1,    -1,
-   173,    -1,   153,   154,   155,   156,   157,  1464,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
-    -1,  1478,   173,   153,   154,   155,   156,   157,    -1,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+   163,   164,   165,   166,   167,    -1,    -1,  1024,    -1,  1026,
+   173,    -1,  1029,   153,   154,   155,   156,   157,   181,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,  1045,    -1,
     -1,    -1,    -1,   173,   153,   154,   155,   156,   157,    -1,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,   153,   154,   155,   156,   157,
-    -1,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,    -1,
-    -1,    -1,   153,   154,   155,   156,   157,    -1,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
-    -1,    -1,   173,   153,   154,   155,   156,   157,    -1,   159,
+    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,   154,
+   155,   156,   157,  1080,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   153,   154,   155,   156,   157,   173,   159,
    160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,    -1,    -1,    -1,    -1,    -1,
-   153,   154,   155,   156,   157,    -1,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
-   173,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-    43,    -1,    45,    46,    -1,    48,    49,    -1,    -1,     0,
-     1,    -1,     3,     4,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    -1,    -1,
-    31,    -1,    33,    34,    35,    36,    37,    38,    39,    40,
-    41,    -1,    43,    44,    45,    46,    47,    48,    49,    -1,
-    -1,    -1,    53,    54,    55,    56,    57,    58,    -1,    60,
-    61,    62,    63,    64,    65,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,   139,    88,    89,    90,
-    91,    92,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,    34,    35,    36,
+    37,    38,    39,    40,    41,    -1,    43,    -1,    45,    46,
+    -1,    48,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1142,  1143,    64,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   114,   115,   116,   117,   118,   119,   120,
-   121,     4,    -1,   153,   154,   155,   156,   157,   181,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,   139,   140,
-   141,    -1,   143,   173,    -1,    -1,    -1,    -1,    31,   179,
-    33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-    43,    44,    45,    46,    47,    48,    49,    -1,    -1,    -1,
-    53,    54,    55,    56,    57,    58,    -1,    60,    61,    62,
-    63,    64,    65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    37,    -1,    -1,    -1,    79,    80,    -1,    -1,
-    -1,    -1,    -1,    86,    -1,    88,    89,    90,    91,    92,
-    93,    94,    34,    35,    36,    37,    38,    39,    40,    41,
-    -1,    43,    -1,    45,    46,    -1,    48,    49,   153,   154,
-   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,    65,    -1,    -1,    -1,    -1,   173,    -1,
-    -1,    96,    97,    98,   179,    -1,   139,    79,    80,   104,
-   105,   106,   107,   108,   109,   110,   111,   112,   113,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
-   125,   126,   127,   128,   129,   130,   131,    -1,   133,   134,
-   135,   136,   137,   138,   153,   154,   155,   156,   157,    -1,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,   139,    -1,    -1,
-   179,    -1,   181,   153,   154,   155,   156,   157,    -1,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,    -1,    -1,    -1,    -1,   179,
-    -1,   181,   153,   154,   155,   156,   157,    -1,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
-    -1,    -1,   173,    -1,    -1,    -1,    -1,    -1,   179,    -1,
-   181,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
+    -1,    78,    79,    34,    35,    36,    37,    38,    39,    40,
+    41,    -1,    43,    -1,    45,    46,    -1,    48,    49,    -1,
+    -1,    -1,  1179,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    34,
+    35,    36,    37,    38,    39,    40,    41,    -1,    43,  1216,
+    45,    46,   139,    48,    49,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,
+    -1,    -1,    -1,  1240,     0,     1,    -1,     3,     4,    -1,
+    -1,    -1,    -1,    78,    79,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   139,    -1,
+    -1,    -1,    -1,    -1,    -1,    31,  1273,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+    46,    47,    48,    49,    -1,    -1,    -1,    53,    54,    55,
+    56,    57,    58,    -1,    60,    61,    62,    63,    64,    -1,
+   181,    -1,    -1,    -1,   139,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    78,    79,  1321,    -1,    -1,    -1,    -1,    -1,
+    86,    -1,    88,    89,    90,    91,    92,    93,    94,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,  1348,    -1,    -1,    -1,    -1,    -1,    -1,   114,   115,
+   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1376,
+    -1,    -1,    -1,   139,   140,   141,    -1,   143,    -1,   153,
+   154,   155,   156,   157,     4,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,    -1,    -1,    -1,    -1,  1405,   173,
+    -1,    -1,    -1,    -1,    -1,   179,    -1,   181,    -1,    -1,
+    -1,    31,  1419,    33,    34,    35,    36,    37,    38,    39,
+    40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
+    -1,    -1,    -1,    53,    54,    55,    56,    57,    58,    37,
+    60,    61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    88,    89,
+    90,    91,    92,    93,    94,   153,   154,   155,   156,   157,
+    -1,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    96,    97,
+    98,   179,    -1,   181,    -1,    -1,   104,   105,   106,   107,
+   108,   109,   110,   111,   112,   113,    -1,    -1,    -1,   139,
+    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,   127,
+   128,   129,   130,   131,    -1,   133,   134,   135,   136,   137,
+   138,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
    162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
     -1,   173,    -1,    -1,   153,   154,   155,   156,   157,   181,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
@@ -2120,8 +1984,12 @@ static const short yycheck[] = {    23,
    161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
     -1,    -1,   173,    -1,    -1,   153,   154,   155,   156,   157,
    181,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,   153,   154,
-   155,   156,   157,   181,   159,   160,   161,   162,   163,   164,
+    -1,    -1,    -1,    -1,    -1,   173,   153,   154,   155,   156,
+   157,   179,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173,   153,   154,   155,
+   156,   157,   179,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,    -1,    -1,    -1,    -1,    -1,   173,   153,   154,
+   155,   156,   157,   179,   159,   160,   161,   162,   163,   164,
    165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,   153,
    154,   155,   156,   157,   179,   159,   160,   161,   162,   163,
    164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
@@ -2339,20 +2207,24 @@ static const short yycheck[] = {    23,
    163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
    173,   153,   154,   155,   156,   157,   179,   159,   160,   161,
    162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,    -1,    -1,   177,   153,   154,   155,   156,
-   157,    -1,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,
-   177,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,    -1,    -1,   177,   153,   154,   155,   156,
-   157,    -1,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,
-   177,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,    -1,    -1,   177,   153,   154,   155,   156,
-   157,    -1,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,
-   177,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
+    -1,   173,   153,   154,   155,   156,   157,   179,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,   155,
+   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,
+    -1,   177,   153,   154,   155,   156,   157,    -1,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,   155,
+   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,
+    -1,   177,   153,   154,   155,   156,   157,    -1,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,   175,   153,   154,   155,   156,   157,
+    -1,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+    -1,    -1,    -1,    -1,    -1,   173,    -1,   175,   153,   154,
+   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+   175,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
    162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
     -1,   173,    -1,   175,   153,   154,   155,   156,   157,    -1,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
@@ -2494,17 +2366,10 @@ static const short yycheck[] = {    23,
    162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
     -1,   173,    -1,   175,   153,   154,   155,   156,   157,    -1,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,   175,   153,   154,   155,
-   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   175,
-   153,   154,   155,   156,   157,    -1,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
-   173,    -1,   175,   153,   154,   155,   156,   157,    -1,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173
+    -1,    -1,    -1,    -1,   173
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/share/bison.simple"
+#line 3 "/usr/lib/bison.simple"
 /* This file comes from bison-1.28.  */
 
 /* Skeleton output parser for bison,
@@ -2718,7 +2583,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
 #endif
 #endif
 
-#line 217 "/usr/share/bison.simple"
+#line 217 "/usr/lib/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -3353,51 +3218,51 @@ case 64:
 case 65:
 #line 394 "Gmsh.y"
 {
-      fprintf(stderr, yyvsp[-2].c); 
-      fprintf(stderr, "\n"); 
+      Msg(DIRECT, yyvsp[-2].c);
     ;
     break;}
 case 66:
-#line 399 "Gmsh.y"
+#line 398 "Gmsh.y"
 {
       for(i = 0 ; i<List_Nbr(ListOfDouble_L) ; i++){
 	if(!i){
 	  str = strtok(yyvsp[-4].c, "%");
-	  fprintf(stderr, str); 
+	  strcpy(tmpstring, str); 
 	}
 	str = strtok(NULL, "%");
 	if(str){
-	  strcpy(tmpstring, "%");
-	  strcat(tmpstring, str);
-	  fprintf(stderr, tmpstring, *(double*)List_Pointer(ListOfDouble_L,i)); 
+	  strcpy(tmpstring2, "%");
+	  strcat(tmpstring2, str);
+	  sprintf(tmpstring3, tmpstring2, *(double*)List_Pointer(ListOfDouble_L,i)); 
+	  strcat(tmpstring, tmpstring3);
 	}
 	else{
-	  fprintf(stderr, "\n"); 
 	  vyyerror("Missing %d Parameter(s) in Printf Format",
 		   List_Nbr(ListOfDouble_L)-i);
 	  break ;
 	}
       }
-      if(!yyerrorstate)
-	fprintf(stderr, "\n"); 
+      Msg(DIRECT, tmpstring);
     ;
     break;}
 case 67:
-#line 429 "Gmsh.y"
+#line 427 "Gmsh.y"
 { 
-      EndView(1, Force_ViewNumber,yyname,yyvsp[-4].c,0.,0.,0.); 
+      if(!strcmp(yyvsp[-5].c, "View"))
+	EndView(1, Force_ViewNumber, yyname, yyvsp[-4].c); 
     ;
     break;}
 case 68:
-#line 433 "Gmsh.y"
+#line 432 "Gmsh.y"
 {
-      EndView(1, Force_ViewNumber,yyname,yyvsp[-6].c,yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2]);
+      if(!strcmp(yyvsp[-7].c, "View"))
+	EndView(1, Force_ViewNumber, yyname, yyvsp[-6].c);
     ;
     break;}
 case 69:
 #line 440 "Gmsh.y"
 {
-      BeginView(1); 
+      BeginView(1, Force_ViewNumber); 
     ;
     break;}
 case 82:
@@ -3680,35 +3545,98 @@ case 129:
     ;
     break;}
 case 130:
+#line 737 "Gmsh.y"
+{ yyval.i = 0 ; ;
+    break;}
+case 131:
+#line 738 "Gmsh.y"
+{ yyval.i = 1 ; ;
+    break;}
+case 132:
+#line 739 "Gmsh.y"
+{ yyval.i = 2 ; ;
+    break;}
+case 133:
+#line 740 "Gmsh.y"
+{ yyval.i = 3 ; ;
+    break;}
+case 134:
 #line 741 "Gmsh.y"
+{ yyval.i = 4 ; ;
+    break;}
+case 135:
+#line 744 "Gmsh.y"
+{ yyval.i = 1 ; ;
+    break;}
+case 136:
+#line 745 "Gmsh.y"
+{ yyval.i = -1 ; ;
+    break;}
+case 137:
+#line 752 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){
 	TheSymbol.val = List_Create(1,1,sizeof(double));
-	List_Put(TheSymbol.val, 0, &yyvsp[-1].d);
-	List_Add(Symbol_L, &TheSymbol);
+	if(!yyvsp[-2].i){
+	  List_Put(TheSymbol.val, 0, &yyvsp[-1].d);
+	  List_Add(Symbol_L, &TheSymbol);
+	}
+	else
+	  vyyerror("Unknown Variable '%s'", yyvsp[-3].c) ;
       }
       else{
-	List_Write(pSymbol->val, 0, &yyvsp[-1].d);
+	pd = (double*)List_Pointer_Fast(pSymbol->val, 0) ; 
+	switch(yyvsp[-2].i){
+	case 0 : *pd = yyvsp[-1].d; break ;
+	case 1 : *pd += yyvsp[-1].d ; break ;
+	case 2 : *pd -= yyvsp[-1].d ; break ;
+	case 3 : *pd *= yyvsp[-1].d ; break ;
+	case 4 : 
+	  if(yyvsp[-1].d) *pd /= yyvsp[-1].d ; 
+	  else vyyerror("Division by Zero in '%s /= %g'", yyvsp[-3].c, yyvsp[-1].d);
+	  break;
+	}
       }
     ;
     break;}
-case 131:
-#line 753 "Gmsh.y"
+case 138:
+#line 779 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-6].c;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){
 	TheSymbol.val = List_Create(5,5,sizeof(double));
-	List_Put(TheSymbol.val, (int)yyvsp[-4].d, &yyvsp[-1].d);
-	List_Add(Symbol_L, &TheSymbol);
+	if(!yyvsp[-2].i){
+	  List_Put(TheSymbol.val, (int)yyvsp[-4].d, &yyvsp[-1].d);
+	  List_Add(Symbol_L, &TheSymbol);
+	}
+	else
+	  vyyerror("Unknown Variable '%s'", yyvsp[-6].c) ;
       }
       else{
-	List_Put(pSymbol->val, (int)yyvsp[-4].d, &yyvsp[-1].d);
+	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-4].d))){
+	  switch(yyvsp[-2].i){
+	  case 0 : *pd = yyvsp[-1].d; break ;
+	  case 1 : *pd += yyvsp[-1].d ; break ;
+	  case 2 : *pd -= yyvsp[-1].d ; break ;
+	  case 3 : *pd *= yyvsp[-1].d ; break ;
+	  case 4 : 
+	    if(yyvsp[-1].d) *pd /= yyvsp[-1].d ; 
+	    else vyyerror("Division by Zero in '%s[%d] /= %g'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].d);
+	    break;
+	  }
+	}
+	else{
+	  if(!yyvsp[-2].i)
+	    List_Put(pSymbol->val, (int)yyvsp[-4].d, &yyvsp[-1].d);
+	  else
+	    vyyerror("Uninitialized Variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d) ;	  
+	}
       }
     ;
     break;}
-case 132:
-#line 765 "Gmsh.y"
+case 139:
+#line 813 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-5].c;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){
@@ -3722,538 +3650,191 @@ case 132:
       }
     ;
     break;}
-case 133:
-#line 778 "Gmsh.y"
-{
-      TheSymbol.Name = yyvsp[-2].c ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", yyvsp[-2].c) ;
-      else{
-	*(double*)List_Pointer_Fast(pSymbol->val, 0) += 1.0 ;
-      }
-    ;
-    break;}
-case 134:
-#line 787 "Gmsh.y"
-{
-      TheSymbol.Name = yyvsp[-5].c ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", yyvsp[-5].c) ;
-      else{
-	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-3].d)))
-	  *pd += 1.0 ;
-	else
-	  vyyerror("Uninitialized Variable '%s[%d]'", yyvsp[-5].c, (int)yyvsp[-3].d) ;
-      }
-    ;
-    break;}
-case 135:
-#line 799 "Gmsh.y"
+case 140:
+#line 827 "Gmsh.y"
 {
-      TheSymbol.Name = yyvsp[-2].c ;
+      TheSymbol.Name = yyvsp[-2].c;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", yyvsp[-2].c) ;
+	vyyerror("Unknown Variable '%s'", yyvsp[-2].c) ; 
       else
-	*(double*)List_Pointer_Fast(pSymbol->val, 0) -= 1. ;
+	*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[-1].i; 
     ;
     break;}
-case 136:
-#line 807 "Gmsh.y"
+case 141:
+#line 836 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-5].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", yyvsp[-5].c) ;
+	vyyerror("Unknown Variable '%s'", yyvsp[-5].c) ; 
       else{
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-3].d)))
-	  *pd -= 1.0 ;
+	  *pd += yyvsp[-1].i ;
 	else
 	  vyyerror("Uninitialized Variable '%s[%d]'", yyvsp[-5].c, (int)yyvsp[-3].d) ;
       }
     ;
     break;}
-case 137:
-#line 819 "Gmsh.y"
-{
-      TheSymbol.Name = yyvsp[-3].c ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", yyvsp[-3].c) ;
-      else
-	*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[-1].d ;
-    ;
-    break;}
-case 138:
-#line 827 "Gmsh.y"
-{
-      TheSymbol.Name = yyvsp[-6].c ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", yyvsp[-6].c) ;
-      else{
-	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-4].d)))
-	  *pd += yyvsp[-1].d ;
-	else
-	  vyyerror("Uninitialized Variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d) ;
-      }
-    ;
-    break;}
-case 139:
-#line 839 "Gmsh.y"
-{
-      TheSymbol.Name = yyvsp[-3].c ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", yyvsp[-3].c) ;
-      else
-	*(double*)List_Pointer_Fast(pSymbol->val, 0) -= yyvsp[-1].d ;
-    ;
-    break;}
-case 140:
-#line 847 "Gmsh.y"
-{
-      TheSymbol.Name = yyvsp[-6].c ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", yyvsp[-6].c) ;
-      else{
-	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-4].d)))
-	  *pd -= yyvsp[-1].d ;
-	else
-	  vyyerror("Uninitialized Variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d) ;
-      }
-    ;
-    break;}
-case 141:
-#line 859 "Gmsh.y"
-{
-      TheSymbol.Name = yyvsp[-3].c ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", yyvsp[-3].c) ;
-      else
-	*(double*)List_Pointer_Fast(pSymbol->val, 0) *= yyvsp[-1].d ;
-    ;
-    break;}
 case 142:
-#line 867 "Gmsh.y"
-{
-      TheSymbol.Name = yyvsp[-6].c ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", yyvsp[-6].c) ;
+#line 851 "Gmsh.y"
+{ 
+      if(!(pStrCat = Get_StringOptionCategory(yyvsp[-5].c)))
+	vyyerror("Unknown String Option Class '%s'", yyvsp[-5].c);
       else{
-	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-4].d)))
-	  *pd *= yyvsp[-1].d ;
+	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-3].c, pStrCat)))
+	  vyyerror("Unknown String Option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c);
 	else
-	  vyyerror("Uninitialized Variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d) ;
+	  pStrOpt(0,GMSH_SET|GMSH_GUI,yyvsp[-1].c) ;
       }
     ;
     break;}
 case 143:
-#line 879 "Gmsh.y"
-{
-      if(!yyvsp[-1].d)
-	vyyerror("Division by Zero in '%s /= %g'", yyvsp[-3].c, yyvsp[-1].d);
+#line 863 "Gmsh.y"
+{ 
+      if(!(pStrCat = Get_StringOptionCategory(yyvsp[-8].c)))
+	vyyerror("Unknown String Option Class '%s'", yyvsp[-8].c);
       else{
-	TheSymbol.Name = yyvsp[-3].c ;
-	if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	  vyyerror("Unknown Variable '%s'", yyvsp[-3].c) ;
+	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-3].c, pStrCat)))
+	  vyyerror("Unknown String Option '%s[%d].%s'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c);
 	else
-	  *(double*)List_Pointer_Fast(pSymbol->val, 0) /= yyvsp[-1].d ;
+	  pStrOpt((int)yyvsp[-6].d,GMSH_SET|GMSH_GUI,yyvsp[-1].c) ;
       }
     ;
     break;}
 case 144:
-#line 891 "Gmsh.y"
+#line 877 "Gmsh.y"
 {
-      if(!yyvsp[-1].d)
-	vyyerror("Division by Zero in '%s[%d] /= %g'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].d);
+      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c)))
+	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-5].c);
       else{
-	TheSymbol.Name = yyvsp[-6].c ;
-	if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	  vyyerror("Unknown Variable '%s'", yyvsp[-6].c) ;
+	if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-3].c, pNumCat)))
+	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c);
 	else{
-	  if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-4].d)))
-	    *pd /= yyvsp[-1].d ;
-	  else
-	    vyyerror("Uninitialized Variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d) ;
+	  switch(yyvsp[-2].i){
+	  case 0 : d = yyvsp[-1].d ; break ;
+	  case 1 : d = pNumOpt(0,GMSH_GET,0) + yyvsp[-1].d ; break ;
+	  case 2 : d = pNumOpt(0,GMSH_GET,0) - yyvsp[-1].d ; break ;
+	  case 3 : d = pNumOpt(0,GMSH_GET,0) * yyvsp[-1].d ; break ;
+	  case 4 : 
+	    if(yyvsp[-1].d) d = pNumOpt(0,GMSH_GET,0) / yyvsp[-1].d ; 
+	    else vyyerror("Division by Zero in '%s.%s /= %g'", yyvsp[-5].c, yyvsp[-3].c, yyvsp[-1].d);
+	    break;
+	  }
+	  pNumOpt(0,GMSH_SET|GMSH_GUI, d) ;
 	}
       }
     ;
     break;}
 case 145:
-#line 910 "Gmsh.y"
-{ 
-      if(!(pStrCat = Get_StringOptionCategory(yyvsp[-5].c)))
-	vyyerror("Unknown String Option Class '%s'", yyvsp[-5].c);
+#line 900 "Gmsh.y"
+{
+      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-8].c)))
+	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-8].c);
       else{
-	if(!(pStrOpt = Get_StringOption(yyvsp[-3].c, pStrCat)))
-	  vyyerror("Unknown String Option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c);
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-3].c, pNumCat)))
+	  vyyerror("Unknown Numeric Option '%s[%d].%s'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c);
 	else{
-	  *pStrOpt = yyvsp[-1].c ;
+	  switch(yyvsp[-2].i){
+	  case 0 : d = yyvsp[-1].d; break ;
+	  case 1 : d = pNumOpt((int)yyvsp[-6].d,GMSH_GET,0) + yyvsp[-1].d ; break ;
+	  case 2 : d = pNumOpt((int)yyvsp[-6].d,GMSH_GET,0) - yyvsp[-1].d ; break ;
+	  case 3 : d = pNumOpt((int)yyvsp[-6].d,GMSH_GET,0) * yyvsp[-1].d ; break ;
+	  case 4 : 
+	    if(yyvsp[-1].d) d = pNumOpt((int)yyvsp[-6].d,GMSH_GET,0) / yyvsp[-1].d ;
+	    else vyyerror("Division by Zero in '%s[%d].%s /= %g'", 
+			  yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c, yyvsp[-1].d);
+	    break;
+	  }
+	  pNumOpt((int)yyvsp[-6].d,GMSH_SET|GMSH_GUI,d) ;
 	}
       }
     ;
     break;}
 case 146:
-#line 923 "Gmsh.y"
+#line 924 "Gmsh.y"
 {
-      if(strcmp(yyvsp[-10].c, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-10].c);
+      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-4].c)))
+	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-4].c);
       else{
-	if(!(pStrViewOpt = Get_StringViewOption((int)yyvsp[-6].d, yyvsp[-3].c, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-6].d);
-	  else	    vyyerror("Unknown String Option '%s.View[%d].%s'", 
-			     yyvsp[-10].c, (int)yyvsp[-6].d, yyvsp[-3].c);
-	}
-	else{
-	  strcpy(pStrViewOpt, yyvsp[-1].c) ;
-	}
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-2].c, pNumCat)))
+	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-4].c, yyvsp[-2].c);
+	else
+	  pNumOpt(0,GMSH_SET|GMSH_GUI,pNumOpt(0,GMSH_GET,0)+yyvsp[-1].i) ;
       }
     ;
     break;}
 case 147:
-#line 941 "Gmsh.y"
+#line 936 "Gmsh.y"
 {
-      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c)))
-	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-5].c);
+      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-7].c)))
+	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-7].c);
       else{
-	if(!(pNumOpt = Get_NumberOption(yyvsp[-3].c, pNumCat, &i)))
-	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c);
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt = yyvsp[-1].d ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt = (float)yyvsp[-1].d ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt = (long)yyvsp[-1].d ; break ;
-	  case GMSH_INT : *(int*)pNumOpt = (int)yyvsp[-1].d ; break ;
-	  }
-	}
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-2].c, pNumCat)))
+	  vyyerror("Unknown Numeric Option '%s[%d].%s'", yyvsp[-7].c, (int)yyvsp[-5].d, yyvsp[-2].c);
+	else
+	  pNumOpt((int)yyvsp[-5].d,GMSH_SET|GMSH_GUI,pNumOpt((int)yyvsp[-5].d,GMSH_GET,0)+yyvsp[-1].i) ;
       }
     ;
     break;}
 case 148:
-#line 958 "Gmsh.y"
+#line 950 "Gmsh.y"
 {
-      if(strcmp(yyvsp[-10].c, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-10].c);
+      if(!(pColCat = Get_ColorOptionCategory(yyvsp[-7].c)))
+	vyyerror("Unknown Color Option Class '%s'", yyvsp[-7].c);
       else{
-	if(!(pNumOpt = Get_NumberViewOption((int)yyvsp[-6].d, yyvsp[-3].c, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-6].d);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     yyvsp[-10].c, (int)yyvsp[-6].d, yyvsp[-3].c);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt = yyvsp[-1].d ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt = (float)yyvsp[-1].d ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt = (long)yyvsp[-1].d ; break ;
-	  case GMSH_INT : *(int*)pNumOpt = (int)yyvsp[-1].d ; break ;
-	  }
-	}
+	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[-3].c, pColCat)))
+	  vyyerror("Unknown Color Option '%s.Color.%s'", yyvsp[-7].c, yyvsp[-3].c);
+	else
+	  pColOpt(0,GMSH_SET|GMSH_GUI,yyvsp[-1].u) ;
       }
     ;
     break;}
 case 149:
-#line 979 "Gmsh.y"
+#line 962 "Gmsh.y"
 {
-      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c)))
-	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-5].c);
+      if(!(pColCat = Get_ColorOptionCategory(yyvsp[-10].c)))
+	vyyerror("Unknown Color Option Class '%s'", yyvsp[-10].c);
       else{
-	if(!(pNumOpt = Get_NumberOption(yyvsp[-3].c, pNumCat, &i)))
-	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c);
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt += yyvsp[-1].d ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt += (float)yyvsp[-1].d ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt += (long)yyvsp[-1].d ; break ;
-	  case GMSH_INT : *(int*)pNumOpt += (int)yyvsp[-1].d ; break ;
-	  }
-	}
+	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[-3].c, pColCat)))
+	  vyyerror("Unknown Color Option '%s[%d].Color.%s'", yyvsp[-10].c, (int)yyvsp[-8].d, yyvsp[-3].c);
+	else
+	  pColOpt((int)yyvsp[-8].d,GMSH_SET|GMSH_GUI,yyvsp[-1].u) ;
       }
     ;
     break;}
 case 150:
-#line 996 "Gmsh.y"
+#line 974 "Gmsh.y"
 {
-      if(strcmp(yyvsp[-10].c, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-10].c);
+      ColorTable *ct = Get_ColorTable((int)yyvsp[-6].d);
+      if(!ct)
+	vyyerror("View[%d] does not exist", (int)yyvsp[-6].d);
       else{
-	if(!(pNumOpt = Get_NumberViewOption((int)yyvsp[-6].d, yyvsp[-3].c, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-6].d);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     yyvsp[-10].c, (int)yyvsp[-6].d, yyvsp[-3].c);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt += yyvsp[-1].d ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt += (float)yyvsp[-1].d ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt += (long)yyvsp[-1].d ; break ;
-	  case GMSH_INT : *(int*)pNumOpt += (int)yyvsp[-1].d ; break ;
-	  }
-	}
+	ct->size = List_Nbr(yyvsp[-1].l);
+	if(ct->size > COLORTABLE_NBMAX_COLOR)
+	  vyyerror("Too Many (%d>%d) Colors in View[%d].ColorTable", 
+		   ct->size, COLORTABLE_NBMAX_COLOR, (int)yyvsp[-6].d);
+	else
+	  for(i=0 ; i<ct->size ; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]);
       }
     ;
     break;}
 case 151:
-#line 1017 "Gmsh.y"
+#line 999 "Gmsh.y"
 {
-      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c)))
-	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-5].c);
-      else{
-	if(!(pNumOpt = Get_NumberOption(yyvsp[-3].c, pNumCat, &i)))
-	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c);
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt -= yyvsp[-1].d ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt -= (float)yyvsp[-1].d ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt -= (long)yyvsp[-1].d ; break ;
-	  case GMSH_INT : *(int*)pNumOpt -= (int)yyvsp[-1].d ; break ;
-	  }
-	}
-      }
+      Cdbpts101((int)yyvsp[-4].d,yyvsp[-1].v[0],yyvsp[-1].v[1],yyvsp[-1].v[2],yyvsp[-1].v[3],yyvsp[-1].v[4]);
+      yyval.s.Type = MSH_POINT;
+      yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
 case 152:
-#line 1034 "Gmsh.y"
-{
-      if(strcmp(yyvsp[-10].c, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-10].c);
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)yyvsp[-6].d, yyvsp[-3].c, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-6].d);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     yyvsp[-10].c, (int)yyvsp[-6].d, yyvsp[-3].c);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt -= yyvsp[-1].d ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt -= (float)yyvsp[-1].d ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt -= (long)yyvsp[-1].d ; break ;
-	  case GMSH_INT : *(int*)pNumOpt -= (int)yyvsp[-1].d ; break ;
-	  }
-	}
-      }
-    ;
-    break;}
-case 153:
-#line 1055 "Gmsh.y"
-{
-      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c)))
-	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-5].c);
-      else{
-	if(!(pNumOpt = Get_NumberOption(yyvsp[-3].c, pNumCat, &i)))
-	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c);
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt *= yyvsp[-1].d ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt *= (float)yyvsp[-1].d ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt *= (long)yyvsp[-1].d ; break ;
-	  case GMSH_INT : *(int*)pNumOpt *= (int)yyvsp[-1].d ; break ;
-	  }
-	}
-      }
-    ;
-    break;}
-case 154:
-#line 1072 "Gmsh.y"
-{
-      if(strcmp(yyvsp[-10].c, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-10].c);
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)yyvsp[-6].d, yyvsp[-3].c, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-6].d);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     yyvsp[-10].c, (int)yyvsp[-6].d, yyvsp[-3].c);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt *= yyvsp[-1].d ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt *= (float)yyvsp[-1].d ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt *= (long)yyvsp[-1].d ; break ;
-	  case GMSH_INT : *(int*)pNumOpt *= (int)yyvsp[-1].d ; break ;
-	  }
-	}
-      }
-    ;
-    break;}
-case 155:
-#line 1093 "Gmsh.y"
-{
-      if(!yyvsp[-1].d)
-	vyyerror("Division by Zero in '%s.%s /= %g'", yyvsp[-5].c, yyvsp[-3].c, yyvsp[-1].d);
-      else{
-	if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c)))
-	  vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-5].c);
-	else{
-	  if(!(pNumOpt = Get_NumberOption(yyvsp[-3].c, pNumCat, &i)))
-	    vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c);
-	  else{
-	    switch(i){
-	    case GMSH_DOUBLE : *(double*)pNumOpt /= yyvsp[-1].d ; break ;
-	    case GMSH_FLOAT : *(float*)pNumOpt /= (float)yyvsp[-1].d ; break ;
-	    case GMSH_LONG : *(long*)pNumOpt /= (long)yyvsp[-1].d ; break ;
-	    case GMSH_INT : *(int*)pNumOpt /= (int)yyvsp[-1].d ; break ;
-	    }
-	  }
-	}
-      }
-    ;
-    break;}
-case 156:
-#line 1114 "Gmsh.y"
-{
-      if(!yyvsp[-1].d)
-	vyyerror("Division by Zero in '%s.View[%d].%s /= %g'", 
-		 yyvsp[-10].c, (int)yyvsp[-6].d, yyvsp[-3].c, yyvsp[-1].d);
-      else{
-	if(strcmp(yyvsp[-10].c, "PostProcessing"))
-	  vyyerror("Unknown View Option Class '%s'", yyvsp[-10].c);
-	else{
-	  if(!(pNumOpt = Get_NumberViewOption((int)yyvsp[-6].d, yyvsp[-3].c, &i))){
-	    if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-6].d);
-	    else      vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			       yyvsp[-10].c, (int)yyvsp[-6].d, yyvsp[-3].c);
-	  }
-	  else{
-	    switch(i){
-	    case GMSH_DOUBLE : *(double*)pNumOpt /= yyvsp[-1].d ; break ;
-	    case GMSH_FLOAT : *(float*)pNumOpt /= (float)yyvsp[-1].d ; break ;
-	    case GMSH_LONG : *(long*)pNumOpt /= (long)yyvsp[-1].d ; break ;
-	    case GMSH_INT : *(int*)pNumOpt /= (int)yyvsp[-1].d ; break ;
-	    }
-	  }
-	}
-      }
-    ;
-    break;}
-case 157:
-#line 1140 "Gmsh.y"
-{
-      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-4].c)))
-	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-4].c);
-      else{
-	if(!(pNumOpt = Get_NumberOption(yyvsp[-2].c, pNumCat, &i)))
-	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-4].c, yyvsp[-2].c);
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt += 1. ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt += 1. ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt += 1 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt += 1 ; break ;
-	  }
-	}
-      }
-    ;
-    break;}
-case 158:
-#line 1157 "Gmsh.y"
-{
-      if(strcmp(yyvsp[-10].c, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-10].c);
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)yyvsp[-6].d, yyvsp[-3].c, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-6].d);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     yyvsp[-10].c, (int)yyvsp[-6].d, yyvsp[-3].c);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt += 1. ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt += 1. ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt += 1 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt += 1 ; break ;
-	  }
-	}
-      }
-    ;
-    break;}
-case 159:
-#line 1178 "Gmsh.y"
-{
-      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-4].c)))
-	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-4].c);
-      else{
-	if(!(pNumOpt = Get_NumberOption(yyvsp[-2].c, pNumCat, &i)))
-	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-4].c, yyvsp[-2].c);
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt -= 1. ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt -= 1. ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt -= 1 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt -= 1 ; break ;
-	  }
-	}
-      }
-    ;
-    break;}
-case 160:
-#line 1195 "Gmsh.y"
-{
-      if(strcmp(yyvsp[-10].c, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-10].c);
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)yyvsp[-6].d, yyvsp[-3].c, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-6].d);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     yyvsp[-10].c, (int)yyvsp[-6].d, yyvsp[-3].c);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt -= 1. ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt -= 1. ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt -= 1 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt -= 1 ; break ;
-	  }
-	}
-      }
-    ;
-    break;}
-case 161:
-#line 1218 "Gmsh.y"
-{
-      if(!(pColCat = Get_ColorOptionCategory(yyvsp[-7].c)))
-	vyyerror("Unknown Color Option Class '%s'", yyvsp[-7].c);
-      else{
-	if(!(pColOpt = Get_ColorOption(yyvsp[-3].c, pColCat)))
-	  vyyerror("Unknown Color Option '%s.%s'", yyvsp[-7].c, yyvsp[-3].c);
-	else{
-	  *pColOpt = yyvsp[-1].u ;
-	}
-      }
-    ;
-    break;}
-case 162:
-#line 1231 "Gmsh.y"
-{
-      if(strcmp(yyvsp[-10].c, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-10].c);
-      else{
-	ColorTable *ct = Get_ColorTableViewOption((int)yyvsp[-6].d);
-	if(!ct)
-	  vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-6].d);
-	else{
-	  ct->size = List_Nbr(yyvsp[-1].l);
-	  if(ct->size > COLORTABLE_NBMAX_COLOR)
-	    vyyerror("Too Many (%d>%d) Colors in Post.View[%d].Color", 
-		     ct->size, COLORTABLE_NBMAX_COLOR, (int)yyvsp[-6].d);
-	  else
-	    for(i=0 ; i<ct->size ; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]);
-	}
-      }
-    ;
-    break;}
-case 163:
-#line 1260 "Gmsh.y"
-{
-      Cdbpts101((int)yyvsp[-4].d,yyvsp[-1].v[0],yyvsp[-1].v[1],yyvsp[-1].v[2],yyvsp[-1].v[3],yyvsp[-1].v[4]);
-      yyval.s.Type = MSH_POINT;
-      yyval.s.Num  = (int)yyvsp[-4].d;
-    ;
-    break;}
-case 164:
-#line 1267 "Gmsh.y"
+#line 1006 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_POINT,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_POINT;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 165:
-#line 1273 "Gmsh.y"
+case 153:
+#line 1012 "Gmsh.y"
 {
       Vertex *v;
       Attractor *a;
@@ -4273,8 +3854,8 @@ case 165:
       }
     ;
     break;}
-case 166:
-#line 1292 "Gmsh.y"
+case 154:
+#line 1031 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
 	List_Read(yyvsp[-3].l,i,&d);
@@ -4286,31 +3867,31 @@ case 166:
       }
     ;
     break;}
-case 167:
-#line 1303 "Gmsh.y"
+case 155:
+#line 1042 "Gmsh.y"
 {
       yyval.s.Type = MSH_POINT;
       yyval.s.Num  = (int)yyvsp[-2].d;
     ;
     break;}
-case 168:
-#line 1311 "Gmsh.y"
+case 156:
+#line 1050 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_LINE,1,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_LINE;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 169:
-#line 1317 "Gmsh.y"
+case 157:
+#line 1056 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_SPLN,3,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_SPLN;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 170:
-#line 1323 "Gmsh.y"
+case 158:
+#line 1062 "Gmsh.y"
 {
       Curve *c;
       Attractor *a;
@@ -4330,16 +3911,16 @@ case 170:
       }
     ;
     break;}
-case 171:
-#line 1342 "Gmsh.y"
+case 159:
+#line 1081 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_CIRC,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_CIRC ;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 172:
-#line 1348 "Gmsh.y"
+case 160:
+#line 1087 "Gmsh.y"
 {
       List_T *temp;
       int i,j;
@@ -4356,48 +3937,48 @@ case 172:
       yyval.s.Num  = (int)yyvsp[-6].d;
     ;
     break;}
-case 173:
-#line 1365 "Gmsh.y"
+case 161:
+#line 1104 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-14].d,MSH_SEGM_PARAMETRIC,2,NULL,NULL,-1,-1,yyvsp[-10].d,yyvsp[-8].d,yyvsp[-6].c,yyvsp[-4].c,yyvsp[-2].c);
       yyval.s.Type = MSH_SEGM_PARAMETRIC ;
       yyval.s.Num  = (int)yyvsp[-14].d;
     ;
     break;}
-case 174:
-#line 1371 "Gmsh.y"
+case 162:
+#line 1110 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_ELLI,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_ELLI ;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 175:
-#line 1377 "Gmsh.y"
+case 163:
+#line 1116 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_LINE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_LINE;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 176:
-#line 1383 "Gmsh.y"
+case 164:
+#line 1122 "Gmsh.y"
 {
       yyval.s.Type = MSH_SEGM_LOOP;
       Cdbz101((int)yyvsp[-4].d,yyval.s.Type,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Num = (int)yyvsp[-4].d;
     ;
     break;}
-case 177:
-#line 1389 "Gmsh.y"
+case 165:
+#line 1128 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BSPLN,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_BSPLN;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 178:
-#line 1395 "Gmsh.y"
+case 166:
+#line 1134 "Gmsh.y"
 {
       List_T *Temp;
       int i;
@@ -4417,8 +3998,8 @@ case 178:
       List_Delete(Temp);
     ;
     break;}
-case 179:
-#line 1414 "Gmsh.y"
+case 167:
+#line 1153 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Curve *c = FindCurve(yyval.s.Num,THEM);
@@ -4428,16 +4009,16 @@ case 179:
 	yyval.s.Type = c->Typ;
     ;
     break;}
-case 180:
-#line 1426 "Gmsh.y"
+case 168:
+#line 1165 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_SURF_PLAN,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_SURF_PLAN;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 181:
-#line 1432 "Gmsh.y"
+case 169:
+#line 1171 "Gmsh.y"
 {
       Surface *s,*support;
       support = FindSurface((int)yyvsp[-4].d,THEM);
@@ -4457,8 +4038,8 @@ case 181:
       }
     ;
     break;}
-case 182:
-#line 1451 "Gmsh.y"
+case 170:
+#line 1190 "Gmsh.y"
 {
       List_Read(yyvsp[-1].l,0,&d);
       i = (int)d;
@@ -4480,38 +4061,38 @@ case 182:
       }
     ;
     break;}
-case 183:
-#line 1474 "Gmsh.y"
+case 171:
+#line 1213 "Gmsh.y"
 {
       CreateNurbsSurface ( (int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d  , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
       yyval.s.Type  = MSH_SURF_NURBS;
       yyval.s.Num = (int)yyvsp[-16].d;
     ;
     break;}
-case 184:
-#line 1482 "Gmsh.y"
+case 172:
+#line 1221 "Gmsh.y"
 {
       CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
     ;
     break;}
-case 185:
-#line 1486 "Gmsh.y"
+case 173:
+#line 1225 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_SURFACE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_SURFACE;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 186:
-#line 1492 "Gmsh.y"
+case 174:
+#line 1231 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_SURF_LOOP,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_SURF_LOOP;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 187:
-#line 1498 "Gmsh.y"
+case 175:
+#line 1237 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Surface *s = FindSurface(yyval.s.Num,THEM);
@@ -4521,85 +4102,85 @@ case 187:
 	yyval.s.Type = s->Typ;
      ;
     break;}
-case 188:
-#line 1510 "Gmsh.y"
+case 176:
+#line 1249 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
       yyval.s.Num  = (int)yyvsp[-4].d;      
     ;
     break;}
-case 189:
-#line 1516 "Gmsh.y"
+case 177:
+#line 1255 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 190:
-#line 1522 "Gmsh.y"
+case 178:
+#line 1261 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_VOLUME;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 191:
-#line 1535 "Gmsh.y"
+case 179:
+#line 1274 "Gmsh.y"
 {
       TranslateShapes (yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 192:
-#line 1540 "Gmsh.y"
+case 180:
+#line 1279 "Gmsh.y"
 {
       RotateShapes(yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 193:
-#line 1545 "Gmsh.y"
+case 181:
+#line 1284 "Gmsh.y"
 {
       SymmetryShapes(yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-3].v[3],yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 194:
-#line 1550 "Gmsh.y"
+case 182:
+#line 1289 "Gmsh.y"
 {
       DilatShapes(yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 195:
-#line 1557 "Gmsh.y"
+case 183:
+#line 1296 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 196:
-#line 1558 "Gmsh.y"
+case 184:
+#line 1297 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 197:
-#line 1559 "Gmsh.y"
+case 185:
+#line 1298 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 198:
-#line 1564 "Gmsh.y"
+case 186:
+#line 1303 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
     ;
     break;}
-case 199:
-#line 1568 "Gmsh.y"
+case 187:
+#line 1307 "Gmsh.y"
 {
       List_Add(yyval.l,&yyvsp[0].s);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 200:
-#line 1580 "Gmsh.y"
+case 188:
+#line 1319 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -4610,8 +4191,8 @@ case 200:
       }
     ;
     break;}
-case 201:
-#line 1598 "Gmsh.y"
+case 189:
+#line 1337 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
 	List_Read (yyvsp[-1].l,i,&TheShape);
@@ -4619,20 +4200,21 @@ case 201:
       }
     ;
     break;}
-case 202:
-#line 1605 "Gmsh.y"
+case 190:
+#line 1344 "Gmsh.y"
 {
-	FreeView((int)yyvsp[-2].d);
+	if(!strcmp(yyvsp[-4].c, "View"))
+	  FreeView((int)yyvsp[-2].d);
       ;
     break;}
-case 203:
-#line 1609 "Gmsh.y"
+case 191:
+#line 1349 "Gmsh.y"
 {
       Init_Mesh(THEM, 1);
     ;
     break;}
-case 204:
-#line 1621 "Gmsh.y"
+case 192:
+#line 1361 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Include")){
 
@@ -4665,14 +4247,10 @@ case 204:
 
       }
       else if(!strcmp(yyvsp[-2].c, "Print")){
-	//#if !defined(__CYGWIN__) // comprends pas pq ca ne marche pas
 	if(!CTX.interactive) CreateOutputFile(yyvsp[-1].c, CTX.print.format);
-	//#endif
       }
       else if(!strcmp(yyvsp[-2].c, "Save")){
-#if !defined(__CYGWIN__) // comprends pas pq ca ne marche pas
 	CreateOutputFile(yyvsp[-1].c, CTX.mesh.format);
-#endif
       }
       else if(!strcmp(yyvsp[-2].c, "Merge")){
 
@@ -4691,8 +4269,8 @@ case 204:
 	vyyerror("Unknown Command '%s'", yyvsp[-2].c);
     ;
     break;}
-case 205:
-#line 1679 "Gmsh.y"
+case 193:
+#line 1415 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Sleep")){
 
@@ -4712,14 +4290,14 @@ case 205:
 	vyyerror("Unknown Command '%s'", yyvsp[-2].c);
     ;
     break;}
-case 206:
-#line 1698 "Gmsh.y"
+case 194:
+#line 1434 "Gmsh.y"
 {
       exit(0);
     ;
     break;}
-case 207:
-#line 1702 "Gmsh.y"
+case 195:
+#line 1438 "Gmsh.y"
 {
       if(!CTX.interactive){ // we're in interactive mode
 	if(Tree_Nbr(THEM->Points) != Last_NumberOfPoints){
@@ -4734,8 +4312,8 @@ case 207:
       }
     ;
     break;}
-case 208:
-#line 1724 "Gmsh.y"
+case 196:
+#line 1460 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4750,8 +4328,8 @@ case 208:
       fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]);
     ;
     break;}
-case 209:
-#line 1738 "Gmsh.y"
+case 197:
+#line 1474 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4766,8 +4344,8 @@ case 209:
       fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]);
     ;
     break;}
-case 210:
-#line 1752 "Gmsh.y"
+case 198:
+#line 1488 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4793,8 +4371,8 @@ case 210:
       fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]);
     ;
     break;}
-case 211:
-#line 1777 "Gmsh.y"
+case 199:
+#line 1513 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4820,8 +4398,8 @@ case 211:
       fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]);
     ;
     break;}
-case 212:
-#line 1802 "Gmsh.y"
+case 200:
+#line 1538 "Gmsh.y"
 {
       if(LoopControlVariablesTab[ImbricatedLoop-1][1] >  
 	 LoopControlVariablesTab[ImbricatedLoop-1][0]){
@@ -4848,104 +4426,104 @@ case 212:
       }
     ;
     break;}
-case 213:
-#line 1828 "Gmsh.y"
+case 201:
+#line 1564 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->createFunction(yyvsp[0].c,yyin,yylineno))
 	vyyerror("Redefinition of function %s",yyvsp[0].c);
       skip_until(NULL, "Return");
     ;
     break;}
-case 214:
-#line 1834 "Gmsh.y"
+case 202:
+#line 1570 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->leaveFunction(&yyin,yylineno))
 	vyyerror("Error while exiting function");
     ;
     break;}
-case 215:
-#line 1839 "Gmsh.y"
+case 203:
+#line 1575 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c,&yyin,yylineno))
 	vyyerror("Unknown Function %s",yyvsp[-1].c);
     ;
     break;}
-case 216:
-#line 1844 "Gmsh.y"
+case 204:
+#line 1580 "Gmsh.y"
 {
       if(!yyvsp[-1].d) skip_until("If", "EndIf");
     ;
     break;}
-case 217:
-#line 1848 "Gmsh.y"
+case 205:
+#line 1584 "Gmsh.y"
 {
     ;
     break;}
-case 218:
-#line 1859 "Gmsh.y"
+case 206:
+#line 1595 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,&pc,&prc,NULL);
     ;
     break;}
-case 219:
-#line 1864 "Gmsh.y"
+case 207:
+#line 1600 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,
 			   &pc,&prc,NULL);
     ;
     break;}
-case 220:
-#line 1870 "Gmsh.y"
+case 208:
+#line 1606 "Gmsh.y"
 {
       Extrude_ProtudeCurve(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,NULL);
     ;
     break;}
-case 221:
-#line 1874 "Gmsh.y"
+case 209:
+#line 1610 "Gmsh.y"
 {
       Extrude_ProtudeCurve(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,NULL);
     ;
     break;}
-case 222:
-#line 1878 "Gmsh.y"
+case 210:
+#line 1614 "Gmsh.y"
 {
       Extrude_ProtudeSurface(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,0,NULL);
     ;
     break;}
-case 223:
-#line 1882 "Gmsh.y"
+case 211:
+#line 1618 "Gmsh.y"
 {
       Extrude_ProtudeSurface(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
-case 224:
-#line 1886 "Gmsh.y"
+case 212:
+#line 1622 "Gmsh.y"
 {
     int vol = NEWREG();
     Extrude_ProtudeSurface(1,(int)yyvsp[-7].d,yyvsp[-5].v[0],yyvsp[-5].v[1],yyvsp[-5].v[2],0.,0.,0.,0.,vol,&extr);
   ;
     break;}
-case 225:
-#line 1891 "Gmsh.y"
+case 213:
+#line 1627 "Gmsh.y"
 {
     int vol = NEWREG();
     Extrude_ProtudeSurface(0,(int)yyvsp[-11].d,yyvsp[-9].v[0],yyvsp[-9].v[1],yyvsp[-9].v[2],yyvsp[-7].v[0],yyvsp[-7].v[1],yyvsp[-7].v[2],yyvsp[-5].d,vol,&extr);
   ;
     break;}
-case 226:
-#line 1899 "Gmsh.y"
+case 214:
+#line 1635 "Gmsh.y"
 {
     ;
     break;}
-case 227:
-#line 1902 "Gmsh.y"
+case 215:
+#line 1638 "Gmsh.y"
 {
     ;
     break;}
-case 228:
-#line 1908 "Gmsh.y"
+case 216:
+#line 1644 "Gmsh.y"
 {
       double d;
       int j;
@@ -4963,14 +4541,14 @@ case 228:
       }
     ;
     break;}
-case 229:
-#line 1925 "Gmsh.y"
+case 217:
+#line 1661 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
-case 230:
-#line 1936 "Gmsh.y"
+case 218:
+#line 1672 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -4988,8 +4566,8 @@ case 230:
       }
     ;
     break;}
-case 231:
-#line 1953 "Gmsh.y"
+case 219:
+#line 1689 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -5007,8 +4585,8 @@ case 231:
       }
     ;
     break;}
-case 232:
-#line 1970 "Gmsh.y"
+case 220:
+#line 1706 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -5026,8 +4604,8 @@ case 232:
       }
     ;
     break;}
-case 233:
-#line 1987 "Gmsh.y"
+case 221:
+#line 1723 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -5049,8 +4627,8 @@ case 233:
       }
     ;
     break;}
-case 234:
-#line 2008 "Gmsh.y"
+case 222:
+#line 1744 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -5071,8 +4649,8 @@ case 234:
       }
     ;
     break;}
-case 235:
-#line 2028 "Gmsh.y"
+case 223:
+#line 1764 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d,THEM);
       if(!v)
@@ -5093,8 +4671,8 @@ case 235:
       }
     ;
     break;}
-case 236:
-#line 2048 "Gmsh.y"
+case 224:
+#line 1784 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -5112,8 +4690,8 @@ case 236:
       }
     ;
     break;}
-case 237:
-#line 2065 "Gmsh.y"
+case 225:
+#line 1801 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -5131,80 +4709,80 @@ case 237:
       }
     ;
     break;}
-case 238:
-#line 2090 "Gmsh.y"
+case 226:
+#line 1826 "Gmsh.y"
 { 
       Coherence_PS();
     ;
     break;}
-case 239:
-#line 2094 "Gmsh.y"
+case 227:
+#line 1830 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
-case 240:
-#line 2105 "Gmsh.y"
+case 228:
+#line 1841 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
-case 241:
-#line 2106 "Gmsh.y"
+case 229:
+#line 1842 "Gmsh.y"
 { yyval.d = -yyvsp[0].d; ;
     break;}
-case 242:
-#line 2110 "Gmsh.y"
+case 230:
+#line 1846 "Gmsh.y"
 {yyval.i = 1;;
     break;}
-case 243:
-#line 2111 "Gmsh.y"
+case 231:
+#line 1847 "Gmsh.y"
 {yyval.i = 0;;
     break;}
-case 244:
-#line 2112 "Gmsh.y"
+case 232:
+#line 1848 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 245:
-#line 2113 "Gmsh.y"
+case 233:
+#line 1849 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 246:
-#line 2114 "Gmsh.y"
+case 234:
+#line 1850 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 247:
-#line 2118 "Gmsh.y"
+case 235:
+#line 1854 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
-case 248:
-#line 2119 "Gmsh.y"
+case 236:
+#line 1855 "Gmsh.y"
 { yyval.d = yyvsp[-1].d ;          ;
     break;}
-case 249:
-#line 2120 "Gmsh.y"
+case 237:
+#line 1856 "Gmsh.y"
 { yyval.d = -yyvsp[0].d ;         ;
     break;}
-case 250:
-#line 2121 "Gmsh.y"
+case 238:
+#line 1857 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
-case 251:
-#line 2122 "Gmsh.y"
+case 239:
+#line 1858 "Gmsh.y"
 { yyval.d = !yyvsp[0].d ;         ;
     break;}
-case 252:
-#line 2123 "Gmsh.y"
+case 240:
+#line 1859 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d ;     ;
     break;}
-case 253:
-#line 2124 "Gmsh.y"
+case 241:
+#line 1860 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d ;     ;
     break;}
-case 254:
-#line 2125 "Gmsh.y"
+case 242:
+#line 1861 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d ;     ;
     break;}
-case 255:
-#line 2127 "Gmsh.y"
+case 243:
+#line 1863 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	vyyerror("Division by Zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -5212,158 +4790,156 @@ case 255:
 	yyval.d = yyvsp[-2].d / yyvsp[0].d ;     
     ;
     break;}
-case 256:
-#line 2133 "Gmsh.y"
+case 244:
+#line 1869 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ;  ;
     break;}
-case 257:
-#line 2134 "Gmsh.y"
+case 245:
+#line 1870 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d,yyvsp[0].d) ;  ;
     break;}
-case 258:
-#line 2135 "Gmsh.y"
+case 246:
+#line 1871 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d ;     ;
     break;}
-case 259:
-#line 2136 "Gmsh.y"
+case 247:
+#line 1872 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d ;     ;
     break;}
-case 260:
-#line 2137 "Gmsh.y"
+case 248:
+#line 1873 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d ;    ;
     break;}
-case 261:
-#line 2138 "Gmsh.y"
+case 249:
+#line 1874 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d ;    ;
     break;}
-case 262:
-#line 2139 "Gmsh.y"
+case 250:
+#line 1875 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d ;    ;
     break;}
-case 263:
-#line 2140 "Gmsh.y"
+case 251:
+#line 1876 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d ;    ;
     break;}
-case 264:
-#line 2141 "Gmsh.y"
+case 252:
+#line 1877 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d ;    ;
     break;}
-case 265:
-#line 2142 "Gmsh.y"
+case 253:
+#line 1878 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d ;    ;
     break;}
-case 266:
-#line 2143 "Gmsh.y"
+case 254:
+#line 1879 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ;
     break;}
-case 267:
-#line 2144 "Gmsh.y"
+case 255:
+#line 1880 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
-case 268:
-#line 2145 "Gmsh.y"
+case 256:
+#line 1881 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
-case 269:
-#line 2146 "Gmsh.y"
+case 257:
+#line 1882 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
-case 270:
-#line 2147 "Gmsh.y"
+case 258:
+#line 1883 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
-case 271:
-#line 2148 "Gmsh.y"
+case 259:
+#line 1884 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
-case 272:
-#line 2149 "Gmsh.y"
+case 260:
+#line 1885 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
-case 273:
-#line 2150 "Gmsh.y"
+case 261:
+#line 1886 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
-case 274:
-#line 2151 "Gmsh.y"
+case 262:
+#line 1887 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
-case 275:
-#line 2152 "Gmsh.y"
+case 263:
+#line 1888 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
-case 276:
-#line 2153 "Gmsh.y"
+case 264:
+#line 1889 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
-case 277:
-#line 2154 "Gmsh.y"
+case 265:
+#line 1890 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
-case 278:
-#line 2155 "Gmsh.y"
+case 266:
+#line 1891 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
-case 279:
-#line 2156 "Gmsh.y"
+case 267:
+#line 1892 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
-case 280:
-#line 2157 "Gmsh.y"
+case 268:
+#line 1893 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
-case 281:
-#line 2158 "Gmsh.y"
+case 269:
+#line 1894 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
-case 282:
-#line 2159 "Gmsh.y"
+case 270:
+#line 1895 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
-case 283:
-#line 2160 "Gmsh.y"
+case 271:
+#line 1896 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
-case 284:
-#line 2161 "Gmsh.y"
+case 272:
+#line 1897 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
-case 285:
-#line 2162 "Gmsh.y"
+case 273:
+#line 1898 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
-case 286:
-#line 2163 "Gmsh.y"
+case 274:
+#line 1899 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
-case 287:
-#line 2164 "Gmsh.y"
+case 275:
+#line 1900 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
-case 288:
-#line 2173 "Gmsh.y"
+case 276:
+#line 1909 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
-case 289:
-#line 2174 "Gmsh.y"
+case 277:
+#line 1910 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
-case 290:
-#line 2179 "Gmsh.y"
+case 278:
+#line 1915 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[0].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
 	vyyerror("Unknown Variable '%s'", yyvsp[0].c) ;
 	yyval.d = 0. ;
       }
-      else{
+      else
 	yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0) ;
-      }
-      //      Free($1);
     ;
     break;}
-case 291:
-#line 2191 "Gmsh.y"
+case 279:
+#line 1926 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5378,58 +4954,22 @@ case 291:
 	  yyval.d = 0. ;
 	}
       }
-      //Free($1);
     ;
     break;}
-case 292:
-#line 2209 "Gmsh.y"
-{
-      TheSymbol.Name = yyvsp[-1].c ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
-	vyyerror("Unknown Variable '%s'", yyvsp[-1].c) ;
-	yyval.d = 0. ;
-      }
-      else{
-	yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += 1.0) ;
-      }
-      //Free($1);
-    ;
-    break;}
-case 293:
-#line 2221 "Gmsh.y"
-{
-      TheSymbol.Name = yyvsp[-4].c ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
-	vyyerror("Unknown Variable '%s'", yyvsp[-4].c) ;
-	yyval.d = 0. ;
-      }
-      else{
-	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-2].d)))
-	  yyval.d = (*pd += 1.0) ;
-	else{
-	  vyyerror("Uninitialized Variable '%s[%d]'", yyvsp[-4].c, (int)yyvsp[-2].d) ;
-	  yyval.d = 0. ;
-	}
-      }
-      //Free($1);
-    ;
-    break;}
-case 294:
-#line 2239 "Gmsh.y"
+case 280:
+#line 1943 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-1].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
 	vyyerror("Unknown Variable '%s'", yyvsp[-1].c) ;
 	yyval.d = 0. ;
       }
-      else{
-	yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) -= 1.0) ;
-      }
-      //Free($1);
+      else
+	yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i) ;
     ;
     break;}
-case 295:
-#line 2251 "Gmsh.y"
+case 281:
+#line 1954 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-4].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5438,169 +4978,92 @@ case 295:
       }
       else{
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-2].d)))
-	  yyval.d = (*pd -= 1.0) ;
+	  yyval.d = (*pd += yyvsp[0].i) ;
 	else{
 	  vyyerror("Uninitialized Variable '%s[%d]'", yyvsp[-4].c, (int)yyvsp[-2].d) ;
 	  yyval.d = 0. ;
 	}
       }
-      //Free($1);
     ;
     break;}
-case 296:
-#line 2271 "Gmsh.y"
+case 282:
+#line 1973 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){
 	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-2].c);
 	yyval.d = 0. ;
       }
       else{
-	if(!(pNumOpt = Get_NumberOption(yyvsp[0].c, pNumCat, &i))){
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){
 	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-2].c, yyvsp[0].c);
 	  yyval.d = 0. ;
 	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : yyval.d = *(double*)pNumOpt ; break ;
-	  case GMSH_FLOAT : yyval.d = (double)(*(float*)pNumOpt) ; break ;
-	  case GMSH_LONG : yyval.d = (double)(*(long*)pNumOpt) ; break ;
-	  case GMSH_INT : yyval.d = (double)(*(int*)pNumOpt) ; break ;
-	  }
-	}
-      }
-    ;
-    break;}
-case 297:
-#line 2292 "Gmsh.y"
-{
-      if(strcmp(yyvsp[-7].c, "PostProcessing")){
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-7].c);
-	yyval.d = 0. ;
-      }
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)yyvsp[-3].d, yyvsp[0].c, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-3].d);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     yyvsp[-7].c, (int)yyvsp[-3].d, yyvsp[0].c);
-	  yyval.d = 0. ;
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : yyval.d = *(double*)pNumOpt ; break ;
-	  case GMSH_FLOAT : yyval.d = (double)(*(float*)pNumOpt) ; break ;
-	  case GMSH_LONG : yyval.d = (double)(*(long*)pNumOpt) ; break ;
-	  case GMSH_INT : yyval.d = (double)(*(int*)pNumOpt) ; break ;
-	  }
-	}
-      }
-    ;
-    break;}
-case 298:
-#line 2316 "Gmsh.y"
-{
-      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){
-	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-3].c);
-	yyval.d = 0. ;
-      }
-      else{
-	if(!(pNumOpt = Get_NumberOption(yyvsp[-1].c, pNumCat, &i))){
-	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c);
-	  yyval.d = 0. ;
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : yyval.d = (*(double*)pNumOpt += 1.) ; break ;
-	  case GMSH_FLOAT : yyval.d = (double)(*(float*)pNumOpt += 1.) ; break ;
-	  case GMSH_LONG : yyval.d = (double)(*(long*)pNumOpt += 1) ; break ;
-	  case GMSH_INT : yyval.d = (double)(*(int*)pNumOpt += 1) ; break ;
-	  }
-	}
+	else
+	  yyval.d = pNumOpt(0, GMSH_GET, 0);
       }
     ;
     break;}
-case 299:
-#line 2337 "Gmsh.y"
+case 283:
+#line 1989 "Gmsh.y"
 {
-      if(strcmp(yyvsp[-8].c, "PostProcessing")){
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-8].c);
+      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){
+	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-5].c);
 	yyval.d = 0. ;
       }
       else{
-	if(!(pNumOpt = Get_NumberViewOption((int)yyvsp[-4].d, yyvsp[-1].c, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-4].d);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     yyvsp[-8].c, (int)yyvsp[-4].d, yyvsp[-1].c);
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){
+	  vyyerror("Unknown Numeric Option '%s[%d].%s'", yyvsp[-5].c, (int)yyvsp[-3].d, yyvsp[0].c);
 	  yyval.d = 0. ;
 	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : yyval.d = (*(double*)pNumOpt += 1.) ; break ;
-	  case GMSH_FLOAT : yyval.d = (double)(*(float*)pNumOpt += 1.) ; break ;
-	  case GMSH_LONG : yyval.d = (double)(*(long*)pNumOpt += 1) ; break ;
-	  case GMSH_INT : yyval.d = (double)(*(int*)pNumOpt += 1) ; break ;
-	  }
-	}
+	else
+	  yyval.d = pNumOpt((int)yyvsp[-3].d, GMSH_GET, 0);
       }
     ;
     break;}
-case 300:
-#line 2361 "Gmsh.y"
+case 284:
+#line 2005 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){
 	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-3].c);
 	yyval.d = 0. ;
       }
       else{
-	if(!(pNumOpt = Get_NumberOption(yyvsp[-1].c, pNumCat, &i))){
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){
 	  vyyerror("Unknown Numeric Option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c);
 	  yyval.d = 0. ;
 	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : yyval.d = (*(double*)pNumOpt -= 1.) ; break ;
-	  case GMSH_FLOAT : yyval.d = (double)(*(float*)pNumOpt -= 1.) ; break ;
-	  case GMSH_LONG : yyval.d = (double)(*(long*)pNumOpt -= 1) ; break ;
-	  case GMSH_INT : yyval.d = (double)(*(int*)pNumOpt -= 1) ; break ;
-	  }
-	}
+	else
+	  yyval.d = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[0].i);
       }
     ;
     break;}
-case 301:
-#line 2382 "Gmsh.y"
+case 285:
+#line 2021 "Gmsh.y"
 {
-      if(strcmp(yyvsp[-8].c, "PostProcessing")){
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-8].c);
+      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){
+	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-6].c);
 	yyval.d = 0. ;
       }
       else{
-	if(!(pNumOpt = Get_NumberViewOption((int)yyvsp[-4].d, yyvsp[-1].c, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-4].d);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     yyvsp[-8].c, (int)yyvsp[-4].d, yyvsp[-1].c);
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){
+	  vyyerror("Unknown Numeric Option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c);
 	  yyval.d = 0. ;
 	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : yyval.d = (*(double*)pNumOpt -= 1.) ; break ;
-	  case GMSH_FLOAT : yyval.d = (double)(*(float*)pNumOpt -= 1.) ; break ;
-	  case GMSH_LONG : yyval.d = (double)(*(long*)pNumOpt -= 1) ; break ;
-	  case GMSH_INT : yyval.d = (double)(*(int*)pNumOpt -= 1) ; break ;
-	  }
-	}
+	else
+	  yyval.d = pNumOpt((int)yyvsp[-4].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-4].d, GMSH_GET, 0)+yyvsp[0].i);
       }
     ;
     break;}
-case 302:
-#line 2408 "Gmsh.y"
+case 286:
+#line 2039 "Gmsh.y"
 { 
       ListOfDouble2_L = List_Create(2,1,sizeof(double)) ; 
       for(d=yyvsp[-2].d ; (yyvsp[-2].d<yyvsp[0].d)?(d<=yyvsp[0].d):(d>=yyvsp[0].d) ; (yyvsp[-2].d<yyvsp[0].d)?(d+=1.):(d-=1.)) 
 	List_Add(ListOfDouble2_L, &d) ;
     ;
     break;}
-case 303:
-#line 2414 "Gmsh.y"
+case 287:
+#line 2045 "Gmsh.y"
 {
       ListOfDouble2_L = List_Create(2,1,sizeof(double)) ; 
       if(!yyvsp[0].d || (yyvsp[-4].d<yyvsp[-2].d && yyvsp[0].d<0) || (yyvsp[-4].d>yyvsp[-2].d && yyvsp[0].d>0)){
@@ -5612,127 +5075,125 @@ case 303:
 	  List_Add(ListOfDouble2_L, &d) ;
    ;
     break;}
-case 304:
-#line 2428 "Gmsh.y"
+case 288:
+#line 2059 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ;
-      //??? Avec ce qui suit, bison se plante sur DEC
-      //for(i=0 ; i<5 ; i++) $$[i] = $1[i];
     ;
     break;}
-case 305:
-#line 2434 "Gmsh.y"
+case 289:
+#line 2063 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = -yyvsp[0].v[i] ;
     ;
     break;}
-case 306:
-#line 2438 "Gmsh.y"
+case 290:
+#line 2067 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
-case 307:
-#line 2442 "Gmsh.y"
+case 291:
+#line 2071 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ;
     ;
     break;}
-case 308:
-#line 2446 "Gmsh.y"
+case 292:
+#line 2075 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ;
     ;
     break;}
-case 309:
-#line 2452 "Gmsh.y"
+case 293:
+#line 2081 "Gmsh.y"
 { 
       yyval.v[0]=yyvsp[-9].d;  yyval.v[1]=yyvsp[-7].d;  yyval.v[2]=yyvsp[-5].d;  yyval.v[3]=yyvsp[-3].d; yyval.v[4]=yyvsp[-1].d;
     ;
     break;}
-case 310:
-#line 2456 "Gmsh.y"
+case 294:
+#line 2085 "Gmsh.y"
 { 
       yyval.v[0]=yyvsp[-7].d;  yyval.v[1]=yyvsp[-5].d;  yyval.v[2]=yyvsp[-3].d;  yyval.v[3]=yyvsp[-1].d; yyval.v[4]=1.0;
     ;
     break;}
-case 311:
-#line 2460 "Gmsh.y"
+case 295:
+#line 2089 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;  yyval.v[1]=yyvsp[-3].d;  yyval.v[2]=yyvsp[-1].d;  yyval.v[3]=0.0; yyval.v[4]=1.0;
     ;
     break;}
-case 312:
-#line 2464 "Gmsh.y"
+case 296:
+#line 2093 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;  yyval.v[1]=yyvsp[-3].d;  yyval.v[2]=yyvsp[-1].d;  yyval.v[3]=0.0; yyval.v[4]=1.0;
     ;
     break;}
-case 313:
-#line 2471 "Gmsh.y"
+case 297:
+#line 2100 "Gmsh.y"
 {
     ;
     break;}
-case 314:
-#line 2474 "Gmsh.y"
+case 298:
+#line 2103 "Gmsh.y"
 {
     ;
     break;}
-case 315:
-#line 2480 "Gmsh.y"
+case 299:
+#line 2109 "Gmsh.y"
 {
     ;
     break;}
-case 316:
-#line 2483 "Gmsh.y"
+case 300:
+#line 2112 "Gmsh.y"
 {
     ;
     break;}
-case 317:
-#line 2489 "Gmsh.y"
+case 301:
+#line 2118 "Gmsh.y"
 {
     ;
     break;}
-case 318:
-#line 2492 "Gmsh.y"
+case 302:
+#line 2121 "Gmsh.y"
 {
        yyval.l=ListOfListOfDouble_L;
     ;
     break;}
-case 319:
-#line 2496 "Gmsh.y"
+case 303:
+#line 2125 "Gmsh.y"
 {
        yyval.l=ListOfListOfDouble_L;
     ;
     break;}
-case 320:
-#line 2503 "Gmsh.y"
+case 304:
+#line 2132 "Gmsh.y"
 {
       ListOfListOfDouble_L = List_Create(2,1,sizeof(List_T*)) ;
       List_Add(ListOfListOfDouble_L, &(yyvsp[0].l)) ;
     ;
     break;}
-case 321:
-#line 2508 "Gmsh.y"
+case 305:
+#line 2137 "Gmsh.y"
 {
       List_Add(ListOfListOfDouble_L, &(yyvsp[0].l)) ;
     ;
     break;}
-case 322:
-#line 2515 "Gmsh.y"
+case 306:
+#line 2144 "Gmsh.y"
 {
     ;
     break;}
-case 323:
-#line 2518 "Gmsh.y"
+case 307:
+#line 2147 "Gmsh.y"
 {
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
       yyval.l=ListOfDouble_L;
     ;
     break;}
-case 324:
-#line 2524 "Gmsh.y"
+case 308:
+#line 2153 "Gmsh.y"
 {
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5748,21 +5209,21 @@ case 324:
       yyval.l=ListOfDouble_L;
     ;
     break;}
-case 325:
-#line 2539 "Gmsh.y"
+case 309:
+#line 2168 "Gmsh.y"
 {
       yyval.l=ListOfDouble_L;
     ;
     break;}
-case 326:
-#line 2547 "Gmsh.y"
+case 310:
+#line 2176 "Gmsh.y"
 {
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
     ;
     break;}
-case 327:
-#line 2552 "Gmsh.y"
+case 311:
+#line 2181 "Gmsh.y"
 { 
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       for(i=0 ; i<List_Nbr(ListOfDouble2_L) ; i++){
@@ -5772,8 +5233,8 @@ case 327:
       List_Delete(ListOfDouble2_L);
     ;
     break;}
-case 328:
-#line 2561 "Gmsh.y"
+case 312:
+#line 2190 "Gmsh.y"
 { 
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5786,14 +5247,14 @@ case 328:
       }
     ;
     break;}
-case 329:
-#line 2573 "Gmsh.y"
+case 313:
+#line 2202 "Gmsh.y"
 {
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
     ;
     break;}
-case 330:
-#line 2577 "Gmsh.y"
+case 314:
+#line 2206 "Gmsh.y"
 {
       for(i=0 ; i<List_Nbr(ListOfDouble2_L) ; i++){
 	List_Read(ListOfDouble2_L, i, &d) ;
@@ -5802,8 +5263,8 @@ case 330:
       List_Delete(ListOfDouble2_L);
     ;
     break;}
-case 331:
-#line 2585 "Gmsh.y"
+case 315:
+#line 2214 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-2].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5815,79 +5276,75 @@ case 331:
       }
     ;
     break;}
-case 332:
-#line 2599 "Gmsh.y"
+case 316:
+#line 2228 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
-case 333:
-#line 2603 "Gmsh.y"
+case 317:
+#line 2232 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
-case 334:
-#line 2607 "Gmsh.y"
+case 318:
+#line 2236 "Gmsh.y"
 {
       yyval.u = Get_ColorForString(ColorString, (int)yyvsp[-1].d, yyvsp[-3].c, &flag);
       if(flag) vyyerror("Unknown Color '%s'", yyvsp[-3].c);
     ;
     break;}
-case 335:
-#line 2612 "Gmsh.y"
+case 319:
+#line 2241 "Gmsh.y"
 {
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
       if(flag) vyyerror("Unknown Color '%s'", yyvsp[0].c);
     ;
     break;}
-case 336:
-#line 2617 "Gmsh.y"
+case 320:
+#line 2246 "Gmsh.y"
 {
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){
 	vyyerror("Unknown Color Option Class '%s'", yyvsp[-4].c);
 	yyval.u = 0 ;
       }
       else{
-	if(!(pColOpt = Get_ColorOption(yyvsp[0].c, pColCat))){
-	  vyyerror("Unknown Color Option '%s.%s'", yyvsp[-4].c, yyvsp[0].c);
+	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[0].c, pColCat))){
+	  vyyerror("Unknown Color Option '%s.Color.%s'", yyvsp[-4].c, yyvsp[0].c);
 	  yyval.u = 0 ;
 	}
 	else{
-	  yyval.u = *pColOpt ;
+	  yyval.u = pColOpt(0,GMSH_GET,0) ;
 	}
       }
     ;
     break;}
-case 337:
-#line 2636 "Gmsh.y"
+case 321:
+#line 2265 "Gmsh.y"
 {
       yyval.l = ListOfColor_L;
     ;
     break;}
-case 338:
-#line 2640 "Gmsh.y"
+case 322:
+#line 2269 "Gmsh.y"
 {
       if(!ListOfColor_L)
 	ListOfColor_L = List_Create(256,10,sizeof(unsigned int)) ;
       else
 	List_Reset(ListOfColor_L) ;
-      if(strcmp(yyvsp[-7].c, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", yyvsp[-7].c);
+      ColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
+      if(!ct)
+	vyyerror("View[%d] does not exist", (int)yyvsp[-3].d);
       else{
-	ColorTable *ct = Get_ColorTableViewOption((int)yyvsp[-3].d);
-	if(!ct)
-	  vyyerror("PostProcessing View %d does not Exist", (int)yyvsp[-3].d);
-	else{
-	  for(i=0 ; i<ct->size ; i++) 
-	    List_Add(ListOfColor_L, &ct->table[i]);
-	}
+	for(i=0 ; i<ct->size ; i++) 
+	  List_Add(ListOfColor_L, &ct->table[i]);
       }
       yyval.l = ListOfColor_L;
     ;
     break;}
-case 339:
-#line 2662 "Gmsh.y"
+case 323:
+#line 2287 "Gmsh.y"
 {
       if(!ListOfColor_L)
 	ListOfColor_L = List_Create(256,10,sizeof(unsigned int)) ;
@@ -5896,26 +5353,26 @@ case 339:
       List_Add(ListOfColor_L, &(yyvsp[0].u)) ;
     ;
     break;}
-case 340:
-#line 2670 "Gmsh.y"
+case 324:
+#line 2295 "Gmsh.y"
 {
       List_Add(ListOfColor_L, &(yyvsp[0].u)) ;
     ;
     break;}
-case 341:
-#line 2677 "Gmsh.y"
+case 325:
+#line 2302 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
-case 342:
-#line 2681 "Gmsh.y"
+case 326:
+#line 2306 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
-case 343:
-#line 2685 "Gmsh.y"
+case 327:
+#line 2310 "Gmsh.y"
 {
       for(i = 0 ; i<List_Nbr(ListOfDouble_L) ; i++){
 	if(!i){
@@ -5941,7 +5398,7 @@ case 343:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/share/bison.simple"
+#line 543 "/usr/lib/bison.simple"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -6161,7 +5618,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 2709 "Gmsh.y"
+#line 2334 "Gmsh.y"
 
 
 void InitSymbols(void){
diff --git a/Parser/Gmsh.tab.cpp.h b/Parser/Gmsh.tab.cpp.h
index 4a4d722c1b66665aab40ec8d45bedb6bea28d804..45db0a28c48c659082cf67d45d1e8af116bd2d98 100644
--- a/Parser/Gmsh.tab.cpp.h
+++ b/Parser/Gmsh.tab.cpp.h
@@ -68,28 +68,28 @@ typedef union {
 #define	tDelete	315
 #define	tCoherence	316
 #define	tIntersect	317
-#define	tView	318
-#define	tAttractor	319
-#define	tLayers	320
-#define	tScalarTetrahedron	321
-#define	tVectorTetrahedron	322
-#define	tTensorTetrahedron	323
-#define	tScalarTriangle	324
-#define	tVectorTriangle	325
-#define	tTensorTriangle	326
-#define	tScalarLine	327
-#define	tVectorLine	328
-#define	tTensorLine	329
-#define	tScalarPoint	330
-#define	tVectorPoint	331
-#define	tTensorPoint	332
-#define	tBSpline	333
-#define	tNurbs	334
-#define	tOrder	335
-#define	tWith	336
-#define	tBounds	337
-#define	tKnots	338
-#define	tColor	339
+#define	tAttractor	318
+#define	tLayers	319
+#define	tScalarTetrahedron	320
+#define	tVectorTetrahedron	321
+#define	tTensorTetrahedron	322
+#define	tScalarTriangle	323
+#define	tVectorTriangle	324
+#define	tTensorTriangle	325
+#define	tScalarLine	326
+#define	tVectorLine	327
+#define	tTensorLine	328
+#define	tScalarPoint	329
+#define	tVectorPoint	330
+#define	tTensorPoint	331
+#define	tBSpline	332
+#define	tNurbs	333
+#define	tOrder	334
+#define	tWith	335
+#define	tBounds	336
+#define	tKnots	337
+#define	tColor	338
+#define	tColorTable	339
 #define	tFor	340
 #define	tIn	341
 #define	tEndFor	342
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index bb1195dbe95b1e4240d5dace57fcb8298e65c71a..82d8f6c3877d6ddd35181e78b3645408c15773e1 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,6 +1,6 @@
 %{ 
 
-// $Id: Gmsh.y,v 1.62 2001-02-08 16:32:15 geuzaine Exp $
+// $Id: Gmsh.y,v 1.63 2001-02-12 17:38:03 geuzaine Exp $
 
 #include <stdarg.h>
 
@@ -11,6 +11,7 @@
 #include "CAD.h"
 #include "DataBase.h"
 #include "Mesh.h"
+#include "Draw.h"
 #include "Create.h"
 #include "Views.h"
 #include "StepGeomDatabase.h"
@@ -27,11 +28,10 @@
 #include <alloca.h>
 #endif
 
-
-
 int     Force_ViewNumber = 0 ;
 List_T *Symbol_L;
 
+extern Context_T  CTX;
 extern Mesh      *THEM;
 extern Post_View *ActualView;
 
@@ -53,12 +53,12 @@ static ExtrudeParams  extr;
 static List_T         *ListOfDouble_L,*ListOfDouble2_L;
 static List_T         *ListOfListOfDouble_L, *ListOfColor_L=NULL;
 static char           *str;
-static void           *pNumOpt;
-static char          **pStrOpt, *pStrViewOpt;
-static unsigned int   *pColOpt;
 static StringXString  *pStrCat;
 static StringXNumber  *pNumCat;
 static StringXColor   *pColCat;
+static double         (*pNumOpt)(int num, int action, double value);
+static char*          (*pStrOpt)(int num, int action, char *value);
+static unsigned int   (*pColOpt)(int num, int action, unsigned int value);
 
 char *strsave(char *ptr);
 void  yyerror (char *s);
@@ -89,13 +89,13 @@ void  skip_until (char *skip, char *until);
 %token tUsing tBump tProgression
 %token tRotate tTranslate tSymmetry tDilate tExtrude tDuplicata
 %token tLoop tRecombine tDelete tCoherence tIntersect
-%token tView tAttractor tLayers
+%token tAttractor tLayers
 %token tScalarTetrahedron tVectorTetrahedron tTensorTetrahedron
 %token tScalarTriangle tVectorTriangle tTensorTriangle
 %token tScalarLine tVectorLine tTensorLine
 %token tScalarPoint tVectorPoint tTensorPoint
 %token tBSpline tNurbs tOrder tWith tBounds tKnots
-%token tColor tFor tIn tEndFor tIf tEndIf tExit
+%token tColor tColorTable tFor tIn tEndFor tIf tEndIf tExit
 %token tReturn tCall tFunction tMesh
 
 %token tB_SPLINE_SURFACE_WITH_KNOTS
@@ -114,7 +114,7 @@ void  skip_until (char *skip, char *until);
 
 %type <d> FExpr FExpr_Single SignedDouble
 %type <v> VExpr VExpr_Single
-%type <i> BoolExpr
+%type <i> BoolExpr, NumericAffectation, NumericIncrement
 %type <u> ColorExpr
 %type <c> StringExpr
 %type <l> ListOfShapes Duplicata Transform MultipleShape
@@ -392,31 +392,29 @@ GeomFormat :
 Printf :
     tPrintf '(' tBIGSTR ')' tEND
     {
-      fprintf(stderr, $3); 
-      fprintf(stderr, "\n"); 
+      Msg(DIRECT, $3);
     }
   | tPrintf '(' tBIGSTR ',' RecursiveListOfDouble ')' tEND
     {
       for(i = 0 ; i<List_Nbr(ListOfDouble_L) ; i++){
 	if(!i){
 	  str = strtok($3, "%");
-	  fprintf(stderr, str); 
+	  strcpy(tmpstring, str); 
 	}
 	str = strtok(NULL, "%");
 	if(str){
-	  strcpy(tmpstring, "%");
-	  strcat(tmpstring, str);
-	  fprintf(stderr, tmpstring, *(double*)List_Pointer(ListOfDouble_L,i)); 
+	  strcpy(tmpstring2, "%");
+	  strcat(tmpstring2, str);
+	  sprintf(tmpstring3, tmpstring2, *(double*)List_Pointer(ListOfDouble_L,i)); 
+	  strcat(tmpstring, tmpstring3);
 	}
 	else{
-	  fprintf(stderr, "\n"); 
 	  vyyerror("Missing %d Parameter(s) in Printf Format",
 		   List_Nbr(ListOfDouble_L)-i);
 	  break ;
 	}
       }
-      if(!yyerrorstate)
-	fprintf(stderr, "\n"); 
+      Msg(DIRECT, tmpstring);
     }
 ;
 
@@ -425,20 +423,22 @@ Printf :
    ------------ */
 
 View :
-    tView tBIGSTR '{' Views '}' tEND
+    tSTRING tBIGSTR '{' Views '}' tEND
     { 
-      EndView(1, Force_ViewNumber,yyname,$2,0.,0.,0.); 
+      if(!strcmp($1, "View"))
+	EndView(1, Force_ViewNumber, yyname, $2); 
     }
-  | tView tBIGSTR tSTRING VExpr '{' Views '}' tEND
+  | tSTRING tBIGSTR tSTRING VExpr '{' Views '}' tEND
     {
-      EndView(1, Force_ViewNumber,yyname,$2,$4[0],$4[1],$4[2]);
+      if(!strcmp($1, "View"))
+	EndView(1, Force_ViewNumber, yyname, $2);
     }  
 ;
 
 Views :
     /* none */
     {
-      BeginView(1); 
+      BeginView(1, Force_ViewNumber); 
     }
   | Views ScalarPoint
   | Views VectorPoint
@@ -733,34 +733,82 @@ TensorTetrahedron :
     A F F E C T A T I O N
    ----------------------- */
 
+NumericAffectation :
+    tAFFECT        { $$ = 0 ; }
+  | tAFFECTPLUS    { $$ = 1 ; }
+  | tAFFECTMINUS   { $$ = 2 ; }
+  | tAFFECTTIMES   { $$ = 3 ; }
+  | tAFFECTDIVIDE  { $$ = 4 ; }
+
+NumericIncrement :
+    tPLUSPLUS      { $$ = 1 ; }
+  | tMINUSMINUS    { $$ = -1 ; }
+
 Affectation :
 
   /* -------- Variables -------- */ 
 
-    tSTRING tAFFECT FExpr tEND
+    tSTRING NumericAffectation FExpr tEND
     {
       TheSymbol.Name = $1;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){
 	TheSymbol.val = List_Create(1,1,sizeof(double));
-	List_Put(TheSymbol.val, 0, &$3);
-	List_Add(Symbol_L, &TheSymbol);
+	if(!$2){
+	  List_Put(TheSymbol.val, 0, &$3);
+	  List_Add(Symbol_L, &TheSymbol);
+	}
+	else
+	  vyyerror("Unknown Variable '%s'", $1) ;
       }
       else{
-	List_Write(pSymbol->val, 0, &$3);
+	pd = (double*)List_Pointer_Fast(pSymbol->val, 0) ; 
+	switch($2){
+	case 0 : *pd = $3; break ;
+	case 1 : *pd += $3 ; break ;
+	case 2 : *pd -= $3 ; break ;
+	case 3 : *pd *= $3 ; break ;
+	case 4 : 
+	  if($3) *pd /= $3 ; 
+	  else vyyerror("Division by Zero in '%s /= %g'", $1, $3);
+	  break;
+	}
       }
     }
-  | tSTRING '[' FExpr ']' tAFFECT FExpr tEND
+
+  | tSTRING '[' FExpr ']' NumericAffectation FExpr tEND
     {
       TheSymbol.Name = $1;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){
 	TheSymbol.val = List_Create(5,5,sizeof(double));
-	List_Put(TheSymbol.val, (int)$3, &$6);
-	List_Add(Symbol_L, &TheSymbol);
+	if(!$5){
+	  List_Put(TheSymbol.val, (int)$3, &$6);
+	  List_Add(Symbol_L, &TheSymbol);
+	}
+	else
+	  vyyerror("Unknown Variable '%s'", $1) ;
       }
       else{
-	List_Put(pSymbol->val, (int)$3, &$6);
+	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))){
+	  switch($5){
+	  case 0 : *pd = $6; break ;
+	  case 1 : *pd += $6 ; break ;
+	  case 2 : *pd -= $6 ; break ;
+	  case 3 : *pd *= $6 ; break ;
+	  case 4 : 
+	    if($6) *pd /= $6 ; 
+	    else vyyerror("Division by Zero in '%s[%d] /= %g'", $1, (int)$3, $6);
+	    break;
+	  }
+	}
+	else{
+	  if(!$5)
+	    List_Put(pSymbol->val, (int)$3, &$6);
+	  else
+	    vyyerror("Uninitialized Variable '%s[%d]'", $1, (int)$3) ;	  
+	}
       }
     }
+
   | tSTRING '[' ']' tAFFECT ListOfDouble tEND
     {
       TheSymbol.Name = $1;
@@ -774,135 +822,28 @@ Affectation :
 	List_Copy($5, pSymbol->val);
       }
     }
-  | tSTRING tPLUSPLUS tEND
-    {
-      TheSymbol.Name = $1 ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", $1) ;
-      else{
-	*(double*)List_Pointer_Fast(pSymbol->val, 0) += 1.0 ;
-      }
-    }
-  | tSTRING '[' FExpr ']' tPLUSPLUS tEND
-    {
-      TheSymbol.Name = $1 ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", $1) ;
-      else{
-	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	  *pd += 1.0 ;
-	else
-	  vyyerror("Uninitialized Variable '%s[%d]'", $1, (int)$3) ;
-      }
-    }
-  | tSTRING tMINUSMINUS tEND
-    {
-      TheSymbol.Name = $1 ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", $1) ;
-      else
-	*(double*)List_Pointer_Fast(pSymbol->val, 0) -= 1. ;
-    }
-  | tSTRING '[' FExpr ']' tMINUSMINUS tEND
-    {
-      TheSymbol.Name = $1 ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", $1) ;
-      else{
-	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	  *pd -= 1.0 ;
-	else
-	  vyyerror("Uninitialized Variable '%s[%d]'", $1, (int)$3) ;
-      }
-    }
-  | tSTRING tAFFECTPLUS FExpr tEND
-    {
-      TheSymbol.Name = $1 ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", $1) ;
-      else
-	*(double*)List_Pointer_Fast(pSymbol->val, 0) += $3 ;
-    }
-  | tSTRING '[' FExpr ']' tAFFECTPLUS FExpr tEND
-    {
-      TheSymbol.Name = $1 ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", $1) ;
-      else{
-	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	  *pd += $6 ;
-	else
-	  vyyerror("Uninitialized Variable '%s[%d]'", $1, (int)$3) ;
-      }
-    }
-  | tSTRING tAFFECTMINUS FExpr tEND
-    {
-      TheSymbol.Name = $1 ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", $1) ;
-      else
-	*(double*)List_Pointer_Fast(pSymbol->val, 0) -= $3 ;
-    }
-  | tSTRING '[' FExpr ']' tAFFECTMINUS FExpr tEND
-    {
-      TheSymbol.Name = $1 ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", $1) ;
-      else{
-	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	  *pd -= $6 ;
-	else
-	  vyyerror("Uninitialized Variable '%s[%d]'", $1, (int)$3) ;
-      }
-    }
-  | tSTRING tAFFECTTIMES FExpr tEND
+
+  | tSTRING NumericIncrement tEND
     {
-      TheSymbol.Name = $1 ;
+      TheSymbol.Name = $1;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", $1) ;
+	vyyerror("Unknown Variable '%s'", $1) ; 
       else
-	*(double*)List_Pointer_Fast(pSymbol->val, 0) *= $3 ;
+	*(double*)List_Pointer_Fast(pSymbol->val, 0) += $2; 
     }
-  | tSTRING '[' FExpr ']' tAFFECTTIMES FExpr tEND
+
+  | tSTRING '[' FExpr ']' NumericIncrement tEND
     {
       TheSymbol.Name = $1 ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	vyyerror("Unknown Variable '%s'", $1) ;
+	vyyerror("Unknown Variable '%s'", $1) ; 
       else{
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	  *pd *= $6 ;
+	  *pd += $5 ;
 	else
 	  vyyerror("Uninitialized Variable '%s[%d]'", $1, (int)$3) ;
       }
     }
-  | tSTRING tAFFECTDIVIDE FExpr tEND
-    {
-      if(!$3)
-	vyyerror("Division by Zero in '%s /= %g'", $1, $3);
-      else{
-	TheSymbol.Name = $1 ;
-	if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	  vyyerror("Unknown Variable '%s'", $1) ;
-	else
-	  *(double*)List_Pointer_Fast(pSymbol->val, 0) /= $3 ;
-      }
-    }
-  | tSTRING '[' FExpr ']' tAFFECTDIVIDE FExpr tEND
-    {
-      if(!$6)
-	vyyerror("Division by Zero in '%s[%d] /= %g'", $1, (int)$3, $6);
-      else{
-	TheSymbol.Name = $1 ;
-	if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
-	  vyyerror("Unknown Variable '%s'", $1) ;
-	else{
-	  if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	    *pd /= $6 ;
-	  else
-	    vyyerror("Uninitialized Variable '%s[%d]'", $1, (int)$3) ;
-	}
-      }
-    }
 
   /* -------- Option Strings -------- */ 
 
@@ -911,338 +852,136 @@ Affectation :
       if(!(pStrCat = Get_StringOptionCategory($1)))
 	vyyerror("Unknown String Option Class '%s'", $1);
       else{
-	if(!(pStrOpt = Get_StringOption($3, pStrCat)))
+	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($3, pStrCat)))
 	  vyyerror("Unknown String Option '%s.%s'", $1, $3);
-	else{
-	  *pStrOpt = $5 ;
-	}
+	else
+	  pStrOpt(0,GMSH_SET|GMSH_GUI,$5) ;
       }
     }
 
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING tAFFECT tBIGSTR tEND 
-    {
-      if(strcmp($1, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", $1);
+  | tSTRING '[' FExpr ']' '.' tSTRING tAFFECT tBIGSTR tEND 
+    { 
+      if(!(pStrCat = Get_StringOptionCategory($1)))
+	vyyerror("Unknown String Option Class '%s'", $1);
       else{
-	if(!(pStrViewOpt = Get_StringViewOption((int)$5, $8, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	  else	    vyyerror("Unknown String Option '%s.View[%d].%s'", 
-			     $1, (int)$5, $8);
-	}
-	else{
-	  strcpy(pStrViewOpt, $10) ;
-	}
+	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($6, pStrCat)))
+	  vyyerror("Unknown String Option '%s[%d].%s'", $1, (int)$3, $6);
+	else
+	  pStrOpt((int)$3,GMSH_SET|GMSH_GUI,$8) ;
       }
     }
 
   /* -------- Option Numbers -------- */ 
 
-  | tSTRING '.' tSTRING tAFFECT FExpr tEND 
+  | tSTRING '.' tSTRING NumericAffectation FExpr tEND 
     {
       if(!(pNumCat = Get_NumberOptionCategory($1)))
 	vyyerror("Unknown Numeric Option Class '%s'", $1);
       else{
-	if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
+	if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat)))
 	  vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
 	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt = $5 ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt = (float)$5 ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt = (long)$5 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt = (int)$5 ; break ;
-	  }
-	}
-      }
-    }
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING tAFFECT FExpr tEND 
-    {
-      if(strcmp($1, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", $1);
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)$5, $8, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     $1, (int)$5, $8);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt = $10 ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt = (float)$10 ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt = (long)$10 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt = (int)$10 ; break ;
+	  switch($4){
+	  case 0 : d = $5 ; break ;
+	  case 1 : d = pNumOpt(0,GMSH_GET,0) + $5 ; break ;
+	  case 2 : d = pNumOpt(0,GMSH_GET,0) - $5 ; break ;
+	  case 3 : d = pNumOpt(0,GMSH_GET,0) * $5 ; break ;
+	  case 4 : 
+	    if($5) d = pNumOpt(0,GMSH_GET,0) / $5 ; 
+	    else vyyerror("Division by Zero in '%s.%s /= %g'", $1, $3, $5);
+	    break;
 	  }
+	  pNumOpt(0,GMSH_SET|GMSH_GUI, d) ;
 	}
       }
     }
 
-  | tSTRING '.' tSTRING tAFFECTPLUS FExpr tEND 
+  | tSTRING '[' FExpr ']' '.' tSTRING NumericAffectation FExpr tEND 
     {
       if(!(pNumCat = Get_NumberOptionCategory($1)))
 	vyyerror("Unknown Numeric Option Class '%s'", $1);
       else{
-	if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
-	  vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($6, pNumCat)))
+	  vyyerror("Unknown Numeric Option '%s[%d].%s'", $1, (int)$3, $6);
 	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt += $5 ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt += (float)$5 ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt += (long)$5 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt += (int)$5 ; break ;
-	  }
-	}
-      }
-    }
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING tAFFECTPLUS FExpr tEND 
-    {
-      if(strcmp($1, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", $1);
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)$5, $8, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     $1, (int)$5, $8);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt += $10 ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt += (float)$10 ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt += (long)$10 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt += (int)$10 ; break ;
+	  switch($7){
+	  case 0 : d = $8; break ;
+	  case 1 : d = pNumOpt((int)$3,GMSH_GET,0) + $8 ; break ;
+	  case 2 : d = pNumOpt((int)$3,GMSH_GET,0) - $8 ; break ;
+	  case 3 : d = pNumOpt((int)$3,GMSH_GET,0) * $8 ; break ;
+	  case 4 : 
+	    if($8) d = pNumOpt((int)$3,GMSH_GET,0) / $8 ;
+	    else vyyerror("Division by Zero in '%s[%d].%s /= %g'", 
+			  $1, (int)$3, $6, $8);
+	    break;
 	  }
+	  pNumOpt((int)$3,GMSH_SET|GMSH_GUI,d) ;
 	}
       }
     }
 
-  | tSTRING '.' tSTRING tAFFECTMINUS FExpr tEND 
+  | tSTRING '.' tSTRING NumericIncrement tEND 
     {
       if(!(pNumCat = Get_NumberOptionCategory($1)))
 	vyyerror("Unknown Numeric Option Class '%s'", $1);
       else{
-	if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($3, pNumCat)))
 	  vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt -= $5 ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt -= (float)$5 ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt -= (long)$5 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt -= (int)$5 ; break ;
-	  }
-	}
-      }
-    }
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING tAFFECTMINUS FExpr tEND 
-    {
-      if(strcmp($1, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", $1);
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)$5, $8, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     $1, (int)$5, $8);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt -= $10 ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt -= (float)$10 ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt -= (long)$10 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt -= (int)$10 ; break ;
-	  }
-	}
+	else
+	  pNumOpt(0,GMSH_SET|GMSH_GUI,pNumOpt(0,GMSH_GET,0)+$4) ;
       }
     }
 
-  | tSTRING '.' tSTRING tAFFECTTIMES FExpr tEND 
+  | tSTRING '[' FExpr ']' '.' tSTRING NumericIncrement tEND 
     {
       if(!(pNumCat = Get_NumberOptionCategory($1)))
 	vyyerror("Unknown Numeric Option Class '%s'", $1);
       else{
-	if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
-	  vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt *= $5 ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt *= (float)$5 ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt *= (long)$5 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt *= (int)$5 ; break ;
-	  }
-	}
-      }
-    }
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING tAFFECTTIMES FExpr tEND 
-    {
-      if(strcmp($1, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", $1);
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)$5, $8, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     $1, (int)$5, $8);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt *= $10 ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt *= (float)$10 ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt *= (long)$10 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt *= (int)$10 ; break ;
-	  }
-	}
-      }
-    }
-
-  | tSTRING '.' tSTRING tAFFECTDIVIDE FExpr tEND 
-    {
-      if(!$5)
-	vyyerror("Division by Zero in '%s.%s /= %g'", $1, $3, $5);
-      else{
-	if(!(pNumCat = Get_NumberOptionCategory($1)))
-	  vyyerror("Unknown Numeric Option Class '%s'", $1);
-	else{
-	  if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
-	    vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
-	  else{
-	    switch(i){
-	    case GMSH_DOUBLE : *(double*)pNumOpt /= $5 ; break ;
-	    case GMSH_FLOAT : *(float*)pNumOpt /= (float)$5 ; break ;
-	    case GMSH_LONG : *(long*)pNumOpt /= (long)$5 ; break ;
-	    case GMSH_INT : *(int*)pNumOpt /= (int)$5 ; break ;
-	    }
-	  }
-	}
-      }
-    }
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING tAFFECTDIVIDE FExpr tEND 
-    {
-      if(!$10)
-	vyyerror("Division by Zero in '%s.View[%d].%s /= %g'", 
-		 $1, (int)$5, $8, $10);
-      else{
-	if(strcmp($1, "PostProcessing"))
-	  vyyerror("Unknown View Option Class '%s'", $1);
-	else{
-	  if(!(pNumOpt = Get_NumberViewOption((int)$5, $8, &i))){
-	    if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	    else      vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			       $1, (int)$5, $8);
-	  }
-	  else{
-	    switch(i){
-	    case GMSH_DOUBLE : *(double*)pNumOpt /= $10 ; break ;
-	    case GMSH_FLOAT : *(float*)pNumOpt /= (float)$10 ; break ;
-	    case GMSH_LONG : *(long*)pNumOpt /= (long)$10 ; break ;
-	    case GMSH_INT : *(int*)pNumOpt /= (int)$10 ; break ;
-	    }
-	  }
-	}
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($6, pNumCat)))
+	  vyyerror("Unknown Numeric Option '%s[%d].%s'", $1, (int)$3, $6);
+	else
+	  pNumOpt((int)$3,GMSH_SET|GMSH_GUI,pNumOpt((int)$3,GMSH_GET,0)+$7) ;
       }
     }
 
-  | tSTRING '.' tSTRING tPLUSPLUS tEND 
-    {
-      if(!(pNumCat = Get_NumberOptionCategory($1)))
-	vyyerror("Unknown Numeric Option Class '%s'", $1);
-      else{
-	if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
-	  vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt += 1. ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt += 1. ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt += 1 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt += 1 ; break ;
-	  }
-	}
-      }
-    }
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING tPLUSPLUS FExpr tEND 
-    {
-      if(strcmp($1, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", $1);
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)$5, $8, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     $1, (int)$5, $8);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt += 1. ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt += 1. ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt += 1 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt += 1 ; break ;
-	  }
-	}
-      }
-    }
+  /* -------- Option Colors -------- */ 
 
-  | tSTRING '.' tSTRING tMINUSMINUS tEND 
-    {
-      if(!(pNumCat = Get_NumberOptionCategory($1)))
-	vyyerror("Unknown Numeric Option Class '%s'", $1);
-      else{
-	if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
-	  vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt -= 1. ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt -= 1. ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt -= 1 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt -= 1 ; break ;
-	  }
-	}
-      }
-    }
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING tMINUSMINUS FExpr tEND 
+  | tSTRING '.' tColor '.' tSTRING tAFFECT ColorExpr tEND 
     {
-      if(strcmp($1, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", $1);
+      if(!(pColCat = Get_ColorOptionCategory($1)))
+	vyyerror("Unknown Color Option Class '%s'", $1);
       else{
-	if(!(pNumOpt = Get_NumberViewOption((int)$5, $8, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     $1, (int)$5, $8);
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : *(double*)pNumOpt -= 1. ; break ;
-	  case GMSH_FLOAT : *(float*)pNumOpt -= 1. ; break ;
-	  case GMSH_LONG : *(long*)pNumOpt -= 1 ; break ;
-	  case GMSH_INT : *(int*)pNumOpt -= 1 ; break ;
-	  }
-	}
+	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption($5, pColCat)))
+	  vyyerror("Unknown Color Option '%s.Color.%s'", $1, $5);
+	else
+	  pColOpt(0,GMSH_SET|GMSH_GUI,$7) ;
       }
     }
 
-  /* -------- Option Colors -------- */ 
-
-  | tSTRING '.' tColor '.' tSTRING tAFFECT ColorExpr tEND 
+  | tSTRING '[' FExpr ']' '.' tColor '.' tSTRING tAFFECT ColorExpr tEND 
     {
       if(!(pColCat = Get_ColorOptionCategory($1)))
 	vyyerror("Unknown Color Option Class '%s'", $1);
       else{
-	if(!(pColOpt = Get_ColorOption($5, pColCat)))
-	  vyyerror("Unknown Color Option '%s.%s'", $1, $5);
-	else{
-	  *pColOpt = $7 ;
-	}
+	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption($8, pColCat)))
+	  vyyerror("Unknown Color Option '%s[%d].Color.%s'", $1, (int)$3, $8);
+	else
+	  pColOpt((int)$3,GMSH_SET|GMSH_GUI,$10) ;
       }
     }
 
-  | tSTRING '.' tView '[' FExpr ']' '.' tColor tAFFECT ListOfColor tEND 
+  | tSTRING '[' FExpr ']' '.' tColorTable tAFFECT ListOfColor tEND 
     {
-      if(strcmp($1, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", $1);
+      ColorTable *ct = Get_ColorTable((int)$3);
+      if(!ct)
+	vyyerror("View[%d] does not exist", (int)$3);
       else{
-	ColorTable *ct = Get_ColorTableViewOption((int)$5);
-	if(!ct)
-	  vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	else{
-	  ct->size = List_Nbr($10);
-	  if(ct->size > COLORTABLE_NBMAX_COLOR)
-	    vyyerror("Too Many (%d>%d) Colors in Post.View[%d].Color", 
-		     ct->size, COLORTABLE_NBMAX_COLOR, (int)$5);
-	  else
-	    for(i=0 ; i<ct->size ; i++) List_Read($10, i, &ct->table[i]);
-	}
+	ct->size = List_Nbr($8);
+	if(ct->size > COLORTABLE_NBMAX_COLOR)
+	  vyyerror("Too Many (%d>%d) Colors in View[%d].ColorTable", 
+		   ct->size, COLORTABLE_NBMAX_COLOR, (int)$3);
+	else
+	  for(i=0 ; i<ct->size ; i++) List_Read($8, i, &ct->table[i]);
       }
     }
 ;
@@ -1601,9 +1340,10 @@ Delete :
 	DeleteShape(TheShape.Type,TheShape.Num);
       }
     }
-    | tDelete tView '[' FExpr ']' tEND
+    | tDelete tSTRING '[' FExpr ']' tEND
       {
-	FreeView((int)$4);
+	if(!strcmp($2, "View"))
+	  FreeView((int)$4);
       }
     | tDelete tMesh tEND
     {
@@ -2178,11 +1918,10 @@ FExpr_Single :
 	vyyerror("Unknown Variable '%s'", $1) ;
 	$$ = 0. ;
       }
-      else{
+      else
 	$$ = *(double*)List_Pointer_Fast(pSymbol->val, 0) ;
-      }
-      //      Free($1);
     }
+
   | tSTRING '[' FExpr ']'
     {
       TheSymbol.Name = $1 ;
@@ -2198,52 +1937,20 @@ FExpr_Single :
 	  $$ = 0. ;
 	}
       }
-      //Free($1);
     }
 
-  | tSTRING tPLUSPLUS
+  | tSTRING NumericIncrement
     {
       TheSymbol.Name = $1 ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
 	vyyerror("Unknown Variable '%s'", $1) ;
 	$$ = 0. ;
       }
-      else{
-	$$ = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += 1.0) ;
-      }
-      //Free($1);
-    }
-  | tSTRING '[' FExpr ']' tPLUSPLUS
-    {
-      TheSymbol.Name = $1 ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
-	vyyerror("Unknown Variable '%s'", $1) ;
-	$$ = 0. ;
-      }
-      else{
-	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	  $$ = (*pd += 1.0) ;
-	else{
-	  vyyerror("Uninitialized Variable '%s[%d]'", $1, (int)$3) ;
-	  $$ = 0. ;
-	}
-      }
-      //Free($1);
+      else
+	$$ = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += $2) ;
     }
 
-  | tSTRING tMINUSMINUS
-    {
-      TheSymbol.Name = $1 ;
-      if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
-	vyyerror("Unknown Variable '%s'", $1) ;
-	$$ = 0. ;
-      }
-      else{
-	$$ = (*(double*)List_Pointer_Fast(pSymbol->val, 0) -= 1.0) ;
-      }
-      //Free($1);
-    }
-  | tSTRING '[' FExpr ']' tMINUSMINUS
+  | tSTRING '[' FExpr ']' NumericIncrement
     {
       TheSymbol.Name = $1 ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -2252,13 +1959,12 @@ FExpr_Single :
       }
       else{
 	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3)))
-	  $$ = (*pd -= 1.0) ;
+	  $$ = (*pd += $5) ;
 	else{
 	  vyyerror("Uninitialized Variable '%s[%d]'", $1, (int)$3) ;
 	  $$ = 0. ;
 	}
       }
-      //Free($1);
     }
 
   /* -------- Option Strings -------- */ 
@@ -2270,131 +1976,60 @@ FExpr_Single :
 	$$ = 0. ;
       }
       else{
-	if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i))){
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($3, pNumCat))){
 	  vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
 	  $$ = 0. ;
 	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : $$ = *(double*)pNumOpt ; break ;
-	  case GMSH_FLOAT : $$ = (double)(*(float*)pNumOpt) ; break ;
-	  case GMSH_LONG : $$ = (double)(*(long*)pNumOpt) ; break ;
-	  case GMSH_INT : $$ = (double)(*(int*)pNumOpt) ; break ;
-	  }
-	}
-      }
-    }
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING
-    {
-      if(strcmp($1, "PostProcessing")){
-	vyyerror("Unknown View Option Class '%s'", $1);
-	$$ = 0. ;
-      }
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)$5, $8, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     $1, (int)$5, $8);
-	  $$ = 0. ;
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : $$ = *(double*)pNumOpt ; break ;
-	  case GMSH_FLOAT : $$ = (double)(*(float*)pNumOpt) ; break ;
-	  case GMSH_LONG : $$ = (double)(*(long*)pNumOpt) ; break ;
-	  case GMSH_INT : $$ = (double)(*(int*)pNumOpt) ; break ;
-	  }
-	}
+	else
+	  $$ = pNumOpt(0, GMSH_GET, 0);
       }
     }
 
-  | tSTRING '.' tSTRING tPLUSPLUS
+  | tSTRING '[' FExpr ']' '.' tSTRING 
     {
       if(!(pNumCat = Get_NumberOptionCategory($1))){
 	vyyerror("Unknown Numeric Option Class '%s'", $1);
 	$$ = 0. ;
       }
       else{
-	if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i))){
-	  vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($6, pNumCat))){
+	  vyyerror("Unknown Numeric Option '%s[%d].%s'", $1, (int)$3, $6);
 	  $$ = 0. ;
 	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : $$ = (*(double*)pNumOpt += 1.) ; break ;
-	  case GMSH_FLOAT : $$ = (double)(*(float*)pNumOpt += 1.) ; break ;
-	  case GMSH_LONG : $$ = (double)(*(long*)pNumOpt += 1) ; break ;
-	  case GMSH_INT : $$ = (double)(*(int*)pNumOpt += 1) ; break ;
-	  }
-	}
-      }
-    }
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING tPLUSPLUS
-    {
-      if(strcmp($1, "PostProcessing")){
-	vyyerror("Unknown View Option Class '%s'", $1);
-	$$ = 0. ;
-      }
-      else{
-	if(!(pNumOpt = Get_NumberViewOption((int)$5, $8, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     $1, (int)$5, $8);
-	  $$ = 0. ;
-	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : $$ = (*(double*)pNumOpt += 1.) ; break ;
-	  case GMSH_FLOAT : $$ = (double)(*(float*)pNumOpt += 1.) ; break ;
-	  case GMSH_LONG : $$ = (double)(*(long*)pNumOpt += 1) ; break ;
-	  case GMSH_INT : $$ = (double)(*(int*)pNumOpt += 1) ; break ;
-	  }
-	}
+	else
+	  $$ = pNumOpt((int)$3, GMSH_GET, 0);
       }
     }
 
-  | tSTRING '.' tSTRING tMINUSMINUS
+  | tSTRING '.' tSTRING NumericIncrement
     {
       if(!(pNumCat = Get_NumberOptionCategory($1))){
 	vyyerror("Unknown Numeric Option Class '%s'", $1);
 	$$ = 0. ;
       }
       else{
-	if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i))){
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($3, pNumCat))){
 	  vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
 	  $$ = 0. ;
 	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : $$ = (*(double*)pNumOpt -= 1.) ; break ;
-	  case GMSH_FLOAT : $$ = (double)(*(float*)pNumOpt -= 1.) ; break ;
-	  case GMSH_LONG : $$ = (double)(*(long*)pNumOpt -= 1) ; break ;
-	  case GMSH_INT : $$ = (double)(*(int*)pNumOpt -= 1) ; break ;
-	  }
-	}
+	else
+	  $$ = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4);
       }
     }
-  | tSTRING '.' tView '[' FExpr ']' '.' tSTRING tMINUSMINUS
+
+  | tSTRING '[' FExpr ']' '.' tSTRING NumericIncrement
     {
-      if(strcmp($1, "PostProcessing")){
-	vyyerror("Unknown View Option Class '%s'", $1);
+      if(!(pNumCat = Get_NumberOptionCategory($1))){
+	vyyerror("Unknown Numeric Option Class '%s'", $1);
 	$$ = 0. ;
       }
       else{
-	if(!(pNumOpt = Get_NumberViewOption((int)$5, $8, &i))){
-	  if(i < 0) vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	  else	    vyyerror("Unknown Numeric Option '%s.View[%d].%s'", 
-			     $1, (int)$5, $8);
+	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption($6, pNumCat))){
+	  vyyerror("Unknown Numeric Option '%s[%d].%s'", $1, (int)$3, $6);
 	  $$ = 0. ;
 	}
-	else{
-	  switch(i){
-	  case GMSH_DOUBLE : $$ = (*(double*)pNumOpt -= 1.) ; break ;
-	  case GMSH_FLOAT : $$ = (double)(*(float*)pNumOpt -= 1.) ; break ;
-	  case GMSH_LONG : $$ = (double)(*(long*)pNumOpt -= 1) ; break ;
-	  case GMSH_INT : $$ = (double)(*(int*)pNumOpt -= 1) ; break ;
-	  }
-	}
+	else
+	  $$ = pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7);
       }
     }
 ;
@@ -2423,8 +2058,6 @@ VExpr :
     VExpr_Single
     {
       memcpy($$, $1, 5*sizeof(double)) ;
-      //??? Avec ce qui suit, bison se plante sur DEC
-      //for(i=0 ; i<5 ; i++) $$[i] = $1[i];
     }
   | '-' VExpr %prec UNARYPREC
     {
@@ -2616,12 +2249,12 @@ ColorExpr :
 	$$ = 0 ;
       }
       else{
-	if(!(pColOpt = Get_ColorOption($5, pColCat))){
-	  vyyerror("Unknown Color Option '%s.%s'", $1, $5);
+	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption($5, pColCat))){
+	  vyyerror("Unknown Color Option '%s.Color.%s'", $1, $5);
 	  $$ = 0 ;
 	}
 	else{
-	  $$ = *pColOpt ;
+	  $$ = pColOpt(0,GMSH_GET,0) ;
 	}
       }
     }
@@ -2632,22 +2265,18 @@ ListOfColor :
     {
       $$ = ListOfColor_L;
     }
-  | tSTRING '.' tView '[' FExpr ']' '.' tColor
+  | tSTRING '[' FExpr ']' '.' tColorTable
     {
       if(!ListOfColor_L)
 	ListOfColor_L = List_Create(256,10,sizeof(unsigned int)) ;
       else
 	List_Reset(ListOfColor_L) ;
-      if(strcmp($1, "PostProcessing"))
-	vyyerror("Unknown View Option Class '%s'", $1);
+      ColorTable *ct = Get_ColorTable((int)$3);
+      if(!ct)
+	vyyerror("View[%d] does not exist", (int)$3);
       else{
-	ColorTable *ct = Get_ColorTableViewOption((int)$5);
-	if(!ct)
-	  vyyerror("PostProcessing View %d does not Exist", (int)$5);
-	else{
-	  for(i=0 ; i<ct->size ; i++) 
-	    List_Add(ListOfColor_L, &ct->table[i]);
-	}
+	for(i=0 ; i<ct->size ; i++) 
+	  List_Add(ListOfColor_L, &ct->table[i]);
       }
       $$ = ListOfColor_L;
     }
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 33e76913a136f7cfe410f18468e3c39f7ed4ec8f..740343c59b0ef58ab2a8bb726b820ce1b2c281c2 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.70 2001-02-08 16:32:16 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.71 2001-02-12 17:38:03 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -127,6 +127,7 @@ extern FILE *yyin, *yyout;
 		{ \
 		/* Undo effects of setting up yytext. */ \
 		*yy_cp = yy_hold_char; \
+		YY_RESTORE_YY_MORE_OFFSET \
 		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
 		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
 		} \
@@ -236,7 +237,7 @@ void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
 
 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
 
 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
@@ -284,7 +285,7 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
 
 #define YY_NUM_RULES 180
 #define YY_END_OF_BUFFER 181
-static yyconst short int yy_accept[981] =
+static yyconst short int yy_accept[983] =
     {   0,
         0,    0,  181,  179,    1,    1,  179,    5,  173,  179,
         6,  179,  179,  179,  179,  179,  174,   14,    2,  179,
@@ -299,100 +300,101 @@ static yyconst short int yy_accept[981] =
 
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,   67,   66,  178,  178,  178,
+      178,  178,  178,  178,  178,   68,   67,  178,  178,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,   81,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,   82,  178,  178,  178,  178,  178,  178,
       178,  178,  115,  118,  109,  112,  178,  178,  178,  178,
       178,  117,  178,  120,  178,  111,  114,  178,  178,  178,
       178,  116,  119,  110,  113,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,   17,   23,    0,    0,
-       15,    0,  126,  127,  128,  129,  175,    0,    0,  177,
+      178,  178,  178,  178,  178,   17,   23,    0,    0,   15,
+        0,  126,  127,  128,  129,  175,    0,    0,  177,  178,
 
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,   40,  178,  178,
+      178,  178,  178,  178,  178,  178,   40,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,   53,
+      178,  178,  178,  178,  178,  178,   64,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,   74,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-       52,  178,  178,  178,  178,  178,  178,   63,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,   73,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,   95,  178,  178,  178,  178,  178,  178,  178,  104,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,   94,  178,  178,  178,  178,  178,  178,  178,
-      103,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-
-      178,  178,  178,  178,  178,  178,  178,    0,    0,    0,
-      176,    0,    0,  175,  178,  178,  178,  178,   26,  178,
-      178,  178,   28,   30,  178,  178,  178,  178,   35,  178,
-      178,  178,  178,  178,  178,   47,  178,   38,  178,  178,
-      178,  178,  178,   39,  143,  178,  178,  178,   51,  178,
-      178,  178,    0,  178,  178,  178,  178,   59,  178,  178,
-      178,   60,  178,   62,  178,  178,  178,  178,    0,  178,
-      178,  137,  178,  178,   71,  178,   72,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,   91,  178,  178,  178,  178,  178,   95,  178,
 
-      178,   93,  178,  178,  178,  178,  102,  178,  178,  178,
-      178,  178,  106,  178,  108,  178,  178,  178,  178,  168,
-        8,  178,  178,  178,  178,  178,    0,    0,    0,  175,
-      178,  178,  178,  178,  178,  178,  178,   32,  178,  178,
+      178,  178,  178,  178,  178,    0,    0,    0,  176,    0,
+        0,  175,  178,  178,  178,  178,   26,  178,  178,  178,
+       28,   30,  178,  178,  178,  178,   35,  178,  178,  178,
+      178,  178,  178,   48,  178,   38,  178,  178,  178,  178,
+      178,   39,  143,  178,  178,  178,   52,  178,  178,  178,
+        0,  178,  178,  178,  178,   60,  178,  178,  178,   61,
+      178,   63,  178,  178,  178,  178,    0,  178,  178,  137,
+      178,  178,   72,  178,   73,  178,  178,  178,  178,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,   45,  178,  178,  178,  178,  178,  178,  178,
-        0,  178,  178,  178,   58,  178,  178,  178,   61,  178,
-      178,  178,   65,    0,  178,   69,  178,  178,   74,  178,
-      178,  178,   78,  178,   79,  141,  178,  178,  178,   82,
-       83,   84,  178,  178,  178,  178,  178,   90,  178,  178,
-
-      178,  178,  178,  178,  178,  178,  178,  105,  178,  178,
-      178,  178,  178,  178,  165,  178,  178,  167,  172,  178,
-        0,    0,  178,  178,  178,  178,   27,   29,   31,  178,
-      178,  178,   37,  178,  156,  178,  178,  178,  178,  178,
-      178,   42,  178,  178,  178,   48,   49,  178,  178,  178,
-      178,    0,  149,  178,  178,   57,  178,  178,  178,  178,
-      178,  178,  178,  178,  142,    0,  178,   75,   70,  178,
-       77,   76,  178,  178,  178,  178,   87,  178,  178,   92,
-       89,  178,   96,  178,  178,  178,  178,  178,  178,  178,
-      178,  138,  178,  107,  178,  178,  178,    7,  166,  164,
-
-        0,    0,  178,  178,  178,  178,   33,  178,   36,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,   44,  178,
-      178,  178,  178,   56,    0,  178,  178,   54,  178,  178,
-      178,  178,  178,  178,  178,    0,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,   99,   97,  178,  178,  178,
-      178,  178,  104,  178,  178,  169,  178,    0,    0,  178,
+       92,  178,  178,  178,  178,  178,   96,  178,  178,   94,
+
+      178,  178,  178,  178,  103,  178,  178,  178,  178,  178,
+      178,  108,  178,  178,  178,  178,  168,    8,  178,  178,
+      178,  178,  178,    0,    0,    0,  175,  178,  178,  178,
+      178,  178,  178,  178,   32,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,   45,
+      178,  178,  178,  178,  178,  178,  178,    0,  178,  178,
+      178,   59,  178,  178,  178,   62,  178,  178,  178,   66,
+        0,  178,   70,  178,  178,   75,  178,  178,  178,   79,
+      178,   80,  141,  178,  178,  178,   83,   84,   85,  178,
+      178,  178,  178,  178,   91,  178,  178,  178,  178,  178,
+
+      178,  178,  178,  178,  106,  178,  178,  178,  178,  178,
+      178,  165,  178,  178,  167,  172,  178,    0,    0,  178,
+      178,  178,  178,   27,   29,   31,  178,  178,  178,   37,
+      178,  156,  178,  178,  178,  178,  178,  178,   42,  178,
+      178,  178,  178,   49,   50,  178,  178,  178,  178,    0,
+      149,  178,  178,   58,  178,  178,  178,  178,  178,  178,
+      178,  178,  142,    0,  178,   76,   71,  178,   78,   77,
+      178,  178,  178,  178,   88,  178,  178,   93,   90,  178,
+       97,  178,  178,  178,  178,  178,  178,  178,  178,  138,
+      178,  107,  178,  178,  178,    7,  166,  164,    0,    0,
+
+      178,  178,  178,  178,   33,  178,   36,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,   44,  178,  178,
+      178,  178,   57,    0,  178,  178,   55,  178,  178,  178,
+      178,  178,  178,  178,    0,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  100,   98,  178,  178,  178,  178,
+      178,  105,  178,  178,  169,  178,    0,    0,  178,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,    0,   53,   55,
-      178,  178,  178,  178,  178,   64,  178,    0,  178,  178,
-      178,  178,  178,   80,  178,  178,  178,   98,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,    0,   54,   56,
+      178,  178,  178,  178,  178,   65,  178,    0,  178,  178,
+      178,  178,  178,   81,  178,  178,  178,   99,  178,  178,
 
       178,  178,  178,  170,  171,    0,    0,  178,  178,  178,
       178,   34,  178,  178,  178,  178,  178,  178,  178,  178,
-       43,  139,   50,  178,  132,    0,  178,  178,  178,  145,
-      178,  178,    0,   68,  178,  178,  178,  178,  178,   88,
-      178,  178,  178,  178,  101,  178,    0,    0,  178,  178,
+       43,  178,  139,   51,  178,  132,    0,  178,  178,  178,
+      145,  178,  178,    0,   69,  178,  178,  178,  178,  178,
+       89,  178,  178,  178,  178,  102,  178,    0,    0,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-       46,  178,  131,    0,  135,  178,  178,  178,  178,    0,
-      178,  178,  178,   86,  178,  178,  178,  178,  178,  178,
-        0,    0,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,    0,  178,  178,  144,  178,
-
-        0,  178,  178,  178,   85,  178,  178,  178,  100,  178,
-      125,    0,  125,  178,  178,  178,  178,  178,  178,  178,
-      150,  178,  178,  178,  178,    0,  178,  178,  178,  147,
-      178,  178,  178,  178,  178,  178,  133,  124,  178,  136,
-      124,  178,  178,  178,  178,  178,  178,  178,  178,    0,
-      178,  178,  158,  178,  130,  178,  178,  178,  157,  178,
-      178,  178,  178,  178,  178,  178,  178,   41,    0,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  121,
-      160,  154,  178,    0,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  148,  134,  146,  178,
-
-      178,  178,  155,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  140,  178,  178,  178,  178,  178,  161,
-      178,  178,  178,  178,  178,  153,  152,  178,  178,  178,
+      178,   47,  178,   46,  131,    0,  135,  178,  178,  178,
+      178,    0,  178,  178,  178,   87,  178,  178,  178,  178,
+      178,  178,    0,    0,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,    0,  178,  178,
+
+      144,  178,    0,  178,  178,  178,   86,  178,  178,  178,
+      101,  178,  125,    0,  125,  178,  178,  178,  178,  178,
+      178,  178,  150,  178,  178,  178,  178,    0,  178,  178,
+      178,  147,  178,  178,  178,  178,  178,  178,  133,  124,
+      178,  136,  124,  178,  178,  178,  178,  178,  178,  178,
+      178,    0,  178,  178,  158,  178,  130,  178,  178,  178,
+      157,  178,  178,  178,  178,  178,  178,  178,  178,   41,
+        0,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  121,  160,  154,  178,    0,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  148,  134,
+
+      146,  178,  178,  178,  155,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  140,  178,  178,  178,  178,
+      178,  161,  178,  178,  178,  178,  178,  153,  152,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      159,  178,  178,  178,  178,  178,  162,  178,  178,  123,
-      178,  178,  178,  178,  178,  178,  122,  178,  178,  178,
-      178,  178,  178,  178,  178,  163,  178,  178,  151,    0
+      178,  178,  159,  178,  178,  178,  178,  178,  162,  178,
+      178,  123,  178,  178,  178,  178,  178,  178,  122,  178,
+      178,  178,  178,  178,  178,  178,  178,  163,  178,  178,
+      151,    0
     } ;
 
 static yyconst int yy_ec[256] =
@@ -439,231 +441,231 @@ static yyconst int yy_meta[75] =
         3,    3,    1,    1
     } ;
 
-static yyconst short int yy_base[986] =
+static yyconst short int yy_base[988] =
     {   0,
-        0,    0, 1242,   49,   50, 1243,   55,   52,   68,   73,
+        0,    0, 1244,   49,   50, 1245,   55,   52,   68,   73,
        53,   65,   78,   79,  111,   93,  130,   71,   77,   87,
       109,  117,  123,  131,  176,  138,  178,  186,  133,  181,
       201,   81,  125,  209,  231,  152,  151,  225,  238,  281,
       291,  235,  320,  139,  243,  246,  251,  265,  272,  285,
-      271,  292,  328, 1203, 1203, 1243,  352, 1243, 1243, 1243,
-     1243, 1243, 1243, 1227,  358, 1226, 1225,  126, 1224, 1243,
-     1243, 1243, 1243,  373,  380,  389, 1243, 1243, 1243,    0,
-     1197, 1190, 1196, 1200, 1169, 1178, 1171,   67, 1165, 1186,
-     1158, 1165, 1184, 1183, 1184,   96, 1186,   51, 1162, 1169,
-
-     1153,  354, 1175, 1176, 1156, 1155, 1163, 1149, 1181, 1175,
-     1182, 1149, 1154,  352, 1180, 1170, 1153, 1141, 1140, 1136,
-     1139, 1161, 1174, 1134, 1158,    0, 1128, 1132, 1156, 1120,
-     1130, 1129,  123, 1152, 1122, 1134, 1121, 1153, 1131, 1159,
-     1144, 1116, 1108,    0, 1129,  113,  170, 1117,  173, 1110,
-     1117, 1151,    0,    0,    0,    0, 1113,  211, 1108, 1107,
-     1111,    0, 1130,    0, 1137,    0,    0, 1107,  200, 1109,
-      161,    0,    0,    0,    0, 1112, 1106, 1097, 1110, 1110,
-     1099, 1090, 1094, 1091, 1098, 1091, 1243, 1243, 1118, 1113,
-     1243,  407, 1243, 1243, 1243, 1243,  414,  429,  434,  439,
-
-     1116, 1128, 1110, 1109, 1083,  295, 1087, 1086, 1081, 1086,
-     1105, 1082, 1079, 1099, 1114, 1098, 1099, 1105, 1104, 1076,
-     1074, 1074, 1067, 1079, 1076, 1067, 1065, 1070, 1102, 1097,
-     1070, 1073, 1052, 1062, 1092, 1087,  206, 1060,  270, 1050,
-        0, 1051, 1087, 1086, 1047, 1050, 1058,    0, 1058, 1073,
-     1081, 1045, 1095, 1051, 1037, 1075, 1048, 1045, 1046, 1084,
-     1035, 1065, 1039, 1027, 1043, 1065, 1038, 1054, 1063, 1039,
-     1022, 1026, 1025, 1031, 1023, 1027, 1029, 1019, 1012, 1029,
-     1024, 1038, 1019, 1017, 1016, 1006, 1017, 1011, 1032, 1033,
-     1011, 1006, 1006, 1004, 1022, 1021,  992,  993, 1003,  403,
-
-     1005,  995,  240,  997, 1002,  997,  987, 1011, 1013,  449,
-      456,  465,  470,  475, 1009, 1013, 1010, 1032,    0,  985,
-      988,  995,    0, 1028,  993,  984, 1006,  987,    0, 1011,
-     1003, 1009,  998, 1009,  997,    0,  965,    0,  982,  972,
-      965,  964,  969,    0,    0, 1001,  959,  958,    0,  966,
-      974,  983,  989,  992,  956,  956,  962,    0,  948,  966,
-      965,    0,  948,    0,  945,  983,  982,  942,  993,  942,
-      940,    0,  940,  937,    0,  989,    0,  973,  947,  941,
-      933,  961,  932,  968,  952,  934,  935,  938,  924,  925,
-      922,  923,    0,  927,  921,  918,  931,  955,    0,  921,
-
-      920,    0,  930,  925,  946,  941,    0,  910,  915,  918,
-      935,  944,    0,  911,    0,  920,  907,  906,  900,    0,
-        0,  912,  915,  899,  910,  908,  929,  932,  480,  485,
-      927,  932,  929,  907,  889,  893,  892,    0,  900,  890,
-      918,  883,  907,  919,  919,  904,  920,  916,  883,  889,
-      886,  885,    0,  884,  895,  882,  881,  882,  196,  892,
-      891,  905,  213,  865,    0,  876,  313,  477,    0,  870,
-      885,  886,    0,  911,  858,    0,  857,  865,    0,  883,
-      854,  857,    0,  876,    0,    0,  891,  862,  863,    0,
-        0,    0,  859,  859,  861,  850,  856,    0,  860,  854,
-
-      840,  854,  838,  877,  875,  305,  848,    0,  861,  854,
-      845,  846,  835,  837,    0,  839,  835,    0,    0,  822,
-      855,  865,  853,  861,  862,  848,    0,    0,  870,  818,
-      830,  846,    0,  850,    0,  832,  848,  844,  838,  818,
-      809,    0,  814,  803,  841,    0,    0,  822,  828,  832,
-      841,  830,    0,  809,  808,    0,  811,  826,  820,  834,
-      837,  834,  797,  818,    0,  840,  802,    0,    0,  820,
-        0,    0,  826,  811,  785,  801,    0,  784,  791,    0,
-        0,  821,    0,  792,  792,  780,  820,  816,  784,  791,
-      787,    0,  790,    0,  784,  774,  778,    0,    0,    0,
-
-      792,  802,  790,  805,  799,  795,    0,  767,    0,  800,
-      803,  785,  783,  775,  791,  782,  767,  768,    0,  781,
-      751,  777,  778,    0,  804,  748,  761,    0,  769,  769,
-      769,  773,  777,  746,  774,  791,  752,  776,  775,  752,
-      735,  740,  732,  736,  768,    0,    0,  723,  759,  744,
-      731,  724,    0,  751,  722,    0,  735,  749,  757,  747,
-      735,  754,  758,  716,  731,  742,  747,  749,  735,  749,
-      712,  708,  718,  734,  720,  725,  729,  752,    0,    0,
+      271,  292,  328, 1205, 1205, 1245,  352, 1245, 1245, 1245,
+     1245, 1245, 1245, 1229,  358, 1228, 1227,  126, 1226, 1245,
+     1245, 1245, 1245,  363,  378,  387, 1245, 1245, 1245,    0,
+     1199, 1192, 1198, 1202, 1171, 1180, 1173,   67, 1167, 1188,
+     1160, 1167, 1186, 1185, 1186,   96, 1188,   51, 1164, 1171,
+
+     1155,  350, 1177, 1178, 1158, 1157, 1165, 1151, 1183, 1177,
+     1184, 1151, 1156,  355, 1182, 1172, 1155, 1143, 1142, 1138,
+     1141, 1163, 1176, 1136, 1160,    0, 1130, 1134, 1158, 1122,
+     1132, 1131,  123, 1154, 1124, 1136, 1123, 1155, 1133, 1161,
+     1146, 1118, 1110,    0, 1131,  113,  170, 1119,  173, 1112,
+     1119, 1153,    0,    0,    0,    0, 1115,  211, 1110, 1109,
+     1113,    0, 1132,    0, 1139,    0,    0, 1109,  200, 1111,
+      161,    0,    0,    0,    0, 1109, 1100, 1113, 1113, 1102,
+     1093, 1097, 1094, 1101, 1094, 1245, 1245, 1121, 1116, 1245,
+      409, 1245, 1245, 1245, 1245,  419,  428,  434,  439, 1119,
+
+     1131, 1113, 1112, 1086,  295, 1090, 1089, 1084, 1089, 1108,
+     1085, 1082, 1102, 1117, 1101, 1102, 1108, 1107, 1079, 1077,
+     1077, 1070, 1082, 1079, 1070, 1068, 1073, 1105, 1100, 1073,
+     1076, 1055, 1065, 1095, 1090,  206, 1063,  270, 1053,    0,
+     1054, 1090, 1089, 1050, 1053, 1061,    0, 1061, 1076, 1084,
+     1048, 1098, 1054, 1040, 1078, 1051, 1048, 1049, 1087, 1038,
+     1068, 1042, 1030, 1046, 1068, 1041, 1057, 1066, 1042, 1025,
+     1029, 1028, 1034, 1026, 1030, 1032, 1022, 1015, 1032, 1027,
+     1041, 1022, 1020, 1019, 1009, 1020, 1014, 1035, 1036, 1014,
+     1009, 1009, 1007, 1025, 1024,  997, 1007,  403, 1009,  999,
+
+      240, 1001, 1006, 1001,  991, 1015, 1017,  449,  460,  469,
+      474,  479, 1013, 1017, 1014, 1036,    0,  989,  992,  999,
+        0, 1032,  997,  988, 1010,  991,    0, 1015, 1007, 1013,
+     1002, 1013, 1001,    0,  969,    0,  986,  976,  969,  968,
+      973,    0,    0, 1005,  963,  962,    0,  970,  978,  987,
+      993,  996,  960,  960,  966,    0,  952,  970,  969,    0,
+      952,    0,  949,  987,  986,  946,  997,  946,  944,    0,
+      944,  941,    0,  993,    0,  977,  951,  945,  937,  965,
+      936,  972,  956,  938,  939,  942,  928,  929,  926,  927,
+        0,  931,  925,  922,  935,  959,    0,  925,  924,    0,
+
+      934,  929,  950,  945,    0,  914,  919,  922,  939,  948,
+      915,    0,  924,  911,  910,  904,    0,    0,  916,  919,
+      903,  914,  912,  933,  936,  484,  489,  931,  936,  933,
+      911,  893,  897,  896,    0,  904,  894,  922,  887,  911,
+      923,  923,  908,  924,  920,  887,  893,  890,  889,  900,
+      887,  898,  885,  884,  885,  196,  895,  894,  908,  213,
+      868,    0,  879,  313,  481,    0,  873,  888,  889,    0,
+      914,  861,    0,  860,  868,    0,  886,  857,  860,    0,
+      879,    0,    0,  894,  865,  866,    0,    0,    0,  862,
+      862,  864,  853,  859,    0,  863,  857,  843,  857,  841,
+
+      880,  878,  305,  851,    0,  864,  857,  848,  849,  838,
+      840,    0,  842,  838,    0,    0,  825,  858,  868,  856,
+      864,  865,  851,    0,    0,  873,  821,  833,  849,    0,
+      853,    0,  835,  851,  847,  841,  821,  812,    0,  817,
+      827,  805,  843,    0,    0,  824,  830,  834,  843,  832,
+        0,  811,  810,    0,  813,  828,  822,  836,  839,  836,
+      799,  820,    0,  842,  804,    0,    0,  822,    0,    0,
+      828,  813,  787,  803,    0,  786,  793,    0,    0,  823,
+        0,  794,  794,  782,  822,  818,  786,  793,  789,    0,
+      792,    0,  786,  776,  780,    0,    0,    0,  794,  804,
+
+      792,  807,  801,  797,    0,  769,    0,  802,  805,  787,
+      785,  777,  793,  784,  769,  770,  770,    0,  782,  752,
+      778,  779,    0,  805,  749,  762,    0,  770,  770,  770,
+      774,  778,  747,  775,  792,  753,  777,  776,  753,  736,
+      741,  733,  737,  769,    0,    0,  724,  760,  745,  732,
+      725,    0,  752,  723,    0,  736,  750,  758,  748,  736,
+      755,  759,  717,  732,  743,  748,  750,  736,  750,  713,
+      709,  719,  713,  734,  720,  725,  729,  752,    0,    0,
       729,  737,  738,  735,  734,    0,  735,  743,  692,  709,
       708,  729,  697,    0,  696,  699,  723,    0,  702,  724,
 
-      691,  694,  708,    0,    0,  700,  708,  694,  352,   57,
-       86,    0,  269,  118,  170,  194,  223,  249,  249,  284,
-        0,    0,    0,  315,    0,  338,  330,  318,  339,    0,
-      344,  334,  373,    0,  344,  365,  374,  357,  354,    0,
-      394,  392,  392,  369,    0,  405,  397,  413,  418,  420,
-      437,  449,  450,  462,  463,  468,  473,  483,  470,  476,
-        0,  446,    0,  496,    0,  466,  484,  493,  478,  504,
-      483,  495,  494,    0,  463,  488,  483,  487,  474,  492,
-        0,  503,  530,  505,  518,  518,  510,  507,  508,  516,
-      520,  513,  528,  509,  492,  546,  536,  523,    0,  535,
-
-      549,  530,  536,  535,    0,  536,  529,  526,    0,  529,
-     1243,    0,    0,  533,  545,  604,  546,  531,  547,  545,
-        0,  539,  556,  540,  524,  566,  546,  543,  544, 1243,
-      555,  560,  552,  548,  562,  564,    0, 1243,  544,    0,
-        0,  557,  567,  572,  560,  554,  573,  557,  549,  591,
-      564,  586,    0,  592,    0,  588,  589,  598,    0,  587,
-      587,  581,  605,  590,  605,  606,  595,    0,  620,  600,
-      600,  590,  598,  603,  616,  612,  595,  600,  618,    0,
-      598,    0,  619,  634,  623,  614,  628,  622,  618,  628,
-      633,  641,  627,  611,  620,  638, 1243,    0,    0,  623,
-
-      626,  616,    0,  627,  640,  626,  624,  642,  645,  644,
-      636,  634,  647,    0,  645,  647,  650,  653,  643,  634,
-      656,  636,  637,  645,  652,    0,    0,  648,  651,  651,
-      658,  662,  666,  664,  656,  669,  661,  650,  663,  677,
-      674,  664,  666,  671,  664,  668,  667,  669,  668,  674,
-        0,  684,  685,  686,  674,  678,    0,  680,  677,    0,
-      677,  678,  693,  681,  699,  687,    0,  683,  684,  695,
-      704,  691,  688,  694,  700,    0,  695,  697,    0, 1243,
-      732,  735,  738,  741,  744
+      690,  691,  704,    0,    0,  696,   57,   69,  358,  135,
+      172,    0,  269,  194,  238,  224,  266,  318,  283,  294,
+        0,  303,    0,    0,  330,    0,  370,  358,  348,  349,
+        0,  363,  351,  397,    0,  370,  386,  387,  369,  366,
+        0,  397,  389,  388,  373,    0,  409,  418,  432,  420,
+      428,  446,  443,  444,  438,  439,  470,  475,  485,  472,
+      478,    0,  448,    0,    0,  498,    0,  467,  485,  495,
+      479,  505,  485,  497,  496,    0,  465,  490,  485,  489,
+      476,  494,    0,  505,  532,  507,  520,  520,  512,  509,
+      510,  518,  522,  515,  530,  511,  494,  548,  538,  525,
+
+        0,  537,  551,  532,  538,  537,    0,  538,  531,  528,
+        0,  531, 1245,    0,    0,  535,  547,  606,  548,  533,
+      549,  547,    0,  541,  558,  542,  526,  568,  548,  545,
+      546, 1245,  557,  562,  554,  550,  564,  566,    0, 1245,
+      546,    0,    0,  559,  569,  574,  562,  556,  575,  559,
+      551,  593,  566,  588,    0,  594,    0,  590,  591,  600,
+        0,  589,  589,  583,  607,  592,  607,  608,  597,    0,
+      622,  602,  602,  592,  600,  605,  618,  614,  597,  602,
+      620,    0,  600,    0,  621,  636,  625,  616,  630,  624,
+      620,  630,  635,  643,  629,  613,  622,  640, 1245,    0,
+
+        0,  625,  628,  618,    0,  629,  642,  628,  626,  644,
+      647,  646,  638,  636,  649,    0,  647,  649,  652,  655,
+      645,  636,  658,  638,  639,  647,  654,    0,    0,  650,
+      653,  653,  660,  664,  668,  666,  658,  671,  663,  652,
+      665,  679,  676,  666,  668,  673,  666,  670,  669,  671,
+      670,  676,    0,  686,  687,  688,  676,  680,    0,  682,
+      679,    0,  679,  680,  695,  683,  701,  689,    0,  685,
+      686,  697,  706,  693,  690,  696,  702,    0,  697,  699,
+        0, 1245,  734,  737,  740,  743,  746
     } ;
 
-static yyconst short int yy_def[986] =
+static yyconst short int yy_def[988] =
     {   0,
-      980,    1,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-
-      981,  981,  981,  981,  981,  981,  981,  980,  980,  980,
-      980,  980,  980,  980,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  980,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  980,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  980,  980,  980,  980,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      980,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  980,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      980,  980,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  980,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  980,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-
-      980,  980,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  980,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  980,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  980,  980,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  980,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  980,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-
-      981,  981,  981,  981,  981,  980,  980,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  980,  981,  981,  981,  981,
-      981,  981,  980,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  980,  980,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  980,  981,  981,  981,  981,  981,  980,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      982,  980,  983,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  980,  981,  981,  981,  981,
-
-      980,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      980,  984,  981,  981,  981,  985,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  980,  981,  981,  981,  980,
-      981,  981,  981,  981,  981,  981,  981,  980,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  980,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  980,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  980,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  980,  981,  981,  981,
-
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
-      981,  981,  981,  981,  981,  981,  981,  981,  981,    0,
-      980,  980,  980,  980,  980
+      982,    1,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  983,
+
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+
+      983,  983,  983,  983,  983,  982,  982,  982,  982,  982,
+      982,  982,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      982,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  982,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  982,  982,  982,  982,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  982,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      982,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  982,  982,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  982,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  982,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  982,  982,
+
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  982,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  982,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  982,  982,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  982,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  982,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+
+      983,  983,  983,  983,  983,  982,  982,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  982,  983,  983,  983,
+      983,  983,  983,  982,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  982,  982,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  982,  983,  983,  983,  983,
+      983,  982,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  984,  982,  985,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  982,  983,  983,
+
+      983,  983,  982,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  982,  986,  983,  983,  983,  987,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  982,  983,  983,
+      983,  982,  983,  983,  983,  983,  983,  983,  983,  982,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  982,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      982,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  982,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  982,  983,
+
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
+      983,    0,  982,  982,  982,  982,  982
     } ;
 
-static yyconst short int yy_nxt[1318] =
+static yyconst short int yy_nxt[1320] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
        14,   15,   16,   17,   17,   17,   17,   17,   18,   19,
@@ -673,146 +675,146 @@ static yyconst short int yy_nxt[1318] =
        32,   32,   32,   45,   46,   32,   32,   32,   47,   32,
        48,   49,   32,   32,   32,   50,   32,   32,   51,   32,
        32,   32,   52,   53,   54,   54,   56,   54,   54,   58,
-       54,   57,   57,   57,   57,   57,   59,   60,  752,   62,
+       54,   57,   57,   57,   57,   57,   59,   60,  749,   62,
        54,   55,   55,   54,   55,   55,   54,   55,   54,   61,
 
-       63,   70,   54,   54,   54,   71,   81,   55,   77,  220,
-       55,  753,   54,   55,   72,   55,  208,  221,   54,   55,
+       63,   70,   54,   54,   54,   71,   81,   55,   77,  219,
+       55,  750,   54,   55,   72,   55,  207,  220,   54,   55,
        55,   55,   64,   83,   65,   65,   65,   65,   65,   55,
-       78,  217,  218,  209,   54,   55,   54,  195,   79,   66,
+       78,  216,  217,  208,   54,   55,   54,  194,   79,   66,
        73,   74,   54,   75,   75,   75,   75,   75,   81,   82,
        81,   55,   67,   68,   69,   54,   81,   76,   81,   55,
-      122,  103,  190,   81,   81,   83,  756,   83,   84,  104,
-      273,   89,   55,   83,   85,   83,   81,   81,  260,   90,
-       83,   83,  274,   76,  261,  128,  295,   86,   87,   88,
-      138,  105,   91,   83,   83,  106,  178,  757,   92,   93,
-
-      296,   81,  107,   81,  109,  108,   81,   94,  123,  115,
-       95,   81,  110,   96,  111,  139,  353,  116,   83,  137,
-       83,  549,   97,   83,  278,   98,   81,  275,   83,   99,
-      550,  276,  100,  101,   81,  117,  112,  102,  113,  279,
-      129,  125,  758,   83,  118,  119,  354,  120,  114,  292,
-       81,   83,  124,  121,  134,  126,   81,  293,  130,  140,
-       81,  127,  131,   81,  141,  759,  132,   83,   81,  284,
-      133,   81,  760,   83,  142,  285,   81,   83,  554,  555,
+      122,  103,  189,   81,   81,   83,  753,   83,   84,  104,
+      272,   89,   55,   83,   85,   83,   81,   81,  259,   90,
+       83,   83,  273,   76,  260,  128,  294,   86,   87,   88,
+      138,  105,   91,   83,   83,  106,  177,  754,   92,   93,
+
+      295,   81,  107,   81,  109,  108,   81,   94,  123,  115,
+       95,   81,  110,   96,  111,  139,  351,  116,   83,  137,
+       83,  547,   97,   83,  277,   98,   81,  274,   83,   99,
+      548,  275,  100,  101,   81,  117,  112,  102,  113,  278,
+      129,  125,  757,   83,  118,  119,  352,  120,  114,  291,
+       81,   83,  124,  121,  134,  126,   81,  292,  130,  140,
+       81,  127,  131,   81,  141,  758,  132,   83,   81,  283,
+      133,   81,  759,   83,  142,  284,   81,   83,  552,  553,
        83,  143,  144,  145,  135,   83,  146,  148,   83,  147,
-       81,  149,  136,   83,  754,  180,   81,   81,  356,  150,
-
-      170,  357,  421,  179,  422,  151,   81,   83,  761,  755,
-       81,  152,  181,   83,   83,  153,   81,   54,  182,  154,
-      320,  155,  156,   83,  186,  162,  183,   83,  163,  164,
-      165,  166,  167,   83,   55,  321,  322,  558,  157,  184,
-      168,  762,  763,  158,  159,   81,  185,  171,  160,  188,
-      559,  764,  161,   54,  172,  169,  765,  766,  173,  589,
-      174,  175,   83,  590,  187,   57,   57,   57,   57,   57,
-       55,   65,   65,   65,   65,   65,  750,  176,  767,  768,
-      751,  177,  769,  770,  771,  192,  197,  197,  197,  197,
-      197,   74,  772,   75,   75,   75,   75,   75,  199,  199,
-
-      198,  773,  200,  200,  200,  200,  200,   76,  774,  240,
-      225,  192,  226,  227,  241,  775,  310,  310,  242,  228,
-      311,  311,  311,  311,  311,  776,  198,  197,  197,  197,
-      197,  197,  777,   76,  778,  779,  780,  781,  313,  313,
-      782,  312,  314,  314,  314,  314,  314,  200,  200,  200,
-      200,  200,  200,  200,  200,  200,  200,  416,  783,  784,
-      785,  417,  311,  311,  311,  311,  311,  312,  418,  311,
-      311,  311,  311,  311,  429,  429,  786,  787,  430,  430,
-      430,  430,  430,  314,  314,  314,  314,  314,  314,  314,
-      314,  314,  314,  430,  430,  430,  430,  430,  430,  430,
-
-      430,  430,  430,  560,  788,  789,  790,  791,  792,  793,
-      794,  795,  796,  561,  797,  798,  799,  562,  800,  801,
-      802,  803,  804,  805,  806,  807,  808,  809,  810,  812,
-      811,  811,  814,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  815,  816,  817,  818,  819,  811,  811,
-      811,  811,  811,  820,  821,  822,  823,  824,  825,  826,
+       81,  149,  136,   83,  755,  179,   81,   81,  354,  150,
+
+      170,  355,  418,  178,  419,  151,   81,   83,  760,  756,
+       81,  152,  180,   83,   83,  153,   81,   54,  181,  154,
+      318,  155,  156,   83,  185,  162,  182,   83,  163,  164,
+      165,  166,  167,   83,   55,  319,  320,  556,  157,  183,
+      168,  761,  762,  158,  159,   81,  184,  171,  160,  187,
+      557,  763,  161,   54,  172,  169,  764,  765,  173,  587,
+      174,  175,   83,  588,  186,   57,   57,   57,   57,   57,
+       55,   65,   65,   65,   65,   65,  196,  196,  196,  196,
+      196,  176,  751,  766,  767,  191,  752,  768,  769,   74,
+      197,   75,   75,   75,   75,   75,  198,  198,  770,  771,
+
+      199,  199,  199,  199,  199,   76,  224,  772,  225,  226,
+      773,  191,  239,  774,  775,  227,  197,  240,  308,  308,
+      776,  241,  309,  309,  309,  309,  309,  777,  778,  779,
+      780,   76,  196,  196,  196,  196,  196,  311,  311,  781,
+      782,  312,  312,  312,  312,  312,  310,  199,  199,  199,
+      199,  199,  199,  199,  199,  199,  199,  413,  783,  784,
+      785,  414,  309,  309,  309,  309,  309,  786,  415,  787,
+      788,  789,  310,  309,  309,  309,  309,  309,  426,  426,
+      790,  791,  427,  427,  427,  427,  427,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  427,  427,  427,
+
+      427,  427,  427,  427,  427,  427,  427,  558,  792,  793,
+      794,  795,  796,  797,  798,  799,  800,  559,  801,  802,
+      803,  560,  804,  805,  806,  807,  808,  809,  810,  811,
+      812,  814,  813,  813,  816,  813,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  817,  818,  819,  820,  821,
+      813,  813,  813,  813,  813,  822,  823,  824,  825,  826,
       827,  828,  829,  830,  831,  832,  833,  834,  835,  836,
-      837,  839,  840,  842,  843,  844,  845,  811,  846,  847,
+      837,  838,  839,  841,  842,  844,  845,  846,  847,  813,
       848,  849,  850,  851,  852,  853,  854,  855,  856,  857,
       858,  859,  860,  861,  862,  863,  864,  865,  866,  867,
 
-      868,  869,  811,  811,  838,  838,  870,  838,  838,  838,
-      838,  838,  838,  838,  838,  838,  838,  871,  872,  873,
-      874,  875,  838,  838,  838,  838,  838,  876,  877,  878,
+      868,  869,  870,  871,  813,  813,  840,  840,  872,  840,
+      840,  840,  840,  840,  840,  840,  840,  840,  840,  873,
+      874,  875,  876,  877,  840,  840,  840,  840,  840,  878,
       879,  880,  881,  882,  883,  884,  885,  886,  887,  888,
       889,  890,  891,  892,  893,  894,  895,  896,  897,  898,
-      899,  838,  900,  901,  902,  903,  904,  905,  906,  907,
+      899,  900,  901,  840,  902,  903,  904,  905,  906,  907,
       908,  909,  910,  911,  912,  913,  914,  915,  916,  917,
-      918,  919,  920,  921,  922,  923,  838,  838,  924,  925,
+      918,  919,  920,  921,  922,  923,  924,  925,  840,  840,
       926,  927,  928,  929,  930,  931,  932,  933,  934,  935,
       936,  937,  938,  939,  940,  941,  942,  943,  944,  945,
 
       946,  947,  948,  949,  950,  951,  952,  953,  954,  955,
       956,  957,  958,  959,  960,  961,  962,  963,  964,  965,
       966,  967,  968,  969,  970,  971,  972,  973,  974,  975,
-      976,  977,  978,  979,   80,  811,  749,  811,  813,  748,
-      813,  838,  747,  838,  841,  746,  841,  745,  744,  743,
-      742,  741,  740,  739,  738,  737,  736,  735,  734,  733,
-      732,  731,  730,  729,  728,  727,  726,  725,  724,  723,
-      722,  721,  720,  719,  718,  717,  716,  715,  714,  713,
-      712,  711,  710,  709,  708,  707,  706,  705,  704,  703,
-      702,  701,  700,  699,  698,  697,  696,  695,  694,  693,
-
-      692,  691,  690,  689,  688,  687,  686,  685,  684,  683,
-      682,  681,  680,  679,  678,  677,  676,  675,  674,  673,
-      672,  671,  670,  669,  668,  667,  666,  665,  664,  663,
-      662,  661,  660,  659,  658,  657,  656,  655,  654,  653,
-      652,  651,  650,  649,  648,  647,  646,  645,  644,  643,
-      642,  641,  640,  639,  638,  637,  636,  635,  634,  633,
-      632,  631,  630,  629,  628,  627,  626,  625,  624,  623,
-      622,  621,  620,  619,  618,  617,  616,  615,  614,  613,
-      612,  611,  610,  609,  608,  607,  606,  605,  604,  603,
-      602,  601,  600,  599,  598,  597,  596,  595,  594,  593,
-
-      592,  591,  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,  557,  556,
-      553,  552,  551,  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,  473,  472,
-      471,  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,  440,  439,  438,  437,  436,  435,  434,  433,  432,
-      431,  428,  427,  426,  425,  424,  423,  420,  419,  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,  377,  376,  375,
-
-      374,  373,  372,  371,  370,  369,  368,  367,  366,  365,
-      364,  363,  362,  361,  360,  359,  358,  355,  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,  325,  324,  323,  319,  318,
-      317,  316,  315,  309,  308,  307,  306,  305,  304,  303,
-      302,  301,  300,  299,  298,  297,  294,  291,  290,  289,
-      288,  287,  286,  283,  282,  281,  280,  277,  272,  271,
-      270,  269,  268,  267,  266,  265,  264,  263,  262,  259,
-      258,  257,  256,  255,  254,  253,  252,  251,  250,  249,
-
-      248,  247,  246,  245,  244,  243,  239,  238,  237,  236,
-      235,  234,  233,  232,  231,  230,  229,  224,  223,  222,
-      219,  216,  215,  214,  213,  212,  211,  210,  207,  206,
-      205,  204,  203,  202,  201,  196,  194,  193,  191,  190,
-      189,  980,    3,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980
+      976,  977,  978,  979,  980,  981,   80,  813,  748,  813,
+      815,  747,  815,  840,  746,  840,  843,  745,  843,  744,
+      743,  742,  741,  740,  739,  738,  737,  736,  735,  734,
+      733,  732,  731,  730,  729,  728,  727,  726,  725,  724,
+      723,  722,  721,  720,  719,  718,  717,  716,  715,  714,
+      713,  712,  711,  710,  709,  708,  707,  706,  705,  704,
+      703,  702,  701,  700,  699,  698,  697,  696,  695,  694,
+
+      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
+      683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
+      673,  672,  671,  670,  669,  668,  667,  666,  665,  664,
+      663,  662,  661,  660,  659,  658,  657,  656,  655,  654,
+      653,  652,  651,  650,  649,  648,  647,  646,  645,  644,
+      643,  642,  641,  640,  639,  638,  637,  636,  635,  634,
+      633,  632,  631,  630,  629,  628,  627,  626,  625,  624,
+      623,  622,  621,  620,  619,  618,  617,  616,  615,  614,
+      613,  612,  611,  610,  609,  608,  607,  606,  605,  604,
+      603,  602,  601,  600,  599,  598,  597,  596,  595,  594,
+
+      593,  592,  591,  590,  589,  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,  555,  554,  551,  550,  549,  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,  473,
+      472,  471,  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,  440,  439,  438,  437,  436,  435,  434,  433,
+      432,  431,  430,  429,  428,  425,  424,  423,  422,  421,
+      420,  417,  416,  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,  377,  376,
+
+      375,  374,  373,  372,  371,  370,  369,  368,  367,  366,
+      365,  364,  363,  362,  361,  360,  359,  358,  357,  356,
+      353,  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,  325,  324,  323,  322,
+      321,  317,  316,  315,  314,  313,  307,  306,  305,  304,
+      303,  302,  301,  300,  299,  298,  297,  296,  293,  290,
+      289,  288,  287,  286,  285,  282,  281,  280,  279,  276,
+      271,  270,  269,  268,  267,  266,  265,  264,  263,  262,
+      261,  258,  257,  256,  255,  254,  253,  252,  251,  250,
+
+      249,  248,  247,  246,  245,  244,  243,  242,  238,  237,
+      236,  235,  234,  233,  232,  231,  230,  229,  228,  223,
+      222,  221,  218,  215,  214,  213,  212,  211,  210,  209,
+      206,  205,  204,  203,  202,  201,  200,  195,  193,  192,
+      190,  189,  188,  982,    3,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982
     } ;
 
-static yyconst short int yy_chk[1318] =
+static yyconst short int yy_chk[1320] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -822,143 +824,143 @@ static yyconst short int yy_chk[1318] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    4,    5,    7,    8,   11,   10,
-        7,    9,    9,    9,    9,    9,   12,   13,  710,   14,
+        7,    9,    9,    9,    9,    9,   12,   13,  707,   14,
        12,    4,    5,    9,    8,   11,   18,    7,   10,   13,
 
        14,   16,   19,   13,   14,   16,   32,   12,   20,   98,
-        9,  711,   20,   18,   16,   10,   88,   98,   16,   19,
+        9,  708,   20,   18,   16,   10,   88,   98,   16,   19,
        13,   14,   15,   32,   15,   15,   15,   15,   15,   20,
        21,   96,   96,   88,   21,   16,   15,   68,   22,   15,
        16,   17,   22,   17,   17,   17,   17,   17,   23,   23,
        33,   21,   15,   15,   15,   17,   24,   17,   29,   22,
-       29,   26,   68,   26,   44,   23,  714,   33,   23,   26,
+       29,   26,   68,   26,   44,   23,  710,   33,   23,   26,
       146,   24,   17,   24,   23,   29,   37,   36,  133,   24,
        26,   44,  146,   17,  133,   33,  171,   23,   23,   23,
-       37,   26,   24,   37,   36,   26,   44,  715,   24,   25,
+       37,   26,   24,   37,   36,   26,   44,  711,   24,   25,
 
       171,   25,   26,   27,   27,   26,   30,   25,   30,   28,
-       25,   28,   27,   25,   27,   37,  237,   28,   25,   36,
-       27,  459,   25,   30,  149,   25,   31,  147,   28,   25,
-      459,  147,   25,   25,   34,   28,   27,   25,   27,  149,
-       34,   31,  716,   31,   28,   28,  237,   28,   27,  169,
+       25,   28,   27,   25,   27,   37,  236,   28,   25,   36,
+       27,  456,   25,   30,  149,   25,   31,  147,   28,   25,
+      456,  147,   25,   25,   34,   28,   27,   25,   27,  149,
+       34,   31,  714,   31,   28,   28,  236,   28,   27,  169,
        38,   34,   30,   28,   35,   31,   35,  169,   34,   38,
-       42,   31,   34,   39,   38,  717,   34,   38,   45,  158,
-       34,   46,  718,   35,   38,  158,   47,   42,  463,  463,
+       42,   31,   34,   39,   38,  715,   34,   38,   45,  158,
+       34,   46,  716,   35,   38,  158,   47,   42,  460,  460,
        39,   38,   38,   38,   35,   45,   38,   39,   46,   38,
-       48,   39,   35,   47,  713,   46,   51,   49,  239,   39,
+       48,   39,   35,   47,  713,   46,   51,   49,  238,   39,
 
-       42,  239,  303,   45,  303,   39,   40,   48,  719,  713,
+       42,  238,  301,   45,  301,   39,   40,   48,  717,  713,
        50,   40,   47,   51,   49,   40,   41,   52,   48,   40,
-      206,   40,   40,   40,   51,   41,   48,   50,   41,   41,
-       41,   41,   41,   41,   52,  206,  206,  467,   40,   49,
-       41,  720,  724,   40,   40,   43,   50,   43,   40,   53,
-      467,  726,   40,   53,   43,   41,  727,  728,   43,  506,
-       43,   43,   43,  506,   52,   57,   57,   57,   57,   57,
-       53,   65,   65,   65,   65,   65,  709,   43,  729,  731,
-      709,   43,  732,  733,  735,   65,   74,   74,   74,   74,
-       74,   75,  736,   75,   75,   75,   75,   75,   76,   76,
-
-       74,  737,   76,   76,   76,   76,   76,   75,  738,  114,
-      102,   65,  102,  102,  114,  739,  192,  192,  114,  102,
-      192,  192,  192,  192,  192,  741,   74,  197,  197,  197,
-      197,  197,  742,   75,  743,  744,  746,  747,  198,  198,
-      748,  197,  198,  198,  198,  198,  198,  199,  199,  199,
-      199,  199,  200,  200,  200,  200,  200,  300,  749,  750,
-      751,  300,  310,  310,  310,  310,  310,  197,  300,  311,
-      311,  311,  311,  311,  312,  312,  752,  753,  312,  312,
-      312,  312,  312,  313,  313,  313,  313,  313,  314,  314,
-      314,  314,  314,  429,  429,  429,  429,  429,  430,  430,
-
-      430,  430,  430,  468,  754,  755,  756,  757,  758,  759,
-      760,  762,  764,  468,  766,  767,  768,  468,  769,  770,
-      771,  772,  773,  775,  776,  777,  778,  779,  780,  782,
-      783,  783,  784,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  785,  786,  787,  788,  789,  783,  783,
-      783,  783,  783,  790,  791,  792,  793,  794,  795,  796,
-      797,  798,  800,  801,  802,  803,  804,  806,  807,  808,
-      810,  814,  815,  817,  818,  819,  820,  783,  822,  823,
-      824,  825,  826,  827,  828,  829,  831,  832,  833,  834,
-      835,  836,  839,  842,  843,  844,  845,  846,  847,  848,
-
-      849,  850,  783,  783,  816,  816,  851,  816,  816,  816,
-      816,  816,  816,  816,  816,  816,  816,  852,  854,  856,
-      857,  858,  816,  816,  816,  816,  816,  860,  861,  862,
-      863,  864,  865,  866,  867,  869,  870,  871,  872,  873,
-      874,  875,  876,  877,  878,  879,  881,  883,  884,  885,
-      886,  816,  887,  888,  889,  890,  891,  892,  893,  894,
-      895,  896,  900,  901,  902,  904,  905,  906,  907,  908,
-      909,  910,  911,  912,  913,  915,  816,  816,  916,  917,
-      918,  919,  920,  921,  922,  923,  924,  925,  928,  929,
+      205,   40,   40,   40,   51,   41,   48,   50,   41,   41,
+       41,   41,   41,   41,   52,  205,  205,  464,   40,   49,
+       41,  718,  719,   40,   40,   43,   50,   43,   40,   53,
+      464,  720,   40,   53,   43,   41,  722,  725,   43,  503,
+       43,   43,   43,  503,   52,   57,   57,   57,   57,   57,
+       53,   65,   65,   65,   65,   65,   74,   74,   74,   74,
+       74,   43,  709,  727,  728,   65,  709,  729,  730,   75,
+       74,   75,   75,   75,   75,   75,   76,   76,  732,  733,
+
+       76,   76,   76,   76,   76,   75,  102,  734,  102,  102,
+      736,   65,  114,  737,  738,  102,   74,  114,  191,  191,
+      739,  114,  191,  191,  191,  191,  191,  740,  742,  743,
+      744,   75,  196,  196,  196,  196,  196,  197,  197,  745,
+      747,  197,  197,  197,  197,  197,  196,  198,  198,  198,
+      198,  198,  199,  199,  199,  199,  199,  298,  748,  749,
+      750,  298,  308,  308,  308,  308,  308,  751,  298,  752,
+      753,  754,  196,  309,  309,  309,  309,  309,  310,  310,
+      755,  756,  310,  310,  310,  310,  310,  311,  311,  311,
+      311,  311,  312,  312,  312,  312,  312,  426,  426,  426,
+
+      426,  426,  427,  427,  427,  427,  427,  465,  757,  758,
+      759,  760,  761,  763,  766,  768,  769,  465,  770,  771,
+      772,  465,  773,  774,  775,  777,  778,  779,  780,  781,
+      782,  784,  785,  785,  786,  785,  785,  785,  785,  785,
+      785,  785,  785,  785,  785,  787,  788,  789,  790,  791,
+      785,  785,  785,  785,  785,  792,  793,  794,  795,  796,
+      797,  798,  799,  800,  802,  803,  804,  805,  806,  808,
+      809,  810,  812,  816,  817,  819,  820,  821,  822,  785,
+      824,  825,  826,  827,  828,  829,  830,  831,  833,  834,
+      835,  836,  837,  838,  841,  844,  845,  846,  847,  848,
+
+      849,  850,  851,  852,  785,  785,  818,  818,  853,  818,
+      818,  818,  818,  818,  818,  818,  818,  818,  818,  854,
+      856,  858,  859,  860,  818,  818,  818,  818,  818,  862,
+      863,  864,  865,  866,  867,  868,  869,  871,  872,  873,
+      874,  875,  876,  877,  878,  879,  880,  881,  883,  885,
+      886,  887,  888,  818,  889,  890,  891,  892,  893,  894,
+      895,  896,  897,  898,  902,  903,  904,  906,  907,  908,
+      909,  910,  911,  912,  913,  914,  915,  917,  818,  818,
+      918,  919,  920,  921,  922,  923,  924,  925,  926,  927,
       930,  931,  932,  933,  934,  935,  936,  937,  938,  939,
 
       940,  941,  942,  943,  944,  945,  946,  947,  948,  949,
-      950,  952,  953,  954,  955,  956,  958,  959,  961,  962,
-      963,  964,  965,  966,  968,  969,  970,  971,  972,  973,
-      974,  975,  977,  978,  981,  982,  708,  982,  983,  707,
-      983,  984,  706,  984,  985,  703,  985,  702,  701,  700,
+      950,  951,  952,  954,  955,  956,  957,  958,  960,  961,
+      963,  964,  965,  966,  967,  968,  970,  971,  972,  973,
+      974,  975,  976,  977,  979,  980,  983,  984,  706,  984,
+      985,  703,  985,  986,  702,  986,  987,  701,  987,  700,
       699,  697,  696,  695,  693,  692,  691,  690,  689,  688,
       687,  685,  684,  683,  682,  681,  678,  677,  676,  675,
       674,  673,  672,  671,  670,  669,  668,  667,  666,  665,
-      664,  663,  662,  661,  660,  659,  658,  657,  655,  654,
-      652,  651,  650,  649,  648,  645,  644,  643,  642,  641,
+      664,  663,  662,  661,  660,  659,  658,  657,  656,  654,
+      653,  651,  650,  649,  648,  647,  644,  643,  642,  641,
 
       640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
-      630,  629,  627,  626,  625,  623,  622,  621,  620,  618,
-      617,  616,  615,  614,  613,  612,  611,  610,  608,  606,
-      605,  604,  603,  602,  601,  597,  596,  595,  593,  591,
-      590,  589,  588,  587,  586,  585,  584,  582,  579,  578,
-      576,  575,  574,  573,  570,  567,  566,  564,  563,  562,
-      561,  560,  559,  558,  557,  555,  554,  552,  551,  550,
-      549,  548,  545,  544,  543,  541,  540,  539,  538,  537,
-      536,  534,  532,  531,  530,  529,  526,  525,  524,  523,
-      522,  521,  520,  517,  516,  514,  513,  512,  511,  510,
-
-      509,  507,  505,  504,  503,  502,  501,  500,  499,  497,
-      496,  495,  494,  493,  489,  488,  487,  484,  482,  481,
-      480,  478,  477,  475,  474,  472,  471,  470,  466,  464,
-      462,  461,  460,  458,  457,  456,  455,  454,  452,  451,
-      450,  449,  448,  447,  446,  445,  444,  443,  442,  441,
-      440,  439,  437,  436,  435,  434,  433,  432,  431,  428,
-      427,  426,  425,  424,  423,  422,  419,  418,  417,  416,
-      414,  412,  411,  410,  409,  408,  406,  405,  404,  403,
-      401,  400,  398,  397,  396,  395,  394,  392,  391,  390,
-      389,  388,  387,  386,  385,  384,  383,  382,  381,  380,
-
-      379,  378,  376,  374,  373,  371,  370,  369,  368,  367,
-      366,  365,  363,  361,  360,  359,  357,  356,  355,  354,
-      353,  352,  351,  350,  348,  347,  346,  343,  342,  341,
-      340,  339,  337,  335,  334,  333,  332,  331,  330,  328,
-      327,  326,  325,  324,  322,  321,  320,  318,  317,  316,
-      315,  309,  308,  307,  306,  305,  304,  302,  301,  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,  259,
-
-      258,  257,  256,  255,  254,  253,  252,  251,  250,  249,
-      247,  246,  245,  244,  243,  242,  240,  238,  236,  235,
-      234,  233,  232,  231,  230,  229,  228,  227,  226,  225,
-      224,  223,  222,  221,  220,  219,  218,  217,  216,  215,
-      214,  213,  212,  211,  210,  209,  208,  207,  205,  204,
-      203,  202,  201,  190,  189,  186,  185,  184,  183,  182,
-      181,  180,  179,  178,  177,  176,  170,  168,  165,  163,
-      161,  160,  159,  157,  152,  151,  150,  148,  145,  143,
-      142,  141,  140,  139,  138,  137,  136,  135,  134,  132,
-      131,  130,  129,  128,  127,  125,  124,  123,  122,  121,
-
-      120,  119,  118,  117,  116,  115,  113,  112,  111,  110,
-      109,  108,  107,  106,  105,  104,  103,  101,  100,   99,
-       97,   95,   94,   93,   92,   91,   90,   89,   87,   86,
-       85,   84,   83,   82,   81,   69,   67,   66,   64,   55,
-       54,    3,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-
-      980,  980,  980,  980,  980,  980,  980,  980,  980,  980,
-      980,  980,  980,  980,  980,  980,  980
+      630,  629,  628,  626,  625,  624,  622,  621,  620,  619,
+      617,  616,  615,  614,  613,  612,  611,  610,  609,  608,
+      606,  604,  603,  602,  601,  600,  599,  595,  594,  593,
+      591,  589,  588,  587,  586,  585,  584,  583,  582,  580,
+      577,  576,  574,  573,  572,  571,  568,  565,  564,  562,
+      561,  560,  559,  558,  557,  556,  555,  553,  552,  550,
+      549,  548,  547,  546,  543,  542,  541,  540,  538,  537,
+      536,  535,  534,  533,  531,  529,  528,  527,  526,  523,
+      522,  521,  520,  519,  518,  517,  514,  513,  511,  510,
+
+      509,  508,  507,  506,  504,  502,  501,  500,  499,  498,
+      497,  496,  494,  493,  492,  491,  490,  486,  485,  484,
+      481,  479,  478,  477,  475,  474,  472,  471,  469,  468,
+      467,  463,  461,  459,  458,  457,  455,  454,  453,  452,
+      451,  450,  449,  448,  447,  446,  445,  444,  443,  442,
+      441,  440,  439,  438,  437,  436,  434,  433,  432,  431,
+      430,  429,  428,  425,  424,  423,  422,  421,  420,  419,
+      416,  415,  414,  413,  411,  410,  409,  408,  407,  406,
+      404,  403,  402,  401,  399,  398,  396,  395,  394,  393,
+      392,  390,  389,  388,  387,  386,  385,  384,  383,  382,
+
+      381,  380,  379,  378,  377,  376,  374,  372,  371,  369,
+      368,  367,  366,  365,  364,  363,  361,  359,  358,  357,
+      355,  354,  353,  352,  351,  350,  349,  348,  346,  345,
+      344,  341,  340,  339,  338,  337,  335,  333,  332,  331,
+      330,  329,  328,  326,  325,  324,  323,  322,  320,  319,
+      318,  316,  315,  314,  313,  307,  306,  305,  304,  303,
+      302,  300,  299,  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,  259,  258,  257,  256,  255,  254,  253,  252,  251,
+      250,  249,  248,  246,  245,  244,  243,  242,  241,  239,
+      237,  235,  234,  233,  232,  231,  230,  229,  228,  227,
+      226,  225,  224,  223,  222,  221,  220,  219,  218,  217,
+      216,  215,  214,  213,  212,  211,  210,  209,  208,  207,
+      206,  204,  203,  202,  201,  200,  189,  188,  185,  184,
+      183,  182,  181,  180,  179,  178,  177,  176,  170,  168,
+      165,  163,  161,  160,  159,  157,  152,  151,  150,  148,
+      145,  143,  142,  141,  140,  139,  138,  137,  136,  135,
+      134,  132,  131,  130,  129,  128,  127,  125,  124,  123,
+
+      122,  121,  120,  119,  118,  117,  116,  115,  113,  112,
+      111,  110,  109,  108,  107,  106,  105,  104,  103,  101,
+      100,   99,   97,   95,   94,   93,   92,   91,   90,   89,
+       87,   86,   85,   84,   83,   82,   81,   69,   67,   66,
+       64,   55,   54,    3,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+
+      982,  982,  982,  982,  982,  982,  982,  982,  982,  982,
+      982,  982,  982,  982,  982,  982,  982,  982,  982
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -970,12 +972,13 @@ static char *yy_last_accepting_cpos;
 #define REJECT reject_used_but_not_detected
 #define yymore() yymore_used_but_not_detected
 #define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
 #line 1 "Gmsh.l"
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.70 2001-02-08 16:32:16 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.71 2001-02-12 17:38:03 geuzaine Exp $
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -1018,7 +1021,7 @@ void   skipline(void);
 	     && ferror( yyin ) )					\
      YY_FATAL_ERROR( "input in flex scanner failed" );
 
-#line 1022 "Gmsh.yy.cpp"
+#line 1025 "Gmsh.yy.cpp"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1040,6 +1043,10 @@ static void yyunput YY_PROTO(( int c, char *buf_ptr ));
 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
 #endif
 
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
 static int yyinput YY_PROTO(( void ));
@@ -1162,13 +1169,13 @@ YY_MALLOC_DECL
 YY_DECL
 	{
 	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
+	register char *yy_cp = NULL, *yy_bp = NULL;
 	register int yy_act;
 
 #line 63 "Gmsh.l"
 
 
-#line 1172 "Gmsh.yy.cpp"
+#line 1179 "Gmsh.yy.cpp"
 
 	if ( yy_init )
 		{
@@ -1219,13 +1226,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 >= 981 )
+				if ( yy_current_state >= 983 )
 					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] != 1243 );
+		while ( yy_base[yy_current_state] != 1245 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1479,197 +1486,197 @@ return tColor;
 case 46:
 YY_RULE_SETUP
 #line 113 "Gmsh.l"
-return tSpline;
+return tColorTable;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 114 "Gmsh.l"
-return tCall;
+return tSpline;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 116 "Gmsh.l"
-return tDelete;
+#line 115 "Gmsh.l"
+return tCall;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 117 "Gmsh.l"
-return tDilate;
+return tDelete;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 118 "Gmsh.l"
-return tDuplicata;
+return tDilate;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 119 "Gmsh.l"
-return tDraw;
+return tDuplicata;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 121 "Gmsh.l"
-return tExp ;
+#line 120 "Gmsh.l"
+return tDraw;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 122 "Gmsh.l"
-return tEllipsis;
+return tExp ;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 123 "Gmsh.l"
-return tExtrude;
+return tEllipsis;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 124 "Gmsh.l"
-return tElliptic;
+return tExtrude;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 125 "Gmsh.l"
-return tELLIPSE;
+return tElliptic;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 126 "Gmsh.l"
-return tEndFor;
+return tELLIPSE;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 127 "Gmsh.l"
-return tEndIf;
+return tEndFor;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 128 "Gmsh.l"
-return tExit;
+return tEndIf;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 130 "Gmsh.l"
-return tFabs ;
+#line 129 "Gmsh.l"
+return tExit;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 131 "Gmsh.l"
-return tFloor ;
+return tFabs ;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 132 "Gmsh.l"
-return tFmod ;
+return tFloor ;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 133 "Gmsh.l"
-return tFor;
+return tFmod ;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 134 "Gmsh.l"
-return tFunction;
+return tFor;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 136 "Gmsh.l"
-return tHypot ;
+#line 135 "Gmsh.l"
+return tFunction;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 138 "Gmsh.l"
-return tIn;
+#line 137 "Gmsh.l"
+return tHypot ;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 139 "Gmsh.l"
-return tIf;
+return tIn;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 140 "Gmsh.l"
-return tIntersect;
+return tIf;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 142 "Gmsh.l"
-return tKnots;
+#line 141 "Gmsh.l"
+return tIntersect;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 144 "Gmsh.l"
-return tLength;
+#line 143 "Gmsh.l"
+return tKnots;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 145 "Gmsh.l"
-return tLine;
+return tLength;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 146 "Gmsh.l"
-return tLoop;
+return tLine;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 147 "Gmsh.l"
-return tLog ;
+return tLoop;
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 148 "Gmsh.l"
-return tLog10 ;
+return tLog ;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 149 "Gmsh.l"
-return tLayers;
+return tLog10 ;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 151 "Gmsh.l"
-return tModulo ;
+#line 150 "Gmsh.l"
+return tLayers;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 152 "Gmsh.l"
-return tMesh;
+return tModulo ;
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 154 "Gmsh.l"
-return tNurbs;
+#line 153 "Gmsh.l"
+return tMesh;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 156 "Gmsh.l"
-return tOrder;
+#line 155 "Gmsh.l"
+return tNurbs;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 158 "Gmsh.l"
-return tPhysical;
+#line 157 "Gmsh.l"
+return tOrder;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 159 "Gmsh.l"
-return tPi;
+return tPhysical;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 160 "Gmsh.l"
-return tPlane;
+return tPi;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 161 "Gmsh.l"
-return tPoint;
+return tPlane;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 162 "Gmsh.l"
-return tProgression;
+return tPoint;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
@@ -1679,107 +1686,107 @@ return tProgression;
 case 86:
 YY_RULE_SETUP
 #line 164 "Gmsh.l"
-return tParametric;
+return tProgression;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 165 "Gmsh.l"
-return tPrintf ;
+return tParametric;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 167 "Gmsh.l"
-return tRecombine;
+#line 166 "Gmsh.l"
+return tPrintf ;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 168 "Gmsh.l"
-return tRotate;
+return tRecombine;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 169 "Gmsh.l"
-return tRuled;
+return tRotate;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 170 "Gmsh.l"
-return tRand;
+return tRuled;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 171 "Gmsh.l"
-return tReturn;
+return tRand;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 173 "Gmsh.l"
-return tSqrt ;
+#line 172 "Gmsh.l"
+return tReturn;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 174 "Gmsh.l"
-return tSin ;
+return tSqrt ;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 175 "Gmsh.l"
-return tSinh ;
+return tSin ;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 176 "Gmsh.l"
-return tSpline;
+return tSinh ;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 177 "Gmsh.l"
-return tSurface;
+return tSpline;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 178 "Gmsh.l"
-return tSymmetry;
+return tSurface;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 179 "Gmsh.l"
-return tSprintf ;
+return tSymmetry;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 181 "Gmsh.l"
-return tTransfinite;
+#line 180 "Gmsh.l"
+return tSprintf ;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
 #line 182 "Gmsh.l"
-return tTranslate;
+return tTransfinite;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 183 "Gmsh.l"
-return tTanh ;
+return tTranslate;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 184 "Gmsh.l"
-return tTan;
+return tTanh ;
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 185 "Gmsh.l"
-return tTrimmed;
+return tTan;
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 187 "Gmsh.l"
-return tUsing;
+#line 186 "Gmsh.l"
+return tTrimmed;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 189 "Gmsh.l"
-return tView;
+#line 188 "Gmsh.l"
+return tUsing;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
@@ -2142,7 +2149,7 @@ YY_RULE_SETUP
 #line 273 "Gmsh.l"
 ECHO;
 	YY_BREAK
-#line 2146 "Gmsh.yy.cpp"
+#line 2153 "Gmsh.yy.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2153,6 +2160,7 @@ case YY_STATE_EOF(INITIAL):
 
 		/* Undo the effects of YY_DO_BEFORE_ACTION. */
 		*yy_cp = yy_hold_char;
+		YY_RESTORE_YY_MORE_OFFSET
 
 		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
 			{
@@ -2298,7 +2306,7 @@ static int yy_get_next_buffer()
 		{ /* Don't try to fill the buffer, so this is an EOF. */
 		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
 			{
-			/* We matched a singled characater, the EOB, so
+			/* We matched a single character, the EOB, so
 			 * treat this as a final EOF.
 			 */
 			return EOB_ACT_END_OF_FILE;
@@ -2325,7 +2333,7 @@ static int yy_get_next_buffer()
 		/* don't do the read, it's not guaranteed to return an EOF,
 		 * just force an EOF
 		 */
-		yy_n_chars = 0;
+		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
 
 	else
 		{
@@ -2380,6 +2388,8 @@ static int yy_get_next_buffer()
 		/* Read in more data. */
 		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
 			yy_n_chars, num_to_read );
+
+		yy_current_buffer->yy_n_chars = yy_n_chars;
 		}
 
 	if ( yy_n_chars == 0 )
@@ -2431,7 +2441,7 @@ static yy_state_type yy_get_previous_state()
 		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 >= 981 )
+			if ( yy_current_state >= 983 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2466,11 +2476,11 @@ yy_state_type yy_current_state;
 	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 >= 981 )
+		if ( yy_current_state >= 983 )
 			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 == 980);
+	yy_is_jam = (yy_current_state == 982);
 
 	return yy_is_jam ? 0 : yy_current_state;
 	}
@@ -2504,7 +2514,8 @@ register char *yy_bp;
 
 		yy_cp += (int) (dest - source);
 		yy_bp += (int) (dest - source);
-		yy_n_chars = yy_current_buffer->yy_buf_size;
+		yy_current_buffer->yy_n_chars =
+			yy_n_chars = yy_current_buffer->yy_buf_size;
 
 		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
 			YY_FATAL_ERROR( "flex scanner push-back overflow" );
@@ -2542,19 +2553,31 @@ static int input()
 
 		else
 			{ /* need more input */
-			yytext_ptr = yy_c_buf_p;
+			int offset = yy_c_buf_p - yytext_ptr;
 			++yy_c_buf_p;
 
 			switch ( yy_get_next_buffer() )
 				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					yyrestart( yyin );
+
+					/* fall through */
+
 				case EOB_ACT_END_OF_FILE:
 					{
 					if ( yywrap() )
-						{
-						yy_c_buf_p =
-						yytext_ptr + YY_MORE_ADJ;
 						return EOF;
-						}
 
 					if ( ! yy_did_buffer_switch_on_eof )
 						YY_NEW_FILE;
@@ -2566,17 +2589,8 @@ static int input()
 					}
 
 				case EOB_ACT_CONTINUE_SCAN:
-					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+					yy_c_buf_p = yytext_ptr + offset;
 					break;
-
-				case EOB_ACT_LAST_MATCH:
-#ifdef __cplusplus
-					YY_FATAL_ERROR(
-					"unexpected last match in yyinput()" );
-#else
-					YY_FATAL_ERROR(
-					"unexpected last match in input()" );
-#endif
 				}
 			}
 		}
@@ -2740,6 +2754,9 @@ YY_BUFFER_STATE b;
 #endif
 
 	{
+	if ( ! b )
+		return;
+
 	b->yy_n_chars = 0;
 
 	/* We always need two end-of-buffer characters.  The first causes
@@ -2799,17 +2816,17 @@ yy_size_t size;
 
 #ifndef YY_NO_SCAN_STRING
 #ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *str )
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
 #else
-YY_BUFFER_STATE yy_scan_string( str )
-yyconst char *str;
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
 #endif
 	{
 	int len;
-	for ( len = 0; str[len]; ++len )
+	for ( len = 0; yy_str[len]; ++len )
 		;
 
-	return yy_scan_bytes( str, len );
+	return yy_scan_bytes( yy_str, len );
 	}
 #endif
 
@@ -2930,7 +2947,7 @@ char msg[];
 		{ \
 		/* Undo effects of setting up yytext. */ \
 		yytext[yyleng] = yy_hold_char; \
-		yy_c_buf_p = yytext + n - YY_MORE_ADJ; \
+		yy_c_buf_p = yytext + n; \
 		yy_hold_char = *yy_c_buf_p; \
 		*yy_c_buf_p = '\0'; \
 		yyleng = n; \
@@ -2956,6 +2973,22 @@ int n;
 	}
 #endif
 
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+	{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+	}
+#endif
+
 
 #ifdef YY_USE_PROTOS
 static void *yy_flex_alloc( yy_size_t size )
diff --git a/Parser/Makefile b/Parser/Makefile
index 20487287991f163aab4e7ffae64acfaf4a7fcddf..101099adba4dbbeb83359f190188d7ad5f6bc5d0 100644
--- a/Parser/Makefile
+++ b/Parser/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.14 2001-01-13 17:08:41 geuzaine Exp $
+# $Id: Makefile,v 1.15 2001-02-12 17:38:03 geuzaine Exp $
 #
 # Makefile for "libParser.a"
 #
@@ -74,8 +74,8 @@ Gmsh.tab.o: Gmsh.tab.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../Common/Context.h ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h \
   ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
   ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Geo/DataBase.h \
-  ../Mesh/Create.h ../Common/Views.h ../Common/ColorTable.h \
-  ../Geo/StepGeomDatabase.h ../Common/Options.h ../Graphics/Draw.h \
+  ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h \
+  ../Mesh/Create.h ../Geo/StepGeomDatabase.h ../Common/Options.h \
   ../Common/Colors.h Parser.h OpenFile.h FunctionManager.h \
   ../Common/Timer.h ../Graphics/CreateFile.h
 OpenFile.o: OpenFile.cpp ../Common/Gmsh.h ../Common/Message.h \
diff --git a/TODO b/TODO
index 978360aae767dfea2e56b00d5cb6cfce6f772774..ac02150e4dec2d69ac01346ec14ff6a3734d9eff 100644
--- a/TODO
+++ b/TODO
@@ -2,3 +2,8 @@
 - Ecrire une vraie base de donnee des options, avec un fonction pour
 chaque option. Cette fonction devrait modifier la GUI s'il y a lieu
 
+- PostProcesing.NbViews est bugge si on fait 
+gmsh cartes.pos  au lieu de 
+gmsh aa.geo cartes.pos
+avec un script qui suit directement
+
diff --git a/jpeg/Makefile b/jpeg/Makefile
index dd91bc614d820654e326a5b71449d05027098f9f..05c25f1dcc22cfba7d7ee8512e8e2f2b3cfce6c9 100644
--- a/jpeg/Makefile
+++ b/jpeg/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.7 2001-02-09 14:51:31 geuzaine Exp $
+# $Id: Makefile,v 1.8 2001-02-12 17:38:03 geuzaine Exp $
 #
 # Makefile for "libJpeg.a"
 #
@@ -51,43 +51,42 @@ depend:
 	$(RM) $(RMFLAGS) Makefile.new
 
 # DO NOT DELETE THIS LINE
-jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h
+jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \
+  jerror.h
 jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \
- jerror.h
-jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jversion.h jerror.h
-jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h jmemsys.h
+  jerror.h
+jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h \
+  jerror.h
+jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \
+  jerror.h jmemsys.h
 jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h jmemsys.h
+  jpegint.h jerror.h jmemsys.h
 jcapi.o: jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \
- jerror.h
-jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h
-jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jerror.h
+  jerror.h
+jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \
+  jerror.h
+jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h
 jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h
+  jpegint.h jerror.h
 jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h
+  jpegint.h jerror.h
 jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h
+  jpegint.h jerror.h
 jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h
+  jpegint.h jerror.h
 jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h
-jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h
+  jpegint.h jerror.h
+jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \
+  jerror.h
 jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h
+  jpegint.h jerror.h
 jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \
- jerror.h
+  jerror.h
 jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h jdct.h
+  jpegint.h jerror.h jdct.h
 jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h jdct.h
+  jpegint.h jerror.h jdct.h
 jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h jdct.h
+  jpegint.h jerror.h jdct.h
 jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \
- jpegint.h jerror.h jdct.h
+  jpegint.h jerror.h jdct.h
diff --git a/tutorial/t8.geo b/tutorial/t8.geo
index ab7b2b6dfa097f75d2e0081c2db5ab090043dedf..55ff55bd02ee1aef0766ce91e4ad0d726031a4c0 100644
--- a/tutorial/t8.geo
+++ b/tutorial/t8.geo
@@ -29,16 +29,16 @@ General.Axes = 0 ;
 
 // ...as well as some options for each post-processing view...
 
-PostProcessing.View[0].Name = "This is a very stupid demonstration..." ;
-PostProcessing.View[0].IntervalsType = 2 ;
-PostProcessing.View[0].Offset2 = 0.05 ;
-PostProcessing.View[0].Raise2 = 0 ;
-PostProcessing.View[0].Light = 1 ;
+View[0].Name = "This is a very stupid demonstration..." ;
+View[0].IntervalsType = 2 ;
+View[0].Offset2 = 0.05 ;
+View[0].Raise2 = 0 ;
+View[0].Light = 1 ;
 
-PostProcessing.View[1].Name = "...of Gmsh's scripting capabilities" ;
-PostProcessing.View[1].IntervalsType = 1 ;
-PostProcessing.View[1].Color = { Green, Blue } ;
-PostProcessing.View[1].NbIso = 10 ;
+View[1].Name = "...of Gmsh's scripting capabilities" ;
+View[1].IntervalsType = 1 ;
+View[1].ColorTable = { Green, Blue } ;
+View[1].NbIso = 10 ;
 
 // ...and loop from 1 to 255 with a step of 1 is performed (to use a
 // step different from 1, just add a third argument in the list,
@@ -49,12 +49,12 @@ t = 0 ;
 
 For num In {1:255}
 
-  PostProcessing.View[0].TimeStep = t ;
-  PostProcessing.View[1].TimeStep = t ;
+  View[0].TimeStep = t ;
+  View[1].TimeStep = t ;
 
-  t = (PostProcessing.View[0].TimeStep < PostProcessing.View[0].NbTimeStep-1) ? t+1 : 0 ;
+  t = (View[0].TimeStep < View[0].NbTimeStep-1) ? t+1 : 0 ;
   
-  PostProcessing.View[0].Raise2 += 0.001*t ;
+  View[0].Raise2 += 0.001*t ;
 
   If (num == 3)
     // We want to use mpeg_encode to create a nice 320x240 animation