diff --git a/Geo/CAD.cpp b/Geo/CAD.cpp
index 7265151a671db69233ca972e39fb189f7670da70..d8cd7e1b94856aebc883a2fb113583d2acea4f93 100644
--- a/Geo/CAD.cpp
+++ b/Geo/CAD.cpp
@@ -1,4 +1,4 @@
-// $Id: CAD.cpp,v 1.37 2001-11-12 11:25:22 geuzaine Exp $
+// $Id: CAD.cpp,v 1.38 2001-11-12 13:33:57 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Numeric.h"
@@ -16,6 +16,8 @@ extern Context_T  CTX;
 
 static List_T  *ListOfTransformedPoints=NULL;
 
+/////////////////////////////////////////////////////////////////////////////////////
+// BASIC FUNCTIONS
 
 int NEWPOINT(void){
   return (THEM->MaxPointNum + 1);
@@ -197,439 +199,354 @@ SurfaceLoop *FindSurfaceLoop(int inum, Mesh *M){
   return NULL;
 }
 
-/*
-  S = (sx(u,v),sy(u,v),sz(u,v))
-  C = (cx(w),cy(w),cz(w))
-
-  sx - cx = 0
-  sy - cy = 0
-  sz - cz = 0
-  
-  3eqs 3incs
-*/
-
-static Curve *CURVE, *CURVE_2;
-static Surface *SURFACE;
-static Vertex *VERTEX;
-extern double min1d (int, double (*funct)(double), double *xmin);
-extern void newt(float x[], int n, int *check,
-                 void (*vecfunc)(int, float [], float []));
-
-static void intersectCS (int N, float x[], float res[]){
-  //x[1] = u x[2] = v x[3] = w
-  Vertex s,c;
-  s = InterpolateSurface(SURFACE,x[1],x[2],0,0);
-  c = InterpolateCurve (CURVE,x[3],0);
-  res[1] = s.Pos.X - c.Pos.X;
-  res[2] = s.Pos.Y - c.Pos.Y;
-  res[3] = s.Pos.Z - c.Pos.Z;
+void CopyVertex (Vertex *v, Vertex *vv){
+  vv->lc = v->lc;
+  vv->u = v->u;
+  vv->Pos.X = v->Pos.X;
+  vv->Pos.Y = v->Pos.Y;
+  vv->Pos.Z = v->Pos.Z;
+  vv->Freeze.X = v->Freeze.X;
+  vv->Freeze.Y = v->Freeze.Y;
+  vv->Freeze.Z = v->Freeze.Z;
 }
 
-static void intersectCC (int N, float x[], float res[]){
-  //x[1] = u x[2] = v
-  Vertex c2,c;
-  c2 = InterpolateCurve(CURVE_2,x[2],0);
-  c = InterpolateCurve (CURVE,x[1],0);
-  res[1] = c2.Pos.X - c.Pos.X;
-  res[2] = c2.Pos.Y - c.Pos.Y;
+Vertex *DuplicateVertex (Vertex *v){
+  Vertex *pv;
+  pv = Create_Vertex(NEWPOINT(),0,0,0,0,0);
+  CopyVertex (v,pv);
+  Tree_Insert(THEM->Points,&pv);
+  return pv;
 }
 
-static void projectPS (int N, float x[], float res[]){
-  //x[1] = u x[2] = v
-  Vertex du,dv,c;
-  c  = InterpolateSurface(SURFACE,x[1],x[2],0,0);
-  du = InterpolateSurface(SURFACE,x[1],x[2],1,1);
-  dv = InterpolateSurface(SURFACE,x[1],x[2],1,2);
-  res[1] =
-    (c.Pos.X - VERTEX->Pos.X)*du.Pos.X +
-    (c.Pos.Y - VERTEX->Pos.Y)*du.Pos.Y +
-    (c.Pos.Z - VERTEX->Pos.Z)*du.Pos.Z;
-  res[2] = 
-    (c.Pos.X - VERTEX->Pos.X)*dv.Pos.X +
-    (c.Pos.Y - VERTEX->Pos.Y)*dv.Pos.Y +
-    (c.Pos.Z - VERTEX->Pos.Z)*dv.Pos.Z;
+void CopyCurve (Curve *c, Curve *cc){
+  int i,j;
+  cc->Typ = c->Typ;
+  //We should not copy the meshing method : if the meshes are to
+  //be copied, the meshing algorithm will take care of it
+  //(e.g. ExtrudeMesh()).
+  //cc->Method = c->Method; 
+  for(i=0;i<4;i++)cc->ipar[i] = c->ipar[i];
+  for(i=0;i<4;i++)cc->dpar[i] = c->dpar[i];
+  cc->l = c->l;
+  for(i=0;i<4;i++)for(j=0;j<4;j++)cc->mat[i][j] = c->mat[i][j];
+  cc->beg = c->beg;
+  cc->end = c->end;
+  cc->ubeg = c->ubeg;
+  cc->uend = c->uend;
+  cc->Control_Points = List_Create(List_Nbr(c->Control_Points),1,sizeof(Vertex*));
+  List_Copy(c->Control_Points,cc->Control_Points);
+  End_Curve(cc);
+  Tree_Insert(THEM->Curves,&cc);
 }
 
-static double projectPC (double u){
-  //x[1] = u x[2] = v
-  if(u<CURVE->ubeg)u = CURVE->ubeg;
-  if(u<CURVE->ubeg)u = CURVE->ubeg;
-  Vertex c;
-  c = InterpolateCurve(CURVE,u,0);
-  return sqrt(  DSQR(c.Pos.X -VERTEX->Pos.X)+
-                DSQR(c.Pos.Y -VERTEX->Pos.Y)+
-                DSQR(c.Pos.Z -VERTEX->Pos.Z));
+Curve *DuplicateCurve (Curve *c){
+  Curve *pc;
+  Vertex *v,*newv;
+  pc = Create_Curve(NEWLINE(),0,1,NULL,NULL,-1,-1,0.,1.);
+  CopyCurve(c,pc);
+  for(int i=0;i<List_Nbr(c->Control_Points);i++){
+    List_Read(pc->Control_Points,i,&v);
+    newv = DuplicateVertex(v);
+    List_Write(pc->Control_Points,i,&newv);
+  }
+  pc->beg = DuplicateVertex(c->beg);
+  pc->end = DuplicateVertex(c->end);
+  CreateReversedCurve (THEM,pc);
+  
+  return pc;
 }
 
-static int UFIXED=0;
-static double FIX;
-static double projectPCS (double u){
-  //x[1] = u x[2] = v
-  double tmin,tmax;
-  if(UFIXED){
-    tmin = SURFACE->kv[0];
-    tmax = SURFACE->kv[SURFACE->Nv+SURFACE->OrderV];
-  }
-  else{
-    tmin = SURFACE->ku[0];
-    tmax = SURFACE->ku[SURFACE->Nu+SURFACE->OrderU];
+void CopySurface (Surface *s, Surface *ss){
+  int i,j;
+  ss->Typ = s->Typ;
+  ss->Mat = s->Mat;
+  //We should not copy the meshing method: if the meshes are to
+  //be copied, the meshing algorithm will take care of it
+  //(e.g. ExtrudeMesh()).
+  //ss->Method = s->Method;
+  ss->Recombine = s->Recombine;
+  ss->RecombineAngle = s->RecombineAngle;
+  for(i=0;i<4;i++)ss->ipar[i] = s->ipar[i];
+  ss->Nu = s->Nu;
+  ss->Nv = s->Nv;
+  ss->a = s->a;ss->b = s->b;ss->c = s->c; ss->d = s->d;
+  for(i=0;i<3;i++)for(j=0;j<3;j++)ss->plan[i][j] = s->plan[i][j];
+  for(i=0;i<3;i++)for(j=0;j<3;j++)ss->invplan[i][j] = s->invplan[i][j];
+  ss->Generatrices = List_Create(List_Nbr(s->Generatrices),1,sizeof(Curve*));
+  List_Copy(s->Generatrices,ss->Generatrices);
+  if( s->Control_Points ){
+    ss->Control_Points = List_Create(List_Nbr(s->Control_Points),1,sizeof(Vertex*));
+    List_Copy(s->Control_Points,ss->Control_Points);
   }
-  
-  if(u<tmin)u = tmin;
-  if(u>tmax)u = tmax;
-  Vertex c;
-  if(UFIXED)
-    c = InterpolateSurface(SURFACE,FIX,u,0,0);
-  else
-    c = InterpolateSurface(SURFACE,u,FIX,0,0);
-  return sqrt(DSQR(c.Pos.X -VERTEX->Pos.X)+
-              DSQR(c.Pos.Y -VERTEX->Pos.Y)+
-              DSQR(c.Pos.Z -VERTEX->Pos.Z));
+  End_Surface(ss);
+  Tree_Insert(THEM->Surfaces,&ss);
 }
 
-bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER){
-  double xmin;
-  CURVE = c;
-  VERTEX = v;
-  min1d (0, projectPC, &xmin);
-  *RES = InterpolateCurve(CURVE,xmin,0);
-  *DER = InterpolateCurve(CURVE,xmin,1);
-  if(xmin > c->uend){
-    *RES = InterpolateCurve(CURVE,c->uend,0);
-    *DER = InterpolateCurve(CURVE,c->uend,1);
+Surface *DuplicateSurface (Surface *s){
+  Surface *ps;
+  Curve *c,*newc;
+  Vertex *v,*newv;
+  int i;
+
+  ps = Create_Surface(NEWSURFACE(),0,0);
+  CopySurface(s,ps);
+  for(i=0;i<List_Nbr(ps->Generatrices);i++){
+    List_Read(ps->Generatrices,i,&c);
+    newc = DuplicateCurve(c);
+    List_Write(ps->Generatrices,i,&newc);
   }
-  else if(xmin < c->ubeg){
-    *RES = InterpolateCurve(CURVE,c->ubeg,0);
-    *DER = InterpolateCurve(CURVE,c->ubeg,1);
+  
+  for(i=0;i<List_Nbr(ps->Control_Points);i++){
+    List_Read(ps->Control_Points,i,&v);
+    newv = DuplicateVertex(v);
+    List_Write(ps->Control_Points,i,&newv);
   }
-  return true;
+
+  return ps;
 }
 
-bool search_in_boundary ( Surface *s, Vertex *p, double t, int Fixu, 
-                          double *uu, double *vv){
-  double l,umin,vmin,lmin = 1.e24;
-  int i,N;
-  Vertex vr;
-  double tmin, tmax,u,v;
+void CopyShape(int Type, int Num, int *New){
+  Surface *s,*news;
+  Curve *c, *newc;
+  Vertex *v,*newv;
   
-  if(Fixu){
-    tmin = s->kv[0];
-    tmax = s->kv[s->Nv+s->OrderV];
-    N = 3*s->Nu;
-  }
-  else{
-    tmin = s->ku[0];
-    tmax = s->ku[s->Nu+s->OrderU];
-    N = 3*s->Nv;
-  }
-  for(i=0;i<N;i++){
-    if(Fixu){
-      u = t;
-      v = tmin + (tmax-tmin)*(double)(i)/(double)(N-1);
+  switch(Type){
+  case MSH_POINT:
+    if(!(v = FindPoint(Num,THEM))){
+      Msg(GERROR, "Unknown Vertex %d", Num);
+      return;
     }
-    else {
-      v = t;
-      u = tmin + (tmax-tmin)*(double)(i)/(double)(N-1);
+    newv = DuplicateVertex(v);
+    *New = newv->Num;
+    break;
+  case MSH_SEGM_LINE:
+  case MSH_SEGM_SPLN:
+  case MSH_SEGM_BSPLN:
+  case MSH_SEGM_BEZIER:
+  case MSH_SEGM_CIRC:
+  case MSH_SEGM_ELLI:
+  case MSH_SEGM_NURBS:
+    if(!(c = FindCurve(Num,THEM))){
+      Msg(GERROR, "Unknown Curve %d", Num);
+      return;
     }
-    vr = InterpolateSurface(SURFACE,u,v,0,0);
-    l =  sqrt(DSQR(vr.Pos.X - p->Pos.X) +  
-              DSQR(vr.Pos.Y - p->Pos.Y) +
-              DSQR(vr.Pos.Z - p->Pos.Z));
-    if(l<lmin){
-      lmin = l;
-      umin = u;
-      vmin = v;
+    newc = DuplicateCurve(c);
+    *New = newc->Num;
+    break;
+  case MSH_SURF_NURBS:
+  case MSH_SURF_TRIC:
+  case MSH_SURF_REGL:
+  case MSH_SURF_PLAN:
+    if(!(s = FindSurface(Num,THEM))){
+      Msg(GERROR, "Unknown Surface %d", Num);
+      return;
     }
+    news = DuplicateSurface(s);
+    *New = news->Num;
+    break;
+  default:
+    Msg(GERROR, "Impossible to copy entity %d (of type %d)", Num, Type);
+    break;
   }
+}
 
-  FIX = t;
-  UFIXED = Fixu;
-  double xm;
-  if(Fixu)xm = vmin;
-  else xm = umin;
-  if(lmin > 1.e-3) min1d (0, projectPCS, &xm);
-  if(Fixu){
-    *uu = t;
-    *vv = xm;
-  }
-  else{
-    *vv = t;
-    *uu = xm;
+void DeletePoint(int ip){
+  Vertex *v = FindPoint(ip,THEM);
+  if(!v) return;
+  List_T *Curves = Tree2List(THEM->Curves);
+  for(int i=0;i<List_Nbr(Curves);i++){
+    Curve *c;
+    List_Read(Curves,i,&c);
+    for(int j=0;j<List_Nbr(c->Control_Points);j++){
+      if(!compareVertex(List_Pointer(c->Control_Points,j),&v))return;
+    }
   }
-  vr = InterpolateSurface(SURFACE,*uu,*vv,0,0);
-  l =  sqrt(DSQR(vr.Pos.X - p->Pos.X) +
-            DSQR(vr.Pos.Y - p->Pos.Y) +
-            DSQR(vr.Pos.Z - p->Pos.Z));
-  if(l<1.e-3)return true;
-  return false;
+  List_Delete(Curves);
+  if(v->Num == THEM->MaxPointNum) THEM->MaxPointNum--;
+  Tree_Suppress(THEM->Points,&v);
 }
 
-bool try_a_value(Surface *s, Vertex *p, double u, double v,double *uu, double *vv){
-  Vertex vr = InterpolateSurface(s,u,v,0,0);
-  double l =  sqrt(DSQR(vr.Pos.X - p->Pos.X) +  
-                   DSQR(vr.Pos.Y - p->Pos.Y) + 
-                   DSQR(vr.Pos.Z - p->Pos.Z));
-  *uu = u;*vv=v;
-  if(l<1.e-3)return true;
-  return false;
+void DeleteCurve(int ip){
+  Curve *c = FindCurve(ip,THEM);
+  if(!c) return;
+  List_T *Surfs = Tree2List(THEM->Surfaces);
+  for(int i=0;i<List_Nbr(Surfs);i++){
+    Surface *s;
+    List_Read(Surfs,i,&s);
+    for(int j=0;j<List_Nbr(s->Generatrices);j++){
+      if(!compareCurve(List_Pointer(s->Generatrices,j),&c))return;
+    }
+  }
+  List_Delete(Surfs);
+  if(c->Num == THEM->MaxLineNum) THEM->MaxLineNum--;
+  Tree_Suppress(THEM->Curves,&c);
 }
 
-bool ProjectPointOnSurface (Surface *s, Vertex &p){
-  float x[3] = {0.5,0.5,0.5};
-  Vertex vv;
-  int check;
-  SURFACE = s;
-  VERTEX = &p;
-  double UMIN = 0.;
-  double UMAX = 1.;
-  double VMIN = 0.;
-  double VMAX = 1.;
-  while(1){
-    newt(x,2,&check,projectPS);
-    vv = InterpolateSurface(s,x[1],x[2],0,0);
-    if(x[1] >= UMIN && x[1] <= UMAX && x[2] >=VMIN && x[2] <= VMAX)break;
-    x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.);
-    x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.);
-  }
-  p.Pos.X = vv.Pos.X;
-  p.Pos.Y = vv.Pos.Y;
-  p.Pos.Z = vv.Pos.Z;
-  if(!check){
-    return false;
+void DeleteSurface(int is){
+  // Il faut absolument coder une
+  // structure coherente pour les volumes.
+  Surface *s = FindSurface(is,THEM);
+  if(!s) return;
+  List_T *Vols = Tree2List(THEM->Volumes);
+  for(int i=0;i<List_Nbr(Vols);i++){
+    Volume *v;
+    List_Read(Vols,i,&v);
+    for(int j=0;j<List_Nbr(v->Surfaces);j++){
+      if(!compareCurve(List_Pointer(v->Surfaces,j),&s))return;
+    }
   }
-  return true;
+  List_Delete(Vols);
+  if(s->Num == THEM->MaxSurfaceNum) THEM->MaxSurfaceNum--;
+  Tree_Suppress(THEM->Surfaces,&s);
 }
 
-bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v){
-  static float x[3];
-  int check;
-  static int deb = 1;
-  double VMIN,VMAX,UMIN,UMAX,l, lmin;
-  Vertex vv;
+void DeleteShape(int Type, int Num){
 
-  SURFACE = s;
-  VERTEX = p;
-  lmin = 1.e24;
-  UMAX = s->ku[s->Nu + s->OrderU];
-  UMIN = s->ku[0];
-  VMAX = s->kv[s->Nv + s->OrderV];
-  VMIN = s->kv[0];
-  if(deb){
-    x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.);
-    x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.);
-    deb = 0;
+  switch(Type){
+  case MSH_POINT:
+    DeletePoint(Num);
+    break;
+  case MSH_SEGM_LINE:
+  case MSH_SEGM_SPLN:
+  case MSH_SEGM_BSPLN:
+  case MSH_SEGM_BEZIER:
+  case MSH_SEGM_CIRC:
+  case MSH_SEGM_ELLI:
+  case MSH_SEGM_NURBS:
+    DeleteCurve(Num);
+    break;
+  case MSH_SURF_NURBS:
+  case MSH_SURF_TRIC:
+  case MSH_SURF_REGL:
+  case MSH_SURF_PLAN:
+    DeleteSurface(Num);
+    break;
+  default:
+    Msg(GERROR, "Impossible to delete entity %d (of type %d)", Num, Type);
+    break;
   }
+}
 
-  if(p->Num == 160){
-    lmin += 1.e90;
-    if(p->Num == 133)UMAX = s->ku[s->Nu + s->OrderU];
+Curve * CreateReversedCurve (Mesh *M,Curve *c){
+  Curve *newc;
+  Vertex *e1,*e2,*e3,*e4;
+  int i;
+  newc = Create_Curve(-c->Num, c->Typ,1,NULL,NULL,-1,-1,0.,1.);
+  newc->Control_Points = List_Create(List_Nbr(c->Control_Points), 1, sizeof(Vertex*));
+  if (c->Typ == MSH_SEGM_ELLI || c->Typ == MSH_SEGM_ELLI_INV){
+    List_Read(c->Control_Points,0,&e1);
+    List_Read(c->Control_Points,1,&e2);
+    List_Read(c->Control_Points,2,&e3);
+    List_Read(c->Control_Points,3,&e4);
+    List_Add(newc->Control_Points,&e4);
+    List_Add(newc->Control_Points,&e2);
+    List_Add(newc->Control_Points,&e3);
+    List_Add(newc->Control_Points,&e1);
   }
+  else
+    List_Invert(c->Control_Points, newc->Control_Points);
   
-  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0]+VERTEX->u,
-                 SURFACE->kv[0],u,v))
-    return true;
-  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0]+VERTEX->u,
-                 SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],u,v))
-    return true;
-  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]-VERTEX->u,
-                 SURFACE->kv[0],u,v))
-    return true;
-  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]-VERTEX->u,
-                 SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],u,v))
-    return true;
-  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0],SURFACE->kv[0]+VERTEX->u,u,v))
-    return true;
-  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0],
-                 SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]-VERTEX->u,u,v))
-    return true;
-  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU],
-                 SURFACE->kv[0]+VERTEX->u,u,v))
-    return true;
-  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU],
-                 SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]-VERTEX->u,u,v))
-    return true;
- 
+  if (c->Typ == MSH_SEGM_NURBS && c->k){
+    newc->k = (float*)malloc((c->degre + List_Nbr(c->Control_Points)+1)*sizeof(float));
+    for(i=0;i<c->degre + List_Nbr(c->Control_Points)+1;i++)
+      newc->k[c->degre + List_Nbr(c->Control_Points)-i] = c->k[i];
+  }
   
-  if(search_in_boundary(SURFACE,VERTEX,SURFACE->kv[0],0,u,v))
-    return true;
-  if(search_in_boundary(SURFACE,VERTEX,SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],0,u,v))
-    return true;
-  if(search_in_boundary(SURFACE,VERTEX,SURFACE->ku[0],1,u,v))
-    return true;
-  if(search_in_boundary(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU],1,u,v))
-    return true;
+  if (c->Typ == MSH_SEGM_CIRC) newc->Typ =  MSH_SEGM_CIRC_INV;
+  if (c->Typ == MSH_SEGM_CIRC_INV) newc->Typ =  MSH_SEGM_CIRC;
+  if (c->Typ == MSH_SEGM_ELLI) newc->Typ =  MSH_SEGM_ELLI_INV;
+  if (c->Typ == MSH_SEGM_ELLI_INV) newc->Typ =  MSH_SEGM_ELLI;
+  newc->Vertices = List_Create(10 ,1 ,sizeof(Vertex*));
+  newc->Method = c->Method;
+  newc->degre  = c->degre;
+  newc->beg = c->end;
+  newc->end = c->beg;
+  newc->ubeg = 1. - c->uend;
+  newc->uend = 1. - c->ubeg;
+  End_Curve(newc);
   
-  while(1){
-    newt(x,2,&check,projectPS);
-    vv = InterpolateSurface(s,x[1],x[2],0,0);
-    l =  sqrt(DSQR(vv.Pos.X - p->Pos.X) +
-              DSQR(vv.Pos.Y - p->Pos.Y) +
-              DSQR(vv.Pos.Z - p->Pos.Z));
-    if(l < 1.e-1)break;
-    else {
-      x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.);
-      x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.);
+  Curve **pc;
+
+  if((pc = (Curve**)Tree_PQuery(M->Curves,&newc)))
+    {
+      Free_Curve(&newc,0);
+      return *pc;
     }
-  }
-  *u = x[1];
-  *v = x[2];
-  
-  if(!check){
-    return false;
-  }
-  return true;
+  else Tree_Insert(M->Curves, &newc);
+  return newc;
 }
 
-bool IntersectCurveSurface (Curve *c, Surface *s){
-  float x[4];
-  int check;
-  SURFACE = s;
-  CURVE = c;
-  newt(x,3,&check,intersectCS);
-  if(!check)return false;
-  return true;
-}
 
-void CopyVertex (Vertex *v, Vertex *vv){
-  vv->lc = v->lc;
-  vv->u = v->u;
-  vv->Pos.X = v->Pos.X;
-  vv->Pos.Y = v->Pos.Y;
-  vv->Pos.Z = v->Pos.Z;
-  vv->Freeze.X = v->Freeze.X;
-  vv->Freeze.Y = v->Freeze.Y;
-  vv->Freeze.Z = v->Freeze.Z;
-}
 
-Vertex *DuplicateVertex (Vertex *v){
-  Vertex *pv;
-  pv = Create_Vertex(NEWPOINT(),0,0,0,0,0);
-  CopyVertex (v,pv);
-  Tree_Insert(THEM->Points,&pv);
-  return pv;
+void ModifyLcPoint(int ip, double lc){
+  Vertex *v = FindPoint(ip,THEM);
+  if(v) v->lc = lc;
 }
 
-void CopyCurve (Curve *c, Curve *cc){
-  int i,j;
-  cc->Typ = c->Typ;
-  //We should not copy the meshing method : if the meshes are to
-  //be copied, the meshing algorithm will take care of it
-  //(e.g. ExtrudeMesh()).
-  //cc->Method = c->Method; 
-  for(i=0;i<4;i++)cc->ipar[i] = c->ipar[i];
-  for(i=0;i<4;i++)cc->dpar[i] = c->dpar[i];
-  cc->l = c->l;
-  for(i=0;i<4;i++)for(j=0;j<4;j++)cc->mat[i][j] = c->mat[i][j];
-  cc->beg = c->beg;
-  cc->end = c->end;
-  cc->ubeg = c->ubeg;
-  cc->uend = c->uend;
-  cc->Control_Points = List_Create(List_Nbr(c->Control_Points),1,sizeof(Vertex*));
-  List_Copy(c->Control_Points,cc->Control_Points);
-  End_Curve(cc);
-  Tree_Insert(THEM->Curves,&cc);
-}
 
-Curve *DuplicateCurve (Curve *c){
+int recognize_seg(int typ, List_T * liste, int *seg){
+  int i,beg,end;
   Curve *pc;
-  Vertex *v,*newv;
-  pc = Create_Curve(NEWLINE(),0,1,NULL,NULL,-1,-1,0.,1.);
-  CopyCurve(c,pc);
-  for(int i=0;i<List_Nbr(c->Control_Points);i++){
-    List_Read(pc->Control_Points,i,&v);
-    newv = DuplicateVertex(v);
-    List_Write(pc->Control_Points,i,&newv);
-  }
-  pc->beg = DuplicateVertex(c->beg);
-  pc->end = DuplicateVertex(c->end);
-  CreateReversedCurve (THEM,pc);
-  
-  return pc;
-}
 
-void CopySurface (Surface *s, Surface *ss){
-  int i,j;
-  ss->Typ = s->Typ;
-  ss->Mat = s->Mat;
-  //We should not copy the meshing method: if the meshes are to
-  //be copied, the meshing algorithm will take care of it
-  //(e.g. ExtrudeMesh()).
-  //ss->Method = s->Method;
-  ss->Recombine = s->Recombine;
-  ss->RecombineAngle = s->RecombineAngle;
-  for(i=0;i<4;i++)ss->ipar[i] = s->ipar[i];
-  ss->Nu = s->Nu;
-  ss->Nv = s->Nv;
-  ss->a = s->a;ss->b = s->b;ss->c = s->c; ss->d = s->d;
-  for(i=0;i<3;i++)for(j=0;j<3;j++)ss->plan[i][j] = s->plan[i][j];
-  for(i=0;i<3;i++)for(j=0;j<3;j++)ss->invplan[i][j] = s->invplan[i][j];
-  ss->Generatrices = List_Create(List_Nbr(s->Generatrices),1,sizeof(Curve*));
-  List_Copy(s->Generatrices,ss->Generatrices);
-  if( s->Control_Points ){
-    ss->Control_Points = List_Create(List_Nbr(s->Control_Points),1,sizeof(Vertex*));
-    List_Copy(s->Control_Points,ss->Control_Points);
+  List_T *temp = Tree2List(THEM->Curves);
+  List_Read(liste,0,&beg);
+  List_Read(liste,List_Nbr(liste)-1,&end);
+  for(i=0;i<List_Nbr(temp);i++){
+    List_Read(temp,i,&pc);
+    if(pc->Typ == typ &&
+       pc->beg->Num == beg &&
+       pc->end->Num == end){
+      List_Delete(temp);
+      *seg = pc->Num;
+      return 1;
+    }
   }
-  End_Surface(ss);
-  Tree_Insert(THEM->Surfaces,&ss);
+  List_Delete(temp);
+  return 0;
 }
 
-Surface *DuplicateSurface (Surface *s){
-  Surface *ps;
-  Curve *c,*newc;
-  Vertex *v,*newv;
-  int i;
 
-  ps = Create_Surface(NEWSURFACE(),0,0);
-  CopySurface(s,ps);
-  for(i=0;i<List_Nbr(ps->Generatrices);i++){
-    List_Read(ps->Generatrices,i,&c);
-    newc = DuplicateCurve(c);
-    List_Write(ps->Generatrices,i,&newc);
-  }
-  
-  for(i=0;i<List_Nbr(ps->Control_Points);i++){
-    List_Read(ps->Control_Points,i,&v);
-    newv = DuplicateVertex(v);
-    List_Write(ps->Control_Points,i,&newv);
-  }
 
-  return ps;
-}
+int recognize_loop(List_T * liste, int *loop){
+  int i,res;
+  EdgeLoop *pe;
 
-static void vecmat4x4(double mat[4][4],double vec[4], double res[4]){
-  int i,j;
-  for(i=0;i<4;i++){
-    res[i] = 0.0;
-    for(j=0;j<4;j++){
-      res[i] += mat[i][j] * vec[j];
+  res = 0;
+  *loop = 0;
+  List_T *temp = Tree2List(THEM->EdgeLoops);
+  for(i=0;i<List_Nbr(temp);i++){
+    List_Read(temp,i,&pe);
+    if(!compare2Lists(pe->Curves,liste,fcmp_absint)){
+      res = 1;
+      *loop = pe->Num;
+      break;
     }
   }
+  List_Delete(temp);
+  return res;
 }
 
-void ApplyTransformationToPoint(double matrix[4][4], Vertex *v){
-  double pos[4],vec[4];
+int recognize_surfloop(List_T * liste, int *loop){
+  int i,res;
+  EdgeLoop *pe;
 
-  if(!ListOfTransformedPoints)
-    ListOfTransformedPoints = List_Create(50,50,sizeof(int));
-  
-  if(!List_Search(ListOfTransformedPoints,&v->Num,fcmp_absint)){
-    List_Add(ListOfTransformedPoints,&v->Num);
+  res = 0;
+  *loop = 0;
+  List_T *temp = Tree2List(THEM->SurfaceLoops);
+  for(i=0;i<List_Nbr(temp);i++){
+    List_Read(temp,i,&pe);
+    if(!compare2Lists(pe->Curves,liste,fcmp_absint)){
+      res = 1;
+      *loop = pe->Num;
+      break;
+    }
   }
-  else
-    return;
-  
-  vec[0] = v->Pos.X;
-  vec[1] = v->Pos.Y;
-  vec[2] = v->Pos.Z;
-  vec[3] = v->w;
-  vecmat4x4(matrix,vec,pos);
-  v->Pos.X = pos[0];
-  v->Pos.Y = pos[1];
-  v->Pos.Z = pos[2];
-  v->w = pos[3];
+  List_Delete(temp);
+  return res;
 }
 
-/* Linear Applications */
+/////////////////////////////////////////////////////////////////////////////////////
+// LINEAR APPLICATIONS
 
 void SetTranslationMatrix (double matrix[4][4],double T[3]){
   int i, j;
@@ -681,7 +598,7 @@ void SetDilatationMatrix (double matrix[4][4],double T[3],double A){
   matrix[3][3] = 1.0;
 }
 
-void GramSchmidt (double v1[3], double v2[3], double v3[3]){
+static void GramSchmidt (double v1[3], double v2[3], double v3[3]){
   double tmp[3];
   norme(v1);
   prodve(v3,v1,tmp);
@@ -739,6 +656,39 @@ void SetRotationMatrix( double matrix[4][4],double Axe[3], double alpha){
   matrix[3][3] = 1.0;
 }
 
+static void vecmat4x4(double mat[4][4],double vec[4], double res[4]){
+  int i,j;
+  for(i=0;i<4;i++){
+    res[i] = 0.0;
+    for(j=0;j<4;j++){
+      res[i] += mat[i][j] * vec[j];
+    }
+  }
+}
+
+void ApplyTransformationToPoint(double matrix[4][4], Vertex *v){
+  double pos[4],vec[4];
+
+  if(!ListOfTransformedPoints)
+    ListOfTransformedPoints = List_Create(50,50,sizeof(int));
+  
+  if(!List_Search(ListOfTransformedPoints,&v->Num,fcmp_absint)){
+    List_Add(ListOfTransformedPoints,&v->Num);
+  }
+  else
+    return;
+  
+  vec[0] = v->Pos.X;
+  vec[1] = v->Pos.Y;
+  vec[2] = v->Pos.Z;
+  vec[3] = v->w;
+  vecmat4x4(matrix,vec,pos);
+  v->Pos.X = pos[0];
+  v->Pos.Y = pos[1];
+  v->Pos.Z = pos[2];
+  v->w = pos[3];
+}
+
 void ApplyTransformationToCurve (double matrix[4][4],Curve *c){
   Vertex *v;
   
@@ -789,40 +739,144 @@ void printSurface(Surface*s){
   }
 }
 
-void ProtudeXYZ (double &x, double &y, double &z, ExtrudeParams *e){
-  double matrix[4][4];
-  double T[3];
-  Vertex v(x,y,z);
-
-  T[0] = -e->geo.pt[0];
-  T[1] = -e->geo.pt[1];
-  T[2] = -e->geo.pt[2];
-  SetTranslationMatrix(matrix,T);
+void ApplicationOnShapes(double matrix[4][4], List_T *ListShapes){
+  int i;
+  Shape O;
+  Vertex *v;
+  Curve *c;
+  Surface *s;
+  
   List_Reset(ListOfTransformedPoints);
-  ApplyTransformationToPoint(matrix,&v);
 
-  SetRotationMatrix(matrix,e->geo.axe,e->geo.angle);
+  for(i=0;i<List_Nbr(ListShapes);i++){
+    List_Read(ListShapes,i,&O);
+    switch(O.Type){
+    case MSH_POINT:
+      v = FindPoint(O.Num,THEM);
+      if(v) ApplyTransformationToPoint(matrix, v);
+      else Msg(GERROR, "Unknown Point %d", O.Num); 
+      break;
+    case MSH_SEGM_LINE:
+    case MSH_SEGM_SPLN:
+    case MSH_SEGM_BSPLN:
+    case MSH_SEGM_BEZIER:
+    case MSH_SEGM_CIRC:
+    case MSH_SEGM_ELLI:
+    case MSH_SEGM_NURBS:
+      c = FindCurve(O.Num,THEM);
+      if(c) ApplyTransformationToCurve(matrix, c);
+      else Msg(GERROR, "Unknown Curve %d", O.Num); 
+      break;
+    case MSH_SURF_NURBS :
+    case MSH_SURF_REGL :
+    case MSH_SURF_TRIC :
+    case MSH_SURF_PLAN :
+      s = FindSurface(O.Num,THEM);
+      if(s) ApplyTransformationToSurface(matrix, s);
+      else Msg(GERROR, "Unknown Surface %d", O.Num); 
+      break;
+    default:
+      Msg(GERROR, "Impossible to transform entity %d (of type %d)", O.Num, O.Type);
+      break;
+    }
+  }
+
   List_Reset(ListOfTransformedPoints);
-  ApplyTransformationToPoint(matrix,&v);
+}
 
-  T[0] = -T[0]; T[1] = -T[1]; T[2] = -T[2];
+void TranslateShapes(double X,double Y,double Z,
+                     List_T *ListShapes, int isFinal){
+  double T[3],matrix[4][4];
+
+  T[0] = X; T[1] = Y; T[2] = Z;
   SetTranslationMatrix(matrix,T);
-  List_Reset(ListOfTransformedPoints);
-  ApplyTransformationToPoint(matrix,&v);
+  ApplicationOnShapes(matrix,ListShapes);
 
-  x = v.Pos.X;
-  y = v.Pos.Y;
-  z = v.Pos.Z;
+  if(CTX.geom.auto_coherence && isFinal) ReplaceAllDuplicates(THEM);
+}
 
-  List_Reset(ListOfTransformedPoints);
+void DilatShapes(double X,double Y,double Z, double A,
+                 List_T *ListShapes, int isFinal){
+  double T[3],matrix[4][4];
+
+  T[0] = X; T[1] = Y; T[2] = Z;
+  SetDilatationMatrix(matrix,T,A);
+  ApplicationOnShapes(matrix,ListShapes);
+
+  if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM);
 }
 
-void Extrude_ProtudePoint(int type, int ip, 
-			  double T0, double T1, double T2,
-			  double A0, double A1, double A2,
-                          double X0, double X1, double X2, double alpha,
-                          Curve **pc, Curve **prc, 
-			  ExtrudeParams *e){
+
+void RotateShapes (double Ax,double Ay,double Az,
+                   double Px,double Py, double Pz,
+                   double alpha, List_T *ListShapes){
+  double A[3], T[3], matrix[4][4];
+
+  T[0] = -Px; T[1] = -Py; T[2] = -Pz;
+  SetTranslationMatrix(matrix,T);
+  ApplicationOnShapes(matrix,ListShapes);
+
+  A[0] = Ax; A[1] = Ay; A[2] = Az;
+  SetRotationMatrix(matrix,A,alpha);
+  ApplicationOnShapes(matrix,ListShapes);
+
+  T[0] = Px; T[1] = Py; T[2] = Pz;
+  SetTranslationMatrix(matrix,T);
+  ApplicationOnShapes(matrix,ListShapes);
+
+  if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM);
+}
+
+void SymmetryShapes (double A,double B,double C,
+                     double D, List_T *ListShapes, int x){
+  double matrix[4][4];
+
+  SetSymmetryMatrix(matrix,A,B,C,D);
+  ApplicationOnShapes(matrix,ListShapes);
+
+  if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM);
+}
+
+
+
+/////////////////////////////////////////////////////////////////////////////////////
+// EXTRUSION 
+
+void ProtudeXYZ (double &x, double &y, double &z, ExtrudeParams *e){
+  double matrix[4][4];
+  double T[3];
+  Vertex v(x,y,z);
+
+  T[0] = -e->geo.pt[0];
+  T[1] = -e->geo.pt[1];
+  T[2] = -e->geo.pt[2];
+  SetTranslationMatrix(matrix,T);
+  List_Reset(ListOfTransformedPoints);
+  ApplyTransformationToPoint(matrix,&v);
+
+  SetRotationMatrix(matrix,e->geo.axe,e->geo.angle);
+  List_Reset(ListOfTransformedPoints);
+  ApplyTransformationToPoint(matrix,&v);
+
+  T[0] = -T[0]; T[1] = -T[1]; T[2] = -T[2];
+  SetTranslationMatrix(matrix,T);
+  List_Reset(ListOfTransformedPoints);
+  ApplyTransformationToPoint(matrix,&v);
+
+  x = v.Pos.X;
+  y = v.Pos.Y;
+  z = v.Pos.Z;
+
+  List_Reset(ListOfTransformedPoints);
+}
+
+
+void Extrude_ProtudePoint(int type, int ip, 
+			  double T0, double T1, double T2,
+			  double A0, double A1, double A2,
+                          double X0, double X1, double X2, double alpha,
+                          Curve **pc, Curve **prc, 
+			  ExtrudeParams *e){
   double xnew,ynew,znew,matrix[4][4],T[3],Ax[3],d;
   Vertex V,*pv,*newp,*chapeau;
   Curve *c;
@@ -1187,94 +1241,8 @@ void Extrude_ProtudeSurface(int type, int is,
   List_Reset(ListOfTransformedPoints);
 }
 
-void DivideCurve (Curve *c , double u, Vertex *v, Curve **c1, Curve **c2){
-  (*c1) = Create_Curve(NEWLINE(),c->Typ,1,NULL,NULL,-1,-1,0.,1.);
-  (*c2) = Create_Curve(NEWLINE(),c->Typ,1,NULL,NULL,-1,-1,0.,1.);
-  CopyCurve(c,*c1);
-  CopyCurve(c,*c2);
-  (*c1)->uend = u;
-  (*c2)->ubeg = u;
-  (*c1)->end = v;
-  (*c2)->beg = v;
-}
-
-bool IntersectCurves (Curve *c1, Curve *c2,
-                      Curve **c11, Curve **c12,
-                      Curve **c21, Curve **c22, Vertex **v){
-  float x[3];
-  Vertex v1,v2;
-  int check;
-  
-  if(!compareVertex(&c1->beg,&c2->beg))return false;
-  if(!compareVertex(&c1->end,&c2->end))return false;
-  if(!compareVertex(&c1->beg,&c2->end))return false;
-  if(!compareVertex(&c2->beg,&c1->end))return false;
-
-  CURVE_2 = c2;
-  CURVE = c1;
-  x[1] = x[2] =  0.0;
-  newt(x,2,&check,intersectCC);
-  if(check)return false;
-  v1 = InterpolateCurve(c1,x[1],0);
-  v2 = InterpolateCurve(c2,x[2],0);
-  if(x[1] <= c1->ubeg)return false;
-  if(x[1] >= c1->uend)return false;
-  if(x[2] <= c2->ubeg)return false;
-  if(x[2] >= c2->uend)return false;
-  if(fabs(v1.Pos.Z - v2.Pos.Z) > 1.e-06 * CTX.lc)return false;
-  *v = Create_Vertex(NEWPOINT(), v1.Pos.X,v1.Pos.Y,v1.Pos.Z,v1.lc,x[1]);
-  Tree_Insert(THEM->Points,v);
-  DivideCurve(c1,x[1],*v,c11,c12);
-  DivideCurve(c2,x[2],*v,c21,c22);
-  return true;
-}
-
-bool IntersectAllSegmentsTogether (void) {
-  bool intersectionfound = true;
-  List_T *TempList;
-  Curve *c1,*c2,*c11,*c12,*c21,*c22;
-  Vertex *v;
-  int i,j;
-
-  while(intersectionfound){
-    TempList = Tree2List(THEM->Curves);
-    if(!List_Nbr(TempList))return true;
-    for(i=0;i<List_Nbr(TempList);i++){
-      List_Read(TempList,i,&c1);
-      intersectionfound = false;
-      for(j=0;j<List_Nbr(TempList);j++){
-        List_Read(TempList,j,&c2);
-        if(c1->Num > 0 && c2->Num >0 && i!=j && intersectionfound == false){
-          if(IntersectCurves(c1,c2,&c11,&c12,&c21,&c22,&v)){
-            Msg(INFO, "Intersection Curve %d->%d",c1->Num,c2->Num);
-            intersectionfound = true;
-            DeleteCurve(c1->Num);
-            DeleteCurve(c2->Num);
-            Tree_Add(THEM->Curves,&c11);
-            Tree_Add(THEM->Curves,&c12);
-            Tree_Add(THEM->Curves,&c21);
-            Tree_Add(THEM->Curves,&c22);
-            
-            CreateReversedCurve(THEM,c11);
-            CreateReversedCurve(THEM,c12);
-            CreateReversedCurve(THEM,c21);
-            CreateReversedCurve(THEM,c22);
-            return true;
-          }
-        }
-      }
-      if(intersectionfound) break;
-    }
-    List_Delete(TempList);
-  }
-  return false;
-
-}
-
-void IntersectSurfaces (Surface *s1, Surface *s2){
-
-
-}
+/////////////////////////////////////////////////////////////////////////////////////
+// REMOVE DUPLICATES
 
 int compareTwoCurves (const void *a, const void *b){
   Curve *c1, *c2;
@@ -1309,10 +1277,6 @@ int compareTwoSurfaces (const void *a, const void *b){
                        compareAbsCurve);
 }
 
-
-/* Fonction eliminant les doublons dans une
-   geometrie*/
-
 void MaxNumPoint(void *a, void *b){
   Vertex *v = *(Vertex**)a;
   THEM->MaxPointNum = MAX(THEM->MaxPointNum,v->Num);
@@ -1520,339 +1484,388 @@ void ReplaceAllDuplicates(Mesh *m){
 }
 
 
-void ModifyLcPoint(int ip, double lc){
-  Vertex *v = FindPoint(ip,THEM);
-  if(v) v->lc = lc;
-}
+/////////////////////////////////////////////////////////////////////////////////////
+// INTERSECTIONS
 
-void ApplicationOnShapes(double matrix[4][4], List_T *ListShapes){
-  int i;
-  Shape O;
-  Vertex *v;
-  Curve *c;
-  Surface *s;
+/*
+  S = (sx(u,v),sy(u,v),sz(u,v))
+  C = (cx(w),cy(w),cz(w))
+
+  sx - cx = 0
+  sy - cy = 0
+  sz - cz = 0
   
-  List_Reset(ListOfTransformedPoints);
+  3eqs 3incs
+*/
 
-  for(i=0;i<List_Nbr(ListShapes);i++){
-    List_Read(ListShapes,i,&O);
-    switch(O.Type){
-    case MSH_POINT:
-      v = FindPoint(O.Num,THEM);
-      if(v) ApplyTransformationToPoint(matrix, v);
-      break;
-    case MSH_SEGM_LINE:
-    case MSH_SEGM_SPLN:
-    case MSH_SEGM_BSPLN:
-    case MSH_SEGM_BEZIER:
-    case MSH_SEGM_CIRC:
-    case MSH_SEGM_ELLI:
-    case MSH_SEGM_NURBS:
-      c = FindCurve(O.Num,THEM);
-      if(c) ApplyTransformationToCurve(matrix, c);
-      break;
-    case MSH_SURF_NURBS :
-    case MSH_SURF_REGL :
-    case MSH_SURF_TRIC :
-    case MSH_SURF_PLAN :
-      s = FindSurface(O.Num,THEM);
-      if(s) ApplyTransformationToSurface(matrix, s);
-      break;
-    default:
-      Msg(GERROR, "Impossible to apply transformation on entity %d (of type %d)", 
-          O.Num, O.Type);
-      break;
-    }
-  }
+static Curve *CURVE, *CURVE_2;
+static Surface *SURFACE;
+static Vertex *VERTEX;
+extern double min1d (int, double (*funct)(double), double *xmin);
+extern void newt(float x[], int n, int *check,
+                 void (*vecfunc)(int, float [], float []));
 
-  List_Reset(ListOfTransformedPoints);
+static void intersectCS (int N, float x[], float res[]){
+  //x[1] = u x[2] = v x[3] = w
+  Vertex s,c;
+  s = InterpolateSurface(SURFACE,x[1],x[2],0,0);
+  c = InterpolateCurve (CURVE,x[3],0);
+  res[1] = s.Pos.X - c.Pos.X;
+  res[2] = s.Pos.Y - c.Pos.Y;
+  res[3] = s.Pos.Z - c.Pos.Z;
 }
 
-void TranslateShapes(double X,double Y,double Z,
-                     List_T *ListShapes, int isFinal){
-  double T[3],matrix[4][4];
-
-  T[0] = X; T[1] = Y; T[2] = Z;
-  SetTranslationMatrix(matrix,T);
-  ApplicationOnShapes(matrix,ListShapes);
-
-  if(CTX.geom.auto_coherence && isFinal) ReplaceAllDuplicates(THEM);
+static void intersectCC (int N, float x[], float res[]){
+  //x[1] = u x[2] = v
+  Vertex c2,c;
+  c2 = InterpolateCurve(CURVE_2,x[2],0);
+  c = InterpolateCurve (CURVE,x[1],0);
+  res[1] = c2.Pos.X - c.Pos.X;
+  res[2] = c2.Pos.Y - c.Pos.Y;
 }
 
-void DilatShapes(double X,double Y,double Z, double A,
-                 List_T *ListShapes, int isFinal){
-  double T[3],matrix[4][4];
+static void projectPS (int N, float x[], float res[]){
+  //x[1] = u x[2] = v
+  Vertex du,dv,c;
+  c  = InterpolateSurface(SURFACE,x[1],x[2],0,0);
+  du = InterpolateSurface(SURFACE,x[1],x[2],1,1);
+  dv = InterpolateSurface(SURFACE,x[1],x[2],1,2);
+  res[1] =
+    (c.Pos.X - VERTEX->Pos.X)*du.Pos.X +
+    (c.Pos.Y - VERTEX->Pos.Y)*du.Pos.Y +
+    (c.Pos.Z - VERTEX->Pos.Z)*du.Pos.Z;
+  res[2] = 
+    (c.Pos.X - VERTEX->Pos.X)*dv.Pos.X +
+    (c.Pos.Y - VERTEX->Pos.Y)*dv.Pos.Y +
+    (c.Pos.Z - VERTEX->Pos.Z)*dv.Pos.Z;
+}
 
-  T[0] = X; T[1] = Y; T[2] = Z;
-  SetDilatationMatrix(matrix,T,A);
-  ApplicationOnShapes(matrix,ListShapes);
-
-  if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM);
+static double projectPC (double u){
+  //x[1] = u x[2] = v
+  if(u<CURVE->ubeg)u = CURVE->ubeg;
+  if(u<CURVE->ubeg)u = CURVE->ubeg;
+  Vertex c;
+  c = InterpolateCurve(CURVE,u,0);
+  return sqrt(  DSQR(c.Pos.X -VERTEX->Pos.X)+
+                DSQR(c.Pos.Y -VERTEX->Pos.Y)+
+                DSQR(c.Pos.Z -VERTEX->Pos.Z));
 }
 
-
-void RotateShapes (double Ax,double Ay,double Az,
-                   double Px,double Py, double Pz,
-                   double alpha, List_T *ListShapes){
-  double A[3], T[3], matrix[4][4];
-
-  T[0] = -Px; T[1] = -Py; T[2] = -Pz;
-  SetTranslationMatrix(matrix,T);
-  ApplicationOnShapes(matrix,ListShapes);
-
-  A[0] = Ax; A[1] = Ay; A[2] = Az;
-  SetRotationMatrix(matrix,A,alpha);
-  ApplicationOnShapes(matrix,ListShapes);
-
-  T[0] = Px; T[1] = Py; T[2] = Pz;
-  SetTranslationMatrix(matrix,T);
-  ApplicationOnShapes(matrix,ListShapes);
-
-  if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM);
+static int UFIXED=0;
+static double FIX;
+static double projectPCS (double u){
+  //x[1] = u x[2] = v
+  double tmin,tmax;
+  if(UFIXED){
+    tmin = SURFACE->kv[0];
+    tmax = SURFACE->kv[SURFACE->Nv+SURFACE->OrderV];
+  }
+  else{
+    tmin = SURFACE->ku[0];
+    tmax = SURFACE->ku[SURFACE->Nu+SURFACE->OrderU];
+  }
+  
+  if(u<tmin)u = tmin;
+  if(u>tmax)u = tmax;
+  Vertex c;
+  if(UFIXED)
+    c = InterpolateSurface(SURFACE,FIX,u,0,0);
+  else
+    c = InterpolateSurface(SURFACE,u,FIX,0,0);
+  return sqrt(DSQR(c.Pos.X -VERTEX->Pos.X)+
+              DSQR(c.Pos.Y -VERTEX->Pos.Y)+
+              DSQR(c.Pos.Z -VERTEX->Pos.Z));
 }
 
-void SymmetryShapes (double A,double B,double C,
-                     double D, List_T *ListShapes, int x){
-  double matrix[4][4];
-
-  SetSymmetryMatrix(matrix,A,B,C,D);
-  ApplicationOnShapes(matrix,ListShapes);
-
-  if(CTX.geom.auto_coherence) ReplaceAllDuplicates(THEM);
+bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER){
+  double xmin;
+  CURVE = c;
+  VERTEX = v;
+  min1d (0, projectPC, &xmin);
+  *RES = InterpolateCurve(CURVE,xmin,0);
+  *DER = InterpolateCurve(CURVE,xmin,1);
+  if(xmin > c->uend){
+    *RES = InterpolateCurve(CURVE,c->uend,0);
+    *DER = InterpolateCurve(CURVE,c->uend,1);
+  }
+  else if(xmin < c->ubeg){
+    *RES = InterpolateCurve(CURVE,c->ubeg,0);
+    *DER = InterpolateCurve(CURVE,c->ubeg,1);
+  }
+  return true;
 }
 
-
-void CopyShape(int Type, int Num, int *New){
-  Surface *s,*news;
-  Curve *c, *newc;
-  Vertex *v,*newv;
+bool search_in_boundary ( Surface *s, Vertex *p, double t, int Fixu, 
+                          double *uu, double *vv){
+  double l,umin,vmin,lmin = 1.e24;
+  int i,N;
+  Vertex vr;
+  double tmin, tmax,u,v;
   
-  switch(Type){
-  case MSH_POINT:
-    if(!(v = FindPoint(Num,THEM))){
-      Msg(GERROR, "Unknown Vertex %d", Num);
-      return;
+  if(Fixu){
+    tmin = s->kv[0];
+    tmax = s->kv[s->Nv+s->OrderV];
+    N = 3*s->Nu;
+  }
+  else{
+    tmin = s->ku[0];
+    tmax = s->ku[s->Nu+s->OrderU];
+    N = 3*s->Nv;
+  }
+  for(i=0;i<N;i++){
+    if(Fixu){
+      u = t;
+      v = tmin + (tmax-tmin)*(double)(i)/(double)(N-1);
     }
-    newv = DuplicateVertex(v);
-    *New = newv->Num;
-    break;
-  case MSH_SEGM_LINE:
-  case MSH_SEGM_SPLN:
-  case MSH_SEGM_BSPLN:
-  case MSH_SEGM_BEZIER:
-  case MSH_SEGM_CIRC:
-  case MSH_SEGM_ELLI:
-  case MSH_SEGM_NURBS:
-    if(!(c = FindCurve(Num,THEM))){
-      Msg(GERROR, "Unknown Curve %d", Num);
-      return;
+    else {
+      v = t;
+      u = tmin + (tmax-tmin)*(double)(i)/(double)(N-1);
     }
-    newc = DuplicateCurve(c);
-    *New = newc->Num;
-    break;
-  case MSH_SURF_NURBS:
-  case MSH_SURF_TRIC:
-  case MSH_SURF_REGL:
-  case MSH_SURF_PLAN:
-    if(!(s = FindSurface(Num,THEM))){
-      Msg(GERROR, "Unknown Surface %d", Num);
-      return;
+    vr = InterpolateSurface(SURFACE,u,v,0,0);
+    l =  sqrt(DSQR(vr.Pos.X - p->Pos.X) +  
+              DSQR(vr.Pos.Y - p->Pos.Y) +
+              DSQR(vr.Pos.Z - p->Pos.Z));
+    if(l<lmin){
+      lmin = l;
+      umin = u;
+      vmin = v;
     }
-    news = DuplicateSurface(s);
-    *New = news->Num;
-    break;
-  default:
-    Msg(GERROR, "Impossible to copy entity %d (of type %d)", Num, Type);
-    break;
   }
-}
 
-void DeletePoint(int ip){
-  Vertex *v = FindPoint(ip,THEM);
-  if(!v) return;
-  List_T *Curves = Tree2List(THEM->Curves);
-  for(int i=0;i<List_Nbr(Curves);i++){
-    Curve *c;
-    List_Read(Curves,i,&c);
-    for(int j=0;j<List_Nbr(c->Control_Points);j++){
-      if(!compareVertex(List_Pointer(c->Control_Points,j),&v))return;
-    }
+  FIX = t;
+  UFIXED = Fixu;
+  double xm;
+  if(Fixu)xm = vmin;
+  else xm = umin;
+  if(lmin > 1.e-3) min1d (0, projectPCS, &xm);
+  if(Fixu){
+    *uu = t;
+    *vv = xm;
   }
-  List_Delete(Curves);
-  if(v->Num == THEM->MaxPointNum) THEM->MaxPointNum--;
-  Tree_Suppress(THEM->Points,&v);
-}
-
-void DeleteCurve(int ip){
-  Curve *c = FindCurve(ip,THEM);
-  if(!c) return;
-  List_T *Surfs = Tree2List(THEM->Surfaces);
-  for(int i=0;i<List_Nbr(Surfs);i++){
-    Surface *s;
-    List_Read(Surfs,i,&s);
-    for(int j=0;j<List_Nbr(s->Generatrices);j++){
-      if(!compareCurve(List_Pointer(s->Generatrices,j),&c))return;
-    }
+  else{
+    *vv = t;
+    *uu = xm;
   }
-  List_Delete(Surfs);
-  if(c->Num == THEM->MaxLineNum) THEM->MaxLineNum--;
-  Tree_Suppress(THEM->Curves,&c);
+  vr = InterpolateSurface(SURFACE,*uu,*vv,0,0);
+  l =  sqrt(DSQR(vr.Pos.X - p->Pos.X) +
+            DSQR(vr.Pos.Y - p->Pos.Y) +
+            DSQR(vr.Pos.Z - p->Pos.Z));
+  if(l<1.e-3)return true;
+  return false;
 }
 
-void DeleteSurf( int is ){
-
-  // Il faut absolument coder une
-  // structure coherente pour les volumes.
-  Surface *s = FindSurface(is,THEM);
-  if(!s) return;
-  List_T *Vols = Tree2List(THEM->Volumes);
-  for(int i=0;i<List_Nbr(Vols);i++){
-    Volume *v;
-    List_Read(Vols,i,&v);
-    for(int j=0;j<List_Nbr(v->Surfaces);j++){
-      if(!compareCurve(List_Pointer(v->Surfaces,j),&s))return;
-    }
-  }
-  List_Delete(Vols);
-  if(s->Num == THEM->MaxSurfaceNum) THEM->MaxSurfaceNum--;
-  //s->Num = 1000000000;
-  Tree_Suppress(THEM->Surfaces,&s);
+bool try_a_value(Surface *s, Vertex *p, double u, double v,double *uu, double *vv){
+  Vertex vr = InterpolateSurface(s,u,v,0,0);
+  double l =  sqrt(DSQR(vr.Pos.X - p->Pos.X) +  
+                   DSQR(vr.Pos.Y - p->Pos.Y) + 
+                   DSQR(vr.Pos.Z - p->Pos.Z));
+  *uu = u;*vv=v;
+  if(l<1.e-3)return true;
+  return false;
 }
 
-void DeleteShape(int Type, int Num){
-
-  switch(Type){
-  case MSH_POINT:
-    DeletePoint(Num);
-    break;
-  case MSH_SEGM_LINE:
-  case MSH_SEGM_SPLN:
-  case MSH_SEGM_BSPLN:
-  case MSH_SEGM_BEZIER:
-  case MSH_SEGM_CIRC:
-  case MSH_SEGM_ELLI:
-  case MSH_SEGM_NURBS:
-    DeleteCurve(Num);
-    break;
-  case MSH_SURF_NURBS:
-  case MSH_SURF_TRIC:
-  case MSH_SURF_REGL:
-  case MSH_SURF_PLAN:
-    DeleteSurf(Num);
-    break;
-  default:
-    Msg(GERROR, "Impossible to delete entity %d (of type %d)", Num, Type);
-    break;
+bool ProjectPointOnSurface (Surface *s, Vertex &p){
+  float x[3] = {0.5,0.5,0.5};
+  Vertex vv;
+  int check;
+  SURFACE = s;
+  VERTEX = &p;
+  double UMIN = 0.;
+  double UMAX = 1.;
+  double VMIN = 0.;
+  double VMAX = 1.;
+  while(1){
+    newt(x,2,&check,projectPS);
+    vv = InterpolateSurface(s,x[1],x[2],0,0);
+    if(x[1] >= UMIN && x[1] <= UMAX && x[2] >=VMIN && x[2] <= VMAX)break;
+    x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.);
+    x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.);
+  }
+  p.Pos.X = vv.Pos.X;
+  p.Pos.Y = vv.Pos.Y;
+  p.Pos.Z = vv.Pos.Z;
+  if(!check){
+    return false;
   }
+  return true;
 }
 
-Curve * CreateReversedCurve (Mesh *M,Curve *c){
-  Curve *newc;
-  Vertex *e1,*e2,*e3,*e4;
-  int i;
-  newc = Create_Curve(-c->Num, c->Typ,1,NULL,NULL,-1,-1,0.,1.);
-  newc->Control_Points = List_Create(List_Nbr(c->Control_Points), 1, sizeof(Vertex*));
-  if (c->Typ == MSH_SEGM_ELLI || c->Typ == MSH_SEGM_ELLI_INV){
-    List_Read(c->Control_Points,0,&e1);
-    List_Read(c->Control_Points,1,&e2);
-    List_Read(c->Control_Points,2,&e3);
-    List_Read(c->Control_Points,3,&e4);
-    List_Add(newc->Control_Points,&e4);
-    List_Add(newc->Control_Points,&e2);
-    List_Add(newc->Control_Points,&e3);
-    List_Add(newc->Control_Points,&e1);
+bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v){
+  static float x[3];
+  int check;
+  static int deb = 1;
+  double VMIN,VMAX,UMIN,UMAX,l, lmin;
+  Vertex vv;
+
+  SURFACE = s;
+  VERTEX = p;
+  lmin = 1.e24;
+  UMAX = s->ku[s->Nu + s->OrderU];
+  UMIN = s->ku[0];
+  VMAX = s->kv[s->Nv + s->OrderV];
+  VMIN = s->kv[0];
+  if(deb){
+    x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.);
+    x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.);
+    deb = 0;
   }
-  else
-    List_Invert(c->Control_Points, newc->Control_Points);
-  
-  if (c->Typ == MSH_SEGM_NURBS && c->k){
-    newc->k = (float*)malloc((c->degre + List_Nbr(c->Control_Points)+1)*sizeof(float));
-    for(i=0;i<c->degre + List_Nbr(c->Control_Points)+1;i++)
-      newc->k[c->degre + List_Nbr(c->Control_Points)-i] = c->k[i];
+
+  if(p->Num == 160){
+    lmin += 1.e90;
+    if(p->Num == 133)UMAX = s->ku[s->Nu + s->OrderU];
   }
   
-  if (c->Typ == MSH_SEGM_CIRC) newc->Typ =  MSH_SEGM_CIRC_INV;
-  if (c->Typ == MSH_SEGM_CIRC_INV) newc->Typ =  MSH_SEGM_CIRC;
-  if (c->Typ == MSH_SEGM_ELLI) newc->Typ =  MSH_SEGM_ELLI_INV;
-  if (c->Typ == MSH_SEGM_ELLI_INV) newc->Typ =  MSH_SEGM_ELLI;
-  newc->Vertices = List_Create(10 ,1 ,sizeof(Vertex*));
-  newc->Method = c->Method;
-  newc->degre  = c->degre;
-  newc->beg = c->end;
-  newc->end = c->beg;
-  newc->ubeg = 1. - c->uend;
-  newc->uend = 1. - c->ubeg;
-  End_Curve(newc);
+  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0]+VERTEX->u,
+                 SURFACE->kv[0],u,v))
+    return true;
+  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0]+VERTEX->u,
+                 SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],u,v))
+    return true;
+  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]-VERTEX->u,
+                 SURFACE->kv[0],u,v))
+    return true;
+  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]-VERTEX->u,
+                 SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],u,v))
+    return true;
+  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0],SURFACE->kv[0]+VERTEX->u,u,v))
+    return true;
+  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0],
+                 SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]-VERTEX->u,u,v))
+    return true;
+  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU],
+                 SURFACE->kv[0]+VERTEX->u,u,v))
+    return true;
+  if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU],
+                 SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]-VERTEX->u,u,v))
+    return true;
+ 
   
-  Curve **pc;
-
-  if((pc = (Curve**)Tree_PQuery(M->Curves,&newc)))
-    {
-      Free_Curve(&newc,0);
-      return *pc;
+  if(search_in_boundary(SURFACE,VERTEX,SURFACE->kv[0],0,u,v))
+    return true;
+  if(search_in_boundary(SURFACE,VERTEX,SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],0,u,v))
+    return true;
+  if(search_in_boundary(SURFACE,VERTEX,SURFACE->ku[0],1,u,v))
+    return true;
+  if(search_in_boundary(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU],1,u,v))
+    return true;
+  
+  while(1){
+    newt(x,2,&check,projectPS);
+    vv = InterpolateSurface(s,x[1],x[2],0,0);
+    l =  sqrt(DSQR(vv.Pos.X - p->Pos.X) +
+              DSQR(vv.Pos.Y - p->Pos.Y) +
+              DSQR(vv.Pos.Z - p->Pos.Z));
+    if(l < 1.e-1)break;
+    else {
+      x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.);
+      x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.);
     }
-  else Tree_Insert(M->Curves, &newc);
-  return newc;
+  }
+  *u = x[1];
+  *v = x[2];
+  
+  if(!check){
+    return false;
+  }
+  return true;
 }
 
-int recognize_seg(int typ, List_T * liste, int *seg){
-  int i,beg,end;
-  Curve *pc;
-
-  List_T *temp = Tree2List(THEM->Curves);
-  List_Read(liste,0,&beg);
-  List_Read(liste,List_Nbr(liste)-1,&end);
-  for(i=0;i<List_Nbr(temp);i++){
-    List_Read(temp,i,&pc);
-    if(pc->Typ == typ &&
-       pc->beg->Num == beg &&
-       pc->end->Num == end){
-      List_Delete(temp);
-      *seg = pc->Num;
-      return 1;
-    }
-  }
-  List_Delete(temp);
-  return 0;
+bool IntersectCurveSurface (Curve *c, Surface *s){
+  float x[4];
+  int check;
+  SURFACE = s;
+  CURVE = c;
+  newt(x,3,&check,intersectCS);
+  if(!check)return false;
+  return true;
 }
 
 
+void DivideCurve (Curve *c , double u, Vertex *v, Curve **c1, Curve **c2){
+  (*c1) = Create_Curve(NEWLINE(),c->Typ,1,NULL,NULL,-1,-1,0.,1.);
+  (*c2) = Create_Curve(NEWLINE(),c->Typ,1,NULL,NULL,-1,-1,0.,1.);
+  CopyCurve(c,*c1);
+  CopyCurve(c,*c2);
+  (*c1)->uend = u;
+  (*c2)->ubeg = u;
+  (*c1)->end = v;
+  (*c2)->beg = v;
+}
 
-int recognize_loop(List_T * liste, int *loop){
-  int i,res;
-  EdgeLoop *pe;
+bool IntersectCurves (Curve *c1, Curve *c2,
+                      Curve **c11, Curve **c12,
+                      Curve **c21, Curve **c22, Vertex **v){
+  float x[3];
+  Vertex v1,v2;
+  int check;
+  
+  if(!compareVertex(&c1->beg,&c2->beg))return false;
+  if(!compareVertex(&c1->end,&c2->end))return false;
+  if(!compareVertex(&c1->beg,&c2->end))return false;
+  if(!compareVertex(&c2->beg,&c1->end))return false;
 
-  res = 0;
-  *loop = 0;
-  List_T *temp = Tree2List(THEM->EdgeLoops);
-  for(i=0;i<List_Nbr(temp);i++){
-    List_Read(temp,i,&pe);
-    if(!compare2Lists(pe->Curves,liste,fcmp_absint)){
-      res = 1;
-      *loop = pe->Num;
-      break;
-    }
-  }
-  List_Delete(temp);
-  return res;
+  CURVE_2 = c2;
+  CURVE = c1;
+  x[1] = x[2] =  0.0;
+  newt(x,2,&check,intersectCC);
+  if(check)return false;
+  v1 = InterpolateCurve(c1,x[1],0);
+  v2 = InterpolateCurve(c2,x[2],0);
+  if(x[1] <= c1->ubeg)return false;
+  if(x[1] >= c1->uend)return false;
+  if(x[2] <= c2->ubeg)return false;
+  if(x[2] >= c2->uend)return false;
+  if(fabs(v1.Pos.Z - v2.Pos.Z) > 1.e-06 * CTX.lc)return false;
+  *v = Create_Vertex(NEWPOINT(), v1.Pos.X,v1.Pos.Y,v1.Pos.Z,v1.lc,x[1]);
+  Tree_Insert(THEM->Points,v);
+  DivideCurve(c1,x[1],*v,c11,c12);
+  DivideCurve(c2,x[2],*v,c21,c22);
+  return true;
 }
 
-int recognize_surfloop(List_T * liste, int *loop){
-  int i,res;
-  EdgeLoop *pe;
+bool IntersectAllSegmentsTogether (void) {
+  bool intersectionfound = true;
+  List_T *TempList;
+  Curve *c1,*c2,*c11,*c12,*c21,*c22;
+  Vertex *v;
+  int i,j;
 
-  res = 0;
-  *loop = 0;
-  List_T *temp = Tree2List(THEM->SurfaceLoops);
-  for(i=0;i<List_Nbr(temp);i++){
-    List_Read(temp,i,&pe);
-    if(!compare2Lists(pe->Curves,liste,fcmp_absint)){
-      res = 1;
-      *loop = pe->Num;
-      break;
+  while(intersectionfound){
+    TempList = Tree2List(THEM->Curves);
+    if(!List_Nbr(TempList))return true;
+    for(i=0;i<List_Nbr(TempList);i++){
+      List_Read(TempList,i,&c1);
+      intersectionfound = false;
+      for(j=0;j<List_Nbr(TempList);j++){
+        List_Read(TempList,j,&c2);
+        if(c1->Num > 0 && c2->Num >0 && i!=j && intersectionfound == false){
+          if(IntersectCurves(c1,c2,&c11,&c12,&c21,&c22,&v)){
+            Msg(INFO, "Intersection Curve %d->%d",c1->Num,c2->Num);
+            intersectionfound = true;
+            DeleteCurve(c1->Num);
+            DeleteCurve(c2->Num);
+            Tree_Add(THEM->Curves,&c11);
+            Tree_Add(THEM->Curves,&c12);
+            Tree_Add(THEM->Curves,&c21);
+            Tree_Add(THEM->Curves,&c22);
+            
+            CreateReversedCurve(THEM,c11);
+            CreateReversedCurve(THEM,c12);
+            CreateReversedCurve(THEM,c21);
+            CreateReversedCurve(THEM,c22);
+            return true;
+          }
+        }
+      }
+      if(intersectionfound) break;
     }
+    List_Delete(TempList);
   }
-  List_Delete(temp);
-  return res;
+  return false;
+
 }
 
+void IntersectSurfaces (Surface *s1, Surface *s2){
+
+
+}
diff --git a/Geo/CAD.h b/Geo/CAD.h
index d2e1048e3a63bce7d67f209d9e4cbac0d36f645c..ad75f0ab5909a7925efd4eb38243c4c8818f9ba5 100644
--- a/Geo/CAD.h
+++ b/Geo/CAD.h
@@ -12,6 +12,7 @@ int NEWVOLUME(void);
 int NEWPHYSICAL(void);
 int NEWREG(void);
 
+
 Vertex *FindPoint(int inum, Mesh *M);
 Vertex *FindVertex(int inum, Mesh *M);
 Curve *FindCurve(int inum, Mesh *M);
@@ -20,10 +21,25 @@ Volume *FindVolume(int inum, Mesh *M);
 EdgeLoop *FindEdgeLoop(int inum, Mesh *M);
 SurfaceLoop *FindSurfaceLoop(int inum, Mesh *M);
 
-bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER);
-bool ProjectPointOnSurface (Surface *s, Vertex &p);
-bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v);
 
+Curve * CreateReversedCurve (Mesh *M,Curve *c);
+void ModifyLcPoint(int ip, double lc);
+
+
+void TranslateShapes(double X,double Y,double Z,
+                     List_T *ListShapes, int isFinal);
+void DilatShapes(double X,double Y,double Z, double A,
+                 List_T *ListShapes, int isFinal);
+void RotateShapes(double Ax,double Ay,double Az,
+		  double Px,double Py, double Pz,
+		  double alpha, List_T *ListShapes);
+void SymmetryShapes(double A,double B,double C,
+		    double D, List_T *ListShapes, int x);
+void CopyShape(int Type, int Num, int *New);
+void DeleteShape(int Type, int Num);
+
+
+void ProtudeXYZ(double &x, double &y, double &z, ExtrudeParams *e);
 void Extrude_ProtudePoint(int type, int ip, 
 			  double T0, double T1, double T2,
 			  double A0, double A1, double A2,
@@ -40,28 +56,16 @@ void Extrude_ProtudeSurface(int type, int is,
 			    double A0, double A1, double A2,
 			    double X0, double X1, double X2, double alpha,
                             int NewVolume, ExtrudeParams *e);
-void ProtudeXYZ ( double &x, double &y, double &z, ExtrudeParams *e);
-void ReplaceAllDuplicates ( Mesh *m );
-bool IntersectAllSegmentsTogether(void);
 
-void ModifyLcPoint(int ip, double lc);
-void TranslateShapes(double X,double Y,double Z,
-                     List_T *ListShapes, int isFinal);
-void DilatShapes(double X,double Y,double Z, double A,
-                 List_T *ListShapes, int isFinal);
-void RotateShapes (double Ax,double Ay,double Az,
-                   double Px,double Py, double Pz,
-                   double alpha, List_T *ListShapes);
-void SymmetryShapes (double A,double B,double C,
-                     double D, List_T *ListShapes, int x);
-void CopyShape(int Type, int Num, int *New);
 
-void DeletePoint(int ip);
-void DeleteCurve(int ip);
-void DeleteSurf( int is );
-void DeleteShape(int Type, int Num);
+void ReplaceAllDuplicates(Mesh *m);
+
+
+bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER);
+bool ProjectPointOnSurface (Surface *s, Vertex &p);
+bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v);
+bool IntersectAllSegmentsTogether(void);
 
-Curve * CreateReversedCurve (Mesh *M,Curve *c);
 
 int recognize_seg(int typ, List_T * liste, int *seg);
 int recognize_loop(List_T * liste, int *loop);
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 63611366675083be8e10de69919d23ececd5afc6..df438b925fa0fadc249ef173a0a4cd8bc4299f1b 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -177,7 +177,7 @@
 #line 1 "Gmsh.y"
  
 
-// $Id: Gmsh.tab.cpp,v 1.125 2001-11-12 11:25:22 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.126 2001-11-12 13:33:57 geuzaine Exp $
 
 #include <stdarg.h>
 #ifndef _NOPLUGIN
@@ -264,7 +264,7 @@ typedef union {
 
 
 
-#define	YYFINAL		1697
+#define	YYFINAL		1700
 #define	YYFLAG		-32768
 #define	YYNTBASE	190
 
@@ -335,28 +335,28 @@ static const short yyprhs[] = {     0,
    986,  1002,  1004,  1006,  1008,  1010,  1012,  1014,  1016,  1021,
   1029,  1039,  1046,  1050,  1057,  1064,  1074,  1081,  1091,  1097,
   1106,  1115,  1127,  1134,  1144,  1154,  1164,  1172,  1181,  1194,
-  1201,  1207,  1215,  1223,  1236,  1244,  1252,  1262,  1280,  1289,
-  1298,  1306,  1314,  1326,  1332,  1341,  1354,  1363,  1386,  1407,
-  1416,  1425,  1431,  1440,  1448,  1457,  1463,  1475,  1481,  1491,
-  1493,  1495,  1497,  1498,  1501,  1506,  1511,  1518,  1522,  1526,
-  1530,  1538,  1541,  1544,  1551,  1560,  1569,  1580,  1582,  1585,
-  1587,  1591,  1596,  1598,  1607,  1620,  1635,  1644,  1657,  1672,
-  1673,  1686,  1687,  1704,  1705,  1724,  1733,  1746,  1761,  1762,
-  1775,  1776,  1793,  1794,  1813,  1815,  1818,  1828,  1836,  1839,
-  1846,  1856,  1866,  1875,  1884,  1893,  1900,  1905,  1908,  1911,
-  1913,  1915,  1917,  1919,  1921,  1923,  1927,  1930,  1933,  1936,
-  1940,  1944,  1948,  1952,  1956,  1960,  1964,  1968,  1972,  1976,
-  1980,  1984,  1988,  1992,  1998,  2003,  2008,  2013,  2018,  2023,
-  2028,  2033,  2038,  2043,  2048,  2055,  2060,  2065,  2070,  2075,
-  2080,  2085,  2092,  2099,  2106,  2111,  2116,  2121,  2126,  2131,
-  2136,  2141,  2146,  2151,  2156,  2161,  2168,  2173,  2178,  2183,
-  2188,  2193,  2198,  2205,  2212,  2219,  2224,  2226,  2228,  2230,
-  2232,  2234,  2239,  2242,  2248,  2252,  2259,  2264,  2272,  2274,
-  2277,  2280,  2284,  2288,  2300,  2310,  2318,  2326,  2327,  2331,
-  2333,  2337,  2338,  2342,  2346,  2348,  2352,  2354,  2356,  2360,
-  2365,  2369,  2375,  2379,  2384,  2391,  2399,  2401,  2403,  2407,
-  2411,  2421,  2429,  2431,  2437,  2441,  2448,  2450,  2454,  2456,
-  2463,  2468,  2473,  2480,  2487
+  1201,  1209,  1217,  1230,  1238,  1246,  1256,  1274,  1283,  1292,
+  1300,  1308,  1320,  1329,  1342,  1351,  1374,  1395,  1404,  1413,
+  1422,  1430,  1439,  1445,  1457,  1463,  1473,  1475,  1477,  1479,
+  1480,  1483,  1490,  1497,  1504,  1509,  1514,  1521,  1525,  1529,
+  1533,  1541,  1544,  1547,  1554,  1563,  1572,  1583,  1585,  1588,
+  1590,  1594,  1599,  1601,  1610,  1623,  1638,  1647,  1660,  1675,
+  1676,  1689,  1690,  1707,  1708,  1727,  1736,  1749,  1764,  1765,
+  1778,  1779,  1796,  1797,  1816,  1818,  1821,  1831,  1839,  1842,
+  1849,  1859,  1869,  1878,  1887,  1896,  1903,  1908,  1911,  1914,
+  1916,  1918,  1920,  1922,  1924,  1926,  1930,  1933,  1936,  1939,
+  1943,  1947,  1951,  1955,  1959,  1963,  1967,  1971,  1975,  1979,
+  1983,  1987,  1991,  1995,  2001,  2006,  2011,  2016,  2021,  2026,
+  2031,  2036,  2041,  2046,  2051,  2058,  2063,  2068,  2073,  2078,
+  2083,  2088,  2095,  2102,  2109,  2114,  2119,  2124,  2129,  2134,
+  2139,  2144,  2149,  2154,  2159,  2164,  2171,  2176,  2181,  2186,
+  2191,  2196,  2201,  2208,  2215,  2222,  2227,  2229,  2231,  2233,
+  2235,  2237,  2242,  2245,  2251,  2255,  2262,  2267,  2275,  2277,
+  2280,  2283,  2287,  2291,  2303,  2313,  2321,  2329,  2330,  2334,
+  2336,  2340,  2341,  2345,  2349,  2351,  2355,  2357,  2359,  2363,
+  2368,  2372,  2378,  2382,  2387,  2394,  2402,  2404,  2406,  2410,
+  2414,  2424,  2432,  2434,  2440,  2444,  2451,  2453,  2457,  2459,
+  2466,  2471,  2476,  2483,  2490
 };
 
 static const short yyrhs[] = {   193,
@@ -480,136 +480,136 @@ static const short yyrhs[] = {   193,
      0,    53,    38,   182,   268,   183,     7,   276,     6,     0,
     69,    38,   276,     7,   188,   268,   187,   268,   187,   268,
    189,     6,     0,    45,    46,   276,     7,   268,     6,     0,
-    38,   188,   268,   189,     6,     0,    41,   182,   268,   183,
-     7,   276,     6,     0,    43,   182,   268,   183,     7,   276,
-     6,     0,    69,    41,   276,     7,   188,   268,   187,   268,
-   187,   268,   189,     6,     0,    39,   182,   268,   183,     7,
-   276,     6,     0,    40,   182,   268,   183,     7,   276,     6,
-     0,    39,   182,   268,   183,     7,   276,    49,   270,     6,
-     0,    47,   182,   268,   183,     7,   188,   268,   187,   268,
-   187,     5,   187,     5,   187,     5,   189,     6,     0,    53,
-    41,   182,   268,   183,     7,   276,     6,     0,    41,    64,
-   182,   268,   183,     7,   276,     6,     0,    85,   182,   268,
-   183,     7,   276,     6,     0,    86,   182,   268,   183,     7,
-   276,     6,     0,    87,   182,   268,   183,     7,   276,    91,
-   276,    88,   268,     6,     0,    41,   188,   268,   189,     6,
-     0,    49,    42,   182,   268,   183,     7,   276,     6,     0,
-   147,    42,   182,   268,   183,     7,   188,   268,   187,   276,
-   189,     6,     0,    50,    42,   182,   268,   183,     7,   276,
-     6,     0,    87,    42,    89,    90,   182,   268,   183,     7,
-   274,    91,   188,   276,   187,   276,   189,    88,   188,   268,
-   187,   268,   189,     6,     0,    87,    42,   182,   268,   183,
-     7,   274,    91,   188,   276,   187,   276,   189,    88,   188,
-   268,   187,   268,   189,     6,     0,    53,    42,   182,   268,
-   183,     7,   276,     6,     0,    42,    64,   182,   268,   183,
-     7,   276,     6,     0,    42,   188,   268,   189,     6,     0,
-    52,    44,   182,   268,   183,     7,   276,     6,     0,    44,
-   182,   268,   183,     7,   276,     6,     0,    53,    44,   182,
-   268,   183,     7,   276,     6,     0,    59,   270,   188,   250,
-   189,     0,    58,   188,   270,   187,   270,   187,   268,   189,
-   188,   250,   189,     0,    60,   270,   188,   250,   189,     0,
-    61,   188,   270,   187,   268,   189,   188,   250,   189,     0,
-   252,     0,   251,     0,   249,     0,     0,   251,   248,     0,
-    63,   188,   251,   189,     0,    66,   188,   251,   189,     0,
-    66,     4,   184,   268,   185,     6,     0,    66,   103,     6,
-     0,     4,   282,     6,     0,     4,   268,     6,     0,    57,
-   182,     4,   183,   186,     4,     6,     0,    99,     6,     0,
-    37,     6,     0,    94,   182,   268,     8,   268,   183,     0,
-    94,   182,   268,     8,   268,     8,   268,   183,     0,    94,
-     4,    95,   188,   268,     8,   268,   189,     0,    94,     4,
-    95,   188,   268,     8,   268,     8,   268,   189,     0,    96,
-     0,   102,     4,     0,   100,     0,   101,     4,     6,     0,
-    97,   182,   268,   183,     0,    98,     0,    62,    38,   188,
-   268,   187,   270,   189,     6,     0,    62,    38,   188,   268,
+    41,   182,   268,   183,     7,   276,     6,     0,    43,   182,
+   268,   183,     7,   276,     6,     0,    69,    41,   276,     7,
+   188,   268,   187,   268,   187,   268,   189,     6,     0,    39,
+   182,   268,   183,     7,   276,     6,     0,    40,   182,   268,
+   183,     7,   276,     6,     0,    39,   182,   268,   183,     7,
+   276,    49,   270,     6,     0,    47,   182,   268,   183,     7,
+   188,   268,   187,   268,   187,     5,   187,     5,   187,     5,
+   189,     6,     0,    53,    41,   182,   268,   183,     7,   276,
+     6,     0,    41,    64,   182,   268,   183,     7,   276,     6,
+     0,    85,   182,   268,   183,     7,   276,     6,     0,    86,
+   182,   268,   183,     7,   276,     6,     0,    87,   182,   268,
+   183,     7,   276,    91,   276,    88,   268,     6,     0,    49,
+    42,   182,   268,   183,     7,   276,     6,     0,   147,    42,
+   182,   268,   183,     7,   188,   268,   187,   276,   189,     6,
+     0,    50,    42,   182,   268,   183,     7,   276,     6,     0,
+    87,    42,    89,    90,   182,   268,   183,     7,   274,    91,
+   188,   276,   187,   276,   189,    88,   188,   268,   187,   268,
+   189,     6,     0,    87,    42,   182,   268,   183,     7,   274,
+    91,   188,   276,   187,   276,   189,    88,   188,   268,   187,
+   268,   189,     6,     0,    53,    42,   182,   268,   183,     7,
+   276,     6,     0,    42,    64,   182,   268,   183,     7,   276,
+     6,     0,    52,    44,   182,   268,   183,     7,   276,     6,
+     0,    44,   182,   268,   183,     7,   276,     6,     0,    53,
+    44,   182,   268,   183,     7,   276,     6,     0,    59,   270,
+   188,   250,   189,     0,    58,   188,   270,   187,   270,   187,
+   268,   189,   188,   250,   189,     0,    60,   270,   188,   250,
+   189,     0,    61,   188,   270,   187,   268,   189,   188,   250,
+   189,     0,   252,     0,   251,     0,   249,     0,     0,   251,
+   248,     0,   251,    38,   188,   278,   189,     6,     0,   251,
+    41,   188,   278,   189,     6,     0,   251,    42,   188,   278,
+   189,     6,     0,    63,   188,   251,   189,     0,    66,   188,
+   251,   189,     0,    66,     4,   184,   268,   185,     6,     0,
+    66,   103,     6,     0,     4,   282,     6,     0,     4,   268,
+     6,     0,    57,   182,     4,   183,   186,     4,     6,     0,
+    99,     6,     0,    37,     6,     0,    94,   182,   268,     8,
+   268,   183,     0,    94,   182,   268,     8,   268,     8,   268,
+   183,     0,    94,     4,    95,   188,   268,     8,   268,   189,
+     0,    94,     4,    95,   188,   268,     8,   268,     8,   268,
+   189,     0,    96,     0,   102,     4,     0,   100,     0,   101,
+     4,     6,     0,    97,   182,   268,   183,     0,    98,     0,
+    62,    38,   188,   268,   187,   270,   189,     6,     0,    62,
+    38,   188,   268,   187,   270,   187,   270,   187,   268,   189,
+     6,     0,    62,    38,   188,   268,   187,   270,   187,   270,
+   187,   270,   187,   268,   189,     6,     0,    62,    41,   188,
+   268,   187,   270,   189,     6,     0,    62,    41,   188,   268,
    187,   270,   187,   270,   187,   268,   189,     6,     0,    62,
-    38,   188,   268,   187,   270,   187,   270,   187,   270,   187,
-   268,   189,     6,     0,    62,    41,   188,   268,   187,   270,
-   189,     6,     0,    62,    41,   188,   268,   187,   270,   187,
-   270,   187,   268,   189,     6,     0,    62,    41,   188,   268,
-   187,   270,   187,   270,   187,   270,   187,   268,   189,     6,
-     0,     0,    62,    41,   188,   268,   187,   270,   189,   257,
-   188,   263,   189,     6,     0,     0,    62,    41,   188,   268,
-   187,   270,   187,   270,   187,   268,   189,   258,   188,   263,
-   189,     6,     0,     0,    62,    41,   188,   268,   187,   270,
-   187,   270,   187,   270,   187,   268,   189,   259,   188,   263,
-   189,     6,     0,    62,    42,   188,   268,   187,   270,   189,
-     6,     0,    62,    42,   188,   268,   187,   270,   187,   270,
-   187,   268,   189,     6,     0,    62,    42,   188,   268,   187,
-   270,   187,   270,   187,   270,   187,   268,   189,     6,     0,
-     0,    62,    42,   188,   268,   187,   270,   189,   260,   188,
-   263,   189,     6,     0,     0,    62,    42,   188,   268,   187,
-   270,   187,   270,   187,   268,   189,   261,   188,   263,   189,
-     6,     0,     0,    62,    42,   188,   268,   187,   270,   187,
-   270,   187,   270,   187,   268,   189,   262,   188,   263,   189,
-     6,     0,   264,     0,   263,   264,     0,    70,   188,   276,
-   187,   276,   187,   276,   189,     6,     0,    70,   188,   276,
-   187,   276,   189,     6,     0,    65,     6,     0,    51,    41,
-   276,     7,   268,     6,     0,    51,    41,   276,     7,   268,
-    54,    56,   268,     6,     0,    51,    41,   276,     7,   268,
-    54,    55,   268,     6,     0,    51,    42,   188,   268,   189,
-     7,   276,     6,     0,    48,    42,   188,   268,   189,     7,
-   276,     6,     0,    51,    44,   188,   268,   189,     7,   276,
-     6,     0,    65,    42,   276,     7,   268,     6,     0,    65,
-    42,   276,     6,     0,    67,     6,     0,    68,     6,     0,
-   107,     0,   108,     0,   109,     0,   110,     0,   111,     0,
-   269,     0,   182,   268,   183,     0,   172,   268,     0,   171,
-   268,     0,   177,   268,     0,   268,   172,   268,     0,   268,
-   171,   268,     0,   268,   173,   268,     0,   268,   174,   268,
-     0,   268,   175,   268,     0,   268,   181,   268,     0,   268,
-   167,   268,     0,   268,   169,   268,     0,   268,   168,   268,
-     0,   268,   170,   268,     0,   268,   164,   268,     0,   268,
-   165,   268,     0,   268,   163,   268,     0,   268,   162,   268,
-     0,   268,   161,   268,     8,   268,     0,    12,   182,   268,
-   183,     0,    13,   182,   268,   183,     0,    14,   182,   268,
-   183,     0,    15,   182,   268,   183,     0,    16,   182,   268,
-   183,     0,    17,   182,   268,   183,     0,    18,   182,   268,
-   183,     0,    19,   182,   268,   183,     0,    20,   182,   268,
-   183,     0,    22,   182,   268,   183,     0,    23,   182,   268,
-   187,   268,   183,     0,    24,   182,   268,   183,     0,    25,
-   182,   268,   183,     0,    26,   182,   268,   183,     0,    27,
-   182,   268,   183,     0,    28,   182,   268,   183,     0,    29,
-   182,   268,   183,     0,    30,   182,   268,   187,   268,   183,
-     0,    31,   182,   268,   187,   268,   183,     0,    32,   182,
-   268,   187,   268,   183,     0,    21,   182,   268,   183,     0,
-    12,   184,   268,   185,     0,    13,   184,   268,   185,     0,
-    14,   184,   268,   185,     0,    15,   184,   268,   185,     0,
-    16,   184,   268,   185,     0,    17,   184,   268,   185,     0,
-    18,   184,   268,   185,     0,    19,   184,   268,   185,     0,
-    20,   184,   268,   185,     0,    22,   184,   268,   185,     0,
-    23,   184,   268,   187,   268,   185,     0,    24,   184,   268,
-   185,     0,    25,   184,   268,   185,     0,    26,   184,   268,
-   185,     0,    27,   184,   268,   185,     0,    28,   184,   268,
-   185,     0,    29,   184,   268,   185,     0,    30,   184,   268,
-   187,   268,   185,     0,    31,   184,   268,   187,   268,   185,
-     0,    32,   184,   268,   187,   268,   185,     0,    21,   184,
-   268,   185,     0,     3,     0,     9,     0,    10,     0,    11,
-     0,     4,     0,     4,   184,   268,   185,     0,     4,   246,
-     0,     4,   184,   268,   185,   246,     0,     4,   186,     4,
-     0,     4,   184,   268,   185,   186,     4,     0,     4,   186,
-     4,   246,     0,     4,   184,   268,   185,   186,     4,   246,
-     0,   271,     0,   172,   270,     0,   171,   270,     0,   270,
-   172,   270,     0,   270,   171,   270,     0,   188,   268,   187,
-   268,   187,   268,   187,   268,   187,   268,   189,     0,   188,
-   268,   187,   268,   187,   268,   187,   268,   189,     0,   188,
-   268,   187,   268,   187,   268,   189,     0,   182,   268,   187,
-   268,   187,   268,   183,     0,     0,   182,   273,   183,     0,
-     5,     0,   273,   187,     5,     0,     0,   188,   275,   189,
-     0,   182,   275,   183,     0,   276,     0,   275,   187,   276,
-     0,   268,     0,   277,     0,   188,   278,   189,     0,   172,
-   188,   278,   189,     0,   268,     8,   268,     0,   268,     8,
-   268,     8,   268,     0,     4,   184,   185,     0,   172,     4,
-   184,   185,     0,     4,   184,   188,   278,   189,   185,     0,
-   172,     4,   184,   188,   278,   189,   185,     0,   268,     0,
-   277,     0,   278,   187,   268,     0,   278,   187,   277,     0,
-   188,   268,   187,   268,   187,   268,   187,   268,   189,     0,
-   188,   268,   187,   268,   187,   268,   189,     0,     4,     0,
-     4,   186,    92,   186,     4,     0,   188,   281,   189,     0,
-     4,   184,   268,   185,   186,    93,     0,   279,     0,   281,
-   187,   279,     0,     5,     0,    35,   182,   282,   187,   282,
-   183,     0,    36,   182,   282,   183,     0,    34,   182,   282,
-   183,     0,    34,   182,   282,   187,   278,   183,     0,    34,
-   182,     4,   186,     4,   183,     0,    34,   182,     4,   184,
-   268,   185,   186,     4,   183,     0
+    41,   188,   268,   187,   270,   187,   270,   187,   270,   187,
+   268,   189,     6,     0,     0,    62,    41,   188,   268,   187,
+   270,   189,   257,   188,   263,   189,     6,     0,     0,    62,
+    41,   188,   268,   187,   270,   187,   270,   187,   268,   189,
+   258,   188,   263,   189,     6,     0,     0,    62,    41,   188,
+   268,   187,   270,   187,   270,   187,   270,   187,   268,   189,
+   259,   188,   263,   189,     6,     0,    62,    42,   188,   268,
+   187,   270,   189,     6,     0,    62,    42,   188,   268,   187,
+   270,   187,   270,   187,   268,   189,     6,     0,    62,    42,
+   188,   268,   187,   270,   187,   270,   187,   270,   187,   268,
+   189,     6,     0,     0,    62,    42,   188,   268,   187,   270,
+   189,   260,   188,   263,   189,     6,     0,     0,    62,    42,
+   188,   268,   187,   270,   187,   270,   187,   268,   189,   261,
+   188,   263,   189,     6,     0,     0,    62,    42,   188,   268,
+   187,   270,   187,   270,   187,   270,   187,   268,   189,   262,
+   188,   263,   189,     6,     0,   264,     0,   263,   264,     0,
+    70,   188,   276,   187,   276,   187,   276,   189,     6,     0,
+    70,   188,   276,   187,   276,   189,     6,     0,    65,     6,
+     0,    51,    41,   276,     7,   268,     6,     0,    51,    41,
+   276,     7,   268,    54,    56,   268,     6,     0,    51,    41,
+   276,     7,   268,    54,    55,   268,     6,     0,    51,    42,
+   188,   268,   189,     7,   276,     6,     0,    48,    42,   188,
+   268,   189,     7,   276,     6,     0,    51,    44,   188,   268,
+   189,     7,   276,     6,     0,    65,    42,   276,     7,   268,
+     6,     0,    65,    42,   276,     6,     0,    67,     6,     0,
+    68,     6,     0,   107,     0,   108,     0,   109,     0,   110,
+     0,   111,     0,   269,     0,   182,   268,   183,     0,   172,
+   268,     0,   171,   268,     0,   177,   268,     0,   268,   172,
+   268,     0,   268,   171,   268,     0,   268,   173,   268,     0,
+   268,   174,   268,     0,   268,   175,   268,     0,   268,   181,
+   268,     0,   268,   167,   268,     0,   268,   169,   268,     0,
+   268,   168,   268,     0,   268,   170,   268,     0,   268,   164,
+   268,     0,   268,   165,   268,     0,   268,   163,   268,     0,
+   268,   162,   268,     0,   268,   161,   268,     8,   268,     0,
+    12,   182,   268,   183,     0,    13,   182,   268,   183,     0,
+    14,   182,   268,   183,     0,    15,   182,   268,   183,     0,
+    16,   182,   268,   183,     0,    17,   182,   268,   183,     0,
+    18,   182,   268,   183,     0,    19,   182,   268,   183,     0,
+    20,   182,   268,   183,     0,    22,   182,   268,   183,     0,
+    23,   182,   268,   187,   268,   183,     0,    24,   182,   268,
+   183,     0,    25,   182,   268,   183,     0,    26,   182,   268,
+   183,     0,    27,   182,   268,   183,     0,    28,   182,   268,
+   183,     0,    29,   182,   268,   183,     0,    30,   182,   268,
+   187,   268,   183,     0,    31,   182,   268,   187,   268,   183,
+     0,    32,   182,   268,   187,   268,   183,     0,    21,   182,
+   268,   183,     0,    12,   184,   268,   185,     0,    13,   184,
+   268,   185,     0,    14,   184,   268,   185,     0,    15,   184,
+   268,   185,     0,    16,   184,   268,   185,     0,    17,   184,
+   268,   185,     0,    18,   184,   268,   185,     0,    19,   184,
+   268,   185,     0,    20,   184,   268,   185,     0,    22,   184,
+   268,   185,     0,    23,   184,   268,   187,   268,   185,     0,
+    24,   184,   268,   185,     0,    25,   184,   268,   185,     0,
+    26,   184,   268,   185,     0,    27,   184,   268,   185,     0,
+    28,   184,   268,   185,     0,    29,   184,   268,   185,     0,
+    30,   184,   268,   187,   268,   185,     0,    31,   184,   268,
+   187,   268,   185,     0,    32,   184,   268,   187,   268,   185,
+     0,    21,   184,   268,   185,     0,     3,     0,     9,     0,
+    10,     0,    11,     0,     4,     0,     4,   184,   268,   185,
+     0,     4,   246,     0,     4,   184,   268,   185,   246,     0,
+     4,   186,     4,     0,     4,   184,   268,   185,   186,     4,
+     0,     4,   186,     4,   246,     0,     4,   184,   268,   185,
+   186,     4,   246,     0,   271,     0,   172,   270,     0,   171,
+   270,     0,   270,   172,   270,     0,   270,   171,   270,     0,
+   188,   268,   187,   268,   187,   268,   187,   268,   187,   268,
+   189,     0,   188,   268,   187,   268,   187,   268,   187,   268,
+   189,     0,   188,   268,   187,   268,   187,   268,   189,     0,
+   182,   268,   187,   268,   187,   268,   183,     0,     0,   182,
+   273,   183,     0,     5,     0,   273,   187,     5,     0,     0,
+   188,   275,   189,     0,   182,   275,   183,     0,   276,     0,
+   275,   187,   276,     0,   268,     0,   277,     0,   188,   278,
+   189,     0,   172,   188,   278,   189,     0,   268,     8,   268,
+     0,   268,     8,   268,     8,   268,     0,     4,   184,   185,
+     0,   172,     4,   184,   185,     0,     4,   184,   188,   278,
+   189,   185,     0,   172,     4,   184,   188,   278,   189,   185,
+     0,   268,     0,   277,     0,   278,   187,   268,     0,   278,
+   187,   277,     0,   188,   268,   187,   268,   187,   268,   187,
+   268,   189,     0,   188,   268,   187,   268,   187,   268,   189,
+     0,     4,     0,     4,   186,    92,   186,     4,     0,   188,
+   281,   189,     0,     4,   184,   268,   185,   186,    93,     0,
+   279,     0,   281,   187,   279,     0,     5,     0,    35,   182,
+   282,   187,   282,   183,     0,    36,   182,   282,   183,     0,
+    34,   182,   282,   183,     0,    34,   182,   282,   187,   278,
+   183,     0,    34,   182,     4,   186,     4,   183,     0,    34,
+   182,     4,   184,   268,   185,   186,     4,   183,     0
 };
 
 #endif
@@ -633,28 +633,28 @@ static const short yyrline[] = { 0,
    778,   789,   791,   792,   793,   794,   796,   798,   800,   831,
    865,   912,   927,   936,   951,   963,   977,  1000,  1024,  1036,
   1050,  1062,  1076,  1092,  1108,  1121,  1141,  1152,  1158,  1177,
-  1188,  1196,  1202,  1208,  1227,  1233,  1239,  1255,  1262,  1268,
-  1274,  1285,  1296,  1318,  1330,  1336,  1355,  1376,  1384,  1390,
-  1396,  1402,  1414,  1420,  1426,  1438,  1444,  1449,  1454,  1461,
-  1463,  1464,  1467,  1472,  1483,  1501,  1509,  1514,  1525,  1593,
-  1613,  1620,  1624,  1644,  1657,  1668,  1690,  1712,  1733,  1739,
-  1744,  1749,  1753,  1763,  1772,  1779,  1788,  1793,  1798,  1803,
-  1808,  1813,  1818,  1823,  1828,  1836,  1841,  1846,  1851,  1856,
-  1862,  1868,  1874,  1880,  1888,  1892,  1897,  1924,  1948,  1958,
-  1977,  1995,  2013,  2035,  2056,  2077,  2091,  2112,  2117,  2128,
-  2130,  2131,  2132,  2133,  2136,  2138,  2139,  2140,  2141,  2142,
-  2143,  2144,  2145,  2152,  2153,  2154,  2155,  2156,  2157,  2158,
-  2159,  2160,  2161,  2162,  2163,  2164,  2165,  2166,  2167,  2168,
-  2169,  2170,  2171,  2172,  2173,  2174,  2175,  2176,  2177,  2178,
-  2179,  2180,  2181,  2182,  2183,  2185,  2186,  2187,  2188,  2189,
-  2190,  2191,  2192,  2193,  2194,  2195,  2196,  2197,  2198,  2199,
-  2200,  2201,  2202,  2203,  2204,  2205,  2210,  2215,  2216,  2217,
-  2221,  2232,  2249,  2260,  2279,  2295,  2311,  2327,  2344,  2349,
-  2353,  2357,  2361,  2366,  2371,  2375,  2379,  2385,  2389,  2394,
-  2398,  2403,  2407,  2411,  2417,  2423,  2430,  2436,  2440,  2444,
-  2454,  2461,  2472,  2486,  2502,  2522,  2546,  2552,  2556,  2560,
-  2571,  2576,  2587,  2592,  2610,  2615,  2628,  2634,  2640,  2645,
-  2653,  2666,  2670,  2688,  2702
+  1191,  1197,  1203,  1222,  1228,  1234,  1250,  1257,  1263,  1269,
+  1280,  1291,  1316,  1322,  1341,  1362,  1370,  1376,  1382,  1391,
+  1397,  1403,  1415,  1421,  1426,  1431,  1438,  1440,  1441,  1444,
+  1449,  1454,  1469,  1484,  1505,  1523,  1531,  1536,  1547,  1615,
+  1635,  1642,  1646,  1666,  1679,  1690,  1712,  1734,  1755,  1761,
+  1766,  1771,  1775,  1785,  1794,  1801,  1810,  1815,  1820,  1825,
+  1830,  1835,  1840,  1845,  1850,  1858,  1863,  1868,  1873,  1878,
+  1884,  1890,  1896,  1902,  1910,  1914,  1919,  1946,  1970,  1980,
+  1999,  2017,  2035,  2057,  2078,  2099,  2113,  2134,  2139,  2150,
+  2152,  2153,  2154,  2155,  2158,  2160,  2161,  2162,  2163,  2164,
+  2165,  2166,  2167,  2174,  2175,  2176,  2177,  2178,  2179,  2180,
+  2181,  2182,  2183,  2184,  2185,  2186,  2187,  2188,  2189,  2190,
+  2191,  2192,  2193,  2194,  2195,  2196,  2197,  2198,  2199,  2200,
+  2201,  2202,  2203,  2204,  2205,  2207,  2208,  2209,  2210,  2211,
+  2212,  2213,  2214,  2215,  2216,  2217,  2218,  2219,  2220,  2221,
+  2222,  2223,  2224,  2225,  2226,  2227,  2232,  2237,  2238,  2239,
+  2243,  2254,  2271,  2282,  2301,  2317,  2333,  2349,  2366,  2371,
+  2375,  2379,  2383,  2388,  2393,  2397,  2401,  2407,  2411,  2416,
+  2420,  2425,  2429,  2433,  2439,  2445,  2452,  2458,  2462,  2466,
+  2476,  2483,  2494,  2508,  2524,  2544,  2568,  2574,  2578,  2582,
+  2593,  2598,  2609,  2614,  2632,  2637,  2650,  2656,  2662,  2667,
+  2675,  2688,  2692,  2710,  2724
 };
 #endif
 
@@ -727,8 +727,8 @@ static const short yyr1[] = {     0,
    247,   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,   249,   249,   249,   249,   250,
-   250,   250,   251,   251,   252,   253,   253,   253,   254,   254,
+   248,   248,   249,   249,   249,   249,   250,   250,   250,   251,
+   251,   251,   251,   251,   252,   253,   253,   253,   254,   254,
    254,   254,   254,   255,   255,   255,   255,   255,   255,   255,
    255,   255,   255,   256,   256,   256,   256,   256,   256,   257,
    256,   258,   256,   259,   256,   256,   256,   256,   260,   256,
@@ -767,10 +767,10 @@ static const short yyr2[] = {     0,
     15,     1,     1,     1,     1,     1,     1,     1,     4,     7,
      9,     6,     3,     6,     6,     9,     6,     9,     5,     8,
      8,    11,     6,     9,     9,     9,     7,     8,    12,     6,
-     5,     7,     7,    12,     7,     7,     9,    17,     8,     8,
-     7,     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,
+     7,     7,    12,     7,     7,     9,    17,     8,     8,     7,
+     7,    11,     8,    12,     8,    22,    20,     8,     8,     8,
+     7,     8,     5,    11,     5,     9,     1,     1,     1,     0,
+     2,     6,     6,     6,     4,     4,     6,     3,     3,     3,
      7,     2,     2,     6,     8,     8,    10,     1,     2,     1,
      3,     4,     1,     8,    12,    14,     8,    12,    14,     0,
     12,     0,    16,     0,    18,     8,    12,    14,     0,    12,
@@ -808,1384 +808,1389 @@ static const short yydefact[] = {     0,
      0,     0,     0,     0,     0,   265,     0,     0,   213,     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,   339,     0,     0,
+     0,     0,     0,   200,     0,     0,     0,   200,   258,   259,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
+     0,   219,     0,     6,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   339,     0,     0,     0,     0,     0,   203,     0,     0,     0,
-   203,   258,   259,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   212,     0,   219,     0,     6,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   333,     0,    71,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   333,     0,    71,     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,   268,
+   267,   269,     0,     0,     0,     0,     0,     0,     0,     0,
+   153,   210,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   209,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   331,     0,     0,
+   357,     0,   358,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   341,   340,     0,
+     0,     0,     0,   200,   200,     0,     0,     0,     0,     0,
+     0,     0,   208,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   221,     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,   268,   267,   269,     0,     0,     0,     0,     0,
-     0,     0,     0,   153,   210,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   350,     0,     0,
+     0,     0,     0,   335,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   209,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   331,     0,     0,   357,     0,   358,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   341,   340,     0,     0,     0,     0,   203,
-   203,     0,     0,     0,     0,     0,     0,     0,   208,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   221,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   379,
+     0,     0,     0,   266,     0,     0,   367,   368,     0,     0,
+   142,     0,     0,     0,     0,   149,     0,   283,   282,   280,
+   281,   276,   278,   277,   279,   271,   270,   272,   273,   274,
+   275,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   331,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   343,   342,   199,     0,   198,   197,     0,
+     0,     0,     0,     0,     0,     0,     0,   205,   201,   257,
+     0,     0,   206,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   222,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   350,     0,     0,     0,     0,     0,   335,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   349,     0,     0,    21,     0,
+   332,   337,    71,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,    85,   285,   306,   286,   307,   287,   308,   288,   309,
+   289,   310,   290,   311,   291,   312,   292,   313,   293,   314,
+   305,   326,   294,   315,     0,     0,   296,   317,   297,   318,
+   298,   319,   299,   320,   300,   321,   301,   322,     0,     0,
+     0,     0,     0,     0,     0,     0,   382,     0,     0,   381,
+     0,     0,     0,     0,     0,     0,     0,     0,   159,     0,
+     0,     0,     0,     0,    67,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   363,     0,     0,     0,   359,   361,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   193,   195,     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,   379,     0,     0,     0,   266,
-     0,     0,   367,   368,     0,     0,   142,     0,     0,     0,
-     0,   149,     0,   283,   282,   280,   281,   276,   278,   277,
-   279,   271,   270,   272,   273,   274,   275,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   331,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   343,   342,   202,     0,   201,   200,     0,     0,
-     0,     0,     0,   205,   204,   257,     0,     0,   206,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   222,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   351,
+     0,   348,     0,   334,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   152,   369,   370,     0,     0,     0,     0,     0,
+   154,   155,   157,     0,     0,   373,     0,   377,     0,   163,
+   284,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   364,     0,   360,     0,   170,     0,     0,     0,     0,
+   250,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   256,   207,     0,     0,     0,     0,     0,   352,     0,     0,
+     0,   214,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   349,     0,     0,    21,     0,   332,   337,    71,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    85,   285,   306,
-   286,   307,   287,   308,   288,   309,   289,   310,   290,   311,
-   291,   312,   292,   313,   293,   314,   305,   326,   294,   315,
-     0,     0,   296,   317,   297,   318,   298,   319,   299,   320,
-   300,   321,   301,   322,     0,     0,     0,     0,     0,     0,
-     0,     0,   382,     0,     0,   381,     0,     0,     0,     0,
-     0,     0,     0,     0,   159,     0,     0,     0,     0,     0,
-    67,     0,     0,   171,     0,     0,     0,     0,   184,     0,
-   192,     0,     0,   363,     0,     0,     0,   359,   361,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   196,   198,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   351,     0,   348,     0,   334,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    69,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   152,   369,
-   370,     0,     0,     0,     0,     0,   154,   155,   157,     0,
-     0,   373,     0,   377,     0,   163,   284,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   364,     0,   360,
-     0,   170,     0,     0,     0,     0,   250,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   256,   207,     0,     0,     0,     0,     0,
-   352,     0,     0,     0,   214,     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,
-   260,   261,   262,   263,   264,     0,     0,     0,     0,     0,
-     0,     0,    20,     0,   336,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   295,   316,   302,   323,   303,   324,   304,   325,     0,   384,
-   383,   380,     0,   142,     0,     0,     0,     0,   150,     0,
-     0,     0,     0,     0,   375,    68,   167,   175,     0,   176,
-     0,   172,     0,   173,   194,     0,     0,   362,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   211,     0,     0,     0,     0,   203,     0,     0,     0,
-   230,     0,   239,     0,     0,   181,   182,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   260,   261,   262,
+   263,   264,     0,     0,     0,     0,     0,     0,     0,    20,
+     0,   336,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   295,   316,   302,
+   323,   303,   324,   304,   325,     0,   384,   383,   380,     0,
+   142,     0,     0,     0,     0,   150,     0,     0,     0,     0,
+     0,   375,    68,   167,   174,     0,   175,     0,   171,     0,
+   172,   191,     0,     0,   362,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   211,     0,
+     0,     0,     0,   200,     0,     0,     0,   230,     0,   239,
+     0,     0,     0,     0,     0,   180,   181,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,   348,   338,    70,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,   160,     0,     0,
-   161,     0,     0,     0,   378,     0,   180,   191,   365,     0,
-     0,   254,   185,   187,     0,     0,   253,   255,   193,   168,
-   179,   190,   195,     0,     0,     0,   347,     0,   346,     0,
-     0,   224,     0,   227,     0,     0,   236,     0,     0,     0,
-   352,     0,   355,     0,     0,     0,     0,   216,   215,     0,
-     0,     0,     0,     0,    23,     0,    32,     0,    36,     0,
-    30,     0,     0,    35,     0,    40,    38,     0,     0,     0,
-     0,     0,     0,    47,     0,     0,     0,     0,     0,    52,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   151,   156,   158,
-     0,   164,     0,     0,     0,   177,   366,     0,   252,   251,
-   165,   166,   203,     0,   199,     0,     0,     0,     0,     0,
-     0,     0,     0,   354,     0,   353,     0,     0,     0,     0,
-     0,     0,   352,     0,     0,     0,     0,     0,     0,     0,
+   161,     0,     0,     0,   378,     0,   179,   189,   365,     0,
+     0,   254,   183,   185,     0,     0,   253,   255,   190,   168,
+   178,   188,   192,     0,     0,     0,   347,     0,   346,     0,
+     0,   224,     0,   227,     0,     0,   236,     0,   202,   203,
+   204,     0,     0,   352,     0,   355,     0,     0,     0,     0,
+   216,   215,     0,     0,     0,     0,     0,    23,     0,    32,
+     0,    36,     0,    30,     0,     0,    35,     0,    40,    38,
+     0,     0,     0,     0,     0,     0,    47,     0,     0,     0,
+     0,     0,    52,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   151,   156,   158,     0,   164,     0,     0,     0,   176,   366,
+     0,   252,   251,   165,   166,   200,     0,   196,     0,     0,
+     0,     0,     0,     0,     0,     0,   354,     0,   353,     0,
+     0,     0,     0,     0,     0,   352,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   385,     0,   376,
-   374,     0,     0,     0,     0,   345,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   245,     0,     0,     0,
-     0,     0,     0,   356,     0,     0,   217,     0,     0,    37,
-     0,     0,     0,     0,    27,     0,    33,     0,    39,    28,
-    41,     0,    44,     0,    48,    49,     0,     0,    51,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   162,     0,     0,   197,     0,
-     0,     0,     0,   232,     0,   249,     0,     0,   246,   241,
-     0,     0,     0,     0,     0,     0,   183,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   385,     0,   376,   374,     0,     0,     0,     0,   345,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   245,
+     0,     0,     0,     0,     0,     0,   356,     0,     0,   217,
+     0,     0,    37,     0,     0,     0,     0,    27,     0,    33,
+     0,    39,    28,    41,     0,    44,     0,    48,    49,     0,
+     0,    51,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   162,     0,
+     0,   194,     0,     0,     0,     0,   232,     0,   249,     0,
+     0,   246,   241,     0,     0,     0,     0,     0,     0,   182,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    88,    92,    96,   136,     0,     0,   372,     0,   344,   225,
-     0,   228,     0,     0,     0,   231,   237,     0,     0,   240,
-   169,   174,     0,     0,   186,     0,     0,     0,     0,     0,
-    31,    34,    42,     0,    43,    50,    45,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   234,     0,     0,   243,
+     0,     0,     0,    88,    92,    96,   136,     0,     0,   372,
+     0,   344,   225,     0,   228,     0,     0,     0,   231,   237,
+     0,     0,   240,   169,   173,     0,     0,   184,     0,     0,
+     0,     0,     0,    31,    34,    42,     0,    43,    50,    45,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   234,
+     0,     0,   243,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   140,   371,     0,   226,     0,   229,     0,     0,
-     0,   238,     0,     0,     0,     0,     0,     0,    26,    29,
+     0,     0,     0,     0,     0,   140,   371,     0,   226,     0,
+   229,     0,     0,     0,   238,     0,     0,     0,     0,     0,
+     0,    26,    29,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    86,     0,    90,     0,    94,
+     0,   134,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    86,     0,    90,     0,    94,     0,   134,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   233,     0,     0,   248,
+   242,     0,     0,     0,     0,     0,     0,    46,    22,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    87,    89,
+    91,    93,    95,    97,   135,   137,     0,   138,   177,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   100,   104,   108,     0,     0,   235,   247,
+   244,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   139,   141,     0,     0,     8,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   233,     0,     0,   248,   242,     0,     0,
-     0,     0,     0,     0,    46,    22,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    87,    89,    91,    93,    95,
-    97,   135,   137,     0,   138,   178,     0,     0,     0,     0,
+     0,     0,   187,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    98,     0,   102,     0,   106,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   100,   104,   108,     0,     0,   235,   247,   244,     0,     0,
+     0,     0,   186,     0,    24,     0,     0,     0,     0,     0,
+     0,    99,   101,   103,   105,   107,   109,     0,     0,     0,
+     0,   112,   116,   120,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   139,   141,     0,     0,     8,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   189,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    98,
-     0,   102,     0,   106,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   188,
-     0,    24,     0,     0,     0,     0,     0,     0,    99,   101,
-   103,   105,   107,   109,     0,     0,     0,     0,   112,   116,
-   120,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   110,     0,   114,     0,   118,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   110,     0,   114,     0,   118,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   111,
-   113,   115,   117,   119,   121,     0,   124,   128,   132,    25,
-     0,     0,     0,     0,     0,     0,     0,   122,     0,   126,
-     0,   130,     0,     0,     0,     0,     0,     0,   123,   125,
-   127,   129,   131,   133,     0,     0,     0
+     0,     0,   111,   113,   115,   117,   119,   121,     0,   124,
+   128,   132,    25,     0,     0,     0,     0,     0,     0,     0,
+   122,     0,   126,     0,   130,     0,     0,     0,     0,     0,
+     0,   123,   125,   127,   129,   131,   133,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1695,
+static const short yydefgoto[] = {  1698,
     80,     5,     6,    19,    20,    21,    22,     7,    65,    66,
-    67,   412,  1442,   605,  1378,  1444,   606,  1379,  1446,   607,
-  1380,  1579,   608,  1550,  1581,   609,  1551,  1583,   610,  1552,
-  1640,   611,  1626,  1642,   612,  1627,  1644,   613,  1628,  1677,
-   614,  1671,  1679,   615,  1672,  1681,   616,  1673,  1448,   617,
-  1381,  1514,   618,  1450,   133,   235,    68,   535,   525,   526,
-   527,   528,    72,    73,    74,    75,  1085,  1343,  1419,  1088,
-  1348,  1423,  1236,  1237,    76,    77,   896,   327,   136,   344,
-   171,   230,   405,   991,  1092,  1093,   329,   465,   814,   679,
-   815,   137
+    67,   406,  1445,   599,  1381,  1447,   600,  1382,  1449,   601,
+  1383,  1582,   602,  1553,  1584,   603,  1554,  1586,   604,  1555,
+  1643,   605,  1629,  1645,   606,  1630,  1647,   607,  1631,  1680,
+   608,  1674,  1682,   609,  1675,  1684,   610,  1676,  1451,   611,
+  1384,  1517,   612,  1453,   133,   232,    68,   529,   516,   517,
+   518,   519,    72,    73,    74,    75,  1085,  1346,  1422,  1088,
+  1351,  1426,  1239,  1240,    76,    77,   893,   321,   136,   338,
+   168,   227,   399,   991,  1095,  1096,   323,   459,   808,   673,
+   809,   137
 };
 
-static const short yypact[] = {  2200,
-    33,-32768,-32768,   -92,-32768,    25,  2380,-32768,    14,    62,
-   100,   103,   110,   115,   207,    81,   113,   122,-32768,-32768,
--32768,-32768,  1806,   129,   313,  -159,   177,   196,   -26,   -31,
-   256,   265,   161,   274,   310,   341,   385,   464,   423,   170,
-   297,   299,   117,   117,   303,   339,   304,   454,     9,   510,
-   511,    39,   322,   338,   -24,     5,-32768,   355,-32768,   517,
--32768,   541,   563,   526,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   298,    14,
-  2403,-32768,-32768,-32768,-32768,-32768,   457,   457,   605,-32768,
-    80,     7,-32768,-32768,-32768,-32768,   -83,     1,    12,    78,
-   157,   302,   327,   331,   345,   354,   373,   374,   377,   381,
-   382,   403,   404,   407,   425,   429,   432,   458,   461,   462,
--32768,-32768,-32768,-32768,  1990,  1990,  1990,-32768,-32768,  1990,
-   708,    22,  1990,   645,   409,-32768,   647,   653,-32768,  1990,
-  1990,  1990,  1990,   477,  1990,  1990,   493,  1990,  1990,  1990,
-  1682,  1990,   494,   501,   518,  1682,   516,   519,   531,   534,
-   566,   586,   597,   704,   117,   117,   117,  1990,  1990,   119,
--32768,   152,   117,   593,   594,   596,-32768,  1682,   502,   780,
--32768,-32768,-32768,  1682,  1682,  1990,  1990,   -69,  1990,   692,
-  1990,  1990,-32768,   783,-32768,   614,-32768,    14,   625,   627,
-   631,   632,   633,   634,   636,   638,   639,   640,   641,   648,
-   649,   650,   651,   652,   654,   655,   656,   657,   666,   691,
-   693,   694,   695,   700,   701,   702,   706,   707,   807,   642,
-   644,   687,  1990,   831,-32768,   117,-32768,  1990,  1990,  1990,
-  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
-  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
-  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
-  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,    40,
-    36,    36,   705,   705,   705,  2109,   884,  2020,  5239,   315,
-   709,   885,   431,-32768,-32768,  1990,  1990,  1990,  1990,  1990,
-  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
--32768,  -134,  5889,   763,  5912,  5935,  1990,  5958,  2045,  1990,
-  2226,  5981,  6004,   114,  1712,  2020,   697,   887,-32768,  6027,
-  1990,  1990,  1990,   895,  1990,  1990,  1990,  1990,  1990,  1990,
-  1990,   732,   198,-32768,-32768,  2803,  2824,   117,   117,   472,
-   472,   201,  1990,  1990,  1990,  2267,   153,  1990,-32768,  2317,
-   911,   912,  6050,  6073,   832,  1990,  6096,   735,  1506,  6119,
--32768,  1990,   786,   937,   940,   941,   942,   943,   944,   946,
-   948,   949,   953,   955,   958,   959,   960,   961,   962,   963,
-   964,   965,   971,   972,   973,   976,   842,   978,   979,   982,
-   984,   987,   986,-32768,   -59,   990,   991,   993,  5264,    90,
-   165,    13,  6142,  5289,  6165,  5314,  6188,  5339,  6211,  5364,
-  6234,  5389,  6257,  5414,  6280,  5439,  6303,  5464,  6326,  5489,
-  6349,  5514,  6372,  5539,  2845,  2866,  6395,  5564,  6418,  5589,
-  6441,  5614,  6464,  5639,  6487,  5664,  6510,  5689,  2887,  2908,
-  2929,  2950,  2971,  2992,   436,-32768,   138,   809,   817,-32768,
-  1682,  2050,   697,-32768,   428,   264,    36,  1990,   995,   998,
-    10,-32768,  1949,   226,   496,   854,   854,   -39,   -39,   -39,
-   -39,   295,   295,   705,   705,   705,   705,   999,  2020,   997,
-  1000,  1023,  1025,  6533,  1026,  1028,  6556,  1030,  1032,  1033,
-  1341,   311,  2020,   434,  1990,  1990,  1034,  2389,  6579,  6602,
-  1990,  2412,  2435,  6625,  6648,  6671,  6694,  6717,   851,   117,
-  1990,  1990,-32768,-32768,-32768,   853,  1511,-32768,   856,  1990,
-  3013,  3034,  3055,-32768,-32768,-32768,  1990,  5714,-32768,   855,
-   858,  1040,  1041,   867,  6740,  1044,  1990,  1990,-32768,  6763,
-   899,   869,   870,   871,   872,   873,   874,   878,   879,   890,
-   891,   892,   893,   902,   914,   915,   916,   918,   919,   920,
-   921,   924,   930,   947,   950,   952,   954,   966,   967,   969,
-   970,-32768,  1049,   927,-32768,   975,    -7,-32768,-32768,   917,
-   945,   956,   968,   983,   985,   988,   992,   996,  1013,  1014,
-  1015,  1016,  1018,  1122,-32768,-32768,-32768,-32768,-32768,-32768,
+static const short yypact[] = {  2214,
+    43,-32768,-32768,  -123,-32768,     5,  2331,-32768,    21,    64,
+    92,   103,   139,   158,   165,    29,   111,   131,-32768,-32768,
+-32768,-32768,  1795,   146,   181,   178,   186,   193,   -45,   130,
+   208,   229,   301,   235,   313,   341,   389,   300,   383,   359,
+   255,   259,   -77,   -77,   284,   253,   304,   399,    12,   489,
+   494,    84,   324,   328,   -15,    17,-32768,   335,-32768,   537,
+-32768,   558,   565,   569,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   621,    21,
+  2354,-32768,-32768,-32768,-32768,-32768,   455,   455,   643,-32768,
+   315,     7,-32768,-32768,-32768,-32768,   -94,   -46,   198,   203,
+   226,   254,   275,   279,   282,   321,   325,   332,   375,   376,
+   397,   398,   401,   404,   405,   424,   425,   467,   470,   480,
+-32768,-32768,-32768,-32768,  1979,  1979,  1979,-32768,-32768,  1979,
+   901,    58,  1979,   659,   403,-32768,   662,   693,-32768,  1979,
+  1979,  1979,   521,  1979,   525,  1979,  1979,  1671,  1979,   522,
+   534,   544,  1671,   541,   549,   560,   576,   583,   593,   601,
+   799,   -77,   -77,   -77,  1979,  1979,   -72,-32768,   -14,   -77,
+   620,   633,   644,-32768,  1671,   646,   827,-32768,-32768,-32768,
+  1671,  1671,  1979,  1979,   -69,  1979,   739,  1979,  1979,-32768,
+   829,-32768,   654,-32768,    21,   657,   663,   673,   674,   675,
+   676,   677,   684,   694,   695,   696,   697,   698,   701,   702,
+   703,   704,   705,   706,   707,   708,   709,   712,   717,   718,
+   719,   720,   724,   725,   726,   929,   754,   759,   756,  1979,
+   941,-32768,   -77,-32768,  1979,  1979,  1979,  1979,  1979,  1979,
+  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,
+  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,
+  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,
+  1979,  1979,  1979,  1979,  1979,  1979,    50,    47,    47,   765,
+   765,   765,  2123,   942,  2009,  5254,   141,   762,   943,   429,
+-32768,-32768,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,
+  1979,  1979,  1979,  1979,  1979,  1979,  1979,-32768,  -127,  2240,
+  5904,  5927,  1979,  5950,  1979,  5973,  5996,   318,  1701,  2009,
+  1609,   944,-32768,  6019,  1979,  1979,  1979,   945,  1979,  1979,
+  1979,  1979,  1979,  1979,  1979,   772,   163,-32768,-32768,  2818,
+  2839,   -77,   -77,   417,   417,   174,  1979,  1979,  1979,    -8,
+   257,  1979,-32768,  2155,   949,   950,  6042,  6065,   868,  1979,
+  6088,   776,  1938,  6111,-32768,  1979,   812,   964,   965,   966,
+   981,   982,   983,   984,   986,   990,   991,   992,   993,   995,
+   996,   997,   999,  1000,  1001,  1016,  1017,  1018,  1019,  1020,
+   886,  1022,  1023,  1024,  1028,  1031,  1030,-32768,   -31,  1032,
+  1033,  1035,  5279,   289,    -3,   714,  6134,  5304,  6157,  5329,
+  6180,  5354,  6203,  5379,  6226,  5404,  6249,  5429,  6272,  5454,
+  6295,  5479,  6318,  5504,  6341,  5529,  6364,  5554,  2860,  2881,
+  6387,  5579,  6410,  5604,  6433,  5629,  6456,  5654,  6479,  5679,
+  6502,  5704,  2902,  2923,  2944,  2965,  2986,  3007,   430,-32768,
+    23,   849,   858,-32768,  1671,  2039,  1609,-32768,   428,    19,
+    47,  1979,  1039,  1042,    13,-32768,  1953,   642,   809,   486,
+   486,   310,   310,   310,   310,   364,   364,   765,   765,   765,
+   765,  1048,  2009,  1049,  1050,  1051,  6525,  1052,  6548,  1053,
+  1054,  1227,   362,  2009,   432,  1979,  1979,  1056,  2377,  6571,
+  6594,  1979,  2400,  2423,  6617,  6640,  6663,  6686,  6709,   878,
+   -77,  1979,  1979,-32768,-32768,-32768,   876,  2396,-32768,   877,
+  1979,  3028,  3049,  3070,   -42,   -41,   -39,-32768,-32768,-32768,
+  1979,  5729,-32768,   879,   880,  1062,  1063,   892,  6732,  1068,
+  1979,  1979,-32768,  6755,   922,   893,   894,   895,   897,   898,
+   900,   903,   904,   905,   906,   907,   908,   917,   927,   928,
+   930,   933,   934,   951,   952,   953,   954,   956,   958,   967,
+   968,   969,   970,   972,   973,-32768,  1074,   978,-32768,   975,
+    82,-32768,-32768,   955,   971,   985,   987,   988,   989,   994,
+   998,  1021,  1029,  1034,  1040,  1041,  1043,  1082,-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,
-  1990,  1990,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  1990,  1990,  1990,  1990,  1990,  1990,
-  1990,  1125,-32768,  2020,    36,-32768,  1124,  2020,   957,    38,
-  1990,  1129,  1130,   602,-32768,  1133,   974,    11,  1139,  1990,
--32768,   159,   117,-32768,  1682,  1682,  1140,  1682,-32768,  1144,
--32768,  1682,  1682,-32768,  2020,  1461,   437,-32768,  1964,   682,
-   980,  1145,  1157,  1159,   290,  1162,  1165,  1166,  1168,  1170,
-  1173,  1200,  1127,   231,  3076,  3097,-32768,-32768,  2458,   117,
-   117,   117,   736,  1154,  1990,  1990,  1682,  1682,  1990,  1201,
-  1682,  1979,   379,  1202,  1060,  1208,  1990,  1990,   117,  1209,
-  1210,  1042,  1211,  1213,  1682,  1682,  1214,   117,  1215,  1216,
-  1682,  1682,  1218,  1219,  1220,  1222,  1223,  1682,    30,  1682,
-  1225,  1224,  1230,  1242,  1244,-32768,  1243,   457,  1247,-32768,
-  1185,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
-  1990,  1990,  1990,  1990,  1990,-32768,  6786,  5739,  6809,  5764,
-  6832,  5789,  6855,  5814,  5839,  1065,   188,  1070,-32768,   697,
--32768,    17,   343,  1066,  1264,   923,-32768,-32768,-32768,    11,
-  1990,  1087,  1990,-32768,   438,-32768,  7407,  1268,    19,    16,
-  1269,  1682,  1270,  1682,  1271,  1273,   441,-32768,  2020,-32768,
-  1990,-32768,  1990,  1682,  1682,  1682,-32768,   292,  1682,  1682,
-  1682,  1682,  1682,  1682,  1682,   402,  1990,  1990,  1990,  1092,
-  -137,  -108,   -89,-32768,-32768,  3118,  3139,  1275,  1276,  6878,
-    21,  1192,  1990,  1990,-32768,  1097,    14,  1099,  3160,  3181,
-  -125,  1100,  1105,  1102,  1107,  1104,  1109,  1106,  1108,  -105,
-  1110,  1111,  1113,  1121,  1132,  1142,  1143,  1146,  1148,  1115,
--32768,-32768,-32768,-32768,-32768,  1149,  1150,  1151,  1155,  1160,
-  1126,  1161,-32768,  1188,    90,  1305,  3202,  3223,  3244,  3265,
-  3286,  3307,  3328,  3349,  3370,  3391,  3412,  3433,  3454,  3475,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1163,-32768,
--32768,-32768,  1682,    36,  1990,  1326,  1336,    10,-32768,  1340,
-  5864,  1284,  3496,    11,-32768,-32768,-32768,-32768,   117,-32768,
-  1383,-32768,  1384,-32768,-32768,  1206,   442,  7407,  3517,  1386,
-  1387,  1388,  1990,  1990,  1389,  1390,  1391,  1392,  1393,  1394,
-  1396,-32768,  1924,  2481,  6901,   630,   472,   117,  1398,   117,
-  1400,   117,  1401,  1990,  1990,-32768,-32768,  1407,  1682,  1682,
-  1334,  1682,   193,  6924,  1990,    14,  1423,  1990,  1682,  1421,
-  1425,  1424,  1258,  1426,    30,  1427,  1431,  1990,  1432,  1434,
-  1433,  1435,  1437,    30,  1990,  1990,  1990,  1682,  1446,  1451,
-    30,  1990,  1453,  1454,  1452,  1990,   457,-32768,-32768,  1990,
-  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
-  1990,  1990,  1990,  1455,  1456,  1457,   951,-32768,  1459,  1462,
--32768,  1274,  1283,  1990,-32768,    34,-32768,-32768,-32768,  1309,
-  1990,-32768,-32768,-32768,  1069,  1153,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1248,  1489,  1308,-32768,  1990,-32768,  1272,
-   245,-32768,   248,-32768,  1311,   254,-32768,  1312,  3538,  3559,
-    21,   253,-32768,   460,  1313,  1420,  1990,-32768,-32768,  3580,
-    14,  1327,  3601,  1322,-32768,  1324,-32768,  1328,-32768,  1333,
--32768,  1330,  6947,-32768,  1332,-32768,-32768,  1337,  1338,  6970,
-  3622,  6993,  1335,-32768,  1348,  1352,  3643,  1349,  1363,-32768,
-  3664,  1360,  3685,  3706,  3727,  3748,  3769,  3790,  3811,  3832,
-  3853,  3874,  3895,  3916,  3937,  3958,  1365,-32768,-32768,-32768,
-    11,-32768,  1464,  1520,  3979,-32768,-32768,  4000,-32768,-32768,
--32768,-32768,   472,  1704,-32768,  1744,  1744,   -38,  1744,   -38,
-  1990,  1990,  1468,-32768,  1682,-32768,  1682,  1990,  2504,  1682,
-  1412,  1566,    21,    30,  1571,  1990,  1570,    30,  1572,  1574,
-  1573,  1575,  1576,  1990,  1577,  1682,  1578,  1579,  1990,  1583,
-  1581,  1990,  1585,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
-  1990,  1990,  1990,  1990,  1990,  1990,  1990,-32768,  1582,-32768,
--32768,  1990,  1586,  1403,  1990,-32768,  1744,  1744,  1990,  2527,
-   257,  2550,   259,  1593,  1413,   -34,-32768,  2573,   262,   -22,
-  2596,  2619,  1414,-32768,  1416,  1631,-32768,  1411,    14,-32768,
-  1417,  1418,  1419,  4021,-32768,  1430,-32768,  1438,-32768,-32768,
--32768,  7016,-32768,  1428,-32768,-32768,  7039,  1439,-32768,  7062,
-  1436,  4042,  4063,  4084,  4105,  4126,  4147,  4168,  4189,  4210,
-  7085,  7108,  7131,  7154,  4231,-32768,  2323,  1441,-32768,  2642,
-  2012,  1608,  1990,  1611,  1990,-32768,  1682,  1612,-32768,  1614,
-  1990,  1624,  1628,  1629,  1682,  1682,-32768,  1630,    14,    30,
-    30,    30,    30,  1633,  1634,  1635,    30,  1636,  1638,  1639,
-  1642,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
--32768,-32768,-32768,-32768,  1990,  1990,-32768,  1643,-32768,-32768,
-  2665,-32768,  1466,  2688,  1463,-32768,-32768,  1467,  2711,-32768,
--32768,-32768,  1469,  1470,-32768,    14,  1474,  1476,  1482,  1483,
--32768,-32768,-32768,  1485,-32768,-32768,-32768,  1496,  4252,  4273,
-  4294,  4315,  4336,  4357,  4378,  4399,  4420,  1500,  1501,  1529,
-  1530,  7177,  2734,  1497,  1651,   -38,  1713,  1682,   -38,  1714,
-  1682,  1657,  1596,    30,    30,  1743,  1745,    30,  1772,  1990,
-  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,
-  1990,    36,-32768,-32768,  1773,-32768,   -11,-32768,  1562,   463,
-    -9,-32768,  1591,  1592,  1594,    14,  1597,  1598,-32768,-32768,
-  1600,  1604,  4441,  4462,  4483,  4504,  4525,  4546,  4567,  4588,
-  4609,   467,  7407,   487,  7407,   491,  7407,   492,-32768,  1601,
-  1599,  1774,   -38,  1682,  1784,  1785,   -38,  1709,  1990,    14,
-    30,  1682,  1801,  1802,  1990,  1990,  1990,  1990,  1990,  1990,
-  1990,  1990,  1990,  1990,  1833,  1990,  1838,  1990,  1839,    36,
-  1840,    36,  1841,-32768,    -8,  1659,-32768,-32768,     3,  1661,
-  4630,    14,  1663,  1664,-32768,-32768,  4651,  4672,  4693,  4714,
-  4735,  4756,  7200,  7223,  7246,  7407,-32768,  7407,-32768,  7407,
--32768,-32768,-32768,   498,-32768,-32768,  1846,  1849,  1850,  1990,
-  1990,  1703,    30,  1682,  1990,  1990,  1990,  1990,  1990,  1990,
--32768,-32768,-32768,    36,  1854,-32768,-32768,-32768,  4777,  2757,
-  1705,  1675,  1676,  4798,  4819,  4840,  4861,  4882,  4903,  1692,
-  1693,  1694,-32768,-32768,  1990,  1880,-32768,  1682,    30,  1990,
-  1990,  1990,  1990,  1990,  1990,  1990,  1990,  1990,  2780,-32768,
-  1700,  1707,  4924,  4945,  4966,  4987,  5008,  5029,   503,  7407,
-   504,  7407,   508,  7407,  1882,  1682,  1886,  1990,  1990,  1990,
-  1990,  1990,  1990,  1990,  1889,  1990,  1890,  1990,  1891,-32768,
-  1711,-32768,  5050,  5071,  5092,  7269,  7292,  7315,  7407,-32768,
-  7407,-32768,  7407,-32768,  1682,  1990,  1990,  1990,-32768,-32768,
--32768,  1715,  5113,  5134,  5155,  1716,  1717,  1718,  1682,  1990,
-  1990,  1990,  1990,  1990,  1990,  1720,  5176,  5197,  5218,   509,
-  7407,   512,  7407,   554,  7407,    30,  1990,  1990,  1990,  1990,
-  1893,  1990,  1895,  1990,  1897,  1725,  7338,  7361,  7384,  7407,
--32768,  7407,-32768,  7407,-32768,  1903,-32768,-32768,-32768,-32768,
-  1722,  1723,  1724,  1990,  1990,  1990,   557,  7407,   558,  7407,
-   591,  7407,  1990,  1907,  1990,  1908,  1990,  1911,  7407,-32768,
-  7407,-32768,  7407,-32768,  1918,  1919,-32768
+-32768,-32768,-32768,-32768,  1979,  1979,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1979,  1979,
+  1979,  1979,  1979,  1979,  1979,  1112,-32768,  2009,    47,-32768,
+  1142,  2009,   979,    62,  1979,  1157,  1159,   509,-32768,  1161,
+  1014,    14,  1166,  1979,-32768,   135,   -77,  1671,  1671,  1168,
+  1671,  1174,  1671,  1671,-32768,  2009,  1464,   433,-32768,  1968,
+   550,  1011,  1176,  1193,  1194,   251,  1197,  1203,  1205,  1207,
+  1208,  1210,  1214,  1169,   187,  3091,  3112,-32768,-32768,  2446,
+   -77,   -77,   -77,  2009,  2009,  2009,   599,  1172,  1979,  1979,
+  1671,  1671,  1979,  1217,  1671,  2064,   361,  1219,  1077,  1225,
+  1979,  1979,   -77,  1226,  1230,  1061,  1232,  1257,  1671,  1671,
+  1258,   -77,  1259,  1260,  1671,  1671,  1261,  1262,  1263,  1264,
+  1265,  1671,   443,  1671,  1266,  1269,  1271,  1267,  1268,-32768,
+  1272,   455,  1273,-32768,  1211,  1979,  1979,  1979,  1979,  1979,
+  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,-32768,
+  6778,  5754,  6801,  5779,  6824,  5804,  6847,  5829,  5854,  1097,
+   153,  1113,-32768,  1609,-32768,   128,   173,  1111,  1291,   679,
+-32768,-32768,-32768,    14,  1979,  1114,  1979,-32768,   436,-32768,
+  2185,  1293,    32,    44,  1295,  1671,  1305,  1671,  1306,  1307,
+   447,-32768,  2009,-32768,  1979,-32768,  1979,  1671,  1671,  1671,
+-32768,   465,  1671,  1671,  1671,  1671,  1671,  1671,  1671,   688,
+  1979,  1979,  1979,  1126,   -98,   -75,   167,   451,   454,   457,
+-32768,-32768,  3133,  3154,  1311,  1312,  6870,   -29,  1228,  1979,
+  1979,-32768,  1132,    21,  1134,  3175,  3196,  -103,  1135,  1140,
+  1137,  1144,  1138,  1145,  1143,  1150,   -96,  1160,  1146,  1165,
+  1162,  1163,  1164,  1167,  1170,  1178,  1173,-32768,-32768,-32768,
+-32768,-32768,  1179,  1180,  1181,  1182,  1183,  1175,  1184,-32768,
+  1185,   289,  1347,  3217,  3238,  3259,  3280,  3301,  3322,  3343,
+  3364,  3385,  3406,  3427,  3448,  3469,  3490,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,  1177,-32768,-32768,-32768,  1671,
+    47,  1979,  1349,  1355,    13,-32768,  1367,  5879,  1282,  3511,
+    14,-32768,-32768,-32768,-32768,   -77,-32768,  1369,-32768,  1370,
+-32768,-32768,  1192,   458,  2185,  3532,  1372,  1373,  1387,  1979,
+  1979,  1389,  1395,  1396,  1397,  1399,  1400,  1401,-32768,  1913,
+  2469,  6893,  1693,   417,   -77,  1402,   -77,  1404,   -77,  1405,
+  1408,  1410,  1411,  1979,  1979,-32768,-32768,  1354,  1671,  1671,
+  1327,  1671,   281,  6916,  1979,    21,  1416,  1979,  1671,  1414,
+  1419,  1415,  1250,  1420,   443,  1421,  1422,  1979,  1423,  1425,
+  1426,  1427,  1428,   443,  1979,  1979,  1979,  1671,  1429,  1431,
+   443,  1979,  1433,  1434,  1432,  1979,   455,-32768,-32768,  1979,
+  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,
+  1979,  1979,  1979,  1436,  1435,  1437,   700,-32768,  1448,  1438,
+-32768,  1256,  1274,  1979,-32768,    37,-32768,-32768,-32768,  1276,
+  1979,-32768,-32768,-32768,   938,   961,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  1171,  1451,  1275,-32768,  1979,-32768,  1270,
+   192,-32768,   194,-32768,  1277,   199,-32768,  1278,-32768,-32768,
+-32768,  3553,  3574,   -29,   166,-32768,   499,  1281,  1376,  1979,
+-32768,-32768,  3595,    21,  1287,  3616,  1284,-32768,  1285,-32768,
+  1310,-32768,  1315,-32768,  1316,  6939,-32768,  1317,-32768,-32768,
+  1319,  1328,  6962,  3637,  6985,  1325,-32768,  1330,  1332,  3658,
+  1329,  1334,-32768,  3679,  1331,  3700,  3721,  3742,  3763,  3784,
+  3805,  3826,  3847,  3868,  3889,  3910,  3931,  3952,  3973,  1336,
+-32768,-32768,-32768,    14,-32768,  1406,  1516,  3994,-32768,-32768,
+  4015,-32768,-32768,-32768,-32768,   417,  2001,-32768,  1733,  1733,
+    36,  1733,    36,  1979,  1979,  1430,-32768,  1671,-32768,  1671,
+  1979,  2492,  1671,  1374,  1519,   -29,   443,  1523,  1979,  1521,
+   443,  1522,  1526,  1524,  1525,  1527,  1979,  1528,  1671,  1530,
+  1531,  1979,  1529,  1532,  1979,  1534,  1979,  1979,  1979,  1979,
+  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,
+-32768,  1543,-32768,-32768,  1979,  1545,  1362,  1979,-32768,  1733,
+  1733,  1979,  2515,   201,  2538,   206,  1546,  1365,   -19,-32768,
+  2561,   220,   -17,  2584,  2607,  1368,-32768,  1371,  1418,-32768,
+  1375,    21,-32768,  1378,  1379,  1380,  4036,-32768,  1377,-32768,
+  1392,-32768,-32768,-32768,  7008,-32768,  1390,-32768,-32768,  7031,
+  1412,-32768,  7054,  1407,  4057,  4078,  4099,  4120,  4141,  4162,
+  4183,  4204,  4225,  7077,  7100,  7123,  7146,  4246,-32768,  2340,
+  1413,-32768,  2630,  2791,  1553,  1979,  1555,  1979,-32768,  1671,
+  1556,-32768,  1557,  1979,  1578,  1595,  1596,  1671,  1671,-32768,
+  1597,    21,   443,   443,   443,   443,  1598,  1600,  1601,   443,
+  1603,  1612,  1613,  1615,  1979,  1979,  1979,  1979,  1979,  1979,
+  1979,  1979,  1979,-32768,-32768,-32768,-32768,  1979,  1979,-32768,
+  1616,-32768,-32768,  2653,-32768,  1443,  2676,  1439,-32768,-32768,
+  1445,  2699,-32768,-32768,-32768,  1450,  1449,-32768,    21,  1452,
+  1453,  1440,  1441,-32768,-32768,-32768,  1455,-32768,-32768,-32768,
+  1456,  4267,  4288,  4309,  4330,  4351,  4372,  4393,  4414,  4435,
+  1457,  1459,  1460,  1462,  7169,  2722,  1466,  1619,    36,  1638,
+  1671,    36,  1645,  1671,  1569,  1472,   443,   443,  1652,  1653,
+   443,  1655,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,
+  1979,  1979,  1979,  1979,    47,-32768,-32768,  1656,-32768,    -7,
+-32768,  1474,   500,    -6,-32768,  1476,  1477,  1480,    21,  1482,
+  1483,-32768,-32768,  1489,  1490,  4456,  4477,  4498,  4519,  4540,
+  4561,  4582,  4603,  4624,   512,  2185,   515,  2185,   543,  2185,
+   546,-32768,  1488,  1517,  1672,    36,  1671,  1702,  1703,    36,
+  1589,  1979,    21,   443,  1671,  1728,  1729,  1979,  1979,  1979,
+  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1732,  1979,  1734,
+  1979,  1760,    47,  1761,    47,  1762,-32768,     0,  1518,-32768,
+-32768,     2,  1551,  4645,    21,  1582,  1599,-32768,-32768,  4666,
+  4687,  4708,  4729,  4750,  4771,  7192,  7215,  7238,  2185,-32768,
+  2185,-32768,  2185,-32768,-32768,-32768,   547,-32768,-32768,  1779,
+  1781,  1782,  1979,  1979,  1634,   443,  1671,  1979,  1979,  1979,
+  1979,  1979,  1979,-32768,-32768,-32768,    47,  1785,-32768,-32768,
+-32768,  4792,  2745,  1636,  1606,  1607,  4813,  4834,  4855,  4876,
+  4897,  4918,  1608,  1640,  1646,-32768,-32768,  1979,  1789,-32768,
+  1671,   443,  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1979,
+  1979,  2768,-32768,  1610,  1618,  4939,  4960,  4981,  5002,  5023,
+  5044,   551,  2185,   552,  2185,   570,  2185,  1827,  1671,  1829,
+  1979,  1979,  1979,  1979,  1979,  1979,  1979,  1830,  1979,  1831,
+  1979,  1832,-32768,  1654,-32768,  5065,  5086,  5107,  7261,  7284,
+  7307,  2185,-32768,  2185,-32768,  2185,-32768,  1671,  1979,  1979,
+  1979,-32768,-32768,-32768,  1657,  5128,  5149,  5170,  1651,  1659,
+  1661,  1671,  1979,  1979,  1979,  1979,  1979,  1979,  1658,  5191,
+  5212,  5233,   589,  2185,   592,  2185,   612,  2185,   443,  1979,
+  1979,  1979,  1979,  1834,  1979,  1844,  1979,  1845,  1669,  7330,
+  7353,  7376,  2185,-32768,  2185,-32768,  2185,-32768,  1863,-32768,
+-32768,-32768,-32768,  1682,  1683,  1687,  1979,  1979,  1979,   635,
+  2185,   639,  2185,   640,  2185,  1979,  1870,  1979,  1871,  1979,
+  1873,  2185,-32768,  2185,-32768,  2185,-32768,  1881,  1884,-32768
 };
 
 static const short yypgoto[] = {-32768,
-   -25,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1331,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   -33,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  1302,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  -284,   -18,-32768,  1915,  1916,  -335,
-   -16,  1917,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768, -1119, -1228,-32768,-32768,  -984,   -23,-32768,   361,
--32768,   -84,-32768, -1072,   935,   228,  -183,  -319,  -800,  1024,
--32768,  -279
+-32768,-32768,-32768,-32768,  -285,   -20,-32768,  1879,  1880,  -341,
+    91,  1883,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768, -1133, -1234,-32768,-32768,  -999,   -23,-32768,   385,
+-32768,   -87,-32768, -1066,   902,   214,  -228,  -310,  -797,   959,
+-32768,  -265
 };
 
 
-#define	YYLAST		7588
+#define	YYLAST		7559
 
 
 static const short yytable[] = {   135,
-   457,   458,   459,   231,   134,   468,   504,  1299,   190,   940,
-   236,  1299,   179,   677,   812,   529,    78,   188,  1173,   365,
-  1110,   948,   140,    93,   947,   290,  1234,    10,   141,  1119,
-  1234,  1235,   147,   348,   349,  1235,  1126,   144,     8,  1156,
-   456,   803,  1234,   455,   456,   348,   349,  1235,   488,   978,
-  1240,   979,   489,  1234,   198,  1234,  1234,  1000,  1235,     9,
-  1235,  1235,   348,   349,   949,   348,   349,  1234,    81,   118,
-   119,   120,  1235,   118,   119,   120,   184,  1009,   980,   185,
-   981,   348,   349,   590,   591,   592,   593,   594,   595,   596,
-   597,   598,   599,   600,   601,   602,   603,   982,   238,   983,
-   239,   283,   284,   285,   464,    82,   286,   289,    83,   293,
-  1251,   180,   366,   291,   292,    84,   313,   314,   315,   316,
-    85,   318,   319,   582,   321,   322,   323,   583,   330,   804,
-   805,   305,   306,   307,   308,   309,   891,   892,   893,   894,
-   895,   310,   464,  1055,   346,   347,    11,    12,    13,    14,
-    15,    16,    17,    18,  1298,   145,   148,   189,   536,   537,
-   356,   146,   363,   364,   360,   367,  1302,   369,   370,   682,
-   128,   129,   373,   121,   122,   123,   124,  1452,   769,  1456,
-  1517,   671,   240,   697,   241,    79,   191,   673,  1299,   348,
-   349,  1519,  1299,   242,   237,   243,   181,   678,   813,  1252,
-  1097,   604,   989,  1256,   348,   349,   151,   160,   990,   409,
-   161,   162,    86,   163,   413,   414,   415,   416,   417,   418,
-   419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
-   429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
-   439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
-   449,   450,   451,   452,   453,   454,  1299,   128,   129,   244,
-  1299,   245,    87,   233,   463,   234,  1417,   128,   129,  1421,
-    93,   469,   473,   474,   475,   476,   477,   478,   479,   480,
-   481,   482,   483,   484,   485,   486,   487,   166,   167,   348,
-   349,   128,   129,   494,    88,   837,   497,   501,   168,   234,
-   197,   284,   463,    89,   169,   464,   350,   508,   509,   510,
-   138,   512,   513,   514,   515,   516,   517,   518,   139,   464,
-   663,   467,   348,   349,   664,  1357,  1358,  1359,  1360,   531,
-   532,   533,  1364,  1485,   538,   348,   349,  1489,   246,   351,
-   247,   818,   545,   838,   797,   668,   963,   964,   550,   934,
-  1219,   153,   589,   296,   297,   298,   299,   300,   142,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,   348,   349,
-   931,   348,   349,   310,   668,   827,   174,   143,   328,   175,
-   176,  1098,   154,   334,   520,   798,   864,   530,   298,   299,
-   300,   588,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,   348,   349,   170,   172,   357,   310,   972,   973,  1427,
-  1428,   361,   362,  1431,   295,   348,   349,   847,   348,   349,
-   121,   122,   123,   124,   348,   349,   155,   348,   349,   348,
-   349,  1166,   348,   349,  1167,  1174,   472,   149,   284,  1175,
-  1169,   128,   129,  1293,   674,  1295,   150,   672,  1301,   670,
-   296,   297,   298,   299,   300,   152,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,   463,   159,   307,   308,   309,
-   310,   121,   122,   123,   124,   310,  1493,   409,   164,   463,
-   464,   699,   700,   248,   801,   249,   165,   705,   128,   129,
-   173,   177,   128,   129,   696,   178,   234,   715,   716,   121,
-   122,   123,   124,   186,   156,   157,   719,   158,   250,   957,
-   251,   464,   252,   723,   253,   182,   183,   933,   935,   187,
-   128,   129,   193,   732,   733,   343,   254,   345,   255,    42,
-    43,    44,    45,   352,    47,   256,   192,   257,  1542,   296,
-   297,   298,   299,   300,   194,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,   258,   260,   259,   261,   262,   310,
-   263,   865,   264,   266,   265,   267,   195,   196,   770,   296,
-   297,   298,   299,   300,  1572,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,   268,   270,   269,   271,   272,   310,
-   273,   296,   297,   298,   299,   300,   411,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,   274,   809,   275,   232,
-   276,   310,   277,   278,   668,   279,   669,   787,   788,   661,
-   668,   662,   698,   668,   944,   830,   945,   668,   668,   956,
-  1060,   789,   790,   791,   792,   793,   794,   795,   229,   280,
-   463,  1080,   281,   282,   800,   464,  1175,   806,  1176,  1454,
-   294,  1455,   311,  1474,  1046,  1475,   817,   312,   317,   299,
-   300,  1656,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,   463,   409,  1476,   320,  1477,   310,  1478,  1480,  1479,
-  1481,   331,   332,   904,  1534,   358,  1535,   832,   667,  1594,
-  1596,  1595,  1597,  1075,  1598,  1650,  1599,  1651,  1652,   333,
-  1653,   856,   857,   335,   505,   860,   336,   342,   523,   524,
-    90,    91,   337,   869,   870,   338,    94,    95,    96,    97,
-    98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-   108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-  1654,   854,  1655,  1683,  1685,  1684,  1686,   339,   907,   908,
-   909,   910,   911,   912,   913,   914,   915,   916,   917,   918,
-   919,   920,   296,   297,   298,   299,   300,   340,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,  1687,   341,  1688,
-   353,   354,   310,   355,   936,   359,   368,   941,   371,   943,
-   296,   297,   298,   299,   300,   372,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,   463,   374,   958,   375,   959,
-   310,   404,   376,   377,   378,   379,  1078,   380,  1079,   381,
-   382,   383,   384,   974,   975,   976,   407,  1224,   406,   385,
-   386,   387,   388,   389,   410,   390,   391,   392,   393,   993,
-   994,   996,   296,   297,   298,   299,   300,   394,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,   296,   297,   298,
-   299,   300,   310,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,   395,   408,   396,   397,   398,   310,   125,   126,
-   714,   399,   400,   401,   127,   310,  1028,   402,   403,   130,
-   461,   471,   287,   506,   470,   288,   296,   297,   298,   299,
-   300,   511,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,  1047,   820,   821,   519,   823,   310,   540,   541,   825,
-   826,   544,   547,   296,   297,   298,   299,   300,   939,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,   551,  1065,
-  1066,   552,  1132,   310,   553,   554,   555,   556,   557,  1074,
-   558,   491,   559,   560,   858,   859,  1150,   561,   862,   562,
-  1089,  1090,   563,   564,   565,   566,   567,   568,   569,   570,
-  1101,  1100,   877,   878,  1103,   571,   572,   573,   883,   884,
-   574,   575,   576,   577,  1113,   890,   578,   897,   579,   580,
-   581,  1120,  1121,  1122,   584,   665,   585,   586,  1127,   666,
-   675,   676,  1131,   683,   681,   684,  1133,  1134,  1135,  1136,
-  1137,  1138,  1139,  1140,  1141,  1142,  1143,  1144,  1145,  1146,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,   685,
-  1155,   686,   688,   689,   310,   691,   713,  1158,   692,   693,
-   701,   717,   725,   819,   718,   726,   727,   728,   729,   951,
-   731,   953,   735,   766,  1164,   736,   737,   738,   739,   740,
-   741,   960,   961,   962,   742,   743,   965,   966,   967,   968,
-   969,   970,   971,  1179,  1159,  1181,   744,   745,   746,   747,
-   851,   852,   853,   296,   297,   298,   299,   300,   748,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,   772,   871,
-   749,   750,   751,   310,   752,   753,   754,   755,   880,   767,
-   756,   296,   297,   298,   299,   300,   757,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,   773,   786,   796,   799,
-   846,   310,  1449,   758,   807,   808,   759,   774,   760,   810,
-   761,   802,  1230,  1232,   816,  1238,   822,  1241,  1242,   775,
-   824,   834,   762,   763,  1246,   764,   765,   811,  1160,   855,
-  1045,   768,  1254,   835,   776,   836,   777,   833,   839,   778,
-  1262,   840,   841,   779,   842,  1267,   843,   780,  1270,   844,
-  1272,  1273,  1274,  1275,  1276,  1277,  1278,  1279,  1280,  1281,
-  1282,  1283,  1284,  1285,   781,   782,   783,   784,  1287,   785,
-  1512,  1290,  1515,   283,   284,  1291,   845,   861,   866,   867,
-   868,   872,   873,   875,   874,   876,   879,   881,   882,  1096,
-   885,   886,   887,  1309,   888,   889,  1104,   898,   899,   296,
-   297,   298,   299,   300,   900,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,   901,  1123,   902,   930,   903,   310,
-   905,   937,   932,  1161,  1553,   590,   591,   592,   593,   594,
-   595,   596,   597,   598,   599,   600,   601,   602,   603,  1341,
-   938,  1344,   942,   946,   950,   952,   954,  1349,   955,   977,
-   986,   987,   992,  1356,   995,   997,  1001,  1002,  1003,  1004,
-  1005,  1006,  1007,  1011,  1008,  1012,  1010,  1019,  1369,  1370,
-  1371,  1372,  1373,  1374,  1375,  1376,  1377,  1013,  1025,  1056,
-  1029,  1382,  1383,   296,   297,   298,   299,   300,  1014,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,  1015,  1016,
-  1393,  1048,  1017,   310,  1018,  1020,  1021,  1022,  1081,  1049,
-  1083,  1023,  1086,    90,    91,  1051,  1024,  1026,  1044,    94,
+   228,   462,   134,   520,  1302,  1113,   937,    10,  1302,   495,
+   233,   451,   452,   453,  1122,   176,   671,   806,   143,   359,
+   187,  1129,   143,    78,   145,    93,   185,  1176,     9,   525,
+    27,    28,   526,   527,    31,    32,    33,   944,    34,  1243,
+    36,    37,  1159,    39,    40,  1237,   195,  1237,     8,   945,
+  1238,   450,  1238,   449,   450,   482,   458,  1237,  1237,   483,
+    52,   287,  1238,  1238,  1237,   797,  1237,   342,   343,  1238,
+    81,  1238,   342,   343,   342,   343,    53,    54,    55,  1000,
+   118,   119,   120,   118,   119,   120,  1009,   235,   975,   236,
+   976,   458,   946,   163,   164,   342,   343,    82,   342,   343,
+  1237,   280,   281,   282,   165,  1238,   283,   286,    83,   290,
+   166,   977,   360,   978,   177,   344,   310,   311,   312,  1254,
+   314,   181,   316,   317,   182,   324,    11,    12,    13,    14,
+    15,    16,    17,    18,    93,   237,   144,   238,    64,   140,
+   144,   340,   341,  1055,    84,   714,   715,   461,   716,   288,
+   289,   576,   989,   798,   799,   577,   342,   343,   990,   357,
+   358,   367,   361,    85,   363,   364,   186,   342,   343,  1301,
+    86,  1305,   676,   345,   665,   121,   122,   123,   124,   931,
+   528,  1455,  1459,   688,   583,  1302,   139,  1255,  1520,  1302,
+  1522,  1259,    79,   145,   234,   667,   128,   129,   188,   178,
+   672,   807,   342,   343,   664,   657,   403,   342,   343,   658,
+    87,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+   416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
+   426,   427,   428,   429,   430,   431,   432,   433,   434,   435,
+   436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
+   446,   447,   448,  1302,   458,  1420,   831,  1302,  1424,   128,
+   129,   457,   530,   531,   350,   458,   463,   763,   354,   467,
+   468,   469,   470,   471,   472,   473,   474,   475,   476,   477,
+   478,   479,   480,   481,   121,   122,   123,   124,  1100,   487,
+   171,   489,    88,   172,   173,   281,   457,   121,   122,   123,
+   124,   499,   500,   501,   832,   503,   504,   505,   506,   507,
+   508,   509,    89,  1360,  1361,  1362,  1363,   812,   128,   129,
+  1367,   662,  1488,   522,   523,   524,  1492,   138,   532,   121,
+   122,   123,   124,   342,   343,   928,   539,   342,   343,   662,
+   153,   154,   544,   155,   342,   343,   148,   791,  1177,   511,
+   128,   129,  1178,   979,   150,   980,  1222,   342,   343,   140,
+   521,   322,   342,   343,   342,   343,   328,   141,   861,   342,
+   343,   342,   343,   841,   142,   821,   342,   343,  1169,   239,
+  1170,   240,   151,   582,   241,  1172,   242,  1296,   351,   146,
+   342,   343,  1298,   792,   355,   356,   157,  1430,  1431,   158,
+   159,  1434,   160,   848,   849,   850,  1304,   243,   292,   244,
+   147,   293,   294,   295,   296,   297,   149,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,   156,   167,   169,   458,
+   152,   307,   281,   795,   466,   245,   161,   246,   668,   666,
+   175,   293,   294,   295,   296,   297,   162,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,   247,   458,   248,   457,
+   249,   307,   250,   251,  1496,   252,   128,   129,   403,  1101,
+   457,   170,   690,   691,    42,    43,    44,    45,   696,    47,
+   302,   303,   304,   305,   306,   458,   458,   458,   706,   707,
+   307,   174,   128,   129,   179,   128,   129,   710,   230,   180,
+   231,   492,   253,   231,   254,   183,   255,   717,   256,   184,
+   930,   932,   954,   257,   803,   258,   189,   726,   727,   960,
+   961,   293,   294,   295,   296,   297,  1545,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,   304,   305,   306,   128,
+   129,   307,   190,   862,   307,   687,   337,   231,   339,   888,
+   889,   890,   891,   892,   346,   826,   259,   261,   260,   262,
+   764,   191,  1575,   293,   294,   295,   296,   297,   192,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,   263,   265,
+   264,   266,   267,   307,   268,   269,   271,   270,   272,   293,
+   294,   295,   296,   297,   458,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,   851,   273,   275,   274,   276,   307,
+   193,   781,   782,   655,   662,   656,   663,   405,   662,   662,
+   689,   824,   941,   194,   942,   783,   784,   785,   786,   787,
+   788,   789,  1080,   662,   457,   953,   226,   662,   794,   981,
+   662,   800,   982,   662,   662,   983,  1060,   229,   277,  1659,
+   811,   278,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,   279,   457,   403,   291,  1046,   307,   308,   661,   293,
+   294,   295,   296,   297,   901,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,   936,  1178,  1457,  1179,  1458,   307,
+   457,   457,   457,   969,   970,   853,   854,   309,  1477,   857,
+  1478,  1479,   313,  1480,  1075,  1153,   315,   866,   867,   325,
+   293,   294,   295,   296,   297,   326,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,   327,   514,   515,   329,  1481,
+   307,  1482,  1483,  1537,  1484,  1538,   330,  1597,  1599,  1598,
+  1600,   331,   904,   905,   906,   907,   908,   909,   910,   911,
+   912,   913,   914,   915,   916,   917,  1601,   332,  1602,   293,
+   294,   295,   296,   297,   333,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,   334,  1653,   933,  1654,  1655,   307,
+  1656,   938,   335,   940,   584,   585,   586,   587,   588,   589,
+   590,   591,   592,   593,   594,   595,   596,   597,  1657,   457,
+  1658,   955,   336,   956,   295,   296,   297,   347,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,   971,   972,   973,
+   348,  1686,   307,  1687,  1227,  1688,  1690,  1689,  1691,   352,
+   996,   349,   353,   362,   365,   366,   993,   994,   368,   293,
+   294,   295,   296,   297,   369,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,   370,   371,   372,   373,   374,   307,
+   293,   294,   295,   296,   297,   375,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,   376,   377,   378,   379,   380,
+   307,  1028,   381,   382,   383,   384,   385,   386,   387,   388,
+   389,   814,   815,   390,   817,   705,   819,   820,   391,   392,
+   393,   394,   598,    90,    91,   395,   396,   397,  1047,    94,
     95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-   115,   116,   117,   906,  1027,  1053,  1433,  1434,  1435,  1436,
-  1437,  1438,  1439,  1440,  1441,  1443,  1445,  1447,  1057,  1058,
-  1059,  1062,  1063,  1064,  1067,  1068,  1069,  1070,  1071,  1072,
-  1460,  1073,  1244,  1082,  1245,  1084,  1087,  1248,   296,   297,
-   298,   299,   300,  1091,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,  1264,  1095,  1102,  1105,  1106,   310,  1107,
-  1108,  1109,  1111,  1112,  1492,  1491,  1115,  1114,  1116,  1118,
-  1117,  1497,  1498,  1499,  1500,  1501,  1502,  1503,  1504,  1505,
-  1506,  1124,  1508,  1125,  1510,  1128,  1129,  1130,  1147,  1153,
-  1165,  1148,  1149,    90,    91,  1151,  1522,  1152,  1154,    94,
+   115,   116,   117,   398,   855,   856,  1065,  1066,   859,  1135,
+   400,   401,   402,  1162,   404,   307,  1074,   464,   455,   465,
+   497,   502,   874,   875,   510,   534,   535,   538,   880,   881,
+  1092,  1093,  1104,   541,   545,   887,  1163,   894,   546,   547,
+   548,  1103,   296,   297,  1106,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,  1116,   549,   550,   551,   552,   307,
+   553,  1123,  1124,  1125,   554,   555,   556,   557,  1130,   558,
+   559,   560,  1134,   561,   562,   563,  1136,  1137,  1138,  1139,
+  1140,  1141,  1142,  1143,  1144,  1145,  1146,  1147,  1148,  1149,
+   564,   565,   566,   567,   568,   569,   570,   571,   572,   948,
+  1158,   950,   573,   574,   575,   659,   578,  1161,   579,   580,
+   660,   957,   958,   959,   669,   670,   962,   963,   964,   965,
+   966,   967,   968,   675,  1167,   677,   678,   679,   681,   683,
+   684,   813,   692,   704,   708,   709,   719,   720,   721,   722,
+  1184,   125,   126,   723,   725,   729,  1182,   127,   760,   730,
+   731,   732,   130,   733,   734,   284,   735,   780,   285,   736,
+   737,   738,   739,   740,   741,   845,   846,   847,   293,   294,
+   295,   296,   297,   742,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,   743,   744,   790,   745,   868,   307,   746,
+   747,   293,   294,   295,   296,   297,   877,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,   766,   748,   749,   750,
+   751,   307,   752,  1045,   753,  1233,  1235,   793,  1241,  1452,
+  1244,  1245,   767,   754,   755,   756,   757,  1249,   758,   759,
+   761,   762,   801,   796,   802,  1257,   768,   804,   769,   770,
+   771,   810,   840,  1265,   816,   772,  1164,   852,  1270,   773,
+   818,  1273,   828,  1275,  1276,  1277,  1278,  1279,  1280,  1281,
+  1282,  1283,  1284,  1285,  1286,  1287,  1288,   805,   827,   829,
+   830,  1290,   774,   833,  1293,  1099,   280,   281,  1294,   834,
+   775,   835,  1107,   836,   837,   776,   838,  1515,  1312,  1518,
+   839,   777,   778,   858,   779,   863,   864,   865,   869,    90,
+    91,  1126,   870,   871,   872,    94,    95,    96,    97,    98,
+    99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+   109,   110,   111,   112,   113,   114,   115,   116,   117,   873,
+   876,   878,   879,   882,   883,   884,   885,   886,   895,   898,
+   899,  1556,  1344,   896,  1347,   897,   902,   900,  1359,   927,
+  1352,   584,   585,   586,   587,   588,   589,   590,   591,   592,
+   593,   594,   595,   596,   597,   929,   934,   935,   943,   939,
+   947,  1372,  1373,  1374,  1375,  1376,  1377,  1378,  1379,  1380,
+   949,   951,   952,   974,  1385,  1386,   986,   987,   992,   995,
+   997,  1001,  1002,  1003,  1005,  1396,  1004,  1006,  1011,  1007,
+  1056,   293,   294,   295,   296,   297,  1008,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,  1010,  1012,  1013,  1014,
+  1015,   307,  1029,  1016,  1048,  1019,  1017,  1025,  1049,  1081,
+  1094,  1083,  1044,  1086,  1018,  1020,  1021,  1022,  1023,  1024,
+  1026,  1027,  1051,  1053,  1057,  1058,  1059,  1062,  1063,  1436,
+  1437,  1438,  1439,  1440,  1441,  1442,  1443,  1444,  1446,  1448,
+  1450,  1247,  1064,  1248,  1067,  1463,  1251,   125,   126,   903,
+  1068,  1069,  1070,   127,  1071,  1072,  1073,  1082,   130,  1084,
+  1087,   685,  1267,  1089,   686,  1090,  1091,  1098,  1105,  1108,
+  1110,  1109,  1111,  1310,  1115,  1112,  1114,  1118,  1117,  1495,
+  1121,  1119,  1120,  1128,  1127,  1131,  1132,  1133,  1494,  1150,
+  1151,  1156,  1152,  1155,  1500,  1501,  1502,  1503,  1504,  1505,
+  1506,  1507,  1508,  1509,  1154,  1511,  1165,  1513,  1168,  1157,
+  1160,  1525,  1166,  1181,  1171,  1173,    90,    91,  1180,  1185,
+  1187,  1188,    94,    95,    96,    97,    98,    99,   100,   101,
+   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+   112,   113,   114,   115,   116,   117,  1189,  1190,  1223,  1542,
+  1543,  1194,  1191,  1193,  1547,  1548,  1549,  1550,  1551,  1552,
+  1195,  1199,  1200,  1348,  1201,  1203,  1204,  1206,  1221,  1224,
+  1246,  1356,  1357,  1252,  1253,  1256,  1258,  1260,  1261,  1262,
+  1263,  1271,  1264,  1266,  1572,  1268,  1269,  1272,  1274,  1576,
+  1577,  1578,  1579,  1580,  1581,  1583,  1585,  1587,  1289,  1291,
+  1292,  1299,  1300,  1234,  1236,  1308,  1242,  1309,  1343,  1317,
+  1345,  1349,  1350,  1311,  1313,  1314,  1315,  1606,  1607,  1608,
+  1609,  1610,  1611,  1612,  1318,  1614,  1320,  1616,   293,   294,
+   295,   296,   297,  1353,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,  1324,  1322,  1626,  1627,  1628,   307,  1341,
+  1354,  1355,  1358,  1364,  1423,  1365,  1366,  1427,  1368,  1640,
+  1641,  1642,  1644,  1646,  1648,   339,   496,  1369,  1370,  1371,
+  1387,  1429,  1399,  1400,  1419,  1391,  1660,  1661,  1662,  1663,
+  1389,  1665,  1392,  1667,   125,   126,  1394,  1395,  1397,  1398,
+   127,  1401,  1402,  1421,  1412,   130,  1413,  1414,   822,  1415,
+  1425,   823,  1418,  1681,  1683,  1685,  1428,  1432,  1433,  1435,
+  1454,  1456,  1692,  1460,  1694,  1461,  1696,  1462,  1464,  1465,
+  1489,  1466,  1467,    90,   318,  1485,  1493,  1487,  1497,    94,
     95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-   115,   116,   117,  1157,  1162,  1163,  1539,  1540,  1168,  1170,
-  1177,  1544,  1545,  1546,  1547,  1548,  1549,  1178,  1184,  1182,
-  1185,   125,   126,   548,  1186,  1187,  1188,   127,  1190,  1191,
-  1192,  1196,   130,  1221,  1345,   694,  1231,  1233,   695,  1239,
-  1197,  1569,  1353,  1354,  1198,  1200,  1573,  1574,  1575,  1576,
-  1577,  1578,  1580,  1582,  1584,  1201,  1203,  1218,    26,    27,
-    28,    29,    30,    31,    32,    33,  1220,    34,  1243,    36,
-    37,  1249,    39,    40,  1603,  1604,  1605,  1606,  1607,  1608,
-  1609,  1250,  1611,  1253,  1613,  1255,  1258,  1257,  1259,    52,
-  1260,  1261,  1263,  1265,  1266,  1268,  1269,  1286,   345,  1271,
-  1288,  1289,  1623,  1624,  1625,    53,    54,    55,  1296,  1308,
-  1297,  1305,  1306,  1310,  1311,  1312,  1637,  1638,  1639,  1641,
-  1643,  1645,  1314,  1340,  1317,  1420,  1342,  1346,  1424,  1347,
-  1315,  1319,  1321,  1657,  1658,  1659,  1660,  1338,  1662,  1350,
-  1664,   125,   126,  1351,  1352,  1355,  1307,   127,  1361,  1362,
-  1363,  1365,   130,  1366,  1367,   828,  1368,  1384,   829,  1388,
-  1678,  1680,  1682,  1386,  1389,  1391,  1416,    64,  1392,  1689,
-  1394,  1691,  1395,  1693,  1396,  1397,   296,   297,   298,   299,
-   300,  1398,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,  1486,  1399,  1415,    90,   324,   310,  1409,  1410,  1494,
-    94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-   104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-   114,   115,   116,   117,    90,   502,  1411,  1412,  1418,  1422,
-    94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-   104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-   114,   115,   116,   117,  1425,  1426,    90,    91,  1429,  1453,
-  1430,  1543,    94,    95,    96,    97,    98,    99,   100,   101,
-   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-   112,   113,   114,   115,   116,   117,  1432,  1451,  1457,  1484,
-  1458,  1459,  1463,  1461,  1462,  1571,  1464,  1483,  1482,  1487,
-  1488,   296,   297,   298,   299,   300,  1490,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,  1495,  1496,    90,    91,
-    92,   310,    93,  1601,    94,    95,    96,    97,    98,    99,
-   100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-   110,   111,   112,   113,   114,   115,   116,   117,  1507,   118,
-   119,   120,  1622,  1509,  1511,  1513,  1516,  1518,  1520,  1523,
-  1524,  1536,   125,   325,  1537,  1538,  1636,  1541,   127,  1554,
-  1557,  1558,  1559,   130,   296,   297,   298,   299,   300,   326,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,  1566,
-  1567,  1568,   125,   126,   310,  1570,  1586,  1600,   127,  1587,
-  1225,  1602,  1226,   130,  1610,  1612,  1614,  1615,  1661,   503,
-  1663,  1629,  1665,  1633,  1634,  1635,  1646,  1666,  1670,  1674,
-  1675,  1676,  1690,  1692,  1227,  1228,  1694,  1696,  1697,   771,
-   127,    69,    70,    71,  1094,  1229,    90,    91,   456,     0,
-     0,   169,    94,    95,    96,    97,    98,    99,   100,   101,
-   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-   112,   113,   114,   115,   116,   117,   680,   118,   119,   120,
-     0,  1050,   121,   122,   123,   124,     0,     0,     0,     0,
-     0,   831,     0,     0,     0,     0,   125,   126,     0,     0,
-     0,     0,   127,   128,   129,     0,   863,   130,     0,   131,
-     0,   132,    90,    91,     0,     0,     0,     0,    94,    95,
-    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-   116,   117,    90,   324,     0,     0,     0,     0,    94,    95,
-    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-   116,   117,    90,   502,     0,     0,     0,     0,    94,    95,
-    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-   116,   117,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   125,   126,     0,     0,     0,     0,
-   127,     0,     0,     0,     0,   130,     0,     0,     0,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,   296,   297,   298,   299,   300,   310,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,   296,
-   297,   298,   299,   300,   310,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   125,   126,     0,     0,     0,     0,   127,     0,     0,     0,
-     0,   130,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-   125,   462,   310,     0,   460,     0,   127,     0,   521,   -10,
-     1,   130,   -10,   -53,     0,   296,   297,   298,   299,   300,
-     0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-   125,   126,     0,     0,     0,   310,   127,     0,     0,     0,
-     0,   130,   -53,   496,     0,     0,   -53,   -53,   -53,   -53,
-   -53,   -53,   -53,   -53,   -53,     0,   -53,   -53,   -53,   -53,
-   -53,   -53,   -53,     0,     0,     0,   -53,   -53,   -53,   -53,
-   -53,   -53,   -53,     0,   -53,   -53,   -53,   -53,   -53,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,   -53,   -53,   -53,     0,     0,   310,
-     0,   460,     0,   -53,     0,   -53,   -53,   -53,   -53,   -53,
-   -53,   -53,     0,     0,    26,    27,    28,    29,    30,    31,
-    32,    33,     0,    34,     0,    36,    37,     0,    39,    40,
-     0,   -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,     0,
-     0,     0,     0,     0,     0,    52,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   -53,     2,     3,     0,
-     4,    53,    54,    55,    26,    27,    28,    29,    30,    31,
-    32,    33,     0,    34,     0,    36,    37,     0,    39,    40,
+   115,   116,   117,    90,   493,  1486,  1521,  1490,  1491,    94,
+    95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+   115,   116,   117,  1498,  1499,    90,    91,  1510,  1523,  1512,
+  1546,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+   113,   114,   115,   116,   117,  1514,  1516,  1519,  1526,   293,
+   294,   295,   296,   297,  1574,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,  1539,  1527,  1540,  1541,  1544,   307,
+  1557,  1560,  1561,  1562,  1573,  1569,  1589,    90,    91,    92,
+  1590,    93,  1604,    94,    95,    96,    97,    98,    99,   100,
+   101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+   111,   112,   113,   114,   115,   116,   117,  1570,   118,   119,
+   120,  1625,  1603,  1571,  1605,  1613,  1615,  1617,  1636,  1664,
+  1618,   125,   319,  1632,  1649,  1639,  1637,   127,  1638,  1666,
+  1668,  1669,   130,   293,   294,   295,   296,   297,   320,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,  1673,  1677,
+  1678,   125,   126,   307,  1679,  1693,  1695,   127,  1697,  1078,
+  1699,  1079,   130,  1700,   765,    69,    70,     0,   494,    71,
+     0,  1097,     0,  1050,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,  1230,  1231,     0,     0,     0,     0,   127,
+     0,     0,     0,     0,  1232,    90,    91,   450,     0,     0,
+   166,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+   113,   114,   115,   116,   117,   542,   118,   119,   120,     0,
+     0,   121,   122,   123,   124,     0,     0,     0,     0,     0,
+   674,     0,     0,     0,     0,   125,   126,     0,     0,     0,
+     0,   127,   128,   129,     0,   825,   130,     0,   131,     0,
+   132,    90,    91,     0,     0,     0,     0,    94,    95,    96,
+    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+   117,    90,   318,     0,     0,     0,     0,    94,    95,    96,
+    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+   117,    90,   493,     0,     0,     0,     0,    94,    95,    96,
+    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+   117,   860,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   125,   126,     0,     0,     0,     0,   127,
+     0,     0,     0,     0,   130,     0,     0,     0,   293,   294,
+   295,   296,   297,     0,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,   293,   294,   295,   296,   297,   307,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,   293,   294,
+   295,   296,   297,   307,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   125,
+   126,     0,     0,     0,     0,   127,     0,     0,     0,     0,
+   130,   293,   294,   295,   296,   297,     0,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,   125,
+   456,   307,     0,     0,     0,   127,     0,  1228,     0,  1229,
+   130,     0,   525,    27,    28,   526,   527,    31,    32,    33,
+     0,    34,     0,    36,    37,     0,    39,    40,     0,   125,
+   126,     0,     0,   -10,     1,   127,   -10,   -53,     0,     0,
+   130,     0,     0,    52,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,    53,
+    54,    55,     0,     0,   307,     0,   -53,     0,     0,     0,
+   -53,   -53,   -53,   -53,   -53,   -53,   -53,   -53,   -53,     0,
+   -53,   -53,   -53,   -53,   -53,   -53,   -53,     0,     0,     0,
+   -53,   -53,   -53,   -53,   -53,   -53,   -53,     0,   -53,   -53,
+   -53,   -53,   -53,   293,   294,   295,   296,   297,     0,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,   -53,   -53,
+   -53,    64,     0,   307,     0,   454,     0,   -53,     0,   -53,
+   -53,   -53,   -53,   -53,   -53,   -53,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    23,     0,    52,   296,   297,   298,   299,
-   300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,    53,    54,    55,     0,     0,   310,     0,     0,     0,
-     0,     0,    24,    64,   498,     0,    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,    47,   199,    48,    49,    50,    51,    52,     0,
-     0,     0,     0,     0,     0,   534,     0,     0,     0,     0,
-     0,     0,     0,    64,    53,    54,    55,     0,     0,     0,
-     0,     0,     0,    56,     0,    57,    58,    59,    60,    61,
-    62,    63,     0,   296,   297,   298,   299,   300,     0,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   539,   200,   201,   202,  1336,
-     0,  1337,     0,     0,   203,   204,   205,   206,   207,   208,
-   209,   210,   211,   212,     0,     0,    64,     0,     0,     0,
-     0,     0,   213,   214,   215,   216,   217,   218,   219,   220,
-   221,   222,     0,   223,   224,   225,   226,   227,   228,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,   296,   297,   298,   299,   300,   702,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,   296,   297,   298,   299,   300,
-   706,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,     0,   296,   297,
-   298,   299,   300,   707,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-     0,   296,   297,   298,   299,   300,   850,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,     0,   296,   297,   298,   299,   300,  1076,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,   296,   297,   298,
-   299,   300,  1247,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-   296,   297,   298,   299,   300,  1292,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,     0,   296,   297,   298,   299,   300,  1294,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,     0,   296,   297,   298,   299,
-   300,  1300,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,     0,   296,
-   297,   298,   299,   300,  1303,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,   296,   297,   298,   299,   300,  1304,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,     0,   296,   297,   298,   299,   300,
-  1339,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,     0,   296,   297,
-   298,   299,   300,  1385,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-     0,   296,   297,   298,   299,   300,  1387,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,     0,   296,   297,   298,   299,   300,  1390,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,   296,   297,   298,
-   299,   300,  1414,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,     0,
-   296,   297,   298,   299,   300,  1556,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,     0,   296,   297,   298,   299,   300,  1585,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,   521,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-   522,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,   641,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,   642,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,   655,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,   656,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,   657,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,   658,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,   659,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,   660,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,   720,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-   721,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,   722,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,   848,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,   849,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,   984,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,   985,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,   998,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,   999,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1030,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1031,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1032,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1033,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1034,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1035,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1036,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1037,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1038,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1039,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1040,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1041,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1042,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1043,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1054,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1061,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1171,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1172,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1180,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1183,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1194,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1199,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1202,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1204,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1205,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1206,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1207,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1208,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1209,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1210,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1211,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1212,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1213,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1214,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1215,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1216,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1217,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1222,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1223,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1313,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1322,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1323,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1324,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1325,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1326,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1327,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1328,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1329,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1330,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1335,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1400,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1401,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1402,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1403,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1404,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1405,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1406,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1407,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1408,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1465,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1466,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1467,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1468,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1469,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1470,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1471,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1472,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1473,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1521,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1525,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1526,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1527,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1528,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1529,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1530,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1555,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1560,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1561,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1562,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1563,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1564,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1565,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1588,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1589,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1590,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1591,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1592,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-   296,   297,   298,   299,   300,  1593,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,   296,   297,   298,   299,   300,  1616,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,   296,   297,   298,   299,   300,  1617,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,   296,   297,   298,   299,   300,  1618,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,   296,   297,   298,   299,   300,  1630,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,   296,   297,   298,   299,   300,
-  1631,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,   296,   297,   298,   299,
-   300,  1632,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,   296,   297,   298,
-   299,   300,  1647,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,   296,   297,
-   298,   299,   300,  1648,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,   296,
-   297,   298,   299,   300,  1649,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   466,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   587,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   620,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   622,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   624,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   626,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   628,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   630,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   632,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   634,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   636,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   638,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   640,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   644,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   646,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   648,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   650,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   652,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   654,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   724,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   922,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   924,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   926,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,   928,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,     0,     0,   929,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,     0,     0,  1052,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,   490,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,   492,   296,   297,   298,   299,   300,
-     0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,   493,   296,   297,
-   298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-   495,   296,   297,   298,   299,   300,     0,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,   499,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,   500,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,   507,
-   296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,   542,   296,   297,   298,   299,   300,     0,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   543,   296,   297,   298,   299,
-   300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,   546,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,   549,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,   619,   296,   297,   298,   299,   300,
-     0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,   621,   296,   297,
-   298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-   623,   296,   297,   298,   299,   300,     0,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,   625,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,   627,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,   629,
-   296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,   631,   296,   297,   298,   299,   300,     0,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   633,   296,   297,   298,   299,
-   300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,   635,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,   637,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,   639,   296,   297,   298,   299,   300,
-     0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,   643,   296,   297,
-   298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-   645,   296,   297,   298,   299,   300,     0,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,   647,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,   649,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,   651,
-   296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,   653,   296,   297,   298,   299,   300,     0,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   687,   296,   297,   298,   299,
-   300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,   690,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,   703,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,   704,   296,   297,   298,   299,   300,
-     0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,   708,   296,   297,
-   298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-   709,   296,   297,   298,   299,   300,     0,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,   710,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,   711,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,   712,
-   296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,   730,   296,   297,   298,   299,   300,     0,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,   734,   296,   297,   298,   299,
-   300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,   921,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,   923,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,   925,   296,   297,   298,   299,   300,
-     0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,   927,   296,   297,
-   298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-   988,   296,   297,   298,   299,   300,     0,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,  1077,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,  1099,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,  1189,
-   296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,  1193,   296,   297,   298,   299,   300,     0,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,  1195,   296,   297,   298,   299,
-   300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,  1316,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,  1318,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,  1320,   296,   297,   298,   299,   300,
-     0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,  1331,   296,   297,
-   298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-  1332,   296,   297,   298,   299,   300,     0,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,  1333,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,  1334,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310,     0,  1413,
-   296,   297,   298,   299,   300,     0,   301,   302,   303,   304,
-   305,   306,   307,   308,   309,     0,     0,     0,     0,     0,
-   310,     0,  1531,   296,   297,   298,   299,   300,     0,   301,
-   302,   303,   304,   305,   306,   307,   308,   309,     0,     0,
-     0,     0,     0,   310,     0,  1532,   296,   297,   298,   299,
-   300,     0,   301,   302,   303,   304,   305,   306,   307,   308,
-   309,     0,     0,     0,     0,     0,   310,     0,  1533,   296,
-   297,   298,   299,   300,     0,   301,   302,   303,   304,   305,
-   306,   307,   308,   309,     0,     0,     0,     0,     0,   310,
-     0,  1619,   296,   297,   298,   299,   300,     0,   301,   302,
-   303,   304,   305,   306,   307,   308,   309,     0,     0,     0,
-     0,     0,   310,     0,  1620,   296,   297,   298,   299,   300,
-     0,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     0,     0,     0,     0,     0,   310,     0,  1621,   296,   297,
-   298,   299,   300,     0,   301,   302,   303,   304,   305,   306,
-   307,   308,   309,     0,     0,     0,     0,     0,   310,     0,
-  1667,   296,   297,   298,   299,   300,     0,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,     0,     0,     0,     0,
-     0,   310,     0,  1668,   296,   297,   298,   299,   300,     0,
-   301,   302,   303,   304,   305,   306,   307,   308,   309,     0,
-     0,     0,     0,     0,   310,     0,  1669,   296,   297,   298,
-   299,   300,     0,   301,   302,   303,   304,   305,   306,   307,
-   308,   309,     0,     0,     0,     0,     0,   310
+     0,     0,     0,     0,    23,   -10,   -10,   -10,   -10,   -10,
+   -10,   -10,   -10,   533,     0,   293,   294,   295,   296,   297,
+     0,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+   -53,     2,     3,    24,     4,   307,     0,    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,    47,   196,    48,    49,    50,    51,    52,
+   293,   294,   295,   296,   297,     0,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,    53,    54,    55,     0,     0,
+   307,     0,   484,     0,    56,     0,    57,    58,    59,    60,
+    61,    62,    63,   525,    27,    28,   526,   527,    31,    32,
+    33,     0,    34,     0,    36,    37,     0,    39,    40,     0,
+     0,     0,     0,     0,     0,     0,     0,   197,   198,   199,
+     0,     0,     0,     0,    52,   200,   201,   202,   203,   204,
+   205,   206,   207,   208,   209,     0,     0,    64,     0,     0,
+    53,    54,    55,   210,   211,   212,   213,   214,   215,   216,
+   217,   218,   219,     0,   220,   221,   222,   223,   224,   225,
+   293,   294,   295,   296,   297,     0,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,     0,     0,     0,     0,     0,  1339,     0,  1340,     0,
+     0,     0,     0,     0,     0,     0,     0,   293,   294,   295,
+   296,   297,    64,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,     0,     0,
+   293,   294,   295,   296,   297,   693,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,     0,     0,   293,   294,   295,   296,   297,   697,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,     0,     0,   293,   294,   295,   296,
+   297,   698,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,     0,     0,   293,
+   294,   295,   296,   297,   844,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,   293,   294,   295,   296,   297,  1076,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,     0,     0,   293,   294,   295,   296,   297,
+  1250,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,     0,     0,   293,   294,
+   295,   296,   297,  1295,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,     0,
+     0,   293,   294,   295,   296,   297,  1297,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,     0,     0,   293,   294,   295,   296,   297,  1303,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,   293,   294,   295,
+   296,   297,  1306,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,     0,     0,
+   293,   294,   295,   296,   297,  1307,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,     0,     0,   293,   294,   295,   296,   297,  1342,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,     0,     0,   293,   294,   295,   296,
+   297,  1388,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,     0,     0,   293,
+   294,   295,   296,   297,  1390,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,   293,   294,   295,   296,   297,  1393,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,     0,     0,   293,   294,   295,   296,   297,
+  1417,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,     0,     0,   293,   294,
+   295,   296,   297,  1559,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,     0,
+     0,   293,   294,   295,   296,   297,  1588,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,     0,   454,     0,     0,     0,   512,   293,   294,
+   295,   296,   297,     0,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,   512,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,   513,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,   635,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,   636,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,   649,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,   650,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+   651,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,   652,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,   653,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,   654,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,   711,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,   712,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,   713,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,   842,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,   843,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,   984,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+   985,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,   998,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,   999,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,  1030,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,  1031,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,  1032,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,  1033,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,  1034,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,  1035,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,  1036,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+  1037,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,  1038,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,  1039,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,  1040,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,  1041,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,  1042,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,  1043,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,  1054,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,  1061,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,  1174,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+  1175,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,  1183,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,  1186,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,  1197,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,  1202,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,  1205,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,  1207,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,  1208,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,  1209,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,  1210,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+  1211,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,  1212,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,  1213,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,  1214,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,  1215,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,  1216,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,  1217,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,  1218,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,  1219,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,  1220,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+  1225,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,  1226,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,  1316,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,  1325,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,  1326,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,  1327,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,  1328,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,  1329,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,  1330,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,  1331,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+  1332,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,  1333,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,  1338,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,  1403,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,  1404,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,  1405,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,  1406,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,  1407,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,  1408,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,  1409,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+  1410,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,  1411,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,  1468,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,  1469,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,  1470,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,  1471,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,  1472,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,  1473,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,  1474,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,  1475,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+  1476,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,  1524,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,  1528,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,  1529,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,  1530,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,  1531,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,  1532,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,  1533,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,  1558,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,  1563,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+  1564,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,  1565,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,  1566,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,  1567,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,  1568,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,  1591,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,  1592,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,  1593,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,  1594,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,  1595,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,   293,   294,   295,   296,   297,
+  1596,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,   293,   294,   295,   296,
+   297,  1619,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,   293,   294,   295,
+   296,   297,  1620,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,   293,   294,
+   295,   296,   297,  1621,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,   293,
+   294,   295,   296,   297,  1633,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+   293,   294,   295,   296,   297,  1634,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,   293,   294,   295,   296,   297,  1635,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,   293,   294,   295,   296,   297,  1650,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,   293,   294,   295,   296,   297,  1651,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,   293,   294,   295,   296,   297,  1652,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   460,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   581,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   614,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   616,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   618,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   620,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   622,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   624,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   626,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   628,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   630,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   632,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   634,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   638,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   640,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   642,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   644,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   646,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   648,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   718,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   919,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   921,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   923,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,   925,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,   926,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,  1052,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,   485,   293,   294,   295,
+   296,   297,     0,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,     0,   486,
+   293,   294,   295,   296,   297,     0,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,     0,   488,   293,   294,   295,   296,   297,     0,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,     0,   490,   293,   294,   295,   296,
+   297,     0,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,     0,   491,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,   498,   293,   294,   295,   296,   297,     0,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,     0,   536,   293,   294,   295,   296,   297,
+     0,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,     0,   537,   293,   294,
+   295,   296,   297,     0,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,     0,
+   540,   293,   294,   295,   296,   297,     0,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,     0,   543,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,   613,   293,   294,   295,
+   296,   297,     0,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,     0,   615,
+   293,   294,   295,   296,   297,     0,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,     0,   617,   293,   294,   295,   296,   297,     0,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,     0,   619,   293,   294,   295,   296,
+   297,     0,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,     0,   621,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,   623,   293,   294,   295,   296,   297,     0,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,     0,   625,   293,   294,   295,   296,   297,
+     0,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,     0,   627,   293,   294,
+   295,   296,   297,     0,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,     0,
+   629,   293,   294,   295,   296,   297,     0,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,     0,   631,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,   633,   293,   294,   295,
+   296,   297,     0,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,     0,   637,
+   293,   294,   295,   296,   297,     0,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,     0,   639,   293,   294,   295,   296,   297,     0,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,     0,   641,   293,   294,   295,   296,
+   297,     0,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,     0,   643,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,   645,   293,   294,   295,   296,   297,     0,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,     0,   647,   293,   294,   295,   296,   297,
+     0,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,     0,   680,   293,   294,
+   295,   296,   297,     0,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,     0,
+   682,   293,   294,   295,   296,   297,     0,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,     0,   694,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,   695,   293,   294,   295,
+   296,   297,     0,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,     0,   699,
+   293,   294,   295,   296,   297,     0,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,     0,   700,   293,   294,   295,   296,   297,     0,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,     0,   701,   293,   294,   295,   296,
+   297,     0,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,     0,   702,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,   703,   293,   294,   295,   296,   297,     0,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,     0,   724,   293,   294,   295,   296,   297,
+     0,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,     0,   728,   293,   294,
+   295,   296,   297,     0,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,     0,
+   918,   293,   294,   295,   296,   297,     0,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,     0,   920,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,   922,   293,   294,   295,
+   296,   297,     0,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,     0,   924,
+   293,   294,   295,   296,   297,     0,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,     0,   988,   293,   294,   295,   296,   297,     0,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,     0,  1077,   293,   294,   295,   296,
+   297,     0,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,     0,  1102,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,  1192,   293,   294,   295,   296,   297,     0,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,     0,  1196,   293,   294,   295,   296,   297,
+     0,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,     0,  1198,   293,   294,
+   295,   296,   297,     0,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,     0,
+  1319,   293,   294,   295,   296,   297,     0,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,     0,  1321,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,  1323,   293,   294,   295,
+   296,   297,     0,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,     0,  1334,
+   293,   294,   295,   296,   297,     0,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,     0,  1335,   293,   294,   295,   296,   297,     0,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,     0,  1336,   293,   294,   295,   296,
+   297,     0,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,     0,  1337,   293,
+   294,   295,   296,   297,     0,   298,   299,   300,   301,   302,
+   303,   304,   305,   306,     0,     0,     0,     0,     0,   307,
+     0,  1416,   293,   294,   295,   296,   297,     0,   298,   299,
+   300,   301,   302,   303,   304,   305,   306,     0,     0,     0,
+     0,     0,   307,     0,  1534,   293,   294,   295,   296,   297,
+     0,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     0,     0,     0,     0,     0,   307,     0,  1535,   293,   294,
+   295,   296,   297,     0,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,     0,     0,     0,     0,     0,   307,     0,
+  1536,   293,   294,   295,   296,   297,     0,   298,   299,   300,
+   301,   302,   303,   304,   305,   306,     0,     0,     0,     0,
+     0,   307,     0,  1622,   293,   294,   295,   296,   297,     0,
+   298,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+     0,     0,     0,     0,   307,     0,  1623,   293,   294,   295,
+   296,   297,     0,   298,   299,   300,   301,   302,   303,   304,
+   305,   306,     0,     0,     0,     0,     0,   307,     0,  1624,
+   293,   294,   295,   296,   297,     0,   298,   299,   300,   301,
+   302,   303,   304,   305,   306,     0,     0,     0,     0,     0,
+   307,     0,  1670,   293,   294,   295,   296,   297,     0,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,     0,     0,
+     0,     0,     0,   307,     0,  1671,   293,   294,   295,   296,
+   297,     0,   298,   299,   300,   301,   302,   303,   304,   305,
+   306,     0,     0,     0,     0,     0,   307,     0,  1672
 };
 
 static const short yycheck[] = {    23,
-   280,   281,   282,    88,    23,   290,   326,  1236,     4,   810,
-     4,  1240,     4,     4,     4,   351,     3,    42,  1091,    89,
-  1005,     6,   182,     7,     6,     4,    65,     3,   188,  1014,
-    65,    70,    64,   171,   172,    70,  1021,    64,     6,     6,
-     5,     4,    65,     4,     5,   171,   172,    70,   183,   187,
-  1170,   189,   187,    65,    80,    65,    65,   183,    70,   152,
-    70,    70,   171,   172,    49,   171,   172,    65,     7,    34,
-    35,    36,    70,    34,    35,    36,    38,   183,   187,    41,
-   189,   171,   172,    71,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,   187,   182,   189,
-   184,   125,   126,   127,   288,     6,   130,   131,     6,   133,
-  1183,   103,   182,    92,    93,     6,   140,   141,   142,   143,
-     6,   145,   146,   183,   148,   149,   150,   187,   152,    92,
-    93,   171,   172,   173,   174,   175,   107,   108,   109,   110,
-   111,   181,   326,   944,   168,   169,   122,   123,   124,   125,
-   126,   127,   128,   129,   189,   182,   188,   182,     6,     7,
-   177,   188,   186,   187,   181,   189,   189,   191,   192,   489,
-   178,   179,   198,   157,   158,   159,   160,   189,   186,   189,
-   189,   466,   182,   503,   184,   172,   182,   467,  1417,   171,
-   172,   189,  1421,   182,   188,   184,   188,   188,   188,  1184,
-     8,   189,   182,  1188,   171,   172,    46,    38,   188,   233,
-    41,    42,     6,    44,   238,   239,   240,   241,   242,   243,
+    88,   287,    23,   345,  1239,  1005,   804,     3,  1243,   320,
+     4,   277,   278,   279,  1014,     4,     4,     4,    64,    89,
+     4,  1021,    64,     3,    64,     7,    42,  1094,   152,    38,
+    39,    40,    41,    42,    43,    44,    45,     6,    47,  1173,
+    49,    50,     6,    52,    53,    65,    80,    65,     6,     6,
+    70,     5,    70,     4,     5,   183,   285,    65,    65,   187,
+    69,     4,    70,    70,    65,     4,    65,   171,   172,    70,
+     7,    70,   171,   172,   171,   172,    85,    86,    87,   183,
+    34,    35,    36,    34,    35,    36,   183,   182,   187,   184,
+   189,   320,    49,   171,   172,   171,   172,     6,   171,   172,
+    65,   125,   126,   127,   182,    70,   130,   131,     6,   133,
+   188,   187,   182,   189,   103,   188,   140,   141,   142,  1186,
+   144,    38,   146,   147,    41,   149,   122,   123,   124,   125,
+   126,   127,   128,   129,     7,   182,   182,   184,   147,   182,
+   182,   165,   166,   941,     6,   188,   188,     7,   188,    92,
+    93,   183,   182,    92,    93,   187,   171,   172,   188,   183,
+   184,   195,   186,     6,   188,   189,   182,   171,   172,   189,
+     6,   189,   483,   188,   460,   157,   158,   159,   160,     7,
+   189,   189,   189,   494,   188,  1420,     6,  1187,   189,  1424,
+   189,  1191,   172,    64,   188,   461,   178,   179,   182,   188,
+   188,   188,   171,   172,   186,   183,   230,   171,   172,   187,
+   182,   235,   236,   237,   238,   239,   240,   241,   242,   243,
    244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
    254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
    264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,   277,   278,   279,  1485,   178,   179,   182,
-  1489,   184,   182,   184,   288,   186,  1386,   178,   179,  1389,
-     7,   290,   296,   297,   298,   299,   300,   301,   302,   303,
-   304,   305,   306,   307,   308,   309,   310,   171,   172,   171,
-   172,   178,   179,   317,   182,     6,   320,   184,   182,   186,
-     3,   325,   326,   182,   188,   489,   188,   331,   332,   333,
-   182,   335,   336,   337,   338,   339,   340,   341,     6,   503,
-   183,     7,   171,   172,   187,  1310,  1311,  1312,  1313,   353,
-   354,   355,  1317,  1453,   358,   171,   172,  1457,   182,   188,
-   184,   183,   366,    54,   664,   187,    55,    56,   372,     7,
-  1151,    42,   188,   161,   162,   163,   164,   165,   182,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   171,   172,
-   183,   171,   172,   181,   187,   695,    38,   182,   151,    41,
-    42,   189,    42,   156,   187,   665,     8,   187,   163,   164,
-   165,   410,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,   171,   172,    43,    44,   178,   181,     6,     7,  1394,
-  1395,   184,   185,  1398,     6,   171,   172,   187,   171,   172,
-   157,   158,   159,   160,   171,   172,    42,   171,   172,   171,
-   172,   187,   171,   172,   187,   183,     6,   182,   462,   187,
-   187,   178,   179,   187,   468,   187,   182,   466,   187,   186,
+   274,   275,   276,  1488,   483,  1389,     6,  1492,  1392,   178,
+   179,   285,     6,     7,   174,   494,   287,   186,   178,   293,
+   294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+   304,   305,   306,   307,   157,   158,   159,   160,     8,   313,
+    38,   315,   182,    41,    42,   319,   320,   157,   158,   159,
+   160,   325,   326,   327,    54,   329,   330,   331,   332,   333,
+   334,   335,   182,  1313,  1314,  1315,  1316,   183,   178,   179,
+  1320,   187,  1456,   347,   348,   349,  1460,   182,   352,   157,
+   158,   159,   160,   171,   172,   183,   360,   171,   172,   187,
+    41,    42,   366,    44,   171,   172,    46,   658,   183,   187,
+   178,   179,   187,   187,    42,   189,  1154,   171,   172,   182,
+   187,   148,   171,   172,   171,   172,   153,   182,     8,   171,
+   172,   171,   172,   187,   182,   686,   171,   172,   187,   182,
+   187,   184,    42,   404,   182,   187,   184,   187,   175,   182,
+   171,   172,   187,   659,   181,   182,    38,  1397,  1398,    41,
+    42,  1401,    44,   714,   715,   716,   187,   182,     6,   184,
+   182,   161,   162,   163,   164,   165,   182,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,    44,    43,    44,   658,
+    42,   181,   456,   662,     6,   182,   182,   184,   462,   460,
+    42,   161,   162,   163,   164,   165,   188,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,   182,   686,   184,   483,
+   182,   181,   184,   182,  1464,   184,   178,   179,   492,   189,
+   494,   188,   496,   497,    58,    59,    60,    61,   502,    63,
+   171,   172,   173,   174,   175,   714,   715,   716,   512,   513,
+   181,   188,   178,   179,     6,   178,   179,   521,   184,     6,
+   186,   184,   182,   186,   184,   182,   182,   531,   184,   182,
+   796,   797,   823,   182,     6,   184,   182,   541,   542,    55,
+    56,   161,   162,   163,   164,   165,  1526,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,   173,   174,   175,   178,
+   179,   181,     6,   183,   181,   184,   162,   186,   164,   107,
+   108,   109,   110,   111,   170,     6,   182,   182,   184,   184,
+   581,     4,  1562,   161,   162,   163,   164,   165,     4,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,   182,   182,
+   184,   184,   182,   181,   184,   182,   182,   184,   184,   161,
+   162,   163,   164,   165,   823,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,     6,   182,   182,   184,   184,   181,
+    42,   635,   636,   184,   187,   186,   189,   233,   187,   187,
+   189,   189,   187,     3,   189,   649,   650,   651,   652,   653,
+   654,   655,   974,   187,   658,   189,   182,   187,   662,   189,
+   187,   665,   189,   187,   187,   189,   189,     5,   182,  1649,
+   674,   182,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,   182,   686,   687,     6,   931,   181,     6,   455,   161,
+   162,   163,   164,   165,   762,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,     6,   187,   187,   189,   189,   181,
+   714,   715,   716,     6,     7,   719,   720,     5,   187,   723,
+   189,   187,   182,   189,   970,     6,   182,   731,   732,   188,
    161,   162,   163,   164,   165,   182,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,   489,    44,   173,   174,   175,
-   181,   157,   158,   159,   160,   181,  1461,   501,   182,   503,
-   664,   505,   506,   182,   668,   184,   188,   511,   178,   179,
-   188,   188,   178,   179,   184,    42,   186,   521,   522,   157,
-   158,   159,   160,   182,    41,    42,   530,    44,   182,   829,
-   184,   695,   182,   537,   184,     6,     6,   802,   803,   182,
-   178,   179,     6,   547,   548,   165,   182,   167,   184,    58,
-    59,    60,    61,   173,    63,   182,   182,   184,  1523,   161,
-   162,   163,   164,   165,     4,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   182,   182,   184,   184,   182,   181,
-   184,   183,   182,   182,   184,   184,     4,    42,   587,   161,
-   162,   163,   164,   165,  1559,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   182,   182,   184,   184,   182,   181,
-   184,   161,   162,   163,   164,   165,   236,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,   182,     6,   184,     5,
-   182,   181,   184,   182,   187,   184,   189,   641,   642,   184,
-   187,   186,   189,   187,   187,   189,   189,   187,   187,   189,
-   189,   655,   656,   657,   658,   659,   660,   661,   182,   182,
-   664,   977,   182,   182,   668,   829,   187,   671,   189,   187,
-     6,   189,     6,   187,   934,   189,   680,     5,   182,   164,
-   165,  1646,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,   695,   696,   187,   182,   189,   181,   187,   187,   189,
-   189,   188,   182,   768,   187,   184,   189,     6,   461,   187,
-   187,   189,   189,   973,   187,   187,   189,   189,   187,   182,
-   189,   725,   726,   188,     8,   729,   188,     4,   348,   349,
-     3,     4,   182,   737,   738,   182,     9,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-   187,     6,   189,   187,   187,   189,   189,   182,   772,   773,
-   774,   775,   776,   777,   778,   779,   780,   781,   782,   783,
-   784,   785,   161,   162,   163,   164,   165,   182,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,   187,   182,   189,
-   188,   188,   181,   188,   803,     6,    95,   811,     6,   813,
+   171,   172,   173,   174,   175,   182,   342,   343,   188,   187,
+   181,   189,   187,   187,   189,   189,   188,   187,   187,   189,
+   189,   182,   766,   767,   768,   769,   770,   771,   772,   773,
+   774,   775,   776,   777,   778,   779,   187,   182,   189,   161,
+   162,   163,   164,   165,   182,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,   182,   187,   797,   189,   187,   181,
+   189,   805,   182,   807,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,   187,   823,
+   189,   825,     4,   827,   163,   164,   165,   188,   167,   168,
+   169,   170,   171,   172,   173,   174,   175,   841,   842,   843,
+   188,   187,   181,   189,  1166,   187,   187,   189,   189,   184,
+   864,   188,     6,    95,     6,   182,   860,   861,   182,   161,
+   162,   163,   164,   165,   182,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,   182,   182,   182,   182,   182,   181,
    161,   162,   163,   164,   165,   182,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,   829,   182,   831,   182,   833,
-   181,     5,   182,   182,   182,   182,   187,   182,   189,   182,
-   182,   182,   182,   847,   848,   849,   183,  1163,   187,   182,
-   182,   182,   182,   182,     4,   182,   182,   182,   182,   863,
-   864,   867,   161,   162,   163,   164,   165,   182,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,   161,   162,   163,
-   164,   165,   181,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,   182,   187,   182,   182,   182,   181,   171,   172,
-   520,   182,   182,   182,   177,   181,   905,   182,   182,   182,
-     7,     7,   185,     7,   186,   188,   161,   162,   163,   164,
-   165,     7,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,   935,   685,   686,   183,   688,   181,     7,     7,   692,
-   693,    90,   188,   161,   162,   163,   164,   165,     6,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   153,   963,
-   964,     5,  1027,   181,     5,     5,     5,     5,     5,   973,
-     5,   189,     5,     5,   727,   728,     6,     5,   731,     5,
-   984,   985,     5,     5,     5,     5,     5,     5,     5,     5,
-   996,   995,   745,   746,   998,     5,     5,     5,   751,   752,
-     5,   140,     5,     5,  1008,   758,     5,   760,     5,     3,
-     5,  1015,  1016,  1017,     5,   187,     6,     5,  1022,   183,
-     6,     4,  1026,     7,     6,     6,  1030,  1031,  1032,  1033,
+   171,   172,   173,   174,   175,   182,   182,   182,   182,   182,
+   181,   902,   182,   182,   182,   182,   182,   182,   182,   182,
+   182,   678,   679,   182,   681,   511,   683,   684,   182,   182,
+   182,   182,   189,     3,     4,   182,   182,   182,   932,     9,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,    31,    32,     5,   721,   722,   960,   961,   725,  1027,
+   187,   183,   187,     6,     4,   181,   970,   186,     7,     7,
+     7,     7,   739,   740,   183,     7,     7,    90,   745,   746,
+   984,   985,   996,   188,   153,   752,     6,   754,     5,     5,
+     5,   995,   164,   165,   998,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,  1008,     5,     5,     5,     5,   181,
+     5,  1015,  1016,  1017,     5,     5,     5,     5,  1022,     5,
+     5,     5,  1026,     5,     5,     5,  1030,  1031,  1032,  1033,
   1034,  1035,  1036,  1037,  1038,  1039,  1040,  1041,  1042,  1043,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,     7,
-  1054,     7,     7,     6,   181,     6,   186,  1061,     7,     7,
-     7,   189,   188,   683,   189,   188,     7,     7,   182,   822,
-     7,   824,   154,     5,  1078,   187,   187,   187,   187,   187,
-   187,   834,   835,   836,   187,   187,   839,   840,   841,   842,
-   843,   844,   845,  1097,     6,  1101,   187,   187,   187,   187,
-   720,   721,   722,   161,   162,   163,   164,   165,   187,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   182,   739,
-   187,   187,   187,   181,   187,   187,   187,   187,   748,   183,
-   187,   161,   162,   163,   164,   165,   187,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,   182,     6,     4,     6,
-     4,   181,  1412,   187,     6,     6,   187,   182,   187,     7,
-   187,   185,  1166,  1167,     6,  1169,     7,  1171,  1172,   182,
-     7,     7,   187,   187,  1178,   187,   187,   184,     6,     6,
-   933,   187,  1186,     7,   182,     7,   182,   188,     7,   182,
-  1194,     7,     7,   182,     7,  1199,     7,   182,  1202,     7,
-  1204,  1205,  1206,  1207,  1208,  1209,  1210,  1211,  1212,  1213,
-  1214,  1215,  1216,  1217,   182,   182,   182,   182,  1222,   182,
-  1480,  1225,  1482,  1227,  1228,  1229,     7,     7,     7,   150,
-     3,     3,     3,     3,   173,     3,     3,     3,     3,   992,
-     3,     3,     3,  1249,     3,     3,   999,     3,     5,   161,
-   162,   163,   164,   165,     5,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,     3,  1018,     3,   183,     6,   181,
-     4,   186,   183,     6,  1534,    71,    72,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,  1293,
-     7,  1295,   186,     6,     6,     6,     6,  1301,     6,   188,
-     6,     6,    91,  1309,   188,   187,   187,   183,   187,   183,
-   187,   183,   187,   183,   187,   183,   187,   183,  1322,  1323,
-  1324,  1325,  1326,  1327,  1328,  1329,  1330,   187,   183,   949,
-     6,  1335,  1336,   161,   162,   163,   164,   165,   187,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   187,   187,
-  1356,     6,   187,   181,   187,   187,   187,   187,   978,     4,
-   980,   187,   982,     3,     4,     6,   187,   187,   186,     9,
+     5,     5,     5,     5,     5,   140,     5,     5,     5,   816,
+  1054,   818,     5,     3,     5,   187,     5,  1061,     6,     5,
+   183,   828,   829,   830,     6,     4,   833,   834,   835,   836,
+   837,   838,   839,     6,  1078,     7,     7,     7,     7,     7,
+     7,   677,     7,   186,   189,   189,   188,   188,     7,     7,
+  1104,   171,   172,   182,     7,   154,  1100,   177,     5,   187,
+   187,   187,   182,   187,   187,   185,   187,     6,   188,   187,
+   187,   187,   187,   187,   187,   711,   712,   713,   161,   162,
+   163,   164,   165,   187,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,   187,   187,     4,   187,   733,   181,   187,
+   187,   161,   162,   163,   164,   165,   742,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,   182,   187,   187,   187,
+   187,   181,   187,   930,   187,  1169,  1170,     6,  1172,  1415,
+  1174,  1175,   182,   187,   187,   187,   187,  1181,   187,   187,
+   183,   187,     6,   185,     6,  1189,   182,     7,   182,   182,
+   182,     6,     4,  1197,     7,   182,     6,     6,  1202,   182,
+     7,  1205,     7,  1207,  1208,  1209,  1210,  1211,  1212,  1213,
+  1214,  1215,  1216,  1217,  1218,  1219,  1220,   184,   188,     7,
+     7,  1225,   182,     7,  1228,   992,  1230,  1231,  1232,     7,
+   182,     7,   999,     7,     7,   182,     7,  1483,  1252,  1485,
+     7,   182,   182,     7,   182,     7,   150,     3,     3,     3,
+     4,  1018,     3,   173,     3,     9,    10,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+    24,    25,    26,    27,    28,    29,    30,    31,    32,     3,
+     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+     3,  1537,  1296,     5,  1298,     5,     4,     6,  1312,   183,
+  1304,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,   183,   186,     7,     6,   186,
+     6,  1325,  1326,  1327,  1328,  1329,  1330,  1331,  1332,  1333,
+     6,     6,     6,   188,  1338,  1339,     6,     6,    91,   188,
+   187,   187,   183,   187,   187,  1359,   183,   183,   183,   187,
+   946,   161,   162,   163,   164,   165,   187,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,   187,   183,   187,   187,
+   187,   181,     6,   187,     6,   183,   187,   183,     4,   975,
+     7,   977,   186,   979,   187,   187,   187,   187,   187,   187,
+   187,   187,     6,    92,     6,     6,   185,     6,     6,  1403,
+  1404,  1405,  1406,  1407,  1408,  1409,  1410,  1411,  1412,  1413,
+  1414,  1178,     6,  1180,     6,  1429,  1183,   171,   172,   189,
+     6,     6,     6,   177,     6,     6,     6,     6,   182,     6,
+     6,   185,  1199,     6,   188,     6,     6,    91,     3,     6,
+     6,     3,   173,     6,     3,     6,     6,     3,     6,  1463,
+     3,     6,     6,     3,     6,     3,     3,     6,  1462,     4,
+     6,   186,     6,     6,  1468,  1469,  1470,  1471,  1472,  1473,
+  1474,  1475,  1476,  1477,     7,  1479,     6,  1481,   189,   186,
+   185,  1495,   188,    88,   188,   188,     3,     4,   188,   183,
+   187,   187,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,   187,   183,    93,  1523,
+  1524,   183,   187,   187,  1528,  1529,  1530,  1531,  1532,  1533,
+   183,   187,   183,  1300,   183,   187,   183,   187,   183,     4,
+    91,  1308,  1309,   150,     6,     3,     6,     6,     3,     6,
+     6,     3,     6,     6,  1558,     6,     6,     6,     5,  1563,
+  1564,  1565,  1566,  1567,  1568,  1569,  1570,  1571,     6,     5,
+   189,     6,   188,  1169,  1170,   188,  1172,   187,     6,   183,
+     6,     6,     6,   189,   187,   187,   187,  1591,  1592,  1593,
+  1594,  1595,  1596,  1597,   183,  1599,   187,  1601,   161,   162,
+   163,   164,   165,     6,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,   187,   183,  1619,  1620,  1621,   181,   187,
+     6,     6,     6,     6,  1391,     6,     6,  1394,     6,  1633,
+  1634,  1635,  1636,  1637,  1638,  1231,     8,     6,     6,     5,
+     5,   150,   183,   183,     6,   187,  1650,  1651,  1652,  1653,
+   188,  1655,   188,  1657,   171,   172,   187,   189,   187,   187,
+   177,   187,   187,     6,   188,   182,   188,   188,   185,   188,
+     6,   188,   187,  1677,  1678,  1679,    88,     6,     6,     5,
+     5,   188,  1686,   188,  1688,   189,  1690,   188,   187,   187,
+  1457,   183,   183,     3,     4,   188,    88,     6,  1465,     9,
     10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,    31,    32,   189,   187,    92,  1400,  1401,  1402,  1403,
-  1404,  1405,  1406,  1407,  1408,  1409,  1410,  1411,     6,     6,
-   185,     6,     6,     6,     6,     6,     6,     6,     6,     6,
-  1426,     6,  1175,     6,  1177,     6,     6,  1180,   161,   162,
-   163,   164,   165,     7,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,  1196,    91,     3,     6,     3,   181,     6,
-   173,     6,     6,     3,  1460,  1459,     3,     6,     6,     3,
-     6,  1465,  1466,  1467,  1468,  1469,  1470,  1471,  1472,  1473,
-  1474,     6,  1476,     3,  1478,     3,     3,     6,     4,   186,
-   189,     6,     6,     3,     4,     7,  1492,     6,   186,     9,
+    30,    31,    32,     3,     4,   189,   189,     6,     6,     9,
     10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,    31,    32,   185,     6,   188,  1520,  1521,   188,   188,
-   188,  1525,  1526,  1527,  1528,  1529,  1530,    88,   187,   183,
-   187,   171,   172,     8,   187,   183,   187,   177,   187,   183,
-   183,   187,   182,     4,  1297,   185,  1166,  1167,   188,  1169,
-   183,  1555,  1305,  1306,   183,   187,  1560,  1561,  1562,  1563,
-  1564,  1565,  1566,  1567,  1568,   183,   187,   183,    38,    39,
-    40,    41,    42,    43,    44,    45,    93,    47,    91,    49,
-    50,   150,    52,    53,  1588,  1589,  1590,  1591,  1592,  1593,
-  1594,     6,  1596,     3,  1598,     6,     3,     6,     6,    69,
-     6,     6,     6,     6,     6,     3,     6,     6,  1228,     5,
-     5,   189,  1616,  1617,  1618,    85,    86,    87,     6,   189,
-   188,   188,   187,   187,   187,   187,  1630,  1631,  1632,  1633,
-  1634,  1635,   183,     6,   187,  1388,     6,     6,  1391,     6,
-   183,   183,   187,  1647,  1648,  1649,  1650,   187,  1652,     6,
-  1654,   171,   172,     6,     6,     6,     6,   177,     6,     6,
-     6,     6,   182,     6,     6,   185,     5,     5,   188,   187,
-  1674,  1675,  1676,   188,   188,   187,     6,   147,   189,  1683,
-   187,  1685,   187,  1687,   183,   183,   161,   162,   163,   164,
-   165,   187,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,  1454,   187,   187,     3,     4,   181,   188,   188,  1462,
-     9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,    30,    31,    32,     3,     4,   188,   188,     6,     6,
-     9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,    30,    31,    32,    88,   150,     3,     4,     6,   188,
-     6,  1524,     9,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,     5,     5,   188,     6,
-   189,   188,   183,   187,   187,  1558,   183,   189,   188,     6,
-     6,   161,   162,   163,   164,   165,    88,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,     6,     6,     3,     4,
-     5,   181,     7,  1586,     9,    10,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,     6,    34,
-    35,    36,  1615,     6,     6,     6,     6,   189,   188,   187,
-   187,     6,   171,   172,     6,     6,  1629,   155,   177,     6,
-   156,   187,   187,   182,   161,   162,   163,   164,   165,   188,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,   188,
-   188,   188,   171,   172,   181,     6,   187,     6,   177,   183,
-   187,     6,   189,   182,     6,     6,     6,   187,     6,   188,
-     6,   187,     6,   188,   188,   188,   187,   183,     6,   188,
-   188,   188,     6,     6,   171,   172,     6,     0,     0,   589,
-   177,     7,     7,     7,   990,   182,     3,     4,     5,    -1,
-    -1,   188,     9,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,     8,    34,    35,    36,
-    -1,   938,   157,   158,   159,   160,    -1,    -1,    -1,    -1,
-    -1,     8,    -1,    -1,    -1,    -1,   171,   172,    -1,    -1,
-    -1,    -1,   177,   178,   179,    -1,     8,   182,    -1,   184,
-    -1,   186,     3,     4,    -1,    -1,    -1,    -1,     9,    10,
-    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,     3,     4,    -1,    -1,    -1,    -1,     9,    10,
-    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,     3,     4,    -1,    -1,    -1,    -1,     9,    10,
-    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   171,   172,    -1,    -1,    -1,    -1,
-   177,    -1,    -1,    -1,    -1,   182,    -1,    -1,    -1,   161,
-   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   161,   162,   163,   164,   165,   181,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,   161,
-   162,   163,   164,   165,   181,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
-   171,   172,    -1,    -1,    -1,    -1,   177,    -1,    -1,    -1,
-    -1,   182,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-   171,   172,   181,    -1,   183,    -1,   177,    -1,   187,     0,
-     1,   182,     3,     4,    -1,   161,   162,   163,   164,   165,
-    -1,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-   171,   172,    -1,    -1,    -1,   181,   177,    -1,    -1,    -1,
-    -1,   182,    33,   189,    -1,    -1,    37,    38,    39,    40,
-    41,    42,    43,    44,    45,    -1,    47,    48,    49,    50,
-    51,    52,    53,    -1,    -1,    -1,    57,    58,    59,    60,
-    61,    62,    63,    -1,    65,    66,    67,    68,    69,   161,
-   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,    85,    86,    87,    -1,    -1,   181,
-    -1,   183,    -1,    94,    -1,    96,    97,    98,    99,   100,
-   101,   102,    -1,    -1,    38,    39,    40,    41,    42,    43,
-    44,    45,    -1,    47,    -1,    49,    50,    -1,    52,    53,
-    -1,   122,   123,   124,   125,   126,   127,   128,   129,    -1,
-    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   147,   148,   149,    -1,
-   151,    85,    86,    87,    38,    39,    40,    41,    42,    43,
-    44,    45,    -1,    47,    -1,    49,    50,    -1,    52,    53,
+    30,    31,    32,     6,     6,     3,     4,     6,   188,     6,
+  1527,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,     6,     6,     6,   187,   161,
+   162,   163,   164,   165,  1561,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,     6,   187,     6,     6,   155,   181,
+     6,   156,   187,   187,     6,   188,   187,     3,     4,     5,
+   183,     7,  1589,     9,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,   188,    34,    35,
+    36,  1618,     6,   188,     6,     6,     6,     6,   188,     6,
+   187,   171,   172,   187,   187,  1632,   188,   177,   188,     6,
+     6,   183,   182,   161,   162,   163,   164,   165,   188,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,     6,   188,
+   188,   171,   172,   181,   188,     6,     6,   177,     6,   187,
+     0,   189,   182,     0,   583,     7,     7,    -1,   188,     7,
+    -1,   990,    -1,   935,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   171,   172,    -1,    -1,    -1,    -1,   177,
+    -1,    -1,    -1,    -1,   182,     3,     4,     5,    -1,    -1,
+   188,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,     8,    34,    35,    36,    -1,
+    -1,   157,   158,   159,   160,    -1,    -1,    -1,    -1,    -1,
+     8,    -1,    -1,    -1,    -1,   171,   172,    -1,    -1,    -1,
+    -1,   177,   178,   179,    -1,     8,   182,    -1,   184,    -1,
+   186,     3,     4,    -1,    -1,    -1,    -1,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+    32,     3,     4,    -1,    -1,    -1,    -1,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+    32,     3,     4,    -1,    -1,    -1,    -1,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+    32,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   171,   172,    -1,    -1,    -1,    -1,   177,
+    -1,    -1,    -1,    -1,   182,    -1,    -1,    -1,   161,   162,
+   163,   164,   165,    -1,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,   161,   162,   163,   164,   165,   181,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,   161,   162,
+   163,   164,   165,   181,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,   171,
+   172,    -1,    -1,    -1,    -1,   177,    -1,    -1,    -1,    -1,
+   182,   161,   162,   163,   164,   165,    -1,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,   171,
+   172,   181,    -1,    -1,    -1,   177,    -1,   187,    -1,   189,
+   182,    -1,    38,    39,    40,    41,    42,    43,    44,    45,
+    -1,    47,    -1,    49,    50,    -1,    52,    53,    -1,   171,
+   172,    -1,    -1,     0,     1,   177,     3,     4,    -1,    -1,
+   182,    -1,    -1,    69,   161,   162,   163,   164,   165,    -1,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,    85,
+    86,    87,    -1,    -1,   181,    -1,    33,    -1,    -1,    -1,
+    37,    38,    39,    40,    41,    42,    43,    44,    45,    -1,
+    47,    48,    49,    50,    51,    52,    53,    -1,    -1,    -1,
+    57,    58,    59,    60,    61,    62,    63,    -1,    65,    66,
+    67,    68,    69,   161,   162,   163,   164,   165,    -1,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,    85,    86,
+    87,   147,    -1,   181,    -1,   183,    -1,    94,    -1,    96,
+    97,    98,    99,   100,   101,   102,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,     4,    -1,    69,   161,   162,   163,   164,
-   165,    -1,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,    85,    86,    87,    -1,    -1,   181,    -1,    -1,    -1,
-    -1,    -1,    33,   147,   189,    -1,    37,    38,    39,    40,
-    41,    42,    43,    44,    45,    -1,    47,    48,    49,    50,
-    51,    52,    53,    -1,    -1,    -1,    57,    58,    59,    60,
-    61,    62,    63,    41,    65,    66,    67,    68,    69,    -1,
-    -1,    -1,    -1,    -1,    -1,   189,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   147,    85,    86,    87,    -1,    -1,    -1,
-    -1,    -1,    -1,    94,    -1,    96,    97,    98,    99,   100,
-   101,   102,    -1,   161,   162,   163,   164,   165,    -1,   167,
+    -1,    -1,    -1,    -1,     4,   122,   123,   124,   125,   126,
+   127,   128,   129,   189,    -1,   161,   162,   163,   164,   165,
+    -1,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+   147,   148,   149,    33,   151,   181,    -1,    37,    38,    39,
+    40,    41,    42,    43,    44,    45,    -1,    47,    48,    49,
+    50,    51,    52,    53,    -1,    -1,    -1,    57,    58,    59,
+    60,    61,    62,    63,    41,    65,    66,    67,    68,    69,
+   161,   162,   163,   164,   165,    -1,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,    85,    86,    87,    -1,    -1,
+   181,    -1,   183,    -1,    94,    -1,    96,    97,    98,    99,
+   100,   101,   102,    38,    39,    40,    41,    42,    43,    44,
+    45,    -1,    47,    -1,    49,    50,    -1,    52,    53,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,
+    -1,    -1,    -1,    -1,    69,   112,   113,   114,   115,   116,
+   117,   118,   119,   120,   121,    -1,    -1,   147,    -1,    -1,
+    85,    86,    87,   130,   131,   132,   133,   134,   135,   136,
+   137,   138,   139,    -1,   141,   142,   143,   144,   145,   146,
+   161,   162,   163,   164,   165,    -1,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
+   181,    -1,    -1,    -1,    -1,    -1,   187,    -1,   189,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   161,   162,   163,
+   164,   165,   147,   167,   168,   169,   170,   171,   172,   173,
+   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
+   161,   162,   163,   164,   165,   189,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
+   181,    -1,    -1,   161,   162,   163,   164,   165,   189,   167,
    168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
-    -1,    -1,    -1,   181,    -1,   189,   104,   105,   106,   187,
-    -1,   189,    -1,    -1,   112,   113,   114,   115,   116,   117,
-   118,   119,   120,   121,    -1,    -1,   147,    -1,    -1,    -1,
-    -1,    -1,   130,   131,   132,   133,   134,   135,   136,   137,
-   138,   139,    -1,   141,   142,   143,   144,   145,   146,   161,
-   162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
+    -1,    -1,    -1,   181,    -1,    -1,   161,   162,   163,   164,
+   165,   189,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,   161,
+   162,   163,   164,   165,   189,   167,   168,   169,   170,   171,
    172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
     -1,    -1,   161,   162,   163,   164,   165,   189,   167,   168,
    169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
@@ -2219,25 +2224,8 @@ static const short yycheck[] = {    23,
    173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,
     -1,   161,   162,   163,   164,   165,   189,   167,   168,   169,
    170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
-    -1,   181,    -1,    -1,   161,   162,   163,   164,   165,   189,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
-    -1,    -1,    -1,    -1,   181,    -1,    -1,   161,   162,   163,
-   164,   165,   189,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,
-   161,   162,   163,   164,   165,   189,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
-   181,    -1,    -1,   161,   162,   163,   164,   165,   189,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
-    -1,    -1,    -1,   181,   161,   162,   163,   164,   165,   187,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
-    -1,    -1,    -1,    -1,   181,   161,   162,   163,   164,   165,
-   187,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-    -1,    -1,    -1,    -1,    -1,   181,   161,   162,   163,   164,
-   165,   187,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,    -1,    -1,    -1,    -1,    -1,   181,   161,   162,   163,
-   164,   165,   187,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181,   161,   162,
-   163,   164,   165,   187,   167,   168,   169,   170,   171,   172,
+    -1,   181,    -1,   183,    -1,    -1,    -1,   187,   161,   162,
+   163,   164,   165,    -1,   167,   168,   169,   170,   171,   172,
    173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,   161,
    162,   163,   164,   165,   187,   167,   168,   169,   170,   171,
    172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
@@ -2472,7 +2460,15 @@ static const short yycheck[] = {    23,
    173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,   161,
    162,   163,   164,   165,   187,   167,   168,   169,   170,   171,
    172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
-    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
+   161,   162,   163,   164,   165,   187,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
+   181,   161,   162,   163,   164,   165,   187,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+    -1,   181,   161,   162,   163,   164,   165,   187,   167,   168,
+   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+    -1,    -1,   181,   161,   162,   163,   164,   165,   187,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
+    -1,    -1,    -1,   181,   161,   162,   163,   164,   165,   187,
    167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
     -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
    162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
@@ -2537,16 +2533,7 @@ static const short yycheck[] = {    23,
     -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   185,   161,
    162,   163,   164,   165,    -1,   167,   168,   169,   170,   171,
    172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,
-    -1,   183,   161,   162,   163,   164,   165,    -1,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
-    -1,    -1,   181,    -1,   183,   161,   162,   163,   164,   165,
-    -1,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,   161,   162,
-   163,   164,   165,    -1,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,
-   183,   161,   162,   163,   164,   165,    -1,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
-    -1,   181,    -1,   183,   161,   162,   163,   164,   165,    -1,
+    -1,    -1,    -1,   185,   161,   162,   163,   164,   165,    -1,
    167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
     -1,    -1,    -1,    -1,   181,    -1,   183,   161,   162,   163,
    164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
@@ -2688,7 +2675,14 @@ static const short yycheck[] = {    23,
    167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
     -1,    -1,    -1,    -1,   181,    -1,   183,   161,   162,   163,
    164,   165,    -1,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,   181
+   174,   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,
+   161,   162,   163,   164,   165,    -1,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
+   181,    -1,   183,   161,   162,   163,   164,   165,    -1,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
+    -1,    -1,    -1,   181,    -1,   183,   161,   162,   163,   164,
+   165,    -1,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,    -1,    -1,    -1,    -1,    -1,   181,    -1,   183
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/lib/bison.simple"
@@ -4340,30 +4334,23 @@ case 170:
     ;
     break;}
 case 171:
-#line 1189 "Gmsh.y"
-{
-      yyval.s.Type = MSH_POINT;
-      yyval.s.Num  = (int)yyvsp[-2].d;
-    ;
-    break;}
-case 172:
-#line 1197 "Gmsh.y"
+#line 1192 "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 173:
-#line 1203 "Gmsh.y"
+case 172:
+#line 1198 "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 174:
-#line 1209 "Gmsh.y"
+case 173:
+#line 1204 "Gmsh.y"
 {
       Curve *c;
       Attractor *a;
@@ -4383,24 +4370,24 @@ case 174:
       }
     ;
     break;}
-case 175:
-#line 1228 "Gmsh.y"
+case 174:
+#line 1223 "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 176:
-#line 1234 "Gmsh.y"
+case 175:
+#line 1229 "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 177:
-#line 1240 "Gmsh.y"
+case 176:
+#line 1235 "Gmsh.y"
 {
       List_T *temp;
       int i,j;
@@ -4417,32 +4404,32 @@ case 177:
       yyval.s.Num  = (int)yyvsp[-6].d;
     ;
     break;}
-case 178:
-#line 1257 "Gmsh.y"
+case 177:
+#line 1252 "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 179:
-#line 1263 "Gmsh.y"
+case 178:
+#line 1258 "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 180:
-#line 1269 "Gmsh.y"
+case 179:
+#line 1264 "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 181:
-#line 1275 "Gmsh.y"
+case 180:
+#line 1270 "Gmsh.y"
 {
       if(List_Nbr(yyvsp[-1].l) > 3){
 	Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BSPLN,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
@@ -4454,8 +4441,8 @@ case 181:
 		 List_Nbr(yyvsp[-1].l));
     ;
     break;}
-case 182:
-#line 1286 "Gmsh.y"
+case 181:
+#line 1281 "Gmsh.y"
 {
       if(List_Nbr(yyvsp[-1].l) > 3){
 	Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BEZIER,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
@@ -4467,8 +4454,8 @@ case 182:
 		 List_Nbr(yyvsp[-1].l));
     ;
     break;}
-case 183:
-#line 1297 "Gmsh.y"
+case 182:
+#line 1292 "Gmsh.y"
 {
       List_T *Temp;
       int i;
@@ -4491,27 +4478,16 @@ case 183:
       }
     ;
     break;}
-case 184:
-#line 1319 "Gmsh.y"
-{
-      yyval.s.Num = (int)yyvsp[-2].d;
-      Curve *c = FindCurve(yyval.s.Num,THEM);
-      if(!c)
-	vyyerror("Unkown Curve %d", yyval.s.Num);
-      else
-	yyval.s.Type = c->Typ;
-    ;
-    break;}
-case 185:
-#line 1331 "Gmsh.y"
+case 183:
+#line 1317 "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 186:
-#line 1337 "Gmsh.y"
+case 184:
+#line 1323 "Gmsh.y"
 {
       Surface *s,*support;
       support = FindSurface((int)yyvsp[-4].d,THEM);
@@ -4531,8 +4507,8 @@ case 186:
       }
     ;
     break;}
-case 187:
-#line 1356 "Gmsh.y"
+case 185:
+#line 1342 "Gmsh.y"
 {
       List_Read(yyvsp[-1].l,0,&d);
       i = (int)d;
@@ -4554,126 +4530,166 @@ case 187:
       }
     ;
     break;}
-case 188:
-#line 1379 "Gmsh.y"
+case 186:
+#line 1365 "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 189:
-#line 1387 "Gmsh.y"
+case 187:
+#line 1373 "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 190:
-#line 1391 "Gmsh.y"
+case 188:
+#line 1377 "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 191:
-#line 1397 "Gmsh.y"
+case 189:
+#line 1383 "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 192:
-#line 1403 "Gmsh.y"
-{
-      yyval.s.Num = (int)yyvsp[-2].d;
-      Surface *s = FindSurface(yyval.s.Num,THEM);
-      if(!s)
-	vyyerror("Unknown Surface %d", yyval.s.Num);
-      else
-	yyval.s.Type = s->Typ;
-     ;
-    break;}
-case 193:
-#line 1415 "Gmsh.y"
+case 190:
+#line 1392 "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 194:
-#line 1421 "Gmsh.y"
+case 191:
+#line 1398 "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 195:
-#line 1427 "Gmsh.y"
+case 192:
+#line 1404 "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 196:
-#line 1440 "Gmsh.y"
+case 193:
+#line 1417 "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 197:
-#line 1445 "Gmsh.y"
+case 194:
+#line 1422 "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 198:
-#line 1450 "Gmsh.y"
+case 195:
+#line 1427 "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 199:
-#line 1455 "Gmsh.y"
+case 196:
+#line 1432 "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 200:
-#line 1462 "Gmsh.y"
+case 197:
+#line 1439 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 201:
-#line 1463 "Gmsh.y"
+case 198:
+#line 1440 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 202:
-#line 1464 "Gmsh.y"
+case 199:
+#line 1441 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 203:
-#line 1469 "Gmsh.y"
+case 200:
+#line 1446 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
     ;
     break;}
-case 204:
-#line 1473 "Gmsh.y"
+case 201:
+#line 1450 "Gmsh.y"
 {
       List_Add(yyval.l,&yyvsp[0].s);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 205:
+case 202:
+#line 1455 "Gmsh.y"
+{
+      for(i=0;i<List_Nbr(yyvsp[-2].l);i++){
+	List_Read(yyvsp[-2].l, i, &d);
+	TheShape.Num = (int)d;
+	Vertex *v = FindPoint(TheShape.Num,THEM);
+	if(!v)
+	  vyyerror("Unknown Point %d", TheShape.Num);
+	else{
+	  TheShape.Type = MSH_POINT;
+	  List_Add(yyval.l,&TheShape);
+	}
+      }
+      yyval.l = yyvsp[-5].l;
+    ;
+    break;}
+case 203:
+#line 1470 "Gmsh.y"
+{
+      for(i=0;i<List_Nbr(yyvsp[-2].l);i++){
+	List_Read(yyvsp[-2].l, i, &d);
+	TheShape.Num = (int)d;
+	Curve *c = FindCurve(TheShape.Num,THEM);
+	if(!c)
+	  vyyerror("Unknown Curve %d", TheShape.Num);
+	else{
+	  TheShape.Type = c->Typ;
+	  List_Add(yyval.l,&TheShape);
+	}
+      }
+      yyval.l = yyvsp[-5].l;
+    ;
+    break;}
+case 204:
 #line 1485 "Gmsh.y"
+{
+      for(i=0;i<List_Nbr(yyvsp[-2].l);i++){
+	List_Read(yyvsp[-2].l, i, &d);
+	TheShape.Num = (int)d;
+	Surface *s = FindSurface(TheShape.Num,THEM);
+	if(!s)
+	  vyyerror("Unknown Surface %d", TheShape.Num);
+	else{
+	  TheShape.Type = s->Typ;
+	  List_Add(yyval.l,&TheShape);
+	}
+      }
+      yyval.l = yyvsp[-5].l;
+    ;
+    break;}
+case 205:
+#line 1507 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -4685,7 +4701,7 @@ case 205:
     ;
     break;}
 case 206:
-#line 1503 "Gmsh.y"
+#line 1525 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
 	List_Read (yyvsp[-1].l,i,&TheShape);
@@ -4694,20 +4710,20 @@ case 206:
     ;
     break;}
 case 207:
-#line 1510 "Gmsh.y"
+#line 1532 "Gmsh.y"
 {
 	if(!strcmp(yyvsp[-4].c, "View"))
 	  FreeView((int)yyvsp[-2].d);
       ;
     break;}
 case 208:
-#line 1515 "Gmsh.y"
+#line 1537 "Gmsh.y"
 {
       Init_Mesh(THEM, 1);
     ;
     break;}
 case 209:
-#line 1527 "Gmsh.y"
+#line 1549 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Include")){
 
@@ -4776,7 +4792,7 @@ case 209:
     ;
     break;}
 case 210:
-#line 1594 "Gmsh.y"
+#line 1616 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Sleep")){
 
@@ -4798,7 +4814,7 @@ case 210:
     ;
     break;}
 case 211:
-#line 1614 "Gmsh.y"
+#line 1636 "Gmsh.y"
 {
 #ifndef _NOPLUGIN
     if(CTX.default_plugins)
@@ -4807,13 +4823,13 @@ case 211:
    ;
     break;}
 case 212:
-#line 1621 "Gmsh.y"
+#line 1643 "Gmsh.y"
 {
       exit(0);
     ;
     break;}
 case 213:
-#line 1625 "Gmsh.y"
+#line 1647 "Gmsh.y"
 {
       if(!CTX.batch){ // we're in interactive mode
 	if(Tree_Nbr(THEM->Points) != Last_NumberOfPoints){
@@ -4829,7 +4845,7 @@ case 213:
     ;
     break;}
 case 214:
-#line 1647 "Gmsh.y"
+#line 1669 "Gmsh.y"
 {
       // here, we seek remember the position in yyin
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ;
@@ -4842,7 +4858,7 @@ case 214:
     ;
     break;}
 case 215:
-#line 1658 "Gmsh.y"
+#line 1680 "Gmsh.y"
 {
       // here, we seek remember the position in yyin
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ;
@@ -4855,7 +4871,7 @@ case 215:
     ;
     break;}
 case 216:
-#line 1669 "Gmsh.y"
+#line 1691 "Gmsh.y"
 {
       // here, we seek remember the position in yyin
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ;
@@ -4879,7 +4895,7 @@ case 216:
     ;
     break;}
 case 217:
-#line 1691 "Gmsh.y"
+#line 1713 "Gmsh.y"
 {
       // here, we seek remember the position in yyin
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ;
@@ -4903,7 +4919,7 @@ case 217:
     ;
     break;}
 case 218:
-#line 1713 "Gmsh.y"
+#line 1735 "Gmsh.y"
 {
       if(LoopControlVariablesTab[ImbricatedLoop-1][1] >  
 	 LoopControlVariablesTab[ImbricatedLoop-1][0]){
@@ -4926,7 +4942,7 @@ case 218:
     ;
     break;}
 case 219:
-#line 1734 "Gmsh.y"
+#line 1756 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->createFunction(yyvsp[0].c,yyin,yyname,yylineno))
 	vyyerror("Redefinition of function %s",yyvsp[0].c);
@@ -4934,32 +4950,32 @@ case 219:
     ;
     break;}
 case 220:
-#line 1740 "Gmsh.y"
+#line 1762 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->leaveFunction(&yyin,yyname,yylineno))
 	vyyerror("Error while exiting function");
     ;
     break;}
 case 221:
-#line 1745 "Gmsh.y"
+#line 1767 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c,&yyin,yyname,yylineno))
 	vyyerror("Unknown function %s",yyvsp[-1].c);
     ;
     break;}
 case 222:
-#line 1750 "Gmsh.y"
+#line 1772 "Gmsh.y"
 {
       if(!yyvsp[-1].d) skip_until("If", "EndIf");
     ;
     break;}
 case 223:
-#line 1754 "Gmsh.y"
+#line 1776 "Gmsh.y"
 {
     ;
     break;}
 case 224:
-#line 1766 "Gmsh.y"
+#line 1788 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],
@@ -4968,7 +4984,7 @@ case 224:
     ;
     break;}
 case 225:
-#line 1773 "Gmsh.y"
+#line 1795 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(ROTATE,(int)yyvsp[-8].d,0.,0.,0.,
@@ -4977,7 +4993,7 @@ case 225:
     ;
     break;}
 case 226:
-#line 1780 "Gmsh.y"
+#line 1802 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],
@@ -4986,98 +5002,98 @@ case 226:
     ;
     break;}
 case 227:
-#line 1789 "Gmsh.y"
+#line 1811 "Gmsh.y"
 {
       Extrude_ProtudeCurve(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],
 			   0.,0.,0.,0.,0.,0.,0.,1,NULL);
     ;
     break;}
 case 228:
-#line 1794 "Gmsh.y"
+#line 1816 "Gmsh.y"
 {
       Extrude_ProtudeCurve(ROTATE,(int)yyvsp[-8].d,0.,0.,0.,
 			   yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,1,NULL);
     ;
     break;}
 case 229:
-#line 1799 "Gmsh.y"
+#line 1821 "Gmsh.y"
 {
       Extrude_ProtudeCurve(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],
 			   yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,1,NULL);
     ;
     break;}
 case 230:
-#line 1804 "Gmsh.y"
+#line 1826 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 231:
-#line 1809 "Gmsh.y"
+#line 1831 "Gmsh.y"
 {
       Extrude_ProtudeCurve(TRANSLATE,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],
 			   0.,0.,0.,0.,0.,0.,0.,1,&extr);
     ;
     break;}
 case 232:
-#line 1814 "Gmsh.y"
+#line 1836 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 233:
-#line 1819 "Gmsh.y"
+#line 1841 "Gmsh.y"
 {
       Extrude_ProtudeCurve(ROTATE,(int)yyvsp[-12].d,0.,0.,0.,
 			   yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,1,&extr);
     ;
     break;}
 case 234:
-#line 1824 "Gmsh.y"
+#line 1846 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 235:
-#line 1829 "Gmsh.y"
+#line 1851 "Gmsh.y"
 {
       Extrude_ProtudeCurve(TRANSLATE_ROTATE,(int)yyvsp[-14].d,yyvsp[-12].v[0],yyvsp[-12].v[1],yyvsp[-12].v[2],
 			   yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,1,&extr);
     ;
     break;}
 case 236:
-#line 1837 "Gmsh.y"
+#line 1859 "Gmsh.y"
 {
       Extrude_ProtudeSurface(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],
 			     0.,0.,0.,0.,0.,0.,0.,0,NULL);
     ;
     break;}
 case 237:
-#line 1842 "Gmsh.y"
+#line 1864 "Gmsh.y"
 {
       Extrude_ProtudeSurface(ROTATE,(int)yyvsp[-8].d,0.,0.,0.,
 			     yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
 case 238:
-#line 1847 "Gmsh.y"
+#line 1869 "Gmsh.y"
 {
       Extrude_ProtudeSurface(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],
 			     yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
 case 239:
-#line 1852 "Gmsh.y"
+#line 1874 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 240:
-#line 1857 "Gmsh.y"
+#line 1879 "Gmsh.y"
 {
       int vol = NEWREG();
       Extrude_ProtudeSurface(TRANSLATE,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],
@@ -5085,14 +5101,14 @@ case 240:
     ;
     break;}
 case 241:
-#line 1863 "Gmsh.y"
+#line 1885 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 242:
-#line 1869 "Gmsh.y"
+#line 1891 "Gmsh.y"
 {
       int vol = NEWREG();
       Extrude_ProtudeSurface(ROTATE,(int)yyvsp[-12].d,0.,0.,0.,
@@ -5100,14 +5116,14 @@ case 242:
     ;
     break;}
 case 243:
-#line 1875 "Gmsh.y"
+#line 1897 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 244:
-#line 1881 "Gmsh.y"
+#line 1903 "Gmsh.y"
 {
       int vol = NEWREG();
       Extrude_ProtudeSurface(TRANSLATE_ROTATE,(int)yyvsp[-14].d,yyvsp[-12].v[0],yyvsp[-12].v[1],yyvsp[-12].v[2],
@@ -5115,17 +5131,17 @@ case 244:
     ;
     break;}
 case 245:
-#line 1890 "Gmsh.y"
+#line 1912 "Gmsh.y"
 {
     ;
     break;}
 case 246:
-#line 1893 "Gmsh.y"
+#line 1915 "Gmsh.y"
 {
     ;
     break;}
 case 247:
-#line 1899 "Gmsh.y"
+#line 1921 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5153,7 +5169,7 @@ case 247:
     ;
     break;}
 case 248:
-#line 1925 "Gmsh.y"
+#line 1947 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5179,13 +5195,13 @@ case 248:
     ;
     break;}
 case 249:
-#line 1949 "Gmsh.y"
+#line 1971 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
 case 250:
-#line 1960 "Gmsh.y"
+#line 1982 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -5205,7 +5221,7 @@ case 250:
     ;
     break;}
 case 251:
-#line 1978 "Gmsh.y"
+#line 2000 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -5225,7 +5241,7 @@ case 251:
     ;
     break;}
 case 252:
-#line 1996 "Gmsh.y"
+#line 2018 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -5245,7 +5261,7 @@ case 252:
     ;
     break;}
 case 253:
-#line 2014 "Gmsh.y"
+#line 2036 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -5269,7 +5285,7 @@ case 253:
     ;
     break;}
 case 254:
-#line 2036 "Gmsh.y"
+#line 2058 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -5292,7 +5308,7 @@ case 254:
     ;
     break;}
 case 255:
-#line 2057 "Gmsh.y"
+#line 2079 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d,THEM);
       if(!v)
@@ -5315,7 +5331,7 @@ case 255:
     ;
     break;}
 case 256:
-#line 2078 "Gmsh.y"
+#line 2100 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -5331,7 +5347,7 @@ case 256:
     ;
     break;}
 case 257:
-#line 2092 "Gmsh.y"
+#line 2114 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -5347,71 +5363,71 @@ case 257:
     ;
     break;}
 case 258:
-#line 2114 "Gmsh.y"
+#line 2136 "Gmsh.y"
 { 
       ReplaceAllDuplicates(THEM);
     ;
     break;}
 case 259:
-#line 2118 "Gmsh.y"
+#line 2140 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
 case 260:
-#line 2129 "Gmsh.y"
+#line 2151 "Gmsh.y"
 {yyval.i = 1;;
     break;}
 case 261:
-#line 2130 "Gmsh.y"
+#line 2152 "Gmsh.y"
 {yyval.i = 0;;
     break;}
 case 262:
-#line 2131 "Gmsh.y"
+#line 2153 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 263:
-#line 2132 "Gmsh.y"
+#line 2154 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 264:
-#line 2133 "Gmsh.y"
+#line 2155 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 265:
-#line 2137 "Gmsh.y"
+#line 2159 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 266:
-#line 2138 "Gmsh.y"
+#line 2160 "Gmsh.y"
 { yyval.d = yyvsp[-1].d ;          ;
     break;}
 case 267:
-#line 2139 "Gmsh.y"
+#line 2161 "Gmsh.y"
 { yyval.d = -yyvsp[0].d ;         ;
     break;}
 case 268:
-#line 2140 "Gmsh.y"
+#line 2162 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 269:
-#line 2141 "Gmsh.y"
+#line 2163 "Gmsh.y"
 { yyval.d = !yyvsp[0].d ;         ;
     break;}
 case 270:
-#line 2142 "Gmsh.y"
+#line 2164 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d ;     ;
     break;}
 case 271:
-#line 2143 "Gmsh.y"
+#line 2165 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d ;     ;
     break;}
 case 272:
-#line 2144 "Gmsh.y"
+#line 2166 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d ;     ;
     break;}
 case 273:
-#line 2146 "Gmsh.y"
+#line 2168 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	vyyerror("Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -5420,235 +5436,235 @@ case 273:
     ;
     break;}
 case 274:
-#line 2152 "Gmsh.y"
+#line 2174 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ;  ;
     break;}
 case 275:
-#line 2153 "Gmsh.y"
+#line 2175 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d,yyvsp[0].d) ;  ;
     break;}
 case 276:
-#line 2154 "Gmsh.y"
+#line 2176 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d ;     ;
     break;}
 case 277:
-#line 2155 "Gmsh.y"
+#line 2177 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d ;     ;
     break;}
 case 278:
-#line 2156 "Gmsh.y"
+#line 2178 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d ;    ;
     break;}
 case 279:
-#line 2157 "Gmsh.y"
+#line 2179 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d ;    ;
     break;}
 case 280:
-#line 2158 "Gmsh.y"
+#line 2180 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d ;    ;
     break;}
 case 281:
-#line 2159 "Gmsh.y"
+#line 2181 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d ;    ;
     break;}
 case 282:
-#line 2160 "Gmsh.y"
+#line 2182 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d ;    ;
     break;}
 case 283:
-#line 2161 "Gmsh.y"
+#line 2183 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d ;    ;
     break;}
 case 284:
-#line 2162 "Gmsh.y"
+#line 2184 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ;
     break;}
 case 285:
-#line 2163 "Gmsh.y"
+#line 2185 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 286:
-#line 2164 "Gmsh.y"
+#line 2186 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 287:
-#line 2165 "Gmsh.y"
+#line 2187 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 288:
-#line 2166 "Gmsh.y"
+#line 2188 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 289:
-#line 2167 "Gmsh.y"
+#line 2189 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 290:
-#line 2168 "Gmsh.y"
+#line 2190 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 291:
-#line 2169 "Gmsh.y"
+#line 2191 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 292:
-#line 2170 "Gmsh.y"
+#line 2192 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 293:
-#line 2171 "Gmsh.y"
+#line 2193 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 294:
-#line 2172 "Gmsh.y"
+#line 2194 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 295:
-#line 2173 "Gmsh.y"
+#line 2195 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
 case 296:
-#line 2174 "Gmsh.y"
+#line 2196 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 297:
-#line 2175 "Gmsh.y"
+#line 2197 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 298:
-#line 2176 "Gmsh.y"
+#line 2198 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 299:
-#line 2177 "Gmsh.y"
+#line 2199 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 300:
-#line 2178 "Gmsh.y"
+#line 2200 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 301:
-#line 2179 "Gmsh.y"
+#line 2201 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 302:
-#line 2180 "Gmsh.y"
+#line 2202 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 303:
-#line 2181 "Gmsh.y"
+#line 2203 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 304:
-#line 2182 "Gmsh.y"
+#line 2204 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 305:
-#line 2183 "Gmsh.y"
+#line 2205 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 306:
-#line 2185 "Gmsh.y"
+#line 2207 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 307:
-#line 2186 "Gmsh.y"
+#line 2208 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 308:
-#line 2187 "Gmsh.y"
+#line 2209 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 309:
-#line 2188 "Gmsh.y"
+#line 2210 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 310:
-#line 2189 "Gmsh.y"
+#line 2211 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 311:
-#line 2190 "Gmsh.y"
+#line 2212 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 312:
-#line 2191 "Gmsh.y"
+#line 2213 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 313:
-#line 2192 "Gmsh.y"
+#line 2214 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 314:
-#line 2193 "Gmsh.y"
+#line 2215 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 315:
-#line 2194 "Gmsh.y"
+#line 2216 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 316:
-#line 2195 "Gmsh.y"
+#line 2217 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
 case 317:
-#line 2196 "Gmsh.y"
+#line 2218 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 318:
-#line 2197 "Gmsh.y"
+#line 2219 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 319:
-#line 2198 "Gmsh.y"
+#line 2220 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 320:
-#line 2199 "Gmsh.y"
+#line 2221 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 321:
-#line 2200 "Gmsh.y"
+#line 2222 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 322:
-#line 2201 "Gmsh.y"
+#line 2223 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 323:
-#line 2202 "Gmsh.y"
+#line 2224 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 324:
-#line 2203 "Gmsh.y"
+#line 2225 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 325:
-#line 2204 "Gmsh.y"
+#line 2226 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 326:
-#line 2205 "Gmsh.y"
+#line 2227 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 327:
-#line 2214 "Gmsh.y"
+#line 2236 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
 case 328:
-#line 2215 "Gmsh.y"
+#line 2237 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
 case 329:
-#line 2216 "Gmsh.y"
+#line 2238 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->rank(); ;
     break;}
 case 330:
-#line 2217 "Gmsh.y"
+#line 2239 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->size(); ;
     break;}
 case 331:
-#line 2222 "Gmsh.y"
+#line 2244 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[0].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5660,7 +5676,7 @@ case 331:
     ;
     break;}
 case 332:
-#line 2233 "Gmsh.y"
+#line 2255 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5678,7 +5694,7 @@ case 332:
     ;
     break;}
 case 333:
-#line 2250 "Gmsh.y"
+#line 2272 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-1].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5690,7 +5706,7 @@ case 333:
     ;
     break;}
 case 334:
-#line 2261 "Gmsh.y"
+#line 2283 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-4].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5708,7 +5724,7 @@ case 334:
     ;
     break;}
 case 335:
-#line 2280 "Gmsh.y"
+#line 2302 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-2].c);
@@ -5725,7 +5741,7 @@ case 335:
     ;
     break;}
 case 336:
-#line 2296 "Gmsh.y"
+#line 2318 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-5].c);
@@ -5742,7 +5758,7 @@ case 336:
     ;
     break;}
 case 337:
-#line 2312 "Gmsh.y"
+#line 2334 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-3].c);
@@ -5759,7 +5775,7 @@ case 337:
     ;
     break;}
 case 338:
-#line 2328 "Gmsh.y"
+#line 2350 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-6].c);
@@ -5776,130 +5792,130 @@ case 338:
     ;
     break;}
 case 339:
-#line 2346 "Gmsh.y"
+#line 2368 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ;
     ;
     break;}
 case 340:
-#line 2350 "Gmsh.y"
+#line 2372 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = -yyvsp[0].v[i] ;
     ;
     break;}
 case 341:
-#line 2354 "Gmsh.y"
+#line 2376 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
 case 342:
-#line 2358 "Gmsh.y"
+#line 2380 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ;
     ;
     break;}
 case 343:
-#line 2362 "Gmsh.y"
+#line 2384 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ;
     ;
     break;}
 case 344:
-#line 2368 "Gmsh.y"
+#line 2390 "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 345:
-#line 2372 "Gmsh.y"
+#line 2394 "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 346:
-#line 2376 "Gmsh.y"
+#line 2398 "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 347:
-#line 2380 "Gmsh.y"
+#line 2402 "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 348:
-#line 2387 "Gmsh.y"
+#line 2409 "Gmsh.y"
 {
     ;
     break;}
 case 349:
-#line 2390 "Gmsh.y"
+#line 2412 "Gmsh.y"
 {
     ;
     break;}
 case 350:
-#line 2396 "Gmsh.y"
+#line 2418 "Gmsh.y"
 {
     ;
     break;}
 case 351:
-#line 2399 "Gmsh.y"
+#line 2421 "Gmsh.y"
 {
     ;
     break;}
 case 352:
-#line 2405 "Gmsh.y"
+#line 2427 "Gmsh.y"
 {
     ;
     break;}
 case 353:
-#line 2408 "Gmsh.y"
+#line 2430 "Gmsh.y"
 {
        yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 354:
-#line 2412 "Gmsh.y"
+#line 2434 "Gmsh.y"
 {
        yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 355:
-#line 2419 "Gmsh.y"
+#line 2441 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(List_T*)) ;
       List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
 case 356:
-#line 2424 "Gmsh.y"
+#line 2446 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
 case 357:
-#line 2432 "Gmsh.y"
+#line 2454 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 358:
-#line 2437 "Gmsh.y"
+#line 2459 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l ;
     ;
     break;}
 case 359:
-#line 2441 "Gmsh.y"
+#line 2463 "Gmsh.y"
 {
       yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 360:
-#line 2445 "Gmsh.y"
+#line 2467 "Gmsh.y"
 {
       yyval.l=yyvsp[-1].l;
       for(i=0 ; i<List_Nbr(yyval.l) ; i++){
@@ -5909,7 +5925,7 @@ case 360:
     ;
     break;}
 case 361:
-#line 2456 "Gmsh.y"
+#line 2478 "Gmsh.y"
 { 
       yyval.l = List_Create(2,1,sizeof(double)) ; 
       for(d=yyvsp[-2].d ; (yyvsp[-2].d<yyvsp[0].d)?(d<=yyvsp[0].d):(d>=yyvsp[0].d) ; (yyvsp[-2].d<yyvsp[0].d)?(d+=1.):(d-=1.)) 
@@ -5917,7 +5933,7 @@ case 361:
     ;
     break;}
 case 362:
-#line 2462 "Gmsh.y"
+#line 2484 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ; 
       if(!yyvsp[0].d || (yyvsp[-4].d<yyvsp[-2].d && yyvsp[0].d<0) || (yyvsp[-4].d>yyvsp[-2].d && yyvsp[0].d>0)){
@@ -5930,7 +5946,7 @@ case 362:
    ;
     break;}
 case 363:
-#line 2473 "Gmsh.y"
+#line 2495 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5946,7 +5962,7 @@ case 363:
     ;
     break;}
 case 364:
-#line 2487 "Gmsh.y"
+#line 2509 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5964,7 +5980,7 @@ case 364:
     ;
     break;}
 case 365:
-#line 2503 "Gmsh.y"
+#line 2525 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-5].c ;
@@ -5986,7 +6002,7 @@ case 365:
     ;
     break;}
 case 366:
-#line 2523 "Gmsh.y"
+#line 2545 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-5].c ;
@@ -6010,26 +6026,26 @@ case 366:
     ;
     break;}
 case 367:
-#line 2548 "Gmsh.y"
+#line 2570 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 368:
-#line 2553 "Gmsh.y"
+#line 2575 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l ;
     ;
     break;}
 case 369:
-#line 2557 "Gmsh.y"
+#line 2579 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 370:
-#line 2561 "Gmsh.y"
+#line 2583 "Gmsh.y"
 {
       for(i=0 ; i<List_Nbr(yyvsp[0].l) ; i++){
 	List_Read(yyvsp[0].l, i, &d) ;
@@ -6039,26 +6055,26 @@ case 370:
     ;
     break;}
 case 371:
-#line 2573 "Gmsh.y"
+#line 2595 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
 case 372:
-#line 2577 "Gmsh.y"
+#line 2599 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
 case 373:
-#line 2588 "Gmsh.y"
+#line 2610 "Gmsh.y"
 {
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
       if(flag) vyyerror("Unknown color '%s'", yyvsp[0].c);
     ;
     break;}
 case 374:
-#line 2593 "Gmsh.y"
+#line 2615 "Gmsh.y"
 {
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){
 	vyyerror("Unknown color option class '%s'", yyvsp[-4].c);
@@ -6076,13 +6092,13 @@ case 374:
     ;
     break;}
 case 375:
-#line 2612 "Gmsh.y"
+#line 2634 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 376:
-#line 2616 "Gmsh.y"
+#line 2638 "Gmsh.y"
 {
       yyval.l = List_Create(256,10,sizeof(unsigned int)) ;
       ColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
@@ -6095,26 +6111,26 @@ case 376:
     ;
     break;}
 case 377:
-#line 2630 "Gmsh.y"
+#line 2652 "Gmsh.y"
 {
       yyval.l = List_Create(256,10,sizeof(unsigned int)) ;
       List_Add(yyval.l, &(yyvsp[0].u)) ;
     ;
     break;}
 case 378:
-#line 2635 "Gmsh.y"
+#line 2657 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].u)) ;
     ;
     break;}
 case 379:
-#line 2642 "Gmsh.y"
+#line 2664 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
 case 380:
-#line 2646 "Gmsh.y"
+#line 2668 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
       strcpy(yyval.c, yyvsp[-3].c) ;  
@@ -6124,7 +6140,7 @@ case 380:
     ;
     break;}
 case 381:
-#line 2654 "Gmsh.y"
+#line 2676 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
       for(i=strlen(yyvsp[-1].c)-1; i>=0; i--){
@@ -6139,13 +6155,13 @@ case 381:
     ;
     break;}
 case 382:
-#line 2667 "Gmsh.y"
+#line 2689 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
 case 383:
-#line 2671 "Gmsh.y"
+#line 2693 "Gmsh.y"
 {
       i = PrintListOfDouble(yyvsp[-3].c,yyvsp[-1].l,tmpstring);
       if(i<0){
@@ -6165,7 +6181,7 @@ case 383:
     ;
     break;}
 case 384:
-#line 2689 "Gmsh.y"
+#line 2711 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c)))
 	vyyerror("Unknown string option class '%s'", yyvsp[-3].c);
@@ -6181,7 +6197,7 @@ case 384:
     ;
     break;}
 case 385:
-#line 2703 "Gmsh.y"
+#line 2725 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c)))
 	vyyerror("Unknown string option class '%s'", yyvsp[-6].c);
@@ -6418,7 +6434,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 2718 "Gmsh.y"
+#line 2740 "Gmsh.y"
 
 
 void InitSymbols(void){
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index d97cac8f893570bab1e5ceb845b94403c52bdc02..86cacfe1359c09949cf5b9b3f6e2fdad06c6ca14 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,6 +1,6 @@
 %{ 
 
-// $Id: Gmsh.y,v 1.110 2001-11-12 11:25:22 geuzaine Exp $
+// $Id: Gmsh.y,v 1.111 2001-11-12 13:33:57 geuzaine Exp $
 
 #include <stdarg.h>
 #ifndef _NOPLUGIN
@@ -1185,11 +1185,6 @@ Shape :
 	  v->lc = $5;
       }
     }  
-  | tPoint '{' FExpr '}' tEND
-    {
-      $$.Type = MSH_POINT;
-      $$.Num  = (int)$3;
-    }
 
   /* -------- Lines -------- */ 
 
@@ -1315,15 +1310,6 @@ Shape :
 	List_Delete(Temp);
       }
     }
-  | tLine '{' FExpr '}' tEND
-    {
-      $$.Num = (int)$3;
-      Curve *c = FindCurve($$.Num,THEM);
-      if(!c)
-	vyyerror("Unkown Curve %d", $$.Num);
-      else
-	$$.Type = c->Typ;
-    }
 
   /* -------- Surfaces -------- */ 
 
@@ -1399,15 +1385,6 @@ Shape :
       $$.Type = MSH_SURF_LOOP;
       $$.Num  = (int)$4;
     }
-  | tSurface '{' FExpr '}' tEND
-    {
-      $$.Num = (int)$3;
-      Surface *s = FindSurface($$.Num,THEM);
-      if(!s)
-	vyyerror("Unknown Surface %d", $$.Num);
-      else
-	$$.Type = s->Typ;
-     }
 
   /* -------- Volumes -------- */ 
 
@@ -1474,6 +1451,51 @@ ListOfShapes :
       List_Add($$,&$2);
       $$ = $1;
     }
+  | ListOfShapes tPoint '{' RecursiveListOfDouble '}' tEND
+    {
+      for(i=0;i<List_Nbr($4);i++){
+	List_Read($4, i, &d);
+	TheShape.Num = (int)d;
+	Vertex *v = FindPoint(TheShape.Num,THEM);
+	if(!v)
+	  vyyerror("Unknown Point %d", TheShape.Num);
+	else{
+	  TheShape.Type = MSH_POINT;
+	  List_Add($$,&TheShape);
+	}
+      }
+      $$ = $1;
+    }
+  | ListOfShapes tLine '{' RecursiveListOfDouble '}' tEND
+    {
+      for(i=0;i<List_Nbr($4);i++){
+	List_Read($4, i, &d);
+	TheShape.Num = (int)d;
+	Curve *c = FindCurve(TheShape.Num,THEM);
+	if(!c)
+	  vyyerror("Unknown Curve %d", TheShape.Num);
+	else{
+	  TheShape.Type = c->Typ;
+	  List_Add($$,&TheShape);
+	}
+      }
+      $$ = $1;
+    }
+  | ListOfShapes tSurface '{' RecursiveListOfDouble '}' tEND
+    {
+      for(i=0;i<List_Nbr($4);i++){
+	List_Read($4, i, &d);
+	TheShape.Num = (int)d;
+	Surface *s = FindSurface(TheShape.Num,THEM);
+	if(!s)
+	  vyyerror("Unknown Surface %d", TheShape.Num);
+	else{
+	  TheShape.Type = s->Typ;
+	  List_Add($$,&TheShape);
+	}
+      }
+      $$ = $1;
+    }
 ;
 
 /* -------------------
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 5b8ac98356c21222bf9bc0018835aff94b28d592..8ad8ec2e06280f5ae1441dfad21ec7577c7e262e 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.125 2001-11-12 11:25:22 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.126 2001-11-12 13:33:57 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -1000,7 +1000,7 @@ char *yytext;
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.125 2001-11-12 11:25:22 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.126 2001-11-12 13:33:57 geuzaine Exp $
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/benchmarks/2d/machine/Functions.geo b/benchmarks/2d/machine/Functions.geo
index 47c612491b78b2e9b29a92f0f51fbb8095a47271..003c96d8a3a9e14890704b326ad217c452ffd371 100644
--- a/benchmarks/2d/machine/Functions.geo
+++ b/benchmarks/2d/machine/Functions.geo
@@ -9,6 +9,9 @@ Function CopySlot
     ll_ = newreg; Line Loop(newreg) = {KK_[{0:NbrLines_-1}]};
     lll_= newreg; Plane Surface(newreg) = {ll_};
     Physical Surface(PhysNum_+(t_-1)*dPhysNum_) = {lll_};
+
+    geuz[t_-1]=lll_;
+
   EndFor
 
 Return
diff --git a/benchmarks/2d/machine/Rotor.geo b/benchmarks/2d/machine/Rotor.geo
index 3debe50221c989ae682e3bedec026ef5d2290f7e..96bdd450544a5666b6cf033b23cc3b65e2c5a404 100644
--- a/benchmarks/2d/machine/Rotor.geo
+++ b/benchmarks/2d/machine/Rotor.geo
@@ -9,6 +9,7 @@ LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = RotorSlotOpening;
 Printf("Rotor slot openings : physical surface %g", PhysNum_);
 Call CopySlot;
 
+geuz1[{0:NbrSect_-1}] = geuz[{0:NbrSect_-1}];
 
 
 LineLoop_[] = LineLoop2[] ; NbrLines_ = NbrLines2; PhysNum_ = RotorConductor; dPhysNum_ = 1; 
@@ -46,7 +47,11 @@ Printf("RotorIron : physical surface %g", RotorIron);
 mmm = newreg; Plane Surface(mmm) = {InnerRotor,OuterShaft_};
 Physical Surface(RotorIron) = {mmm};
 
-
+Rotate{ {0,0,1},{0,0,0}, 5*Pi/180 }{
+  Surface{ mmm };
+  Surface{ geuz1[{0:NbrSect_-1}] };
+  Surface{ geuz[{0:NbrSect_-1}] };
+}