Skip to content
Snippets Groups Projects
Select Git revision
  • be1117bc68966c7df6014f0fc4bc138fcb51bfca
  • master default protected
  • alphashapes
  • quadMeshingTools
  • cygwin_conv_path
  • macos_arm64
  • add-transfiniteautomatic-to-geo
  • patch_releases_4_10
  • HierarchicalHDiv
  • isuruf-master-patch-63355
  • hyperbolic
  • hexdom
  • hxt_update
  • jf
  • 1618-pythonocc-and-gmsh-api-integration
  • octreeSizeField
  • hexbl
  • alignIrregularVertices
  • getEdges
  • patch_releases_4_8
  • isuruf-master-patch-51992
  • gmsh_4_11_0
  • gmsh_4_10_5
  • gmsh_4_10_4
  • gmsh_4_10_3
  • gmsh_4_10_2
  • gmsh_4_10_1
  • gmsh_4_10_0
  • gmsh_4_9_5
  • gmsh_4_9_4
  • gmsh_4_9_3
  • gmsh_4_9_2
  • gmsh_4_9_1
  • gmsh_4_9_0
  • gmsh_4_8_4
  • gmsh_4_8_3
  • gmsh_4_8_2
  • gmsh_4_8_1
  • gmsh_4_8_0
  • gmsh_4_7_1
  • gmsh_4_7_0
41 results

GeomMeshMatcher.cpp

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    Gmsh.tab.cpp 337.47 KiB
    /* A Bison parser, made by GNU Bison 2.3.  */
    
    /* Skeleton implementation for Bison's Yacc-like parsers in C
    
       Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
       Free Software Foundation, Inc.
    
       This program is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published by
       the Free Software Foundation; either version 2, or (at your option)
       any later version.
    
       This program is distributed in the hope that it will be useful,
       but WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       GNU General Public License for more details.
    
       You should have received a copy of the GNU General Public License
       along with this program; if not, write to the Free Software
       Foundation, Inc., 51 Franklin Street, Fifth Floor,
       Boston, MA 02110-1301, USA.  */
    
    /* As a special exception, you may create a larger work that contains
       part or all of the Bison parser skeleton and distribute that work
       under terms of your choice, so long as that work isn't itself a
       parser generator using the skeleton or a modified version thereof
       as a parser skeleton.  Alternatively, if you modify or redistribute
       the parser skeleton itself, you may (at your option) remove this
       special exception, which will cause the skeleton and the resulting
       Bison output files to be licensed under the GNU General Public
       License without this special exception.
    
       This special exception was added by the Free Software Foundation in
       version 2.2 of Bison.  */
    
    /* C LALR(1) parser skeleton written by Richard Stallman, by
       simplifying the original so-called "semantic" parser.  */
    
    /* All symbols defined below should begin with yy or YY, to avoid
       infringing on user name space.  This should be done even for local
       variables, as they might otherwise be expanded by user macros.
       There are some unavoidable exceptions within include files to
       define necessary library symbols; they are noted "INFRINGES ON
       USER NAME SPACE" below.  */
    
    /* Identify Bison output.  */
    #define YYBISON 1
    
    /* Bison version.  */
    #define YYBISON_VERSION "2.3"
    
    /* Skeleton name.  */
    #define YYSKELETON_NAME "yacc.c"
    
    /* Pure parsers.  */
    #define YYPURE 0
    
    /* Using locations.  */
    #define YYLSP_NEEDED 0
    
    /* Substitute the variable and function names.  */
    #define yyparse gmsh_yyparse
    #define yylex   gmsh_yylex
    #define yyerror gmsh_yyerror
    #define yylval  gmsh_yylval
    #define yychar  gmsh_yychar
    #define yydebug gmsh_yydebug
    #define yynerrs gmsh_yynerrs
    
    
    /* Tokens.  */
    #ifndef YYTOKENTYPE
    # define YYTOKENTYPE
       /* Put the tokens into the symbol table, so that GDB and other debuggers
          know about them.  */
       enum yytokentype {
         tDOUBLE = 258,
         tSTRING = 259,
         tBIGSTR = 260,
         tEND = 261,
         tAFFECT = 262,
         tDOTS = 263,
         tPi = 264,
         tMPI_Rank = 265,
         tMPI_Size = 266,
         tEuclidian = 267,
         tCoordinates = 268,
         tExp = 269,
         tLog = 270,
         tLog10 = 271,
         tSqrt = 272,
         tSin = 273,
         tAsin = 274,
         tCos = 275,
         tAcos = 276,
         tTan = 277,
         tRand = 278,
         tAtan = 279,
         tAtan2 = 280,
         tSinh = 281,
         tCosh = 282,
         tTanh = 283,
         tFabs = 284,
         tFloor = 285,
         tCeil = 286,
         tFmod = 287,
         tModulo = 288,
         tHypot = 289,
         tPrintf = 290,
         tSprintf = 291,
         tStrCat = 292,
         tStrPrefix = 293,
         tStrRelative = 294,
         tBoundingBox = 295,
         tDraw = 296,
         tToday = 297,
         tSyncModel = 298,
         tCreateTopology = 299,
         tDistanceFunction = 300,
         tPoint = 301,
         tCircle = 302,
         tEllipse = 303,
         tLine = 304,
         tSphere = 305,
         tPolarSphere = 306,
         tSurface = 307,
         tSpline = 308,
         tVolume = 309,
         tCharacteristic = 310,
         tLength = 311,
         tParametric = 312,
         tElliptic = 313,
         tPlane = 314,
         tRuled = 315,
         tTransfinite = 316,
         tComplex = 317,
         tPhysical = 318,
         tCompound = 319,
         tUsing = 320,
         tPlugin = 321,
         tDegenerated = 322,
         tOCCShape = 323,
         tRotate = 324,
         tTranslate = 325,
         tSymmetry = 326,
         tDilate = 327,
         tExtrude = 328,
         tLevelset = 329,
         tLoop = 330,
         tRecombine = 331,
         tSmoother = 332,
         tSplit = 333,
         tDelete = 334,
         tCoherence = 335,
         tIntersect = 336,
         tLayers = 337,
         tHole = 338,
         tAlias = 339,
         tAliasWithOptions = 340,
         tText2D = 341,
         tText3D = 342,
         tInterpolationScheme = 343,
         tTime = 344,
         tCombine = 345,
         tBSpline = 346,
         tBezier = 347,
         tNurbs = 348,
         tNurbsOrder = 349,
         tNurbsKnots = 350,
         tColor = 351,
         tColorTable = 352,
         tFor = 353,
         tIn = 354,
         tEndFor = 355,
         tIf = 356,
         tEndIf = 357,
         tExit = 358,
         tField = 359,
         tReturn = 360,
         tCall = 361,
         tFunction = 362,
         tShow = 363,
         tHide = 364,
         tGetValue = 365,
         tGMSH_MAJOR_VERSION = 366,
         tGMSH_MINOR_VERSION = 367,
         tGMSH_PATCH_VERSION = 368,
         tAFFECTDIVIDE = 369,
         tAFFECTTIMES = 370,
         tAFFECTMINUS = 371,
         tAFFECTPLUS = 372,
         tOR = 373,
         tAND = 374,
         tNOTEQUAL = 375,
         tEQUAL = 376,
         tGREATEROREQUAL = 377,
         tLESSOREQUAL = 378,
         UNARYPREC = 379,
         tMINUSMINUS = 380,
         tPLUSPLUS = 381
       };
    #endif
    /* Tokens.  */
    #define tDOUBLE 258
    #define tSTRING 259
    #define tBIGSTR 260
    #define tEND 261
    #define tAFFECT 262
    #define tDOTS 263
    #define tPi 264
    #define tMPI_Rank 265
    #define tMPI_Size 266
    #define tEuclidian 267
    #define tCoordinates 268
    #define tExp 269
    #define tLog 270
    #define tLog10 271
    #define tSqrt 272
    #define tSin 273
    #define tAsin 274
    #define tCos 275
    #define tAcos 276
    #define tTan 277
    #define tRand 278
    #define tAtan 279
    #define tAtan2 280
    #define tSinh 281
    #define tCosh 282
    #define tTanh 283
    #define tFabs 284
    #define tFloor 285
    #define tCeil 286
    #define tFmod 287
    #define tModulo 288
    #define tHypot 289
    #define tPrintf 290
    #define tSprintf 291
    #define tStrCat 292
    #define tStrPrefix 293
    #define tStrRelative 294
    #define tBoundingBox 295
    #define tDraw 296
    #define tToday 297
    #define tSyncModel 298
    #define tCreateTopology 299
    #define tDistanceFunction 300
    #define tPoint 301
    #define tCircle 302
    #define tEllipse 303
    #define tLine 304
    #define tSphere 305
    #define tPolarSphere 306
    #define tSurface 307
    #define tSpline 308
    #define tVolume 309
    #define tCharacteristic 310
    #define tLength 311
    #define tParametric 312
    #define tElliptic 313
    #define tPlane 314
    #define tRuled 315
    #define tTransfinite 316
    #define tComplex 317
    #define tPhysical 318
    #define tCompound 319
    #define tUsing 320
    #define tPlugin 321
    #define tDegenerated 322
    #define tOCCShape 323
    #define tRotate 324
    #define tTranslate 325
    #define tSymmetry 326
    #define tDilate 327
    #define tExtrude 328
    #define tLevelset 329
    #define tLoop 330
    #define tRecombine 331
    #define tSmoother 332
    #define tSplit 333
    #define tDelete 334
    #define tCoherence 335
    #define tIntersect 336
    #define tLayers 337
    #define tHole 338
    #define tAlias 339
    #define tAliasWithOptions 340
    #define tText2D 341
    #define tText3D 342
    #define tInterpolationScheme 343
    #define tTime 344
    #define tCombine 345
    #define tBSpline 346
    #define tBezier 347
    #define tNurbs 348
    #define tNurbsOrder 349
    #define tNurbsKnots 350
    #define tColor 351
    #define tColorTable 352
    #define tFor 353
    #define tIn 354
    #define tEndFor 355
    #define tIf 356
    #define tEndIf 357
    #define tExit 358
    #define tField 359
    #define tReturn 360
    #define tCall 361
    #define tFunction 362
    #define tShow 363
    #define tHide 364
    #define tGetValue 365
    #define tGMSH_MAJOR_VERSION 366
    #define tGMSH_MINOR_VERSION 367
    #define tGMSH_PATCH_VERSION 368
    #define tAFFECTDIVIDE 369
    #define tAFFECTTIMES 370
    #define tAFFECTMINUS 371
    #define tAFFECTPLUS 372
    #define tOR 373
    #define tAND 374
    #define tNOTEQUAL 375
    #define tEQUAL 376
    #define tGREATEROREQUAL 377
    #define tLESSOREQUAL 378
    #define UNARYPREC 379
    #define tMINUSMINUS 380
    #define tPLUSPLUS 381
    
    
    
    
    /* Copy the first part of user declarations.  */
    #line 1 "Gmsh.y"
    
    // Gmsh - Copyright (C) 1997-2009 C. Geuzaine, J.-F. Remacle
    //
    // See the LICENSE.txt file for license information. Please report all
    // bugs and problems to <gmsh@geuz.org>.
    
    #include <string.h>
    #include <stdarg.h>
    #include <time.h>
    #include "GmshConfig.h"
    #include "GmshMessage.h"
    #include "fullMatrix.h"
    #include "MallocUtils.h"
    #include "ListUtils.h"
    #include "TreeUtils.h"
    #include "StringUtils.h"
    #include "Numeric.h"
    #include "Context.h"
    #include "GModel.h"
    #include "Geo.h"
    #include "GeoInterpolation.h"
    #include "Generator.h"
    #include "Options.h"
    #include "Colors.h"
    #include "Parser.h"
    #include "OpenFile.h"
    #include "CommandLine.h"
    #include "FunctionManager.h"
    #include "ColorTable.h"
    #include "OS.h"
    #include "CreateFile.h"
    #include "gmshSurface.h"
    #include "gmshLevelset.h"
    #include "Field.h"
    #include "BackgroundMesh.h"
    
    #if !defined(HAVE_NO_POST)
    #include "PView.h"
    #include "PViewDataList.h"
    #include "PluginManager.h"
    #endif
    
    #if defined(HAVE_OPENGL)
    #include "drawContext.h"
    #endif
    
    // Global parser variables
    std::string gmsh_yyname;
    int gmsh_yyerrorstate = 0;
    int gmsh_yyviewindex = 0;
    std::map<std::string, std::vector<double> > gmsh_yysymbols;
    
    // Static parser variables (accessible only in this file)
    static std::map<std::string, std::string > gmsh_yystringsymbols;
    #if !defined(HAVE_NO_POST)
    static PViewDataList *ViewData;
    #endif
    static std::vector<double> ViewCoord;
    static std::vector<double> *ViewValueList = 0;
    static int *ViewNumList = 0;
    static ExtrudeParams extr;
    static int curPhysDim = 0;
    static gmshSurface *myGmshSurface = 0;
    #define MAX_RECUR_LOOPS 100
    static int ImbricatedLoop = 0;
    static fpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS];
    static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS];
    static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3];
    static char *LoopControlVariablesNameTab[MAX_RECUR_LOOPS];
    
    void yyerror(const char *s);
    void yymsg(int level, const char *fmt, ...);
    void skip_until(const char *skip, const char *until);
    int PrintListOfDouble(char *format, List_T *list, char *buffer);
    fullMatrix<double> ListOfListOfDouble2Matrix(List_T *list);
    
    
    /* Enabling traces.  */
    #ifndef YYDEBUG
    # define YYDEBUG 0
    #endif
    
    /* Enabling verbose error messages.  */
    #ifdef YYERROR_VERBOSE
    # undef YYERROR_VERBOSE
    # define YYERROR_VERBOSE 1
    #else
    # define YYERROR_VERBOSE 0
    #endif
    
    /* Enabling the token table.  */
    #ifndef YYTOKEN_TABLE
    # define YYTOKEN_TABLE 0
    #endif
    
    #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
    typedef union YYSTYPE
    #line 78 "Gmsh.y"
    {
      char *c;
      int i;
      unsigned int u;
      double d;
      double v[5];
      Shape s;
      List_T *l;
    }
    /* Line 193 of yacc.c.  */
    #line 443 "Gmsh.tab.cpp"
    	YYSTYPE;
    # define yystype YYSTYPE /* obsolescent; will be withdrawn */
    # define YYSTYPE_IS_DECLARED 1
    # define YYSTYPE_IS_TRIVIAL 1
    #endif
    
    
    
    /* Copy the second part of user declarations.  */
    
    
    /* Line 216 of yacc.c.  */
    #line 456 "Gmsh.tab.cpp"
    
    #ifdef short
    # undef short
    #endif
    
    #ifdef YYTYPE_UINT8
    typedef YYTYPE_UINT8 yytype_uint8;
    #else
    typedef unsigned char yytype_uint8;
    #endif
    
    #ifdef YYTYPE_INT8
    typedef YYTYPE_INT8 yytype_int8;
    #elif (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    typedef signed char yytype_int8;
    #else
    typedef short int yytype_int8;
    #endif
    
    #ifdef YYTYPE_UINT16
    typedef YYTYPE_UINT16 yytype_uint16;
    #else
    typedef unsigned short int yytype_uint16;
    #endif
    
    #ifdef YYTYPE_INT16
    typedef YYTYPE_INT16 yytype_int16;
    #else
    typedef short int yytype_int16;
    #endif
    
    #ifndef YYSIZE_T
    # ifdef __SIZE_TYPE__
    #  define YYSIZE_T __SIZE_TYPE__
    # elif defined size_t
    #  define YYSIZE_T size_t
    # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
    #  define YYSIZE_T size_t
    # else
    #  define YYSIZE_T unsigned int
    # endif
    #endif
    
    #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
    
    #ifndef YY_
    # if defined YYENABLE_NLS && YYENABLE_NLS
    #  if ENABLE_NLS
    #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
    #   define YY_(msgid) dgettext ("bison-runtime", msgid)
    #  endif
    # endif
    # ifndef YY_
    #  define YY_(msgid) msgid
    # endif
    #endif
    
    /* Suppress unused-variable warnings by "using" E.  */
    #if ! defined lint || defined __GNUC__
    # define YYUSE(e) ((void) (e))
    #else
    # define YYUSE(e) /* empty */
    #endif
    
    /* Identity function, used to suppress warnings about constant conditions.  */
    #ifndef lint
    # define YYID(n) (n)
    #else
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static int
    YYID (int i)
    #else
    static int
    YYID (i)
        int i;
    #endif
    {
      return i;
    }
    #endif
    
    #if ! defined yyoverflow || YYERROR_VERBOSE
    
    /* The parser invokes alloca or malloc; define the necessary symbols.  */
    
    # ifdef YYSTACK_USE_ALLOCA
    #  if YYSTACK_USE_ALLOCA
    #   ifdef __GNUC__
    #    define YYSTACK_ALLOC __builtin_alloca
    #   elif defined __BUILTIN_VA_ARG_INCR
    #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
    #   elif defined _AIX
    #    define YYSTACK_ALLOC __alloca
    #   elif defined _MSC_VER
    #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
    #    define alloca _alloca
    #   else
    #    define YYSTACK_ALLOC alloca
    #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    #     ifndef _STDLIB_H
    #      define _STDLIB_H 1
    #     endif
    #    endif
    #   endif
    #  endif
    # endif
    
    # ifdef YYSTACK_ALLOC
       /* Pacify GCC's `empty if-body' warning.  */
    #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
    #  ifndef YYSTACK_ALLOC_MAXIMUM
        /* The OS might guarantee only one guard page at the bottom of the stack,
           and a page size can be as small as 4096 bytes.  So we cannot safely
           invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
           to allow for a few compiler-allocated temporary stack slots.  */
    #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
    #  endif
    # else
    #  define YYSTACK_ALLOC YYMALLOC
    #  define YYSTACK_FREE YYFREE
    #  ifndef YYSTACK_ALLOC_MAXIMUM
    #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
    #  endif
    #  if (defined __cplusplus && ! defined _STDLIB_H \
           && ! ((defined YYMALLOC || defined malloc) \
    	     && (defined YYFREE || defined free)))
    #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    #   ifndef _STDLIB_H
    #    define _STDLIB_H 1
    #   endif
    #  endif
    #  ifndef YYMALLOC
    #   define YYMALLOC malloc
    #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
    #   endif
    #  endif
    #  ifndef YYFREE
    #   define YYFREE free
    #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    void free (void *); /* INFRINGES ON USER NAME SPACE */
    #   endif
    #  endif
    # endif
    #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
    
    
    #if (! defined yyoverflow \
         && (! defined __cplusplus \
    	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
    
    /* A type that is properly aligned for any stack member.  */
    union yyalloc
    {
      yytype_int16 yyss;
      YYSTYPE yyvs;
      };
    
    /* The size of the maximum gap between one aligned stack and the next.  */
    # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
    
    /* The size of an array large to enough to hold all stacks, each with
       N elements.  */
    # define YYSTACK_BYTES(N) \
         ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
          + YYSTACK_GAP_MAXIMUM)
    
    /* Copy COUNT objects from FROM to TO.  The source and destination do
       not overlap.  */
    # ifndef YYCOPY
    #  if defined __GNUC__ && 1 < __GNUC__
    #   define YYCOPY(To, From, Count) \
          __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
    #  else
    #   define YYCOPY(To, From, Count)		\
          do					\
    	{					\
    	  YYSIZE_T yyi;				\
    	  for (yyi = 0; yyi < (Count); yyi++)	\
    	    (To)[yyi] = (From)[yyi];		\
    	}					\
          while (YYID (0))
    #  endif
    # endif
    
    /* Relocate STACK from its old location to the new one.  The
       local variables YYSIZE and YYSTACKSIZE give the old and new number of
       elements in the stack, and YYPTR gives the new location of the
       stack.  Advance YYPTR to a properly aligned location for the next
       stack.  */
    # define YYSTACK_RELOCATE(Stack)					\
        do									\
          {									\
    	YYSIZE_T yynewbytes;						\
    	YYCOPY (&yyptr->Stack, Stack, yysize);				\
    	Stack = &yyptr->Stack;						\
    	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
    	yyptr += yynewbytes / sizeof (*yyptr);				\
          }									\
        while (YYID (0))
    
    #endif
    
    /* YYFINAL -- State number of the termination state.  */
    #define YYFINAL  5
    /* YYLAST -- Last index in YYTABLE.  */
    #define YYLAST   6994
    
    /* YYNTOKENS -- Number of terminals.  */
    #define YYNTOKENS  147
    /* YYNNTS -- Number of nonterminals.  */
    #define YYNNTS  79
    /* YYNRULES -- Number of rules.  */
    #define YYNRULES  377
    /* YYNRULES -- Number of states.  */
    #define YYNSTATES  1325
    
    /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
    #define YYUNDEFTOK  2
    #define YYMAXUTOK   381
    
    #define YYTRANSLATE(YYX)						\
      ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
    
    /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
    static const yytype_uint8 yytranslate[] =
    {
           0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,   132,     2,   142,     2,   131,     2,     2,
         137,   138,   129,   127,   143,   128,   141,   130,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
         123,     2,   124,   118,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,   139,     2,   140,   136,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,   144,     2,   145,   146,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
           2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
           5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
          15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
          25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
          35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
          45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
          55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
          65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
          75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
          85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
          95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
         105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
         115,   116,   117,   119,   120,   121,   122,   125,   126,   133,
         134,   135
    };
    
    #if YYDEBUG
    /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
       YYRHS.  */
    static const yytype_uint16 yyprhs[] =
    {
           0,     0,     3,     5,     8,     9,    12,    14,    16,    18,
          20,    22,    24,    26,    28,    30,    32,    34,    36,    38,
          40,    42,    44,    47,    53,    61,    69,    79,    86,    93,
         100,   101,   104,   107,   110,   113,   116,   118,   122,   124,
         128,   129,   130,   141,   143,   147,   148,   162,   164,   168,
         169,   185,   194,   209,   210,   217,   219,   221,   223,   225,
         227,   229,   231,   236,   244,   254,   261,   268,   272,   279,
         284,   291,   301,   308,   318,   324,   333,   342,   354,   361,
         371,   377,   385,   395,   405,   417,   427,   437,   439,   441,
         442,   448,   449,   452,   460,   461,   471,   478,   486,   491,
         499,   508,   517,   525,   533,   545,   554,   555,   565,   574,
         584,   588,   593,   604,   612,   620,   629,   630,   640,   649,
         662,   671,   680,   689,   697,   707,   708,   718,   724,   736,
         742,   752,   757,   767,   777,   779,   781,   782,   785,   792,
         799,   806,   813,   822,   837,   854,   867,   876,   885,   892,
         907,   912,   919,   926,   930,   935,   941,   945,   949,   954,
         959,   963,   971,   979,   983,   991,   995,   998,  1001,  1004,
        1020,  1023,  1026,  1033,  1042,  1051,  1062,  1064,  1067,  1069,
        1073,  1078,  1080,  1086,  1098,  1112,  1113,  1121,  1122,  1136,
        1137,  1153,  1154,  1161,  1170,  1179,  1188,  1201,  1214,  1227,
        1242,  1257,  1272,  1273,  1286,  1287,  1300,  1301,  1314,  1315,
        1332,  1333,  1350,  1351,  1368,  1369,  1388,  1389,  1408,  1409,
        1428,  1430,  1433,  1439,  1447,  1457,  1460,  1470,  1471,  1475,
        1476,  1478,  1479,  1482,  1483,  1486,  1494,  1501,  1510,  1516,
        1522,  1529,  1540,  1551,  1562,  1573,  1576,  1580,  1582,  1586,
        1589,  1592,  1595,  1599,  1603,  1607,  1611,  1615,  1619,  1623,
        1627,  1631,  1635,  1639,  1643,  1647,  1651,  1657,  1662,  1667,
        1672,  1677,  1682,  1687,  1692,  1697,  1702,  1707,  1714,  1719,
        1724,  1729,  1734,  1739,  1744,  1751,  1758,  1765,  1770,  1775,
        1780,  1785,  1790,  1795,  1800,  1805,  1810,  1815,  1820,  1827,
        1832,  1837,  1842,  1847,  1852,  1857,  1864,  1871,  1878,  1883,
        1885,  1887,  1889,  1891,  1893,  1895,  1897,  1899,  1905,  1910,
        1915,  1918,  1924,  1928,  1935,  1940,  1948,  1955,  1957,  1960,
        1963,  1967,  1971,  1983,  1993,  2001,  2009,  2011,  2015,  2017,
        2019,  2022,  2026,  2031,  2037,  2039,  2041,  2044,  2048,  2052,
        2058,  2063,  2065,  2067,  2071,  2078,  2080,  2082,  2086,  2090,
        2100,  2108,  2110,  2116,  2120,  2127,  2129,  2133,  2135,  2137,
        2141,  2148,  2150,  2152,  2159,  2164,  2169,  2174
    };
    
    /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
    static const yytype_int16 yyrhs[] =
    {
         148,     0,    -1,   149,    -1,     1,     6,    -1,    -1,   149,
         150,    -1,   153,    -1,   152,    -1,   171,    -1,   175,    -1,
         180,    -1,   184,    -1,   185,    -1,   186,    -1,   189,    -1,
         209,    -1,   210,    -1,   211,    -1,   188,    -1,   187,    -1,
         183,    -1,   124,    -1,   124,   124,    -1,    35,   137,     5,
         138,     6,    -1,    35,   137,     5,   138,   151,   224,     6,
          -1,    35,   137,     5,   143,   220,   138,     6,    -1,    35,
         137,     5,   143,   220,   138,   151,   224,     6,    -1,     4,
           5,   144,   154,   145,     6,    -1,    84,     4,   139,   212,
         140,     6,    -1,    85,     4,   139,   212,   140,     6,    -1,
          -1,   154,   157,    -1,   154,   161,    -1,   154,   164,    -1,
         154,   166,    -1,   154,   167,    -1,   212,    -1,   155,   143,
         212,    -1,   212,    -1,   156,   143,   212,    -1,    -1,    -1,
           4,   158,   137,   155,   138,   159,   144,   156,   145,     6,
          -1,   224,    -1,   160,   143,   224,    -1,    -1,    86,   137,
         212,   143,   212,   143,   212,   138,   162,   144,   160,   145,
           6,    -1,   224,    -1,   163,   143,   224,    -1,    -1,    87,
         137,   212,   143,   212,   143,   212,   143,   212,   138,   165,
         144,   163,   145,     6,    -1,    88,   144,   216,   145,   144,
         216,   145,     6,    -1,    88,   144,   216,   145,   144,   216,
         145,   144,   216,   145,   144,   216,   145,     6,    -1,    -1,
          89,   168,   144,   156,   145,     6,    -1,     7,    -1,   117,
          -1,   116,    -1,   115,    -1,   114,    -1,   135,    -1,   134,
          -1,     4,   169,   212,     6,    -1,     4,   139,   212,   140,
         169,   212,     6,    -1,     4,   139,   144,   220,   145,   140,
         169,   217,     6,    -1,     4,   139,   140,     7,   217,     6,
          -1,     4,   139,   140,   117,   217,     6,    -1,     4,   170,
           6,    -1,     4,   139,   212,   140,   170,     6,    -1,     4,
           7,   225,     6,    -1,     4,   141,     4,     7,   225,     6,
          -1,     4,   139,   212,   140,   141,     4,     7,   225,     6,
          -1,     4,   141,     4,   169,   212,     6,    -1,     4,   139,
         212,   140,   141,     4,   169,   212,     6,    -1,     4,   141,
           4,   170,     6,    -1,     4,   139,   212,   140,   141,     4,
         170,     6,    -1,     4,   141,    96,   141,     4,     7,   221,
           6,    -1,     4,   139,   212,   140,   141,    96,   141,     4,
           7,   221,     6,    -1,     4,   141,    97,     7,   222,     6,
          -1,     4,   139,   212,   140,   141,    97,     7,   222,     6,
          -1,     4,   104,     7,   212,     6,    -1,   104,   139,   212,
         140,     7,     4,     6,    -1,   104,   139,   212,   140,   141,
           4,     7,   212,     6,    -1,   104,   139,   212,   140,   141,
           4,     7,   225,     6,    -1,   104,   139,   212,   140,   141,
           4,     7,   144,   220,   145,     6,    -1,    66,   137,     4,
         138,   141,     4,     7,   212,     6,    -1,    66,   137,     4,
         138,   141,     4,     7,   225,     6,    -1,   212,    -1,   225,
          -1,    -1,    99,    50,   144,   212,   145,    -1,    -1,    59,
         214,    -1,    46,   137,   212,   138,     7,   214,     6,    -1,
          -1,    63,    46,   176,   137,   172,   138,     7,   217,     6,
          -1,    55,    56,   217,     7,   212,     6,    -1,    49,   137,
         212,   138,     7,   217,     6,    -1,    67,    49,   217,     6,
          -1,    53,   137,   212,   138,     7,   217,     6,    -1,    47,
         137,   212,   138,     7,   217,   174,     6,    -1,    48,   137,
         212,   138,     7,   217,   174,     6,    -1,    91,   137,   212,
         138,     7,   217,     6,    -1,    92,   137,   212,   138,     7,
         217,     6,    -1,    93,   137,   212,   138,     7,   217,    95,
         217,    94,   212,     6,    -1,    49,    75,   137,   212,   138,
           7,   217,     6,    -1,    -1,    63,    49,   177,   137,   172,
         138,     7,   217,     6,    -1,    59,    52,   137,   212,   138,
           7,   217,     6,    -1,    60,    52,   137,   212,   138,     7,
         217,   173,     6,    -1,    12,    13,     6,    -1,    13,    52,
         212,     6,    -1,    57,    52,   137,   212,   138,     7,     5,
           5,     5,     6,    -1,    50,   137,   212,   138,     7,   217,
           6,    -1,    51,   137,   212,   138,     7,   217,     6,    -1,
          52,    75,   137,   212,   138,     7,   217,     6,    -1,    -1,
          63,    52,   178,   137,   172,   138,     7,   217,     6,    -1,
          64,    54,   137,   212,   138,     7,   217,     6,    -1,    64,
          52,   137,   212,   138,     7,   217,     4,   144,   216,   145,
           6,    -1,    64,    52,   137,   212,   138,     7,   217,     6,
          -1,    64,    49,   137,   212,   138,     7,   217,     6,    -1,
          62,    54,   137,   212,   138,     7,   217,     6,    -1,    54,
         137,   212,   138,     7,   217,     6,    -1,    68,   137,     5,
         143,   217,   143,     5,   138,     6,    -1,    -1,    63,    54,
         179,   137,   172,   138,     7,   217,     6,    -1,    70,   214,
         144,   181,   145,    -1,    69,   144,   214,   143,   214,   143,
         212,   145,   144,   181,   145,    -1,    71,   214,   144,   181,
         145,    -1,    72,   144,   214,   143,   212,   145,   144,   181,
         145,    -1,     4,   144,   181,   145,    -1,    81,    49,   144,
         220,   145,    52,   144,   212,   145,    -1,    78,    49,   137,
         212,   138,   144,   220,   145,     6,    -1,   182,    -1,   180,
          -1,    -1,   182,   175,    -1,   182,    46,   144,   220,   145,
           6,    -1,   182,    49,   144,   220,   145,     6,    -1,   182,
          52,   144,   220,   145,     6,    -1,   182,    54,   144,   220,
         145,     6,    -1,    74,    59,   137,   212,   138,     7,   217,
           6,    -1,    74,    59,   137,   212,   138,     7,   144,   214,
         143,   214,   143,   220,   145,     6,    -1,    74,    59,   137,
         212,   138,     7,   144,   214,   143,   214,   143,   214,   143,
         220,   145,     6,    -1,    74,    50,   137,   212,   138,     7,
         144,   214,   143,   220,   145,     6,    -1,    74,     4,   137,
         212,   138,     7,   217,     6,    -1,    74,     4,   137,   212,
         138,     7,     5,     6,    -1,    74,     4,   144,   212,   145,
           6,    -1,    74,     4,   137,   212,   138,     7,   144,   214,
         143,   214,   143,   220,   145,     6,    -1,    79,   144,   182,
         145,    -1,    79,   104,   139,   212,   140,     6,    -1,    79,
           4,   139,   212,   140,     6,    -1,    79,     4,     6,    -1,
          79,     4,     4,     6,    -1,    96,   221,   144,   182,   145,
          -1,   108,     5,     6,    -1,   109,     5,     6,    -1,   108,
         144,   182,   145,    -1,   109,   144,   182,   145,    -1,     4,
         225,     6,    -1,     4,     4,   139,   212,   140,   224,     6,
          -1,     4,     4,     4,   139,   212,   140,     6,    -1,     4,
         212,     6,    -1,    66,   137,     4,   138,   141,     4,     6,
          -1,    90,     4,     6,    -1,   103,     6,    -1,    43,     6,
          -1,    40,     6,    -1,    40,   144,   212,   143,   212,   143,
         212,   143,   212,   143,   212,   143,   212,   145,     6,    -1,
          41,     6,    -1,    44,     6,    -1,    98,   137,   212,     8,
         212,   138,    -1,    98,   137,   212,     8,   212,     8,   212,
         138,    -1,    98,     4,    99,   144,   212,     8,   212,   145,
          -1,    98,     4,    99,   144,   212,     8,   212,     8,   212,
         145,    -1,   100,    -1,   107,     4,    -1,   105,    -1,   106,
           4,     6,    -1,   101,   137,   212,   138,    -1,   102,    -1,
          73,   214,   144,   182,   145,    -1,    73,   144,   214,   143,
         214,   143,   212,   145,   144,   182,   145,    -1,    73,   144,
         214,   143,   214,   143,   214,   143,   212,   145,   144,   182,
         145,    -1,    -1,    73,   214,   144,   182,   190,   203,   145,
          -1,    -1,    73,   144,   214,   143,   214,   143,   212,   145,
         144,   182,   191,   203,   145,    -1,    -1,    73,   144,   214,
         143,   214,   143,   214,   143,   212,   145,   144,   182,   192,
         203,   145,    -1,    -1,    73,   144,   182,   193,   203,   145,
          -1,    73,    46,   144,   212,   143,   214,   145,     6,    -1,
          73,    49,   144,   212,   143,   214,   145,     6,    -1,    73,
          52,   144,   212,   143,   214,   145,     6,    -1,    73,    46,
         144,   212,   143,   214,   143,   214,   143,   212,   145,     6,
          -1,    73,    49,   144,   212,   143,   214,   143,   214,   143,
         212,   145,     6,    -1,    73,    52,   144,   212,   143,   214,
         143,   214,   143,   212,   145,     6,    -1,    73,    46,   144,
         212,   143,   214,   143,   214,   143,   214,   143,   212,   145,
           6,    -1,    73,    49,   144,   212,   143,   214,   143,   214,
         143,   214,   143,   212,   145,     6,    -1,    73,    52,   144,
         212,   143,   214,   143,   214,   143,   214,   143,   212,   145,
           6,    -1,    -1,    73,    46,   144,   212,   143,   214,   145,
         194,   144,   203,   145,     6,    -1,    -1,    73,    49,   144,
         212,   143,   214,   145,   195,   144,   203,   145,     6,    -1,
          -1,    73,    52,   144,   212,   143,   214,   145,   196,   144,
         203,   145,     6,    -1,    -1,    73,    46,   144,   212,   143,
         214,   143,   214,   143,   212,   145,   197,   144,   203,   145,
           6,    -1,    -1,    73,    49,   144,   212,   143,   214,   143,
         214,   143,   212,   145,   198,   144,   203,   145,     6,    -1,
          -1,    73,    52,   144,   212,   143,   214,   143,   214,   143,
         212,   145,   199,   144,   203,   145,     6,    -1,    -1,    73,
          46,   144,   212,   143,   214,   143,   214,   143,   214,   143,
         212,   145,   200,   144,   203,   145,     6,    -1,    -1,    73,
          49,   144,   212,   143,   214,   143,   214,   143,   214,   143,
         212,   145,   201,   144,   203,   145,     6,    -1,    -1,    73,
          52,   144,   212,   143,   214,   143,   214,   143,   214,   143,
         212,   145,   202,   144,   203,   145,     6,    -1,   204,    -1,
         203,   204,    -1,    82,   144,   212,   145,     6,    -1,    82,
         144,   217,   143,   217,   145,     6,    -1,    82,   144,   217,
         143,   217,   143,   217,   145,     6,    -1,    76,     6,    -1,
          83,   137,   212,   138,     7,   217,    65,   212,     6,    -1,
          -1,    65,     4,   212,    -1,    -1,     4,    -1,    -1,     7,
         217,    -1,    -1,     7,   212,    -1,    61,    49,   218,     7,
         212,   205,     6,    -1,    61,    52,   218,   207,   206,     6,
          -1,    58,    52,   144,   212,   145,     7,   217,     6,    -1,
          61,    54,   218,   207,     6,    -1,    76,    52,   218,   208,
           6,    -1,    77,    52,   217,     7,   212,     6,    -1,    46,
         144,   220,   145,    99,    52,   144,   212,   145,     6,    -1,
          49,   144,   220,   145,    99,    52,   144,   212,   145,     6,
          -1,    49,   144,   220,   145,    99,    54,   144,   212,   145,
           6,    -1,    52,   144,   220,   145,    99,    54,   144,   212,
         145,     6,    -1,    80,     6,    -1,    80,     4,     6,    -1,
         213,    -1,   137,   212,   138,    -1,   128,   212,    -1,   127,
         212,    -1,   132,   212,    -1,   212,   128,   212,    -1,   212,
         127,   212,    -1,   212,   129,   212,    -1,   212,   130,   212,
          -1,   212,   131,   212,    -1,   212,   136,   212,    -1,   212,
         123,   212,    -1,   212,   124,   212,    -1,   212,   126,   212,
          -1,   212,   125,   212,    -1,   212,   122,   212,    -1,   212,
         121,   212,    -1,   212,   120,   212,    -1,   212,   119,   212,
          -1,   212,   118,   212,     8,   212,    -1,    14,   137,   212,
         138,    -1,    15,   137,   212,   138,    -1,    16,   137,   212,
         138,    -1,    17,   137,   212,   138,    -1,    18,   137,   212,
         138,    -1,    19,   137,   212,   138,    -1,    20,   137,   212,
         138,    -1,    21,   137,   212,   138,    -1,    22,   137,   212,
         138,    -1,    24,   137,   212,   138,    -1,    25,   137,   212,
         143,   212,   138,    -1,    26,   137,   212,   138,    -1,    27,
         137,   212,   138,    -1,    28,   137,   212,   138,    -1,    29,
         137,   212,   138,    -1,    30,   137,   212,   138,    -1,    31,
         137,   212,   138,    -1,    32,   137,   212,   143,   212,   138,
          -1,    33,   137,   212,   143,   212,   138,    -1,    34,   137,
         212,   143,   212,   138,    -1,    23,   137,   212,   138,    -1,
          14,   139,   212,   140,    -1,    15,   139,   212,   140,    -1,
          16,   139,   212,   140,    -1,    17,   139,   212,   140,    -1,
          18,   139,   212,   140,    -1,    19,   139,   212,   140,    -1,
          20,   139,   212,   140,    -1,    21,   139,   212,   140,    -1,
          22,   139,   212,   140,    -1,    24,   139,   212,   140,    -1,
          25,   139,   212,   143,   212,   140,    -1,    26,   139,   212,
         140,    -1,    27,   139,   212,   140,    -1,    28,   139,   212,
         140,    -1,    29,   139,   212,   140,    -1,    30,   139,   212,
         140,    -1,    31,   139,   212,   140,    -1,    32,   139,   212,
         143,   212,   140,    -1,    33,   139,   212,   143,   212,   140,
          -1,    34,   139,   212,   143,   212,   140,    -1,    23,   139,
         212,   140,    -1,     3,    -1,     9,    -1,    10,    -1,    11,
          -1,   111,    -1,   112,    -1,   113,    -1,     4,    -1,     4,
         146,   144,   212,   145,    -1,     4,   139,   212,   140,    -1,
         142,     4,   139,   140,    -1,     4,   170,    -1,     4,   139,
         212,   140,   170,    -1,     4,   141,     4,    -1,     4,   139,
         212,   140,   141,     4,    -1,     4,   141,     4,   170,    -1,
           4,   139,   212,   140,   141,     4,   170,    -1,   110,   137,
           5,   143,   212,   138,    -1,   215,    -1,   128,   214,    -1,
         127,   214,    -1,   214,   128,   214,    -1,   214,   127,   214,
          -1,   144,   212,   143,   212,   143,   212,   143,   212,   143,
         212,   145,    -1,   144,   212,   143,   212,   143,   212,   143,
         212,   145,    -1,   144,   212,   143,   212,   143,   212,   145,
          -1,   137,   212,   143,   212,   143,   212,   138,    -1,   217,
          -1,   216,   143,   217,    -1,   212,    -1,   219,    -1,   144,
         145,    -1,   144,   220,   145,    -1,   128,   144,   220,   145,
          -1,   212,   129,   144,   220,   145,    -1,   217,    -1,     5,
          -1,   128,   219,    -1,   212,   129,   219,    -1,   212,     8,
         212,    -1,   212,     8,   212,     8,   212,    -1,    46,   144,
         212,   145,    -1,   180,    -1,   189,    -1,     4,   139,   140,
          -1,     4,   139,   144,   220,   145,   140,    -1,   212,    -1,
         219,    -1,   220,   143,   212,    -1,   220,   143,   219,    -1,
         144,   212,   143,   212,   143,   212,   143,   212,   145,    -1,
         144,   212,   143,   212,   143,   212,   145,    -1,     4,    -1,
           4,   141,    96,   141,     4,    -1,   144,   223,   145,    -1,
           4,   139,   212,   140,   141,    97,    -1,   221,    -1,   223,
         143,   221,    -1,   225,    -1,     4,    -1,     4,   141,     4,
          -1,     4,   139,   212,   140,   141,     4,    -1,     5,    -1,
          42,    -1,    37,   137,   224,   143,   224,   138,    -1,    38,
         137,   224,   138,    -1,    39,   137,   224,   138,    -1,    36,
         137,   224,   138,    -1,    36,   137,   224,   143,   220,   138,
          -1
    };
    
    /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
    static const yytype_uint16 yyrline[] =
    {
           0,   146,   146,   147,   152,   154,   158,   159,   160,   161,
         162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
         172,   176,   180,   187,   192,   206,   219,   247,   261,   272,
         287,   292,   293,   294,   295,   296,   300,   302,   307,   309,
         315,   419,   314,   437,   444,   455,   454,   472,   479,   490,
         489,   506,   523,   546,   545,   559,   560,   561,   562,   563,
         567,   568,   575,   597,   624,   664,   674,   682,   690,   702,
         711,   717,   726,   744,   762,   771,   783,   788,   796,   816,
         839,   846,   852,   872,   893,   919,   931,   948,   952,   963,
         966,   979,   982,   992,  1016,  1015,  1035,  1057,  1075,  1097,
        1115,  1145,  1175,  1193,  1211,  1237,  1255,  1254,  1277,  1295,
        1334,  1340,  1346,  1353,  1378,  1403,  1420,  1419,  1439,  1456,
        1484,  1501,  1521,  1539,  1557,  1572,  1571,  1597,  1602,  1607,
        1612,  1617,  1637,  1643,  1654,  1655,  1660,  1663,  1667,  1690,
        1713,  1736,  1764,  1785,  1806,  1828,  1848,  1960,  1979,  1993,
        2102,  2111,  2115,  2130,  2157,  2174,  2188,  2194,  2200,  2209,
        2223,  2263,  2280,  2295,  2314,  2326,  2350,  2354,  2361,  2367,
        2372,  2378,  2388,  2405,  2422,  2441,  2460,  2488,  2496,  2502,
        2509,  2513,  2522,  2530,  2538,  2547,  2546,  2559,  2558,  2571,
        2570,  2583,  2582,  2595,  2602,  2609,  2616,  2623,  2630,  2637,
        2644,  2651,  2659,  2658,  2670,  2669,  2681,  2680,  2692,  2691,
        2703,  2702,  2714,  2713,  2725,  2724,  2736,  2735,  2747,  2746,
        2761,  2764,  2770,  2779,  2799,  2822,  2826,  2850,  2853,  2869,
        2872,  2885,  2888,  2894,  2897,  2904,  2960,  3030,  3035,  3102,
        3145,  3171,  3194,  3217,  3220,  3229,  3233,  3249,  3250,  3251,
        3252,  3253,  3254,  3255,  3256,  3257,  3264,  3265,  3266,  3267,
        3268,  3269,  3270,  3271,  3272,  3273,  3274,  3275,  3276,  3277,
        3278,  3279,  3280,  3281,  3282,  3283,  3284,  3285,  3286,  3287,
        3288,  3289,  3290,  3291,  3292,  3293,  3294,  3295,  3297,  3298,
        3299,  3300,  3301,  3302,  3303,  3304,  3305,  3306,  3307,  3308,
        3309,  3310,  3311,  3312,  3313,  3314,  3315,  3316,  3317,  3326,
        3327,  3328,  3329,  3330,  3331,  3332,  3336,  3349,  3361,  3376,
        3386,  3396,  3414,  3419,  3424,  3434,  3444,  3452,  3456,  3460,
        3464,  3468,  3475,  3479,  3483,  3487,  3494,  3499,  3506,  3511,
        3515,  3520,  3524,  3532,  3543,  3547,  3559,  3567,  3575,  3582,
        3593,  3613,  3623,  3633,  3643,  3663,  3668,  3672,  3676,  3688,
        3692,  3704,  3711,  3721,  3725,  3740,  3745,  3752,  3756,  3769,
        3777,  3788,  3792,  3800,  3808,  3822,  3836,  3840
    };
    #endif
    
    #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
    /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
       First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
    static const char *const yytname[] =
    {
      "$end", "error", "$undefined", "tDOUBLE", "tSTRING", "tBIGSTR", "tEND",
      "tAFFECT", "tDOTS", "tPi", "tMPI_Rank", "tMPI_Size", "tEuclidian",
      "tCoordinates", "tExp", "tLog", "tLog10", "tSqrt", "tSin", "tAsin",
      "tCos", "tAcos", "tTan", "tRand", "tAtan", "tAtan2", "tSinh", "tCosh",
      "tTanh", "tFabs", "tFloor", "tCeil", "tFmod", "tModulo", "tHypot",
      "tPrintf", "tSprintf", "tStrCat", "tStrPrefix", "tStrRelative",
      "tBoundingBox", "tDraw", "tToday", "tSyncModel", "tCreateTopology",
      "tDistanceFunction", "tPoint", "tCircle", "tEllipse", "tLine", "tSphere",
      "tPolarSphere", "tSurface", "tSpline", "tVolume", "tCharacteristic",
      "tLength", "tParametric", "tElliptic", "tPlane", "tRuled",
      "tTransfinite", "tComplex", "tPhysical", "tCompound", "tUsing",
      "tPlugin", "tDegenerated", "tOCCShape", "tRotate", "tTranslate",
      "tSymmetry", "tDilate", "tExtrude", "tLevelset", "tLoop", "tRecombine",
      "tSmoother", "tSplit", "tDelete", "tCoherence", "tIntersect", "tLayers",
      "tHole", "tAlias", "tAliasWithOptions", "tText2D", "tText3D",
      "tInterpolationScheme", "tTime", "tCombine", "tBSpline", "tBezier",
      "tNurbs", "tNurbsOrder", "tNurbsKnots", "tColor", "tColorTable", "tFor",
      "tIn", "tEndFor", "tIf", "tEndIf", "tExit", "tField", "tReturn", "tCall",
      "tFunction", "tShow", "tHide", "tGetValue", "tGMSH_MAJOR_VERSION",
      "tGMSH_MINOR_VERSION", "tGMSH_PATCH_VERSION", "tAFFECTDIVIDE",
      "tAFFECTTIMES", "tAFFECTMINUS", "tAFFECTPLUS", "'?'", "tOR", "tAND",
      "tNOTEQUAL", "tEQUAL", "'<'", "'>'", "tGREATEROREQUAL", "tLESSOREQUAL",
      "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "UNARYPREC", "tMINUSMINUS",
      "tPLUSPLUS", "'^'", "'('", "')'", "'['", "']'", "'.'", "'#'", "','",
      "'{'", "'}'", "'~'", "$accept", "All", "GeoFormatItems", "GeoFormatItem",
      "SendToFile", "Printf", "View", "Views", "ElementCoords",
      "ElementValues", "Element", "@1", "@2", "Text2DValues", "Text2D", "@3",
      "Text3DValues", "Text3D", "@4", "InterpolationMatrix", "Time", "@5",
      "NumericAffectation", "NumericIncrement", "Affectation", "PhysicalId",
      "InSphereCenter", "CircleOptions", "Shape", "@6", "@7", "@8", "@9",
      "Transform", "MultipleShape", "ListOfShapes", "LevelSet", "Delete",
      "Colorify", "Visibility", "Command", "Loop", "Extrude", "@10", "@11",
      "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21",
      "@22", "ExtrudeParameters", "ExtrudeParameter", "TransfiniteType",
      "TransfiniteArrangement", "TransfiniteCorners", "RecombineAngle",
      "Transfinite", "Embedding", "Coherence", "FExpr", "FExpr_Single",
      "VExpr", "VExpr_Single", "RecursiveListOfListOfDouble", "ListOfDouble",
      "ListOfDoubleOrAll", "FExpr_Multi", "RecursiveListOfDouble", "ColorExpr",
      "ListOfColor", "RecursiveListOfColor", "StringExprVar", "StringExpr", 0
    };
    #endif
    
    # ifdef YYPRINT
    /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
       token YYLEX-NUM.  */
    static const yytype_uint16 yytoknum[] =
    {
           0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
         265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
         275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
         285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
         295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
         315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
         325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
         335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
         345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
         355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
         365,   366,   367,   368,   369,   370,   371,   372,    63,   373,
         374,   375,   376,    60,    62,   377,   378,    43,    45,    42,
          47,    37,    33,   379,   380,   381,    94,    40,    41,    91,
          93,    46,    35,    44,   123,   125,   126
    };
    # endif
    
    /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
    static const yytype_uint8 yyr1[] =
    {
           0,   147,   148,   148,   149,   149,   150,   150,   150,   150,
         150,   150,   150,   150,   150,   150,   150,   150,   150,   150,
         150,   151,   151,   152,   152,   152,   152,   153,   153,   153,
         154,   154,   154,   154,   154,   154,   155,   155,   156,   156,
         158,   159,   157,   160,   160,   162,   161,   163,   163,   165,
         164,   166,   166,   168,   167,   169,   169,   169,   169,   169,
         170,   170,   171,   171,   171,   171,   171,   171,   171,   171,
         171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
         171,   171,   171,   171,   171,   171,   171,   172,   172,   173,
         173,   174,   174,   175,   176,   175,   175,   175,   175,   175,
         175,   175,   175,   175,   175,   175,   177,   175,   175,   175,
         175,   175,   175,   175,   175,   175,   178,   175,   175,   175,
         175,   175,   175,   175,   175,   179,   175,   180,   180,   180,
         180,   180,   180,   180,   181,   181,   182,   182,   182,   182,
         182,   182,   183,   183,   183,   183,   183,   183,   183,   183,
         184,   184,   184,   184,   184,   185,   186,   186,   186,   186,
         187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
         187,   187,   188,   188,   188,   188,   188,   188,   188,   188,
         188,   188,   189,   189,   189,   190,   189,   191,   189,   192,
         189,   193,   189,   189,   189,   189,   189,   189,   189,   189,
         189,   189,   194,   189,   195,   189,   196,   189,   197,   189,
         198,   189,   199,   189,   200,   189,   201,   189,   202,   189,
         203,   203,   204,   204,   204,   204,   204,   205,   205,   206,
         206,   207,   207,   208,   208,   209,   209,   209,   209,   209,
         209,   210,   210,   210,   210,   211,   211,   212,   212,   212,
         212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
         212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
         212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
         212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
         212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
         212,   212,   212,   212,   212,   212,   212,   212,   212,   213,
         213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
         213,   213,   213,   213,   213,   213,   213,   214,   214,   214,
         214,   214,   215,   215,   215,   215,   216,   216,   217,   217,
         217,   217,   217,   217,   218,   218,   219,   219,   219,   219,
         219,   219,   219,   219,   219,   220,   220,   220,   220,   221,
         221,   221,   221,   222,   222,   223,   223,   224,   224,   224,
         224,   225,   225,   225,   225,   225,   225,   225
    };
    
    /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
    static const yytype_uint8 yyr2[] =
    {
           0,     2,     1,     2,     0,     2,     1,     1,     1,     1,
           1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
           1,     1,     2,     5,     7,     7,     9,     6,     6,     6,
           0,     2,     2,     2,     2,     2,     1,     3,     1,     3,
           0,     0,    10,     1,     3,     0,    13,     1,     3,     0,
          15,     8,    14,     0,     6,     1,     1,     1,     1,     1,
           1,     1,     4,     7,     9,     6,     6,     3,     6,     4,
           6,     9,     6,     9,     5,     8,     8,    11,     6,     9,
           5,     7,     9,     9,    11,     9,     9,     1,     1,     0,
           5,     0,     2,     7,     0,     9,     6,     7,     4,     7,
           8,     8,     7,     7,    11,     8,     0,     9,     8,     9,
           3,     4,    10,     7,     7,     8,     0,     9,     8,    12,
           8,     8,     8,     7,     9,     0,     9,     5,    11,     5,
           9,     4,     9,     9,     1,     1,     0,     2,     6,     6,
           6,     6,     8,    14,    16,    12,     8,     8,     6,    14,
           4,     6,     6,     3,     4,     5,     3,     3,     4,     4,
           3,     7,     7,     3,     7,     3,     2,     2,     2,    15,
           2,     2,     6,     8,     8,    10,     1,     2,     1,     3,
           4,     1,     5,    11,    13,     0,     7,     0,    13,     0,
          15,     0,     6,     8,     8,     8,    12,    12,    12,    14,
          14,    14,     0,    12,     0,    12,     0,    12,     0,    16,
           0,    16,     0,    16,     0,    18,     0,    18,     0,    18,
           1,     2,     5,     7,     9,     2,     9,     0,     3,     0,
           1,     0,     2,     0,     2,     7,     6,     8,     5,     5,
           6,    10,    10,    10,    10,     2,     3,     1,     3,     2,
           2,     2,     3,     3,     3,     3,     3,     3,     3,     3,
           3,     3,     3,     3,     3,     3,     5,     4,     4,     4,
           4,     4,     4,     4,     4,     4,     4,     6,     4,     4,
           4,     4,     4,     4,     6,     6,     6,     4,     4,     4,
           4,     4,     4,     4,     4,     4,     4,     4,     6,     4,
           4,     4,     4,     4,     4,     6,     6,     6,     4,     1,
           1,     1,     1,     1,     1,     1,     1,     5,     4,     4,
           2,     5,     3,     6,     4,     7,     6,     1,     2,     2,
           3,     3,    11,     9,     7,     7,     1,     3,     1,     1,
           2,     3,     4,     5,     1,     1,     2,     3,     3,     5,
           4,     1,     1,     3,     6,     1,     1,     3,     3,     9,
           7,     1,     5,     3,     6,     1,     3,     1,     1,     3,
           6,     1,     1,     6,     4,     4,     4,     6
    };
    
    /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
       STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
       means the default is an error.  */
    static const yytype_uint16 yydefact[] =
    {
           0,     0,     0,     2,     3,     1,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   176,     0,   181,     0,     0,
         178,     0,     0,     0,     0,     5,     7,     6,     8,     9,
          10,    20,    11,    12,    13,    19,    18,    14,    15,    16,
          17,   309,   316,   371,    55,   310,   311,   312,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,   372,     0,     0,   313,   314,   315,    59,
          58,    57,    56,     0,     0,     0,    61,    60,     0,     0,
           0,     0,   136,     0,     0,     0,   247,     0,     0,     0,
           0,   168,     0,   170,   167,   171,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,    94,   106,
         116,   125,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,   327,     0,     0,     0,     0,     0,
         136,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         136,     0,   245,     0,     0,     0,     0,     0,     0,     0,
         361,     0,     0,     0,     0,     0,   166,     0,     0,   177,
           0,   136,     0,   136,     0,     0,     0,     0,   320,    30,
         371,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         316,   250,   249,   251,     0,     0,     0,     0,     0,     0,
           0,     0,     0,   135,     0,   134,     0,    67,   163,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,   160,   110,     0,     0,     0,     0,
         316,     0,     0,   351,   352,   355,   356,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,   338,     0,   339,     0,     0,     0,     0,   345,   344,
           0,   231,   231,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   329,   328,     0,     0,     0,
           0,   136,   136,     0,     0,     0,     0,     0,     0,     0,
         191,     0,   136,     0,     0,     0,     0,   233,     0,     0,
           0,   153,     0,     0,     0,   246,     0,     0,     0,   165,
           0,     0,     0,     0,     0,   136,     0,     0,     0,     0,
         179,   156,     0,   157,     0,     0,     0,   322,     0,     0,
          69,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,   368,     0,   367,     0,     0,     0,     0,
           0,     0,   248,     0,     0,     0,     0,    55,     0,     0,
           0,     0,     0,   131,     0,     0,     0,     0,   137,    62,
           0,   265,   264,   263,   262,   258,   259,   261,   260,   253,
         252,   254,   255,   256,   257,   111,     0,     0,     0,     0,
           0,     0,   249,   346,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         340,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         229,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,    98,     0,     0,     0,     0,   331,   330,     0,     0,
           0,     0,     0,     0,     0,     0,     0,   185,     0,     0,
           0,     0,     0,     0,     0,     0,   154,     0,     0,   150,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,   180,     0,   158,   159,     0,   318,   324,     0,    40,
           0,     0,     0,    53,     0,    31,    32,    33,    34,    35,
         267,   288,   268,   289,   269,   290,   270,   291,   271,   292,
         272,   293,   273,   294,   274,   295,   275,   296,   287,   308,
         276,   297,     0,     0,   278,   299,   279,   300,   280,   301,
         281,   302,   282,   303,   283,   304,     0,     0,     0,     0,
           0,     0,     0,     0,   376,     0,     0,   374,   375,    80,
           0,     0,     0,     0,     0,    55,     0,     0,     0,     0,
           0,    74,     0,     0,     0,     0,   319,     0,     0,     0,
           0,     0,    23,    21,     0,     0,     0,     0,   353,     0,
           0,   348,   254,   347,   357,   358,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   341,
           0,     0,     0,     0,     0,     0,   227,   232,   230,     0,
         238,     0,     0,    87,    88,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,   127,   129,     0,     0,
           0,     0,     0,     0,     0,     0,   220,     0,   182,     0,
           0,     0,     0,     0,   234,   239,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,   155,     0,
           0,     0,     0,     0,     0,   321,     0,   317,     0,     0,
           0,     0,     0,    27,     0,     0,     0,     0,     0,     0,
           0,     0,     0,   369,     0,     0,     0,   318,    65,    66,
           0,     0,     0,     0,     0,    68,    70,    72,     0,     0,
         365,     0,    78,     0,     0,     0,     0,   266,    22,     0,
           0,     0,     0,     0,   350,     0,     0,    91,    91,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   342,
           0,    96,     0,     0,     0,     0,     0,     0,   236,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,   225,     0,     0,   192,
         221,     0,     0,     0,   148,     0,     0,   240,     0,   152,
         151,     0,    28,    29,     0,     0,     0,   362,     0,     0,
           0,   172,     0,     0,   162,   323,   161,     0,     0,     0,
           0,   336,     0,   277,   298,   284,   305,   285,   306,   286,
         307,     0,   377,   373,   326,     0,    55,     0,     0,     0,
           0,    63,     0,     0,     0,   363,     0,     0,     0,     0,
          24,    25,     0,     0,    93,     0,   349,     0,     0,     0,
           0,     0,    97,     0,     0,   113,   114,     0,     0,    99,
         123,   343,     0,     0,     0,    89,     0,   235,     0,     0,
           0,     0,     0,     0,     0,     0,   164,     0,     0,     0,
           0,     0,   136,     0,   202,     0,   204,     0,   206,   338,
           0,     0,     0,     0,   186,     0,     0,     0,     0,     0,
           0,     0,     0,   102,   103,     0,     0,     0,     0,    81,
           0,   325,     0,    36,     0,     0,     0,     0,     0,    38,
           0,     0,     0,     0,    75,     0,     0,    76,     0,   366,
         138,   139,   140,   141,     0,     0,   354,     0,    92,   100,
         101,   105,     0,     0,   115,     0,     0,   237,   108,     0,
           0,   228,   122,     0,     0,     0,     0,   121,     0,   120,
         118,     0,     0,     0,     0,   335,     0,   334,     0,     0,
         193,     0,     0,   194,     0,     0,   195,     0,     0,     0,
           0,     0,     0,   147,     0,     0,   146,     0,     0,   142,
           0,     0,     0,     0,   360,     0,   174,   173,     0,     0,
           0,    41,     0,     0,     0,   337,     0,     0,     0,   370,
          64,    71,    73,     0,    79,     0,    26,     0,     0,     0,
           0,     0,     0,     0,   109,    95,   107,   117,   126,     0,
          85,    86,   124,   136,     0,   130,     0,     0,     0,     0,
           0,     0,   222,     0,     0,   136,     0,     0,     0,     0,
         133,   132,     0,     0,     0,     0,    82,    83,     0,    37,
           0,     0,     0,    39,    54,     0,   364,     0,   241,   242,
         243,   244,   112,     0,     0,     0,     0,   333,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         187,     0,     0,     0,     0,     0,   359,   175,     0,     0,
           0,     0,     0,    77,     0,     0,     0,   128,     0,   208,
           0,     0,   210,     0,     0,   212,     0,     0,     0,   223,
           0,   183,     0,   136,     0,     0,     0,   104,    84,     0,
          45,     0,    51,     0,     0,    90,   119,   332,   196,     0,
           0,   203,   197,     0,     0,   205,   198,     0,     0,   207,
           0,     0,     0,   189,     0,   145,     0,     0,     0,     0,
           0,     0,     0,     0,   214,     0,   216,     0,   218,   224,
         226,   188,   184,     0,     0,     0,     0,    42,     0,    49,
           0,     0,     0,   199,     0,     0,   200,     0,     0,   201,
           0,     0,   149,     0,   143,     0,    43,     0,     0,   169,
           0,     0,     0,     0,     0,     0,   190,     0,     0,     0,
           0,     0,   209,     0,   211,     0,   213,     0,   144,    44,
          46,     0,    47,     0,     0,     0,     0,     0,     0,    52,
         215,   217,   219,    48,    50
    };
    
    /* YYDEFGOTO[NTERM-NUM].  */
    static const yytype_int16 yydefgoto[] =
    {
          -1,     2,     3,    65,   684,    66,    67,   419,  1002,  1008,
         605,   778,  1148,  1285,   606,  1249,  1311,   607,  1287,   608,
         609,   782,   133,   228,    68,   722,  1040,   939,   488,   354,
         355,   356,   357,   323,   294,   295,    71,    72,    73,    74,
          75,    76,   324,   749,  1212,  1263,   565,  1061,  1064,  1067,
        1229,  1233,  1237,  1274,  1277,  1280,   745,   746,   847,   719,
         540,   573,    78,    79,    80,   341,   136,   366,   184,   900,
         901,   350,   343,   531,   212,   675,   811,   464,   465
    };
    
    /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
       STATE-NUM.  */
    #define YYPACT_NINF -1085
    static const yytype_int16 yypact[] =
    {
        3479,    31,    78,  3561, -1085, -1085,  1621,    77,    41,    -9,
          16,   128,   138,   185,   -48,    43,    63,   -45,    75,   132,
         -46,   142,   177,   236,   283,   304,   311,   345,     4,   277,
         584,   219,   222,   351,   269,   271,   -43,   -43,   286,   266,
          38,   369,   374,   384,    20,    37,   387,   453,   482,   485,
         315,   334,   356,    21,    35, -1085,   362, -1085,   497,   361,
       -1085,   507,   508,     5,     9, -1085, -1085, -1085, -1085, -1085,
       -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085,
       -1085, -1085,    22,   391,   306, -1085, -1085, -1085,   -85,   -65,
          83,   305,   309,   329,   397,   443,   448,   452,   467,   543,
         554,   570,   575,   605,   608,   613,   614,   618,   621,   394,
         405,   423,   433, -1085,   585,   438, -1085, -1085, -1085, -1085,
       -1085, -1085, -1085,  3095,  3095,  3095, -1085, -1085,  3095,  2652,
          14,   592,   206,  3095,   591,  1045, -1085,   609,   617,  3095,
         603, -1085,  3095, -1085, -1085, -1085,  3095,  3022,  3095,  3095,
         491,  3095,  3022,  3095,  3095,   502,  3022,  3095,  3095,  2035,
         513,   490,   518,   523,  1763,  1763,  1763,   528, -1085, -1085,
       -1085, -1085,   529,   547,   560,   699,  2035,   711,   -43,   -43,
         -43,  3095,  3095,   257, -1085,   295,   -43,   594,   595,   610,
        2886,   307,    69,   627,   635,  1763,  2035,   648,    32,   658,
       -1085,   780, -1085,   708,   674,   678,   790,  3095,  3095,  3095,
         660,  3095,   716,   750,  3095,  3095, -1085,  3095,   857, -1085,
         879, -1085,   880, -1085,   748,  3095,   884,   745, -1085, -1085,
       -1085,   887,  3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,
        3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,
        3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,
        3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,
        3095,  3095,  3095,  3095,   620,   620,   620,   620,  3095,   885,
         567,   758,   758,   758,  5745,     8,  3022,  5009,   174,   754,
         902,   773,   770, -1085,   771,   428,  1142, -1085, -1085,  3095,
        3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,  3095,
        3095,  3095,  3095,  3095, -1085, -1085,  1320,   -31,  4307,  5766,
         602,   775,  3022, -1085, -1085,  3248, -1085,   178,  5787,  5808,
        3095,  5829,   422,  5850,  5871,  3095,   616,  5892,  5913,  2171,
        1476,  3267,   908, -1085,  3095,  3095,  3095,  3095, -1085, -1085,
         910,   913,   913,  3095,   784,   785,   788,   789,  3095,  3095,
        3095,   791,   921,   787,   -81, -1085, -1085,  4333,  4359,   -43,
         -43,   206,   206,   327,  3095,  3095,  3095,  2886,  2886,  3095,
         428,   370, -1085,  3095,  3095,  3095,  3095,   929,   932,  3095,
         922, -1085,  3095,  3095,  1654, -1085,  3022,  3095,  3095, -1085,
        5934,  5955,  5976,   844,  4385, -1085,   797,  3287,  5997,  5032,
       -1085, -1085,  1801, -1085,  1937,  3095,  5055,   -26,  3095,    17,
       -1085,  6018,  5078,  6039,  5101,  6060,  5124,  6081,  5147,  6102,
        5170,  6123,  5193,  6144,  5216,  6165,  5239,  6186,  5262,  6207,
        5285,  6228,  5308,  4411,  4437,  6249,  5331,  6270,  5354,  6291,
        5377,  6312,  5400,  6333,  5423,  6354,  5446,  4463,  4489,  4515,
        4541,  4567,  4593,   624,   184, -1085,   800,   807,   809,  1446,
         805,  3095, -1085,  2035,  2035,   623,    80,   306,  3095,   943,
         947,    23,   812, -1085,    81,   -42,   -30,   137, -1085, -1085,
        3306,   777,   971,   652,   652,   333,   333,   333,   333,     1,
           1,   758,   758,   758,   758, -1085,    49,  3022,  3095,   949,
        2851,  3095,   758, -1085,  3095,  3022,  3022,   855,   951,   952,
        6375,   953,   863,   956,   957,  6396,   868,   963,   964,  3022,
       -1085,   646,  2307,  3095,  6417,  3376,  6438,  6459,  3095,  2035,
         968,   967,  6480,  3152,  3152,  3152,  3152,  6501,  6522,  6543,
         835, -1085,  2035,   -43,  3095,  3095, -1085, -1085,   832,   833,
        3095,  4619,  4645,  4671,  4281,   116,   -43,  2073,  6564,  3637,
        6585,  6606,  3095,   973,  3095,  6627, -1085,  5469,  5492, -1085,
         647,  5515,  5538,   974,   975,   977,   846,  3095,  2209,  3095,
        3095, -1085,    33, -1085, -1085,  5561,    44, -1085,  3665, -1085,
         848,   851,   845, -1085,   984, -1085, -1085, -1085, -1085, -1085,
       -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085,
       -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085,
       -1085, -1085,  3095,  3095, -1085, -1085, -1085, -1085, -1085, -1085,
       -1085, -1085, -1085, -1085, -1085, -1085,  3095,  3095,  3095,  3095,
        3095,  3095,  3095,   987, -1085,  3022,   620, -1085, -1085, -1085,
        3095,  5584,   986,   991,   853, -1085,    19,  3095,   995,   996,
        1550, -1085,   997,   864,    21,   999, -1085,  3022,  3022,  3022,
        3022,  3095, -1085,   882,   620,   208,  4697,   -43, -1085,  3022,
        3693,  3327,   758, -1085,  3248, -1085,   958,  2035,  2035,  1001,
        2035,   715,  2035,  2035,  1004,   959,  2035,  2035,   650, -1085,
        3022,  2511,  1005,  1007,  1008,  1009,  2951, -1085, -1085,  1011,
       -1085,  1013,   883,  6858, -1085,   888,   889,   890,  1015,  1016,
        1018,  1014,   886,   416,  4723,  4749, -1085, -1085,  3721,   -43,
         -43,   -43,  1025,   904,   896,   -32, -1085,   435, -1085,   116,
        1046,  1049,  1050,  1051,  6858, -1085,  2681,   912,  1054,  1056,
        1012,  1057,  1059,  2035,  2035,  2035,  1063,  4775, -1085,  3346,
         916,  1065,  1066,  1067,  1068, -1085,  1069, -1085,   934,  3095,
        3095,  2035,   936, -1085,  6648,  5607,  6669,  5630,  6690,  5653,
        6711,  5676,  5699, -1085,   238,   938,  6732,   191, -1085, -1085,
          72,   303,   937,  1074,  2807, -1085, -1085, -1085,    21,  3095,
       -1085,   657, -1085,   661,   662,   665,   666,  6858, -1085,  1077,
          53,  3095,    55,   669, -1085,  3095,   940,  1026,  1026,  2035,
        1081,   944,   945,  1084,  1097,  2035,   960,  1099,  1103, -1085,
         673, -1085,  1106,  2035,  2035,  2035,  1108,  1107, -1085,  2035,
        1109,  1111,  1114,  1116,  2035,  2035,  2035,   114,  1110,  3095,
        3095,  3095,   970,   379,   402,   429, -1085,  2035,  3095, -1085,
       -1085,  2886,   -19,  1899, -1085,   981,  2443, -1085,  3022, -1085,
       -1085,   983, -1085, -1085,  1122,  1123,  1035, -1085,  3095,  3095,
        3095, -1085,  1125,  1127, -1085,   -26, -1085,  3095,  4801,  4827,
         691, -1085,  3095, -1085, -1085, -1085, -1085, -1085, -1085, -1085,
       -1085,   998, -1085, -1085, -1085,  2035,   306,  3095,  1132,  1136,
          23, -1085,  1135,  5722,    21, -1085,  1137,  1140,  1141,  1143,
       -1085, -1085,   620,  4853, -1085,  1002,  6858,  3095,   -43,  1144,
        1146,  1147, -1085,  3095,  3095, -1085, -1085,  1148,  3095, -1085,
       -1085, -1085,  1150,  1152,  1153,  1062,  3095, -1085,  1156,  2035,
        2035,  2035,  2035,  1171,   831,  1172, -1085,  3152,  1041,  3749,
        6753,  3553,   206,   -43,  1174,   -43,  1176,   -43,  1178,   604,
        1042,  6774,  3777,   475, -1085,  1181,  1291,  1182,   -43,  1291,
        1183,   696,  3095, -1085, -1085,  2035,  3581,   702,  6795, -1085,
        2715, -1085,   270,  6858,  3095,  3095,  2035,  1047,   697,  6858,
        1186,  1187,  1189,  2829, -1085,  1149,  1192, -1085,  1058, -1085,
       -1085, -1085, -1085, -1085,  1195,  3095, -1085,  3805,   155, -1085,
       -1085, -1085,  3833,  3861, -1085,  3889,  1197, -1085, -1085,  1155,
        1200,  6858, -1085,  1201,  1203,  1205,  1206, -1085,  1048, -1085,
       -1085,  3124,  1207,  1208,  1072, -1085,  3095, -1085,  1076,   486,
       -1085,  1073,   489, -1085,  1079,   492, -1085,  1082,  1221,  2035,
        1196,  1086,  3095, -1085,  2579,   494, -1085,   520,   525, -1085,
        1225,  3917,  1138,  3095, -1085,  3095, -1085, -1085,  3022,  3181,
        1227, -1085,  3095,  4879,  4905, -1085,  2035,  3095,  1228, -1085,
       -1085, -1085, -1085,    21, -1085,  1139, -1085,  4931,  1229,  1231,
        1232,  1233,  1234,  1098, -1085, -1085, -1085, -1085, -1085,  2035,
       -1085, -1085, -1085,   206,  3609, -1085,  2886,   116,  2886,   116,
        2886,   116, -1085,   700,  2035, -1085,  3945,   -43,  3022,   -43,
       -1085, -1085,  3095,  3973,  4001,   701, -1085, -1085,  1101,  6858,
        3095,  3095,   705,  6858, -1085,  1237, -1085,  3095, -1085, -1085,
       -1085, -1085, -1085,  3095,   713,  1102,  3095, -1085,  4029,   542,
         -16,  4057,   549,    -7,  4085,   551,   141,  2035,  1240,  1184,
        2345,  1104,   562,   714,   568,  3203, -1085, -1085,  1244,  3095,
        6816,  4957,    25, -1085,  4983,  4113,  1245, -1085,  4141,  1246,
        3095,  1247,  1248,  3095,  1249,  1250,  3095,  1251,  1113, -1085,
        3095, -1085,   116, -1085,  3022,  1268,  2579, -1085, -1085,   721,
       -1085,  3095, -1085,  2035,  3095, -1085, -1085, -1085, -1085,  1131,
        4169, -1085, -1085,  1133,  4197, -1085, -1085,  1145,  4225, -1085,
        1270,  3222,   237,  2481,   724, -1085,   572,   725,  1273,  1154,
        6837,   728,  4253,   116,  1274,   116,  1275,   116,  1276, -1085,
       -1085, -1085, -1085,   116,  1277,  3022,  1278, -1085,   620, -1085,
        1159,  1282,   254, -1085,  1160,   279, -1085,  1188,   282, -1085,
        1190,   284, -1085,   731, -1085,   732, -1085,  1191,  2035, -1085,
        1284,   116,  1285,   116,  1286,   116, -1085,  1287,   620,  1290,
         620,   735, -1085,   313, -1085,   322, -1085,   349, -1085, -1085,
       -1085,   736, -1085,  1293,  1321,  1322,  1324,   620,  1325, -1085,
       -1085, -1085, -1085, -1085, -1085
    };
    
    /* YYPGOTO[NTERM-NUM].  */
    static const yytype_int16 yypgoto[] =
    {
       -1085, -1085, -1085, -1085,   477, -1085, -1085, -1085, -1085,   144,
       -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1085,
       -1085, -1085,  -286,    -3, -1085,   -28, -1085,   510,  1333, -1085,
       -1085, -1085, -1085,     3,  -367,  -189, -1085, -1085, -1085, -1085,
       -1085, -1085,  1336, -1085, -1085, -1085, -1085, -1085, -1085, -1085,
       -1085, -1085, -1085, -1085, -1085, -1085,  -684,  -717, -1085, -1085,
         988, -1085, -1085, -1085, -1085,    -6, -1085,   -20, -1085, -1084,
         522,   -95,   255,   -79,  -654,   421, -1085,  -268,     7
    };
    
    /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
       positive, shift that token.  If negative, reduce the rule which
       number is the opposite.  If zero, do what YYDEFACT says.
       If YYTABLE_NINF, syntax error.  */
    #define YYTABLE_NINF -5
    static const yytype_int16 yytable[] =
    {
         135,   380,   478,   134,   558,   559,    70,   466,   467,   468,
         220,   394,  1152,   137,   222,   473,   183,   185,   288,   191,
         810,   599,   141,   801,   198,   210,   224,   673,   870,   155,
         150,  1222,   412,   150,   414,  1164,   390,     4,   391,   213,
         771,   201,   192,   202,   742,   155,   369,   370,   463,   230,
         743,   744,   232,   164,   233,   682,   165,   742,   166,   931,
         742,   934,   553,   743,   744,   872,   743,   744,   327,   742,
         351,   352,   234,   332,   235,   743,   744,   336,     5,   665,
         109,   110,   111,   112,   179,   180,   113,   665,   193,   146,
         138,   231,   151,   139,   181,   151,   147,   194,   156,   152,
         387,   182,   678,   600,   601,   602,   603,   506,   126,   127,
         289,   290,   507,   869,   679,   802,   803,   281,   282,   283,
         966,   967,   284,   287,   199,   474,   984,   296,   140,  1201,
         310,   311,   312,   316,   143,   293,   318,   313,  1204,  1251,
         319,   325,   328,   329,   144,   331,   325,   333,   334,   221,
         325,   337,   338,   223,   922,   870,   126,   127,   364,   365,
         142,   225,   604,   226,   200,   211,   373,   674,   227,  1223,
         381,   392,   214,   683,   772,   367,   368,   683,   126,   127,
         148,   477,   369,   370,   368,   774,   119,   120,   121,   122,
         667,   145,   742,   567,   119,   120,   121,   122,   743,   744,
         149,   400,   401,   402,  1301,   404,   383,   475,   407,   408,
         292,   409,   153,   384,   126,   127,   588,   742,   146,   416,
         236,   666,   237,   743,   744,   677,   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,
         455,   456,   457,   458,   459,   460,   461,   462,   172,   154,
        1019,   173,   469,   174,   158,    35,    36,    37,    38,   157,
         325,   680,   369,   370,    43,   479,  1207,    46,   119,   120,
         121,   122,   159,   490,   491,   492,   493,   494,   495,   496,
         497,   498,   499,   500,   501,   502,   503,   504,   126,   127,
         916,   230,   187,   742,   158,   188,   512,   580,   189,   743,
         744,   516,   654,   517,   520,   126,   127,   655,   776,   525,
         742,   167,   774,   512,   325,   160,   743,   744,   534,   535,
         536,   537,   109,   110,   111,   112,   820,   542,   113,   556,
         557,   516,   547,   548,   549,   742,   161,   365,   742,   175,
         742,   743,   744,   162,   743,   744,   743,   744,   561,   562,
         563,   281,   282,   564,   293,   293,   912,   568,   569,   570,
         571,   516,  1261,   575,   369,   370,   577,   578,   795,   742,
         325,   581,   582,   179,   180,   743,   744,   163,   742,  1290,
         176,   371,   326,   181,   743,   744,   177,   326,  1091,   595,
         190,   326,   598,  1092,   597,   178,   819,   119,   120,   121,
         122,   195,   369,   370,  1292,   742,   196,  1294,   685,  1296,
         186,   743,   744,   197,   369,   370,   203,   126,   127,   372,
           7,     8,   238,  1170,   239,  1173,   240,  1176,   241,  1155,
         708,   382,   207,   870,   369,   370,   870,   204,  1314,   870,
         308,   309,   310,   311,   312,   661,   242,  1315,   243,   313,
         560,   208,   670,   668,   484,    15,    16,   485,    18,    19,
         486,    21,   487,    23,   669,    24,   205,    26,    27,   206,
          29,    30,    31,   209,  1316,    33,    34,   369,   370,   215,
         217,   325,   686,   216,   661,   690,   369,   370,   691,   692,
         694,   218,   219,   566,   915,   917,   725,   726,   727,    50,
          51,    52,   973,   325,   974,   870,   692,   711,  1242,   369,
         370,   274,   716,   733,   244,   229,   245,   723,   723,   723,
         723,   326,   275,   369,   370,   975,   747,   976,   734,   735,
         724,   724,   724,   724,   738,   870,   369,   370,   870,   859,
         276,   870,   369,   370,   870,   516,   754,   522,   756,  1272,
         277,  1275,   977,  1278,   978,   279,   794,   513,   871,  1281,
         246,   767,   247,   769,   770,   248,   870,   249,   870,   250,
         870,   251,   278,   775,   513,   326,   291,   297,   813,   814,
         815,   816,   369,   370,   252,  1058,   253,  1303,   317,  1305,
         823,  1307,   514,   369,   370,   314,   369,   370,  1072,   369,
         370,   369,   370,   315,   463,   230,   784,   785,   330,  1126,
         168,   840,  1128,   169,   345,  1130,   170,  1137,   171,   335,
         786,   787,   788,   789,   790,   791,   792,   369,   370,   325,
         344,   326,   369,   370,   796,   346,   109,   110,   111,   112,
         347,   804,   113,  1138,  1024,   353,   358,   822,  1139,   369,
         370,   325,   325,   325,   325,   817,   369,   370,   369,   370,
         254,   342,   255,   325,   359,  1200,   349,   349,   349,   369,
         370,   256,  1203,   257,  1206,   369,   370,   360,   362,   369,
         370,   126,   127,   361,   325,  1214,   471,   258,   226,   259,
        1085,  1216,   260,   227,   261,  1265,   363,   349,   388,   863,
         864,   865,   299,   300,   301,   302,   303,   304,   305,   306,
         307,   308,   309,   532,   311,   312,   126,   127,   374,   375,
         313,   510,   262,   226,   263,   264,   132,   265,   227,  1068,
         266,   268,   267,   269,   376,   270,  1165,   271,   272,   516,
         273,   526,   326,   652,   385,   653,   516,   831,   664,   832,
         693,   695,   386,   898,   899,   304,   305,   306,   307,   308,
         309,   310,   311,   312,   326,   389,   395,   693,   313,   516,
         516,   709,   760,   516,   775,   839,   399,   393,   918,   991,
         924,   403,   925,   923,   516,   516,   926,   927,   516,   516,
         928,   929,   516,   397,   935,   933,   516,   398,   951,   936,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,  1006,  1048,  1007,  1049,   313,   516,
        1097,  1080,  1098,  1177,   516,  1178,  1188,  1086,  1006,   406,
        1192,   983,   396,   969,   970,   971,  1006,   516,  1196,  1215,
         405,   979,   981,   410,  1097,   982,  1248,   516,   516,  1264,
        1266,  1006,   325,  1270,   516,  1298,  1297,  1299,  1006,  1317,
        1313,  1318,   996,   997,   998,   411,   413,   415,   417,   418,
         470,  1003,  1001,   420,   313,   480,  1009,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,   481,
         326,  1013,   482,   313,   132,   533,   483,   538,  1028,   511,
         539,   543,   544,  1012,   890,   545,   546,   551,   576,   550,
         552,  1027,   326,   326,   326,   326,   572,  1032,  1033,   574,
         586,   589,  1035,   656,   326,   657,  1180,   658,   660,   671,
        1041,   672,   676,  1059,   696,  1062,   687,  1065,   697,   698,
         700,  1051,   701,   702,   703,   326,  1075,   705,  1077,  1078,
         706,   707,   718,   720,  1052,   293,   731,   736,   737,   755,
         325,   763,   764,   325,   765,   779,  1081,   766,   780,   781,
         783,   793,   798,   800,  1089,   662,   663,   799,  1093,  1094,
        1286,   805,   806,   809,   808,   812,   818,  1090,   829,  1145,
         826,   835,   842,   836,   843,   844,   845,   848,   857,  1107,
         849,   850,   854,   855,  1243,   856,   851,   852,   853,   858,
        1309,   866,  1312,   868,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,   867,  1323,
        1124,   298,   313,   873,   891,   874,   878,   875,   876,  1183,
         879,   717,   880,   882,   881,   883,  1136,   887,   512,   892,
         893,   897,   895,   894,   732,   896,   913,  1143,   919,  1144,
         902,   920,   325,   930,   937,   938,  1149,   942,   943,   944,
         945,  1153,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,   946,   948,   949,  1169,   313,  1172,   950,
        1175,   952,   956,   957,   972,   968,   959,  1182,   960,  1184,
        1168,   961,  1171,   962,  1174,   988,   293,   992,   993,   994,
         995,   999,   325,   326,  1000,  1244,  1185,  1247,  1014,  1010,
        1015,  1017,  1026,  1020,  1190,  1191,  1021,  1022,   489,  1023,
        1029,  1194,  1030,  1031,  1034,  1036,  1103,  1195,  1037,  1038,
        1198,  1039,  1042,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,  1047,  1050,  1053,
        1060,   313,  1063,  1009,  1066,  1069,  1283,  1073,  1076,  1079,
        1099,  1096,  1119,  1100,  1230,  1101,  1246,  1234,  1104,  1105,
        1238,  1106,  1112,  1134,  1241,  1113,  1114,  1115,   325,  1116,
         325,  1117,  1118,  1121,  1122,  1250,  1123,  1127,  1252,   827,
         828,  1125,   830,  1129,   833,   834,  1131,  1132,   837,   838,
        1135,  1140,  1142,  1147,  1154,  1158,  1156,  1159,  1160,  1161,
        1162,   326,  1163,  1193,   326,  1189,  1209,  1197,  1213,  1210,
        1218,  1226,  1228,  1231,  1232,  1235,  1236,  1239,  1240,   325,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,  1245,  1253,  1259,  1255,   313,  1267,
        1273,  1276,  1279,  1282,  1284,   884,   885,   886,  1289,  1257,
        1302,  1304,  1306,  1308,    81,   320,  1310,   932,  1268,  1319,
          85,    86,    87,  1288,  1291,    88,    89,    90,    91,    92,
          93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
         103,   104,   105,   106,   107,   108,   505,  1320,  1321,   513,
        1322,  1324,  1293,  1219,  1295,  1300,    69,   321,   940,    77,
         541,  1016,     0,   326,     0,     0,     0,     0,     0,     0,
           0,   941,     0,     0,     0,     0,     0,   947,     0,     0,
          35,    36,    37,    38,    39,   953,   954,   955,     0,    43,
           0,   958,    46,     0,     0,     0,   963,   964,   965,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   980,
           0,     0,     0,   326,     0,   987,     0,     0,   990,     0,
           0,   115,   116,   117,   118,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,   377,  1074,
           0,     0,     0,   125,     0,     0,     0,     0,   379,     0,
           0,     0,     0,   131,     0,   182,   530,  1011,   299,   300,
         301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
         311,   312,   659,     0,     0,     0,   313,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   326,
           0,   326,     0,     0,     0,     0,     0,     0,     0,    81,
         320,  1043,  1044,  1045,  1046,    85,    86,    87,     0,     0,
          88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
          98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
         108,     0,     0,     0,     0,     0,     0,  1082,     0,     0,
         326,     0,   321,     0,     0,     0,     0,     0,  1095,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,    35,    36,    37,    38,    39,
           0,     0,     0,     0,    43,     0,   807,    46,     0,     0,
           0,     0,     0,     0,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,     0,     0,   115,   116,   117,   118,
           0,  1133,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,   123,   322,     0,     0,     0,   125,     0,
           0,     0,     0,   128,     0,     0,     0,     0,   131,     0,
           0,   530,     0,     0,    81,    82,    83,     0,    84,     0,
          85,    86,    87,     0,     0,    88,    89,    90,    91,    92,
          93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
         103,   104,   105,   106,   107,   108,  1179,   109,   110,   111,
         112,     0,     0,   113,     0,     0,     7,     8,   299,   300,
         301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
         311,   312,     0,     0,     0,     0,   313,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,  1208,
         484,    15,    16,   485,    18,    19,   486,    21,   487,    23,
           0,    24,     0,    26,    27,     0,    29,    30,    31,     0,
           0,    33,    34,     0,     0,   114,     0,     0,     0,     0,
           0,   115,   116,   117,   118,   119,   120,   121,   122,     0,
           0,     0,     0,     0,     0,    50,    51,    52,   123,   124,
           0,     0,     0,   125,     0,   126,   127,     0,   128,     0,
         129,     0,   130,   131,     0,   132,    81,   320,   348,     0,
           0,     0,    85,    86,    87,     0,     0,    88,    89,    90,
          91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
         101,   102,   103,   104,   105,   106,   107,   108,     0,   579,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   321,
           0,     0,     0,     7,     8,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,    35,    36,    37,    38,    39,     0,     0,     0,
           0,    43,     0,     0,    46,     0,     0,   484,    15,    16,
         485,    18,    19,   486,    21,   487,    23,     0,    24,     0,
          26,    27,     0,    29,    30,    31,     0,     0,    33,    34,
           0,     0,     0,   115,   116,   117,   118,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         123,   339,    50,    51,    52,   125,     0,     0,     0,     0,
         128,     0,    81,   320,   985,   131,     0,   340,    85,    86,
          87,     0,     0,    88,    89,    90,    91,    92,    93,    94,
          95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
         105,   106,   107,   108,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   321,   593,     0,     0,     7,
           8,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,    35,    36,
          37,    38,    39,     0,     0,     0,     0,    43,     0,     0,
          46,     0,     0,   484,    15,    16,   485,    18,    19,   486,
          21,   487,    23,     0,    24,     0,    26,    27,     0,    29,
          30,    31,     0,     0,    33,    34,     0,     0,     0,   115,
         116,   117,   118,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,   123,   339,    50,    51,
          52,   125,     0,     0,     0,     0,   128,     0,    81,   320,
           0,   131,     0,   986,    85,    86,    87,     0,     0,    88,
          89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
          99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,   321,   594,     0,     0,     7,     8,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,    35,    36,    37,    38,    39,     0,
           0,     0,     0,    43,     0,     0,    46,     0,     0,   484,
          15,    16,   485,    18,    19,   486,    21,   487,    23,     0,
          24,     0,    26,    27,     0,    29,    30,    31,     0,     0,
          33,    34,     0,     0,     0,   115,   116,   117,   118,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,   123,   339,    50,    51,    52,   125,     0,     0,
           0,     0,   128,     0,    81,   320,     0,   131,     0,   340,
          85,    86,    87,     0,     0,    88,    89,    90,    91,    92,
          93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
         103,   104,   105,   106,   107,   108,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,   321,   748,     0,
           0,     7,     8,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
          35,    36,    37,    38,    39,     0,     0,     0,     0,    43,
           0,     0,    46,     0,     0,   484,    15,    16,   485,    18,
          19,   486,    21,   487,    23,     0,    24,     0,    26,    27,
           0,    29,    30,    31,     0,     0,    33,    34,     0,     0,
           0,   115,   116,   117,   118,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,   123,   322,
          50,    51,    52,   125,     0,     0,     0,     0,   128,     0,
          81,   320,     0,   131,     0,   529,    85,    86,    87,     0,
           0,    88,    89,    90,    91,    92,    93,    94,    95,    96,
          97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
         107,   108,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,   321,   768,     0,     0,     7,     8,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,    35,    36,    37,    38,
          39,     0,     0,     0,     0,    43,     0,     0,    46,     0,
           0,   484,    15,    16,   485,    18,    19,   486,    21,   487,
          23,     0,    24,     0,    26,    27,     0,    29,    30,    31,
           0,     0,    33,    34,     0,     0,     0,   115,   116,   117,
         118,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,   123,   322,    50,    51,    52,   125,
           0,     0,     0,     0,   128,     0,    81,   320,     0,   131,
           0,   710,    85,    86,    87,     0,     0,    88,    89,    90,
          91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
         101,   102,   103,   104,   105,   106,   107,   108,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   321,
        1211,     0,     0,     7,     8,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,    35,    36,    37,    38,    39,   841,     0,     0,
           0,    43,     0,     0,    46,     0,     0,   484,    15,    16,
         485,    18,    19,   486,    21,   487,    23,     0,    24,     0,
          26,    27,     0,    29,    30,    31,     0,     0,    33,    34,
           0,     0,     0,   115,   116,   117,   118,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         123,   339,    50,    51,    52,   125,     0,     0,     0,     0,
         128,     0,    81,   320,     0,   131,     0,   989,    85,    86,
          87,     0,     0,    88,    89,    90,    91,    92,    93,    94,
          95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
         105,   106,   107,   108,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   321,  1262,     0,     0,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,    35,    36,
          37,    38,    39,     0,     0,    81,   280,    43,     0,     0,
          46,    85,    86,    87,     0,     0,    88,    89,    90,    91,
          92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
         102,   103,   104,   105,   106,   107,   108,   877,     0,   115,
         116,   117,   118,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,   377,  1074,     0,     0,
           0,   125,     0,     0,     0,     0,   379,     0,    81,   280,
         230,   131,     0,   182,    85,    86,    87,     0,     0,    88,
          89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
          99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
           0,   109,   110,   111,   112,     0,     0,   113,     0,     0,
           0,     0,   115,   116,   117,   118,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   123,
         124,     0,     0,     0,   125,     0,     0,     0,     0,   128,
           0,     0,   285,     0,   131,     0,   286,     0,     0,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,   921,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,     0,   115,   116,   117,   118,     0,
           0,     0,     0,     0,     0,  1102,     0,     0,     0,     0,
           0,     0,   123,   124,     0,     0,     0,   125,     0,     0,
           0,     0,   128,     0,    81,   280,     0,   131,     0,  1088,
          85,    86,    87,     0,     0,    88,    89,    90,    91,    92,
          93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
         103,   104,   105,   106,   107,   108,     0,     0,     0,    81,
         280,     0,     0,     0,     0,    85,    86,    87,     0,     0,
          88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
          98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
         108,     0,     0,     0,     0,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,   115,   116,   117,   118,   313,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,   123,   124,
           0,     0,     0,   125,     0,     0,     0,     0,   128,     0,
           0,   688,     0,   131,     0,   689,   115,   116,   117,   118,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,     0,   377,   378,     0,   846,     0,   125,     0,
           0,     0,     0,   379,     0,    81,   320,     0,   131,     0,
         182,    85,    86,    87,     0,     0,    88,    89,    90,    91,
          92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
         102,   103,   104,   105,   106,   107,   108,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,   321,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,    35,    36,    37,    38,    39,     0,     0,    81,   280,
          43,     0,     0,    46,    85,    86,    87,     0,     0,    88,
          89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
          99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
        1120,     0,   115,   116,   117,   118,     0,     0,     0,     0,
           0,     0,     0,     0,     0,     0,     0,     0,     0,   123,
         322,     0,     0,     0,   125,    81,   280,   230,     0,   128,
           0,    85,    86,    87,   131,     0,    88,    89,    90,    91,
          92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
         102,   103,   104,   105,   106,   107,   108,  1146,   109,   110,
         111,   112,     0,     0,   113,     0,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   115,   116,   117,   118,  1217,
           0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
           0,     0,   123,   124,     0,     0,     0,   125,  1260,     0,
           0,     0,   128,     0,     0,     0,     0,   131,     0,     0,
           0,     0,   299,   300,   301,   302,   303,   304,   305,   306,
         307,   308,   309,   310,   311,   312,   514,     0,     0,     0,
         313,     0,   115,   116,   117,   118,     0,     0,     0,     0,
           0,     0,     0,     0,     0,   514,     0,     0,     0,   123,
         124,     0,     0,     0,   125,     0,     0,     0,     0,   128,
           0,     0,     0,     0,   131,   590,     0,     0,     0,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,   681,     0,     0,   313,     0,     0,
           0,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,   825,     0,     0,     0,   313,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,   889,     0,     0,     0,   313,     0,
           0,     0,     0,     0,     0,     0,   299,   300,   301,   302,
         303,   304,   305,   306,   307,   308,   309,   515,   311,   312,
           0,     0,     0,     0,   313,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   532,   311,   312,     0,
           0,     0,     0,   313,     0,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,     0,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,    -4,
           1,     0,   313,    -4,     0,     0,     0,     0,     0,     0,
           0,    -4,    -4,     0,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,    -4,     0,     0,     0,     0,    -4,
          -4,   713,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,
          -4,    -4,    -4,    -4,    -4,     0,    -4,    -4,    -4,    -4,
          -4,    -4,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,
          -4,    -4,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,
          -4,     0,     0,    -4,    -4,     6,     0,     0,     0,    -4,
          -4,    -4,    -4,     7,     8,    -4,     0,    -4,     0,    -4,
          -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,     0,
           0,     0,     0,     0,     0,     0,     9,     0,     0,     0,
           0,    10,    11,     0,    12,    13,     0,    14,    15,    16,
          17,    18,    19,    20,    21,    22,    23,     0,    24,    25,
          26,    27,    28,    29,    30,    31,     0,    32,    33,    34,
          35,    36,    37,    38,    39,    40,     0,    41,    42,    43,
          44,    45,    46,     0,     0,    47,    48,     0,     0,     0,
           0,    49,    50,    51,    52,     0,     0,    53,     0,    54,
           0,    55,    56,    57,    58,    59,    60,    61,    62,    63,
          64,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,  1056,     0,  1057,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,  1083,     0,  1084,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,     0,
           0,     0,  1166,     0,  1167,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
           0,     0,   751,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,     0,     0,     0,     0,     0,
         777,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,     0,     0,   824,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,     0,     0,   862,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,     0,
           0,     0,     0,     0,  1054,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
           0,     0,  1071,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,     0,     0,     0,     0,     0,
        1108,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,     0,     0,  1109,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,     0,     0,  1110,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,     0,
           0,     0,     0,     0,  1111,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
           0,     0,  1141,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,     0,     0,     0,     0,     0,
        1181,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,     0,     0,  1186,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,     0,     0,  1187,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,     0,
           0,     0,     0,     0,  1199,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
           0,     0,  1202,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,     0,     0,     0,     0,     0,
        1205,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,     0,     0,  1225,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,     0,     0,  1227,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,     0,
           0,     0,     0,     0,  1254,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
           0,     0,  1256,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,     0,     0,     0,     0,     0,
        1258,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,     0,     0,  1271,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,   472,
           0,     0,     0,     0,   554,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
         508,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,   554,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,     0,
           0,     0,   555,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,     0,     0,     0,   587,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,   632,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
         633,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,   646,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,     0,
           0,     0,   647,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,     0,     0,     0,   648,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,   649,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
         650,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,   651,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,     0,
           0,     0,   739,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,     0,     0,     0,   740,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,   741,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
         821,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,   860,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,     0,
           0,     0,   861,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,     0,     0,     0,   888,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,  1004,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
        1005,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,  1025,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,     0,
           0,     0,  1150,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,     0,     0,     0,  1151,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,     0,     0,     0,  1157,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,     0,     0,     0,
        1221,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,     0,     0,     0,  1224,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,   476,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,     0,     0,     0,     0,   313,     0,
           0,     0,   592,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,   596,   299,   300,   301,   302,
         303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
           0,     0,     0,     0,   313,     0,     0,     0,   611,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,   613,   299,   300,   301,   302,   303,   304,   305,   306,
         307,   308,   309,   310,   311,   312,     0,     0,     0,     0,
         313,     0,     0,     0,   615,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,   617,   299,   300,
         301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
         311,   312,     0,     0,     0,     0,   313,     0,     0,     0,
         619,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,   621,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,     0,     0,   623,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,   625,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,     0,     0,     0,     0,   313,     0,
           0,     0,   627,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,   629,   299,   300,   301,   302,
         303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
           0,     0,     0,     0,   313,     0,     0,     0,   631,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,   635,   299,   300,   301,   302,   303,   304,   305,   306,
         307,   308,   309,   310,   311,   312,     0,     0,     0,     0,
         313,     0,     0,     0,   637,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,   639,   299,   300,
         301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
         311,   312,     0,     0,     0,     0,   313,     0,     0,     0,
         641,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,   643,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,     0,     0,   645,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,   758,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,     0,     0,     0,     0,   313,     0,
           0,     0,   759,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,     0,     0,   761,   299,   300,   301,   302,
         303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
           0,     0,     0,     0,   313,     0,     0,     0,   762,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,     0,
           0,   773,   299,   300,   301,   302,   303,   304,   305,   306,
         307,   308,   309,   310,   311,   312,     0,     0,     0,     0,
         313,     0,     0,     0,   797,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,     0,     0,   904,   299,   300,
         301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
         311,   312,     0,     0,     0,     0,   313,     0,     0,     0,
         906,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,     0,     0,   908,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,     0,     0,   910,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,     0,     0,   911,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,     0,     0,     0,     0,   313,     0,
           0,     0,  1018,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,   472,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,   509,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,   518,   299,   300,   301,   302,
         303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
           0,     0,     0,     0,   313,     0,   519,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,   521,   299,   300,
         301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
         311,   312,     0,     0,     0,     0,   313,     0,   523,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,   524,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,     0,     0,     0,     0,   313,     0,
         527,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,   528,   299,   300,   301,   302,   303,   304,   305,   306,
         307,   308,   309,   310,   311,   312,     0,     0,     0,     0,
         313,     0,   583,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,   584,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,   585,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,   591,   299,   300,   301,   302,
         303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
           0,     0,     0,     0,   313,     0,   610,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,   612,   299,   300,
         301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
         311,   312,     0,     0,     0,     0,   313,     0,   614,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,   616,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,     0,     0,     0,     0,   313,     0,
         618,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,   620,   299,   300,   301,   302,   303,   304,   305,   306,
         307,   308,   309,   310,   311,   312,     0,     0,     0,     0,
         313,     0,   622,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,   624,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,   626,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,   628,   299,   300,   301,   302,
         303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
           0,     0,     0,     0,   313,     0,   630,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,   634,   299,   300,
         301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
         311,   312,     0,     0,     0,     0,   313,     0,   636,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,   638,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,     0,     0,     0,     0,   313,     0,
         640,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,   642,   299,   300,   301,   302,   303,   304,   305,   306,
         307,   308,   309,   310,   311,   312,     0,     0,     0,     0,
         313,     0,   644,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,   699,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,   704,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,   712,   299,   300,   301,   302,
         303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
           0,     0,     0,     0,   313,     0,   714,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,   715,   299,   300,
         301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
         311,   312,     0,     0,     0,     0,   313,     0,   721,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,   728,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,     0,     0,     0,     0,   313,     0,
         729,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,   730,   299,   300,   301,   302,   303,   304,   305,   306,
         307,   308,   309,   310,   311,   312,     0,     0,     0,     0,
         313,     0,   750,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,   752,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,   753,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,   757,   299,   300,   301,   302,
         303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
           0,     0,     0,     0,   313,     0,   903,   299,   300,   301,
         302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
         312,     0,     0,     0,     0,   313,     0,   905,   299,   300,
         301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
         311,   312,     0,     0,     0,     0,   313,     0,   907,   299,
         300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
         310,   311,   312,     0,     0,     0,     0,   313,     0,   909,
         299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
         309,   310,   311,   312,     0,     0,     0,     0,   313,     0,
         914,   299,   300,   301,   302,   303,   304,   305,   306,   307,
         308,   309,   310,   311,   312,     0,     0,     0,     0,   313,
           0,  1055,   299,   300,   301,   302,   303,   304,   305,   306,
         307,   308,   309,   310,   311,   312,     0,     0,     0,     0,
         313,     0,  1070,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,     0,     0,     0,
           0,   313,     0,  1087,   299,   300,   301,   302,   303,   304,
         305,   306,   307,   308,   309,   310,   311,   312,     0,     0,
           0,     0,   313,     0,  1220,   299,   300,   301,   302,   303,
         304,   305,   306,   307,   308,   309,   310,   311,   312,     0,
           0,     0,     0,   313,     0,  1269,   299,   300,   301,   302,
         303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
           0,     0,     0,     0,   313
    };
    
    static const yytype_int16 yycheck[] =
    {
           6,   190,   288,     6,   371,   372,     3,   275,   276,   277,
           5,   200,  1096,     6,     5,     7,    36,    37,     4,    39,
         674,     4,     6,     4,     4,     4,     4,     4,   745,    75,
          75,     6,   221,    75,   223,  1119,     4,     6,     6,     4,
           7,     4,     4,     6,    76,    75,   127,   128,     4,     5,
          82,    83,   137,    49,   139,     6,    52,    76,    54,     6,
          76,     6,   143,    82,    83,   749,    82,    83,   147,    76,
         165,   166,   137,   152,   139,    82,    83,   156,     0,     7,
          36,    37,    38,    39,   127,   128,    42,     7,    50,   137,
          13,    84,   137,    52,   137,   137,   144,    59,   144,   144,
         195,   144,   144,    86,    87,    88,    89,   138,   134,   135,
          96,    97,   143,   145,   144,    96,    97,   123,   124,   125,
           6,     7,   128,   129,   104,   117,   145,   133,   137,   145,
         129,   130,   131,   139,     6,   132,   142,   136,   145,  1223,
         146,   147,   148,   149,     6,   151,   152,   153,   154,   144,
         156,   157,   158,   144,   808,   872,   134,   135,   178,   179,
         144,   139,   145,   141,   144,   144,   186,   144,   146,   144,
         190,   139,   137,   124,   141,   181,   182,   124,   134,   135,
         137,     7,   127,   128,   190,   141,   114,   115,   116,   117,
         476,     6,    76,   382,   114,   115,   116,   117,    82,    83,
         137,   207,   208,   209,  1288,   211,   137,   286,   214,   215,
           4,   217,   137,   144,   134,   135,   405,    76,   137,   225,
         137,   141,   139,    82,    83,   144,   232,   233,   234,   235,
         236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
         246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
         256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
         266,   267,   268,   269,   270,   271,   272,   273,    49,   137,
         924,    52,   278,    54,   137,    69,    70,    71,    72,   137,
         286,   144,   127,   128,    78,   288,   145,    81,   114,   115,
         116,   117,    56,   299,   300,   301,   302,   303,   304,   305,
         306,   307,   308,   309,   310,   311,   312,   313,   134,   135,
           7,     5,    46,    76,   137,    49,   322,   396,    52,    82,
          83,   143,   138,   145,   330,   134,   135,   143,   596,   335,
          76,    54,   141,   339,   340,    52,    82,    83,   344,   345,
         346,   347,    36,    37,    38,    39,   138,   353,    42,   369,
         370,   143,   358,   359,   360,    76,    52,   377,    76,   137,
          76,    82,    83,    52,    82,    83,    82,    83,   374,   375,
         376,   377,   378,   379,   371,   372,   138,   383,   384,   385,
         386,   143,   145,   389,   127,   128,   392,   393,   656,    76,
         396,   397,   398,   127,   128,    82,    83,    52,    76,   145,
          49,   144,   147,   137,    82,    83,   137,   152,   138,   415,
         144,   156,   418,   143,   417,   144,   684,   114,   115,   116,
         117,    52,   127,   128,   145,    76,    52,   145,   507,   145,
         144,    82,    83,    49,   127,   128,    49,   134,   135,   144,
          12,    13,   137,  1127,   139,  1129,   137,  1131,   139,  1103,
         529,   144,   137,  1170,   127,   128,  1173,     4,   145,  1176,
         127,   128,   129,   130,   131,   471,   137,   145,   139,   136,
         143,   137,   478,   476,    46,    47,    48,    49,    50,    51,
          52,    53,    54,    55,   477,    57,     4,    59,    60,     4,
          62,    63,    64,   137,   145,    67,    68,   127,   128,   137,
         139,   507,   508,     6,   510,   511,   127,   128,   514,   515,
         516,     4,     4,   143,   800,   801,   544,   545,   546,    91,
          92,    93,   143,   529,   145,  1242,   532,   533,  1212,   127,
         128,   137,   538,   553,   137,   144,   139,   543,   544,   545,
         546,   286,   137,   127,   128,   143,   566,   145,   554,   555,
         543,   544,   545,   546,   560,  1272,   127,   128,  1275,   143,
         137,  1278,   127,   128,  1281,   143,   572,   145,   574,  1253,
         137,  1255,   143,  1257,   145,   137,   655,   322,   143,  1263,
         137,   587,   139,   589,   590,   137,  1303,   139,  1305,   137,
        1307,   139,     7,   596,   339,   340,     4,     6,   677,   678,
         679,   680,   127,   128,   137,   972,   139,  1291,     5,  1293,
         689,  1295,     8,   127,   128,     6,   127,   128,   143,   127,
         128,   127,   128,     6,     4,     5,   632,   633,   137,   143,
          46,   710,   143,    49,   144,   143,    52,   143,    54,   137,
         646,   647,   648,   649,   650,   651,   652,   127,   128,   655,
         137,   396,   127,   128,   660,   137,    36,    37,    38,    39,
         137,   667,    42,   143,   932,   137,   137,   687,   143,   127,
         128,   677,   678,   679,   680,   681,   127,   128,   127,   128,
         137,   159,   139,   689,   137,   143,   164,   165,   166,   127,
         128,   137,   143,   139,   143,   127,   128,   137,   176,   127,
         128,   134,   135,     4,   710,   143,   139,   137,   141,   139,
           8,   143,   137,   146,   139,   143,     5,   195,   196,   739,
         740,   741,   118,   119,   120,   121,   122,   123,   124,   125,
         126,   127,   128,   129,   130,   131,   134,   135,   144,   144,
         136,   139,   137,   141,   139,   137,   144,   139,   146,   145,
         137,   137,   139,   139,   144,   137,  1123,   139,   137,   143,
         139,   145,   507,   139,   137,   141,   143,    52,   145,    54,
         515,   516,   137,   779,   780,   123,   124,   125,   126,   127,
         128,   129,   130,   131,   529,   137,     6,   532,   136,   143,
         143,   145,   145,   143,   797,   145,     6,   139,   801,   878,
         143,   141,   145,   809,   143,   143,   145,   145,   143,   143,
         145,   145,   143,   139,   145,   821,   143,   139,   145,   825,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,   143,     4,   145,     6,   136,   143,
         143,   145,   145,   143,   143,   145,   145,   145,   143,    99,
         145,   871,   144,   859,   860,   861,   143,   143,   145,   145,
         144,   867,   868,     6,   143,   871,   145,   143,   143,   145,
         145,   143,   878,   145,   143,   143,   145,   145,   143,   143,
         145,   145,   888,   889,   890,     6,     6,   139,     4,   144,
           5,   897,   895,     6,   136,   141,   902,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,     7,
         655,   917,   139,   136,   144,     7,   145,     7,   938,   144,
           7,   137,   137,   916,     8,   137,   137,     6,     6,   138,
         143,   937,   677,   678,   679,   680,     7,   943,   944,     7,
          96,   144,   948,   143,   689,   138,  1135,   138,   143,     6,
         956,     4,   140,   973,    99,   975,     7,   977,     7,     7,
           7,   967,    99,     7,     7,   710,   986,    99,   988,   989,
           7,     7,     4,     6,   967,   972,   141,   145,   145,     6,
         986,     7,     7,   989,     7,   137,   992,   141,   137,   144,
           6,     4,     6,   140,  1000,   473,   474,     6,  1004,  1005,
        1268,     6,     6,   139,     7,     6,   124,  1000,     7,  1088,
          52,     7,     7,    54,     7,     7,     7,     6,     4,  1025,
           7,   138,     7,     7,  1213,     7,   138,   138,   138,   143,
        1298,     6,  1300,   137,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,   144,  1317,
        1056,     6,   136,     7,   138,     6,   144,     7,     7,  1138,
           6,   539,     6,     6,    52,     6,  1072,     4,  1074,     4,
           4,   137,     4,     6,   552,     6,   138,  1083,   141,  1085,
         144,     7,  1088,     6,   144,    59,  1092,     6,   144,   144,
           6,  1097,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,     6,   144,     6,  1126,   136,  1128,     6,
        1130,     5,     4,     6,   144,     5,     7,  1137,     7,  1139,
        1126,     7,  1128,     7,  1130,   144,  1123,   144,     6,     6,
          95,     6,  1138,   878,     7,  1214,  1142,  1216,     6,   141,
           4,     6,   140,     6,  1150,  1151,     6,     6,     6,     6,
           6,  1157,     6,     6,     6,     5,     7,  1163,     6,     6,
        1166,    99,     6,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,     6,     6,   138,
           6,   136,     6,  1189,     6,   143,  1265,     6,     6,     6,
           4,   144,   144,     6,  1200,     6,  1216,  1203,     6,   141,
        1206,     6,     5,     7,  1210,    50,     6,     6,  1214,     6,
        1216,     6,     6,     6,     6,  1221,   144,   144,  1224,   697,
         698,   145,   700,   144,   702,   703,   144,     6,   706,   707,
         144,     6,    94,     6,     6,     6,    97,     6,     6,     6,
           6,   986,   144,     6,   989,   144,     6,   145,   144,    65,
           6,     6,     6,     6,     6,     6,     6,     6,   145,  1265,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,     6,   144,     6,   144,   136,     6,
           6,     6,     6,     6,     6,   763,   764,   765,     6,   144,
           6,     6,     6,     6,     3,     4,     6,   820,   144,     6,
           9,    10,    11,   144,   144,    14,    15,    16,    17,    18,
          19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
          29,    30,    31,    32,    33,    34,     6,     6,     6,  1074,
           6,     6,   144,  1189,   144,   144,     3,    46,   828,     3,
         352,   920,    -1,  1088,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,   829,    -1,    -1,    -1,    -1,    -1,   835,    -1,    -1,
          69,    70,    71,    72,    73,   843,   844,   845,    -1,    78,
          -1,   849,    81,    -1,    -1,    -1,   854,   855,   856,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   867,
          -1,    -1,    -1,  1138,    -1,   873,    -1,    -1,   876,    -1,
          -1,   110,   111,   112,   113,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,   128,
          -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,   137,    -1,
          -1,    -1,    -1,   142,    -1,   144,   145,   915,   118,   119,
         120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
         130,   131,     6,    -1,    -1,    -1,   136,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1214,
          -1,  1216,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
           4,   959,   960,   961,   962,     9,    10,    11,    -1,    -1,
          14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
          24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
          34,    -1,    -1,    -1,    -1,    -1,    -1,   995,    -1,    -1,
        1265,    -1,    46,    -1,    -1,    -1,    -1,    -1,  1006,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    69,    70,    71,    72,    73,
          -1,    -1,    -1,    -1,    78,    -1,     6,    81,    -1,    -1,
          -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,    -1,    -1,   110,   111,   112,   113,
          -1,  1069,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,   127,   128,    -1,    -1,    -1,   132,    -1,
          -1,    -1,    -1,   137,    -1,    -1,    -1,    -1,   142,    -1,
          -1,   145,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
           9,    10,    11,    -1,    -1,    14,    15,    16,    17,    18,
          19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
          29,    30,    31,    32,    33,    34,  1134,    36,    37,    38,
          39,    -1,    -1,    42,    -1,    -1,    12,    13,   118,   119,
         120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
         130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1177,
          46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
          -1,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
          -1,    67,    68,    -1,    -1,   104,    -1,    -1,    -1,    -1,
          -1,   110,   111,   112,   113,   114,   115,   116,   117,    -1,
          -1,    -1,    -1,    -1,    -1,    91,    92,    93,   127,   128,
          -1,    -1,    -1,   132,    -1,   134,   135,    -1,   137,    -1,
         139,    -1,   141,   142,    -1,   144,     3,     4,     5,    -1,
          -1,    -1,     9,    10,    11,    -1,    -1,    14,    15,    16,
          17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
          27,    28,    29,    30,    31,    32,    33,    34,    -1,   145,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
          -1,    -1,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    69,    70,    71,    72,    73,    -1,    -1,    -1,
          -1,    78,    -1,    -1,    81,    -1,    -1,    46,    47,    48,
          49,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
          59,    60,    -1,    62,    63,    64,    -1,    -1,    67,    68,
          -1,    -1,    -1,   110,   111,   112,   113,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
         127,   128,    91,    92,    93,   132,    -1,    -1,    -1,    -1,
         137,    -1,     3,     4,     5,   142,    -1,   144,     9,    10,
          11,    -1,    -1,    14,    15,    16,    17,    18,    19,    20,
          21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
          31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    46,   145,    -1,    -1,    12,
          13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,
          71,    72,    73,    -1,    -1,    -1,    -1,    78,    -1,    -1,
          81,    -1,    -1,    46,    47,    48,    49,    50,    51,    52,
          53,    54,    55,    -1,    57,    -1,    59,    60,    -1,    62,
          63,    64,    -1,    -1,    67,    68,    -1,    -1,    -1,   110,
         111,   112,   113,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,   127,   128,    91,    92,
          93,   132,    -1,    -1,    -1,    -1,   137,    -1,     3,     4,
          -1,   142,    -1,   144,     9,    10,    11,    -1,    -1,    14,
          15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
          25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    46,   145,    -1,    -1,    12,    13,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    69,    70,    71,    72,    73,    -1,
          -1,    -1,    -1,    78,    -1,    -1,    81,    -1,    -1,    46,
          47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
          57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    -1,
          67,    68,    -1,    -1,    -1,   110,   111,   112,   113,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,   127,   128,    91,    92,    93,   132,    -1,    -1,
          -1,    -1,   137,    -1,     3,     4,    -1,   142,    -1,   144,
           9,    10,    11,    -1,    -1,    14,    15,    16,    17,    18,
          19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
          29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,   145,    -1,
          -1,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          69,    70,    71,    72,    73,    -1,    -1,    -1,    -1,    78,
          -1,    -1,    81,    -1,    -1,    46,    47,    48,    49,    50,
          51,    52,    53,    54,    55,    -1,    57,    -1,    59,    60,
          -1,    62,    63,    64,    -1,    -1,    67,    68,    -1,    -1,
          -1,   110,   111,   112,   113,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,   128,
          91,    92,    93,   132,    -1,    -1,    -1,    -1,   137,    -1,
           3,     4,    -1,   142,    -1,   144,     9,    10,    11,    -1,
          -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
          23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
          33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    46,   145,    -1,    -1,    12,    13,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,    72,
          73,    -1,    -1,    -1,    -1,    78,    -1,    -1,    81,    -1,
          -1,    46,    47,    48,    49,    50,    51,    52,    53,    54,
          55,    -1,    57,    -1,    59,    60,    -1,    62,    63,    64,
          -1,    -1,    67,    68,    -1,    -1,    -1,   110,   111,   112,
         113,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,   127,   128,    91,    92,    93,   132,
          -1,    -1,    -1,    -1,   137,    -1,     3,     4,    -1,   142,
          -1,   144,     9,    10,    11,    -1,    -1,    14,    15,    16,
          17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
          27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
         145,    -1,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    69,    70,    71,    72,    73,     6,    -1,    -1,
          -1,    78,    -1,    -1,    81,    -1,    -1,    46,    47,    48,
          49,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
          59,    60,    -1,    62,    63,    64,    -1,    -1,    67,    68,
          -1,    -1,    -1,   110,   111,   112,   113,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
         127,   128,    91,    92,    93,   132,    -1,    -1,    -1,    -1,
         137,    -1,     3,     4,    -1,   142,    -1,   144,     9,    10,
          11,    -1,    -1,    14,    15,    16,    17,    18,    19,    20,
          21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
          31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    46,   145,    -1,    -1,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    69,    70,
          71,    72,    73,    -1,    -1,     3,     4,    78,    -1,    -1,
          81,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
          18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
          28,    29,    30,    31,    32,    33,    34,     6,    -1,   110,
         111,   112,   113,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,   127,   128,    -1,    -1,
          -1,   132,    -1,    -1,    -1,    -1,   137,    -1,     3,     4,
           5,   142,    -1,   144,     9,    10,    11,    -1,    -1,    14,
          15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
          25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
          -1,    36,    37,    38,    39,    -1,    -1,    42,    -1,    -1,
          -1,    -1,   110,   111,   112,   113,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,
         128,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,   137,
          -1,    -1,   140,    -1,   142,    -1,   144,    -1,    -1,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,     6,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,    -1,
          -1,    -1,    -1,    -1,    -1,     6,    -1,    -1,    -1,    -1,
          -1,    -1,   127,   128,    -1,    -1,    -1,   132,    -1,    -1,
          -1,    -1,   137,    -1,     3,     4,    -1,   142,    -1,   144,
           9,    10,    11,    -1,    -1,    14,    15,    16,    17,    18,
          19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
          29,    30,    31,    32,    33,    34,    -1,    -1,    -1,     3,
           4,    -1,    -1,    -1,    -1,     9,    10,    11,    -1,    -1,
          14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
          24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
          34,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,   110,   111,   112,   113,   136,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,   128,
          -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,   137,    -1,
          -1,   140,    -1,   142,    -1,   144,   110,   111,   112,   113,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,   127,   128,    -1,    65,    -1,   132,    -1,
          -1,    -1,    -1,   137,    -1,     3,     4,    -1,   142,    -1,
         144,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
          18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
          28,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    69,    70,    71,    72,    73,    -1,    -1,     3,     4,
          78,    -1,    -1,    81,     9,    10,    11,    -1,    -1,    14,
          15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
          25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
           6,    -1,   110,   111,   112,   113,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,
         128,    -1,    -1,    -1,   132,     3,     4,     5,    -1,   137,
          -1,     9,    10,    11,   142,    -1,    14,    15,    16,    17,
          18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
          28,    29,    30,    31,    32,    33,    34,     6,    36,    37,
          38,    39,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,     6,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,   127,   128,    -1,    -1,    -1,   132,     6,    -1,
          -1,    -1,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,
          -1,    -1,   118,   119,   120,   121,   122,   123,   124,   125,
         126,   127,   128,   129,   130,   131,     8,    -1,    -1,    -1,
         136,    -1,   110,   111,   112,   113,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,     8,    -1,    -1,    -1,   127,
         128,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,   137,
          -1,    -1,    -1,    -1,   142,     8,    -1,    -1,    -1,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,     8,    -1,    -1,   136,    -1,    -1,
          -1,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,     8,    -1,    -1,    -1,   136,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,     8,    -1,    -1,    -1,   136,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
         122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
          -1,    -1,    -1,    -1,   136,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,    -1,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,     0,
           1,    -1,   136,     4,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    12,    13,    -1,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,    35,    -1,    -1,    -1,    -1,    40,
          41,   145,    43,    44,    -1,    46,    47,    48,    49,    50,
          51,    52,    53,    54,    55,    -1,    57,    58,    59,    60,
          61,    62,    63,    64,    -1,    66,    67,    68,    69,    70,
          71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
          81,    -1,    -1,    84,    85,     4,    -1,    -1,    -1,    90,
          91,    92,    93,    12,    13,    96,    -1,    98,    -1,   100,
         101,   102,   103,   104,   105,   106,   107,   108,   109,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,    35,    -1,    -1,    -1,
          -1,    40,    41,    -1,    43,    44,    -1,    46,    47,    48,
          49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
          59,    60,    61,    62,    63,    64,    -1,    66,    67,    68,
          69,    70,    71,    72,    73,    74,    -1,    76,    77,    78,
          79,    80,    81,    -1,    -1,    84,    85,    -1,    -1,    -1,
          -1,    90,    91,    92,    93,    -1,    -1,    96,    -1,    98,
          -1,   100,   101,   102,   103,   104,   105,   106,   107,   108,
         109,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,   143,    -1,   145,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,   143,    -1,   145,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,
          -1,    -1,   143,    -1,   145,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,   145,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
         145,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,   145,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,   145,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,   145,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
         145,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,   145,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,   145,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,   145,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
         145,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,   145,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,   145,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,   145,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
         145,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,    -1,    -1,   145,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,
          -1,    -1,    -1,    -1,   145,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
          -1,    -1,   145,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
         145,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,
          -1,    -1,    -1,    -1,   143,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
         143,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,   143,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,
          -1,    -1,   143,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,   143,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,   143,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
         143,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,   143,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,
          -1,    -1,   143,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,   143,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,   143,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
         143,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,   143,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,
          -1,    -1,   143,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,   143,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,   143,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
         143,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,   143,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,
          -1,    -1,   143,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,   143,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,   143,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
         143,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,   143,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,
          -1,    -1,   143,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,   143,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,    -1,    -1,    -1,   143,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
         143,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,    -1,    -1,    -1,   143,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,   140,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,
          -1,    -1,   140,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,   140,   118,   119,   120,   121,
         122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
          -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,   140,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,   140,   118,   119,   120,   121,   122,   123,   124,   125,
         126,   127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,
         136,    -1,    -1,    -1,   140,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,   140,   118,   119,
         120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
         130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,
         140,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,   140,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,    -1,    -1,   140,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,   140,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,
          -1,    -1,   140,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,   140,   118,   119,   120,   121,
         122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
          -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,   140,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,   140,   118,   119,   120,   121,   122,   123,   124,   125,
         126,   127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,
         136,    -1,    -1,    -1,   140,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,   140,   118,   119,
         120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
         130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,
         140,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,   140,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,    -1,    -1,   140,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,   140,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,
          -1,    -1,   140,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,    -1,    -1,   140,   118,   119,   120,   121,
         122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
          -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,   140,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,
          -1,   140,   118,   119,   120,   121,   122,   123,   124,   125,
         126,   127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,
         136,    -1,    -1,    -1,   140,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,    -1,    -1,   140,   118,   119,
         120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
         130,   131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,
         140,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,    -1,    -1,   140,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,    -1,    -1,   140,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,   140,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,
          -1,    -1,   140,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,   138,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,   138,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,   121,
         122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
          -1,    -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,   138,   118,   119,
         120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
         130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,
         138,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,   138,   118,   119,   120,   121,   122,   123,   124,   125,
         126,   127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,
         136,    -1,   138,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,   138,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,   138,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,   121,
         122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
          -1,    -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,   138,   118,   119,
         120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
         130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,
         138,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,   138,   118,   119,   120,   121,   122,   123,   124,   125,
         126,   127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,
         136,    -1,   138,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,   138,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,   138,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,   121,
         122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
          -1,    -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,   138,   118,   119,
         120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
         130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,
         138,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,   138,   118,   119,   120,   121,   122,   123,   124,   125,
         126,   127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,
         136,    -1,   138,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,   138,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,   138,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,   121,
         122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
          -1,    -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,   138,   118,   119,
         120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
         130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,
         138,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,   138,   118,   119,   120,   121,   122,   123,   124,   125,
         126,   127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,
         136,    -1,   138,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,   138,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,   138,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,   121,
         122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
          -1,    -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,
         121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
         131,    -1,    -1,    -1,    -1,   136,    -1,   138,   118,   119,
         120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
         130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,   138,
         118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
         128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,    -1,
         138,   118,   119,   120,   121,   122,   123,   124,   125,   126,
         127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,   136,
          -1,   138,   118,   119,   120,   121,   122,   123,   124,   125,
         126,   127,   128,   129,   130,   131,    -1,    -1,    -1,    -1,
         136,    -1,   138,   118,   119,   120,   121,   122,   123,   124,
         125,   126,   127,   128,   129,   130,   131,    -1,    -1,    -1,
          -1,   136,    -1,   138,   118,   119,   120,   121,   122,   123,
         124,   125,   126,   127,   128,   129,   130,   131,    -1,    -1,
          -1,    -1,   136,    -1,   138,   118,   119,   120,   121,   122,
         123,   124,   125,   126,   127,   128,   129,   130,   131,    -1,
          -1,    -1,    -1,   136,    -1,   138,   118,   119,   120,   121,
         122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
          -1,    -1,    -1,    -1,   136
    };
    
    /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
       symbol of state STATE-NUM.  */
    static const yytype_uint8 yystos[] =
    {
           0,     1,   148,   149,     6,     0,     4,    12,    13,    35,
          40,    41,    43,    44,    46,    47,    48,    49,    50,    51,
          52,    53,    54,    55,    57,    58,    59,    60,    61,    62,
          63,    64,    66,    67,    68,    69,    70,    71,    72,    73,
          74,    76,    77,    78,    79,    80,    81,    84,    85,    90,
          91,    92,    93,    96,    98,   100,   101,   102,   103,   104,
         105,   106,   107,   108,   109,   150,   152,   153,   171,   175,
         180,   183,   184,   185,   186,   187,   188,   189,   209,   210,
         211,     3,     4,     5,     7,     9,    10,    11,    14,    15,
          16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
          26,    27,    28,    29,    30,    31,    32,    33,    34,    36,
          37,    38,    39,    42,   104,   110,   111,   112,   113,   114,
         115,   116,   117,   127,   128,   132,   134,   135,   137,   139,
         141,   142,   144,   169,   170,   212,   213,   225,    13,    52,
         137,     6,   144,     6,     6,     6,   137,   144,   137,   137,
          75,   137,   144,   137,   137,    75,   144,   137,   137,    56,
          52,    52,    52,    52,    49,    52,    54,    54,    46,    49,
          52,    54,    49,    52,    54,   137,    49,   137,   144,   127,
         128,   137,   144,   214,   215,   214,   144,    46,    49,    52,
         144,   214,     4,    50,    59,    52,    52,    49,     4,   104,
         144,     4,     6,    49,     4,     4,     4,   137,   137,   137,
           4,   144,   221,     4,   137,   137,     6,   139,     4,     4,
           5,   144,     5,   144,     4,   139,   141,   146,   170,   144,
           5,   225,   137,   139,   137,   139,   137,   139,   137,   139,
         137,   139,   137,   139,   137,   139,   137,   139,   137,   139,
         137,   139,   137,   139,   137,   139,   137,   139,   137,   139,
         137,   139,   137,   139,   137,   139,   137,   139,   137,   139,
         137,   139,   137,   139,   137,   137,   137,   137,     7,   137,
           4,   212,   212,   212,   212,   140,   144,   212,     4,    96,
          97,     4,     4,   180,   181,   182,   212,     6,     6,   118,
         119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
         129,   130,   131,   136,     6,     6,   212,     5,   212,   212,
           4,    46,   128,   180,   189,   212,   219,   220,   212,   212,
         137,   212,   220,   212,   212,   137,   220,   212,   212,   128,
         144,   212,   217,   219,   137,   144,   137,   137,     5,   217,
         218,   218,   218,   137,   176,   177,   178,   179,   137,   137,
         137,     4,   217,     5,   214,   214,   214,   212,   212,   127,
         128,   144,   144,   214,   144,   144,   144,   127,   128,   137,
         182,   214,   144,   137,   144,   137,   137,   218,   217,   137,
           4,     6,   139,   139,   182,     6,   144,   139,   139,     6,
         212,   212,   212,   141,   212,   144,    99,   212,   212,   212,
           6,     6,   182,     6,   182,   139,   212,     4,   144,   154,
           6,   212,   212,   212,   212,   212,   212,   212,   212,   212,
         212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
         212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
         212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
         212,   212,   212,     4,   224,   225,   224,   224,   224,   212,
           5,   139,   138,     7,   117,   220,   140,     7,   169,   170,
         141,     7,   139,   145,    46,    49,    52,    54,   175,     6,
         212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
         212,   212,   212,   212,   212,     6,   138,   143,   143,   138,
         139,   144,   212,   219,     8,   129,   143,   145,   138,   138,
         212,   138,   145,   138,   138,   212,   145,   138,   138,   144,
         145,   220,   129,     7,   212,   212,   212,   212,     7,     7,
         207,   207,   212,   137,   137,   137,   137,   212,   212,   212,
         138,     6,   143,   143,   143,   143,   214,   214,   181,   181,
         143,   212,   212,   212,   212,   193,   143,   182,   212,   212,
         212,   212,     7,   208,     7,   212,     6,   212,   212,   145,
         220,   212,   212,   138,   138,   138,    96,   143,   182,   144,
           8,   138,   140,   145,   145,   212,   140,   170,   212,     4,
          86,    87,    88,    89,   145,   157,   161,   164,   166,   167,
         138,   140,   138,   140,   138,   140,   138,   140,   138,   140,
         138,   140,   138,   140,   138,   140,   138,   140,   138,   140,
         138,   140,   143,   143,   138,   140,   138,   140,   138,   140,
         138,   140,   138,   140,   138,   140,   143,   143,   143,   143,
         143,   143,   139,   141,   138,   143,   143,   138,   138,     6,
         143,   212,   217,   217,   145,     7,   141,   169,   170,   225,
         212,     6,     4,     4,   144,   222,   140,   144,   144,   144,
         144,     8,     6,   124,   151,   220,   212,     7,   140,   144,
         212,   212,   212,   219,   212,   219,    99,     7,     7,   138,
           7,    99,     7,     7,   138,    99,     7,     7,   220,   145,
         144,   212,   138,   145,   138,   138,   212,   217,     4,   206,
           6,   138,   172,   212,   225,   172,   172,   172,   138,   138,
         138,   141,   217,   214,   212,   212,   145,   145,   212,   143,
         143,   143,    76,    82,    83,   203,   204,   214,   145,   190,
         138,   145,   138,   138,   212,     6,   212,   138,   140,   140,
         145,   140,   140,     7,     7,     7,   141,   212,   145,   212,
         212,     7,   141,   140,   141,   170,   224,   145,   158,   137,
         137,   144,   168,     6,   212,   212,   212,   212,   212,   212,
         212,   212,   212,     4,   220,   224,   212,   140,     6,     6,
         140,     4,    96,    97,   212,     6,     6,     6,     7,   139,
         221,   223,     6,   220,   220,   220,   220,   212,   124,   224,
         138,   143,   214,   220,   145,     8,    52,   217,   217,     7,
         217,    52,    54,   217,   217,     7,    54,   217,   217,   145,
         220,     6,     7,     7,     7,     7,    65,   205,     6,     7,
         138,   138,   138,   138,     7,     7,     7,     4,   143,   143,
         143,   143,   145,   214,   214,   214,     6,   144,   137,   145,
         204,   143,   203,     7,     6,     7,     7,     6,   144,     6,
           6,    52,     6,     6,   217,   217,   217,     4,   143,     8,
           8,   138,     4,     4,     6,     4,     6,   137,   212,   212,
         216,   217,   144,   138,   140,   138,   140,   138,   140,   138,
         140,   140,   138,   138,   138,   169,     7,   169,   170,   141,
           7,     6,   221,   212,   143,   145,   145,   145,   145,   145,
           6,     6,   151,   212,     6,   145,   212,   144,    59,   174,
         174,   217,     6,   144,   144,     6,     6,   217,   144,     6,
           6,   145,     5,   217,   217,   217,     4,     6,   217,     7,
           7,     7,     7,   217,   217,   217,     6,     7,     5,   212,
         212,   212,   144,   143,   145,   143,   145,   143,   145,   212,
         217,   212,   212,   214,   145,     5,   144,   217,   144,   144,
         217,   220,   144,     6,     6,    95,   212,   212,   212,     6,
           7,   170,   155,   212,   143,   143,   143,   145,   156,   212,
         141,   217,   225,   212,     6,     4,   222,     6,   140,   221,
           6,     6,     6,     6,   224,   143,   140,   212,   214,     6,
           6,     6,   212,   212,     6,   212,     5,     6,     6,    99,
         173,   212,     6,   217,   217,   217,   217,     6,     4,     6,
           6,   212,   225,   138,   145,   138,   143,   145,   181,   214,
           6,   194,   214,     6,   195,   214,     6,   196,   145,   143,
         138,   145,   143,     6,   128,   214,     6,   214,   214,     6,
         145,   212,   217,   143,   145,     8,   145,   138,   144,   212,
         225,   138,   143,   212,   212,   217,   144,   143,   145,     4,
           6,     6,     6,     7,     6,   141,     6,   212,   145,   145,
         145,   145,     5,    50,     6,     6,     6,     6,     6,   144,
           6,     6,     6,   144,   212,   145,   143,   144,   143,   144,
         143,   144,     6,   217,     7,   144,   212,   143,   143,   143,
           6,   145,    94,   212,   212,   220,     6,     6,   159,   212,
         143,   143,   216,   212,     6,   221,    97,   143,     6,     6,
           6,     6,     6,   144,   216,   181,   143,   145,   212,   214,
         203,   212,   214,   203,   212,   214,   203,   143,   145,   217,
         182,   145,   214,   220,   214,   212,   145,   145,   145,   144,
         212,   212,   145,     6,   212,   212,   145,   145,   212,   145,
         143,   145,   145,   143,   145,   145,   143,   145,   217,     6,
          65,   145,   191,   144,   143,   145,   143,     6,     6,   156,
         138,   143,     6,   144,   143,   145,     6,   145,     6,   197,
         212,     6,     6,   198,   212,     6,     6,   199,   212,     6,
         145,   212,   203,   182,   220,     6,   214,   220,   145,   162,
         212,   216,   212,   144,   145,   144,   145,   144,   145,     6,
           6,   145,   145,   192,   145,   143,   145,     6,   144,   138,
         145,   145,   203,     6,   200,   203,     6,   201,   203,     6,
         202,   203,     6,   220,     6,   160,   224,   165,   144,     6,
         145,   144,   145,   144,   145,   144,   145,   145,   143,   145,
         144,   216,     6,   203,     6,   203,     6,   203,     6,   224,
           6,   163,   224,   145,   145,   145,   145,   143,   145,     6,
           6,     6,     6,   224,     6
    };
    
    #define yyerrok		(yyerrstatus = 0)
    #define yyclearin	(yychar = YYEMPTY)
    #define YYEMPTY		(-2)
    #define YYEOF		0
    
    #define YYACCEPT	goto yyacceptlab
    #define YYABORT		goto yyabortlab
    #define YYERROR		goto yyerrorlab
    
    
    /* Like YYERROR except do call yyerror.  This remains here temporarily
       to ease the transition to the new meaning of YYERROR, for GCC.
       Once GCC version 2 has supplanted version 1, this can go.  */
    
    #define YYFAIL		goto yyerrlab
    
    #define YYRECOVERING()  (!!yyerrstatus)
    
    #define YYBACKUP(Token, Value)					\
    do								\
      if (yychar == YYEMPTY && yylen == 1)				\
        {								\
          yychar = (Token);						\
          yylval = (Value);						\
          yytoken = YYTRANSLATE (yychar);				\
          YYPOPSTACK (1);						\
          goto yybackup;						\
        }								\
      else								\
        {								\
          yyerror (YY_("syntax error: cannot back up")); \
          YYERROR;							\
        }								\
    while (YYID (0))
    
    
    #define YYTERROR	1
    #define YYERRCODE	256
    
    
    /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
       If N is 0, then set CURRENT to the empty location which ends
       the previous symbol: RHS[0] (always defined).  */
    
    #define YYRHSLOC(Rhs, K) ((Rhs)[K])
    #ifndef YYLLOC_DEFAULT
    # define YYLLOC_DEFAULT(Current, Rhs, N)				\
        do									\
          if (YYID (N))                                                    \
    	{								\
    	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
    	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
    	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
    	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
    	}								\
          else								\
    	{								\
    	  (Current).first_line   = (Current).last_line   =		\
    	    YYRHSLOC (Rhs, 0).last_line;				\
    	  (Current).first_column = (Current).last_column =		\
    	    YYRHSLOC (Rhs, 0).last_column;				\
    	}								\
        while (YYID (0))
    #endif
    
    
    /* YY_LOCATION_PRINT -- Print the location on the stream.
       This macro was not mandated originally: define only if we know
       we won't break user code: when these are the locations we know.  */
    
    #ifndef YY_LOCATION_PRINT
    # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
    #  define YY_LOCATION_PRINT(File, Loc)			\
         fprintf (File, "%d.%d-%d.%d",			\
    	      (Loc).first_line, (Loc).first_column,	\
    	      (Loc).last_line,  (Loc).last_column)
    # else
    #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
    # endif
    #endif
    
    
    /* YYLEX -- calling `yylex' with the right arguments.  */
    
    #ifdef YYLEX_PARAM
    # define YYLEX yylex (YYLEX_PARAM)
    #else
    # define YYLEX yylex ()
    #endif
    
    /* Enable debugging if requested.  */
    #if YYDEBUG
    
    # ifndef YYFPRINTF
    #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
    #  define YYFPRINTF fprintf
    # endif
    
    # define YYDPRINTF(Args)			\
    do {						\
      if (yydebug)					\
        YYFPRINTF Args;				\
    } while (YYID (0))
    
    # define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
    do {									  \
      if (yydebug)								  \
        {									  \
          YYFPRINTF (stderr, "%s ", Title);					  \
          yy_symbol_print (stderr,						  \
    		  Type, Value); \
          YYFPRINTF (stderr, "\n");						  \
        }									  \
    } while (YYID (0))
    
    
    /*--------------------------------.
    | Print this symbol on YYOUTPUT.  |
    `--------------------------------*/
    
    /*ARGSUSED*/
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static void
    yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
    #else
    static void
    yy_symbol_value_print (yyoutput, yytype, yyvaluep)
        FILE *yyoutput;
        int yytype;
        YYSTYPE const * const yyvaluep;
    #endif
    {
      if (!yyvaluep)
        return;
    # ifdef YYPRINT
      if (yytype < YYNTOKENS)
        YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
    # else
      YYUSE (yyoutput);
    # endif
      switch (yytype)
        {
          default:
    	break;
        }
    }
    
    
    /*--------------------------------.
    | Print this symbol on YYOUTPUT.  |
    `--------------------------------*/
    
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static void
    yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
    #else
    static void
    yy_symbol_print (yyoutput, yytype, yyvaluep)
        FILE *yyoutput;
        int yytype;
        YYSTYPE const * const yyvaluep;
    #endif
    {
      if (yytype < YYNTOKENS)
        YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
      else
        YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
    
      yy_symbol_value_print (yyoutput, yytype, yyvaluep);
      YYFPRINTF (yyoutput, ")");
    }
    
    /*------------------------------------------------------------------.
    | yy_stack_print -- Print the state stack from its BOTTOM up to its |
    | TOP (included).                                                   |
    `------------------------------------------------------------------*/
    
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static void
    yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
    #else
    static void
    yy_stack_print (bottom, top)
        yytype_int16 *bottom;
        yytype_int16 *top;
    #endif
    {
      YYFPRINTF (stderr, "Stack now");
      for (; bottom <= top; ++bottom)
        YYFPRINTF (stderr, " %d", *bottom);
      YYFPRINTF (stderr, "\n");
    }
    
    # define YY_STACK_PRINT(Bottom, Top)				\
    do {								\
      if (yydebug)							\
        yy_stack_print ((Bottom), (Top));				\
    } while (YYID (0))
    
    
    /*------------------------------------------------.
    | Report that the YYRULE is going to be reduced.  |
    `------------------------------------------------*/
    
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static void
    yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
    #else
    static void
    yy_reduce_print (yyvsp, yyrule)
        YYSTYPE *yyvsp;
        int yyrule;
    #endif
    {
      int yynrhs = yyr2[yyrule];
      int yyi;
      unsigned long int yylno = yyrline[yyrule];
      YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
    	     yyrule - 1, yylno);
      /* The symbols being reduced.  */
      for (yyi = 0; yyi < yynrhs; yyi++)
        {
          fprintf (stderr, "   $%d = ", yyi + 1);
          yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
    		       &(yyvsp[(yyi + 1) - (yynrhs)])
    		       		       );
          fprintf (stderr, "\n");
        }
    }
    
    # define YY_REDUCE_PRINT(Rule)		\
    do {					\
      if (yydebug)				\
        yy_reduce_print (yyvsp, Rule); \
    } while (YYID (0))
    
    /* Nonzero means print parse trace.  It is left uninitialized so that
       multiple parsers can coexist.  */
    int yydebug;
    #else /* !YYDEBUG */
    # define YYDPRINTF(Args)
    # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
    # define YY_STACK_PRINT(Bottom, Top)
    # define YY_REDUCE_PRINT(Rule)
    #endif /* !YYDEBUG */
    
    
    /* YYINITDEPTH -- initial size of the parser's stacks.  */
    #ifndef	YYINITDEPTH
    # define YYINITDEPTH 200
    #endif
    
    /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
       if the built-in stack extension method is used).
    
       Do not make this value too large; the results are undefined if
       YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
       evaluated with infinite-precision integer arithmetic.  */
    
    #ifndef YYMAXDEPTH
    # define YYMAXDEPTH 10000
    #endif
    
    
    
    #if YYERROR_VERBOSE
    
    # ifndef yystrlen
    #  if defined __GLIBC__ && defined _STRING_H
    #   define yystrlen strlen
    #  else
    /* Return the length of YYSTR.  */
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static YYSIZE_T
    yystrlen (const char *yystr)
    #else
    static YYSIZE_T
    yystrlen (yystr)
        const char *yystr;
    #endif
    {
      YYSIZE_T yylen;
      for (yylen = 0; yystr[yylen]; yylen++)
        continue;
      return yylen;
    }
    #  endif
    # endif
    
    # ifndef yystpcpy
    #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
    #   define yystpcpy stpcpy
    #  else
    /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
       YYDEST.  */
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static char *
    yystpcpy (char *yydest, const char *yysrc)
    #else
    static char *
    yystpcpy (yydest, yysrc)
        char *yydest;
        const char *yysrc;
    #endif
    {
      char *yyd = yydest;
      const char *yys = yysrc;
    
      while ((*yyd++ = *yys++) != '\0')
        continue;
    
      return yyd - 1;
    }
    #  endif
    # endif
    
    # ifndef yytnamerr
    /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
       quotes and backslashes, so that it's suitable for yyerror.  The
       heuristic is that double-quoting is unnecessary unless the string
       contains an apostrophe, a comma, or backslash (other than
       backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
       null, do not copy; instead, return the length of what the result
       would have been.  */
    static YYSIZE_T
    yytnamerr (char *yyres, const char *yystr)
    {
      if (*yystr == '"')
        {
          YYSIZE_T yyn = 0;
          char const *yyp = yystr;
    
          for (;;)
    	switch (*++yyp)
    	  {
    	  case '\'':
    	  case ',':
    	    goto do_not_strip_quotes;
    
    	  case '\\':
    	    if (*++yyp != '\\')
    	      goto do_not_strip_quotes;
    	    /* Fall through.  */
    	  default:
    	    if (yyres)
    	      yyres[yyn] = *yyp;
    	    yyn++;
    	    break;
    
    	  case '"':
    	    if (yyres)
    	      yyres[yyn] = '\0';
    	    return yyn;
    	  }
        do_not_strip_quotes: ;
        }
    
      if (! yyres)
        return yystrlen (yystr);
    
      return yystpcpy (yyres, yystr) - yyres;
    }
    # endif
    
    /* Copy into YYRESULT an error message about the unexpected token
       YYCHAR while in state YYSTATE.  Return the number of bytes copied,
       including the terminating null byte.  If YYRESULT is null, do not
       copy anything; just return the number of bytes that would be
       copied.  As a special case, return 0 if an ordinary "syntax error"
       message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
       size calculation.  */
    static YYSIZE_T
    yysyntax_error (char *yyresult, int yystate, int yychar)
    {
      int yyn = yypact[yystate];
    
      if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
        return 0;
      else
        {
          int yytype = YYTRANSLATE (yychar);
          YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
          YYSIZE_T yysize = yysize0;
          YYSIZE_T yysize1;
          int yysize_overflow = 0;
          enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
          char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
          int yyx;
    
    # if 0
          /* This is so xgettext sees the translatable formats that are
    	 constructed on the fly.  */
          YY_("syntax error, unexpected %s");
          YY_("syntax error, unexpected %s, expecting %s");
          YY_("syntax error, unexpected %s, expecting %s or %s");
          YY_("syntax error, unexpected %s, expecting %s or %s or %s");
          YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
    # endif
          char *yyfmt;
          char const *yyf;
          static char const yyunexpected[] = "syntax error, unexpected %s";
          static char const yyexpecting[] = ", expecting %s";
          static char const yyor[] = " or %s";
          char yyformat[sizeof yyunexpected
    		    + sizeof yyexpecting - 1
    		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
    		       * (sizeof yyor - 1))];
          char const *yyprefix = yyexpecting;
    
          /* Start YYX at -YYN if negative to avoid negative indexes in
    	 YYCHECK.  */
          int yyxbegin = yyn < 0 ? -yyn : 0;
    
          /* Stay within bounds of both yycheck and yytname.  */
          int yychecklim = YYLAST - yyn + 1;
          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
          int yycount = 1;
    
          yyarg[0] = yytname[yytype];
          yyfmt = yystpcpy (yyformat, yyunexpected);
    
          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
    	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
    	  {
    	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
    	      {
    		yycount = 1;
    		yysize = yysize0;
    		yyformat[sizeof yyunexpected - 1] = '\0';
    		break;
    	      }
    	    yyarg[yycount++] = yytname[yyx];
    	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
    	    yysize_overflow |= (yysize1 < yysize);
    	    yysize = yysize1;
    	    yyfmt = yystpcpy (yyfmt, yyprefix);
    	    yyprefix = yyor;
    	  }
    
          yyf = YY_(yyformat);
          yysize1 = yysize + yystrlen (yyf);
          yysize_overflow |= (yysize1 < yysize);
          yysize = yysize1;
    
          if (yysize_overflow)
    	return YYSIZE_MAXIMUM;
    
          if (yyresult)
    	{
    	  /* Avoid sprintf, as that infringes on the user's name space.
    	     Don't have undefined behavior even if the translation
    	     produced a string with the wrong number of "%s"s.  */
    	  char *yyp = yyresult;
    	  int yyi = 0;
    	  while ((*yyp = *yyf) != '\0')
    	    {
    	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
    		{
    		  yyp += yytnamerr (yyp, yyarg[yyi++]);
    		  yyf += 2;
    		}
    	      else
    		{
    		  yyp++;
    		  yyf++;
    		}
    	    }
    	}
          return yysize;
        }
    }
    #endif /* YYERROR_VERBOSE */
    
    
    /*-----------------------------------------------.
    | Release the memory associated to this symbol.  |
    `-----------------------------------------------*/
    
    /*ARGSUSED*/
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    static void
    yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
    #else
    static void
    yydestruct (yymsg, yytype, yyvaluep)
        const char *yymsg;
        int yytype;
        YYSTYPE *yyvaluep;
    #endif
    {
      YYUSE (yyvaluep);
    
      if (!yymsg)
        yymsg = "Deleting";
      YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
    
      switch (yytype)
        {
    
          default:
    	break;
        }
    }
    
    
    /* Prevent warnings from -Wmissing-prototypes.  */
    
    #ifdef YYPARSE_PARAM
    #if defined __STDC__ || defined __cplusplus
    int yyparse (void *YYPARSE_PARAM);
    #else
    int yyparse ();
    #endif
    #else /* ! YYPARSE_PARAM */
    #if defined __STDC__ || defined __cplusplus
    int yyparse (void);
    #else
    int yyparse ();
    #endif
    #endif /* ! YYPARSE_PARAM */
    
    
    
    /* The look-ahead symbol.  */
    int yychar;
    
    /* The semantic value of the look-ahead symbol.  */
    YYSTYPE yylval;
    
    /* Number of syntax errors so far.  */
    int yynerrs;
    
    
    
    /*----------.
    | yyparse.  |
    `----------*/
    
    #ifdef YYPARSE_PARAM
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    int
    yyparse (void *YYPARSE_PARAM)
    #else
    int
    yyparse (YYPARSE_PARAM)
        void *YYPARSE_PARAM;
    #endif
    #else /* ! YYPARSE_PARAM */
    #if (defined __STDC__ || defined __C99__FUNC__ \
         || defined __cplusplus || defined _MSC_VER)
    int
    yyparse (void)
    #else
    int
    yyparse ()
    
    #endif
    #endif
    {
      
      int yystate;
      int yyn;
      int yyresult;
      /* Number of tokens to shift before error messages enabled.  */
      int yyerrstatus;
      /* Look-ahead token as an internal (translated) token number.  */
      int yytoken = 0;
    #if YYERROR_VERBOSE
      /* Buffer for error messages, and its allocated size.  */
      char yymsgbuf[128];
      char *yymsg = yymsgbuf;
      YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
    #endif
    
      /* Three stacks and their tools:
         `yyss': related to states,
         `yyvs': related to semantic values,
         `yyls': related to locations.
    
         Refer to the stacks thru separate pointers, to allow yyoverflow
         to reallocate them elsewhere.  */
    
      /* The state stack.  */
      yytype_int16 yyssa[YYINITDEPTH];
      yytype_int16 *yyss = yyssa;
      yytype_int16 *yyssp;
    
      /* The semantic value stack.  */
      YYSTYPE yyvsa[YYINITDEPTH];
      YYSTYPE *yyvs = yyvsa;
      YYSTYPE *yyvsp;
    
    
    
    #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
    
      YYSIZE_T yystacksize = YYINITDEPTH;
    
      /* The variables used to return semantic value and location from the
         action routines.  */
      YYSTYPE yyval;
    
    
      /* The number of symbols on the RHS of the reduced rule.
         Keep to zero when no symbol should be popped.  */
      int yylen = 0;
    
      YYDPRINTF ((stderr, "Starting parse\n"));
    
      yystate = 0;
      yyerrstatus = 0;
      yynerrs = 0;
      yychar = YYEMPTY;		/* Cause a token to be read.  */
    
      /* Initialize stack pointers.
         Waste one element of value and location stack
         so that they stay on the same level as the state stack.
         The wasted elements are never initialized.  */
    
      yyssp = yyss;
      yyvsp = yyvs;
    
      goto yysetstate;
    
    /*------------------------------------------------------------.
    | yynewstate -- Push a new state, which is found in yystate.  |
    `------------------------------------------------------------*/
     yynewstate:
      /* In all cases, when you get here, the value and location stacks
         have just been pushed.  So pushing a state here evens the stacks.  */
      yyssp++;
    
     yysetstate:
      *yyssp = yystate;
    
      if (yyss + yystacksize - 1 <= yyssp)
        {
          /* Get the current used size of the three stacks, in elements.  */
          YYSIZE_T yysize = yyssp - yyss + 1;
    
    #ifdef yyoverflow
          {
    	/* Give user a chance to reallocate the stack.  Use copies of
    	   these so that the &'s don't force the real ones into
    	   memory.  */
    	YYSTYPE *yyvs1 = yyvs;
    	yytype_int16 *yyss1 = yyss;
    
    
    	/* Each stack pointer address is followed by the size of the
    	   data in use in that stack, in bytes.  This used to be a
    	   conditional around just the two extra args, but that might
    	   be undefined if yyoverflow is a macro.  */
    	yyoverflow (YY_("memory exhausted"),
    		    &yyss1, yysize * sizeof (*yyssp),
    		    &yyvs1, yysize * sizeof (*yyvsp),
    
    		    &yystacksize);
    
    	yyss = yyss1;
    	yyvs = yyvs1;
          }
    #else /* no yyoverflow */
    # ifndef YYSTACK_RELOCATE
          goto yyexhaustedlab;
    # else
          /* Extend the stack our own way.  */
          if (YYMAXDEPTH <= yystacksize)
    	goto yyexhaustedlab;
          yystacksize *= 2;
          if (YYMAXDEPTH < yystacksize)
    	yystacksize = YYMAXDEPTH;
    
          {
    	yytype_int16 *yyss1 = yyss;
    	union yyalloc *yyptr =
    	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
    	if (! yyptr)
    	  goto yyexhaustedlab;
    	YYSTACK_RELOCATE (yyss);
    	YYSTACK_RELOCATE (yyvs);
    
    #  undef YYSTACK_RELOCATE
    	if (yyss1 != yyssa)
    	  YYSTACK_FREE (yyss1);
          }
    # endif
    #endif /* no yyoverflow */
    
          yyssp = yyss + yysize - 1;
          yyvsp = yyvs + yysize - 1;
    
    
          YYDPRINTF ((stderr, "Stack size increased to %lu\n",
    		  (unsigned long int) yystacksize));
    
          if (yyss + yystacksize - 1 <= yyssp)
    	YYABORT;
        }
    
      YYDPRINTF ((stderr, "Entering state %d\n", yystate));
    
      goto yybackup;
    
    /*-----------.
    | yybackup.  |
    `-----------*/
    yybackup:
    
      /* Do appropriate processing given the current state.  Read a
         look-ahead token if we need one and don't already have one.  */
    
      /* First try to decide what to do without reference to look-ahead token.  */
      yyn = yypact[yystate];
      if (yyn == YYPACT_NINF)
        goto yydefault;
    
      /* Not known => get a look-ahead token if don't already have one.  */
    
      /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
      if (yychar == YYEMPTY)
        {
          YYDPRINTF ((stderr, "Reading a token: "));
          yychar = YYLEX;
        }
    
      if (yychar <= YYEOF)
        {
          yychar = yytoken = YYEOF;
          YYDPRINTF ((stderr, "Now at end of input.\n"));
        }
      else
        {
          yytoken = YYTRANSLATE (yychar);
          YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
        }
    
      /* If the proper action on seeing token YYTOKEN is to reduce or to
         detect an error, take that action.  */
      yyn += yytoken;
      if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
        goto yydefault;
      yyn = yytable[yyn];
      if (yyn <= 0)
        {
          if (yyn == 0 || yyn == YYTABLE_NINF)
    	goto yyerrlab;
          yyn = -yyn;
          goto yyreduce;
        }
    
      if (yyn == YYFINAL)
        YYACCEPT;
    
      /* Count tokens shifted since error; after three, turn off error
         status.  */
      if (yyerrstatus)
        yyerrstatus--;
    
      /* Shift the look-ahead token.  */
      YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
    
      /* Discard the shifted token unless it is eof.  */
      if (yychar != YYEOF)
        yychar = YYEMPTY;
    
      yystate = yyn;
      *++yyvsp = yylval;
    
      goto yynewstate;
    
    
    /*-----------------------------------------------------------.
    | yydefault -- do the default action for the current state.  |
    `-----------------------------------------------------------*/
    yydefault:
      yyn = yydefact[yystate];
      if (yyn == 0)
        goto yyerrlab;
      goto yyreduce;
    
    
    /*-----------------------------.
    | yyreduce -- Do a reduction.  |
    `-----------------------------*/
    yyreduce:
      /* yyn is the number of a rule to reduce with.  */
      yylen = yyr2[yyn];
    
      /* If YYLEN is nonzero, implement the default value of the action:
         `$$ = $1'.
    
         Otherwise, the following line sets YYVAL to garbage.
         This behavior is undocumented and Bison
         users should not rely upon it.  Assigning to YYVAL
         unconditionally makes the parser a bit smaller, and it avoids a
         GCC warning that YYVAL may be used uninitialized.  */
      yyval = yyvsp[1-yylen];
    
    
      YY_REDUCE_PRINT (yyn);
      switch (yyn)
        {
            case 3:
    #line 147 "Gmsh.y"
        { yyerrok; return 1; ;}
        break;
    
      case 6:
    #line 158 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 7:
    #line 159 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 8:
    #line 160 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 9:
    #line 161 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 10:
    #line 162 "Gmsh.y"
        { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
        break;
    
      case 11:
    #line 163 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 12:
    #line 164 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 13:
    #line 165 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 14:
    #line 166 "Gmsh.y"
        { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
        break;
    
      case 15:
    #line 167 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 16:
    #line 168 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 17:
    #line 169 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 18:
    #line 170 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 19:
    #line 171 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 20:
    #line 172 "Gmsh.y"
        { return 1; ;}
        break;
    
      case 21:
    #line 177 "Gmsh.y"
        {
          (yyval.c) = (char*)"w";
        ;}
        break;
    
      case 22:
    #line 181 "Gmsh.y"
        {
          (yyval.c) = (char*)"a";
        ;}
        break;
    
      case 23:
    #line 188 "Gmsh.y"
        {
          Msg::Direct((yyvsp[(3) - (5)].c));
          Free((yyvsp[(3) - (5)].c));
        ;}
        break;
    
      case 24:
    #line 193 "Gmsh.y"
        {
          std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
          FILE *fp = fopen(tmp.c_str(), (yyvsp[(5) - (7)].c));
          if(!fp){
    	yymsg(0, "Unable to open file '%s'", tmp.c_str());
          }
          else{
    	fprintf(fp, "%s\n", (yyvsp[(3) - (7)].c));
    	fclose(fp);
          }
          Free((yyvsp[(3) - (7)].c));
          Free((yyvsp[(6) - (7)].c));
        ;}
        break;
    
      case 25:
    #line 207 "Gmsh.y"
        {
          char tmpstring[1024];
          int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
          if(i < 0) 
    	yymsg(0, "Too few arguments in Printf");
          else if(i > 0)
    	yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
          else
    	Msg::Direct(tmpstring);
          Free((yyvsp[(3) - (7)].c));
          List_Delete((yyvsp[(5) - (7)].l));
        ;}
        break;
    
      case 26:
    #line 220 "Gmsh.y"
        {
          char tmpstring[1024];
          int i = PrintListOfDouble((yyvsp[(3) - (9)].c), (yyvsp[(5) - (9)].l), tmpstring);
          if(i < 0) 
    	yymsg(0, "Too few arguments in Printf");
          else if(i > 0)
    	yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
          else{
            std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(8) - (9)].c));
    	FILE *fp = fopen(tmp.c_str(), (yyvsp[(7) - (9)].c));
    	if(!fp){
    	  yymsg(0, "Unable to open file '%s'", tmp.c_str());
    	}
    	else{
    	  fprintf(fp, "%s\n", tmpstring);
    	  fclose(fp);
    	}
          }
          Free((yyvsp[(3) - (9)].c));
          Free((yyvsp[(8) - (9)].c));
          List_Delete((yyvsp[(5) - (9)].l));
        ;}
        break;
    
      case 27:
    #line 248 "Gmsh.y"
        { 
    #if !defined(HAVE_NO_POST)
          if(!strcmp((yyvsp[(1) - (6)].c), "View") && ViewData->finalize()){
    	ViewData->setName((yyvsp[(2) - (6)].c));
    	ViewData->setFileName(gmsh_yyname);
    	ViewData->setFileIndex(gmsh_yyviewindex++);
    	new PView(ViewData);
          }
          else
    	delete ViewData;
    #endif
          Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(2) - (6)].c));
        ;}
        break;
    
      case 28:
    #line 262 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          if(!strcmp((yyvsp[(2) - (6)].c), "View")){
    	int index = (int)(yyvsp[(4) - (6)].d);
    	if(index >= 0 && index < (int)PView::list.size())
    	  new PView(PView::list[index], false);
          }
    #endif
          Free((yyvsp[(2) - (6)].c));
        ;}
        break;
    
      case 29:
    #line 273 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          if(!strcmp((yyvsp[(2) - (6)].c), "View")){
    	int index = (int)(yyvsp[(4) - (6)].d);
    	if(index >= 0 && index < (int)PView::list.size())
    	  new PView(PView::list[index], true);
          }
    #endif
          Free((yyvsp[(2) - (6)].c));
        ;}
        break;
    
      case 30:
    #line 287 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          ViewData = new PViewDataList(); 
    #endif
        ;}
        break;
    
      case 36:
    #line 301 "Gmsh.y"
        { ViewCoord.push_back((yyvsp[(1) - (1)].d)); ;}
        break;
    
      case 37:
    #line 303 "Gmsh.y"
        { ViewCoord.push_back((yyvsp[(3) - (3)].d)); ;}
        break;
    
      case 38:
    #line 308 "Gmsh.y"
        { if(ViewValueList) ViewValueList->push_back((yyvsp[(1) - (1)].d)); ;}
        break;
    
      case 39:
    #line 310 "Gmsh.y"
        { if(ViewValueList) ViewValueList->push_back((yyvsp[(3) - (3)].d)); ;}
        break;
    
      case 40:
    #line 315 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          if(!strncmp((yyvsp[(1) - (1)].c), "SP", 2)){
    	ViewValueList = &ViewData->SP; ViewNumList = &ViewData->NbSP;
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VP", 2)){
    	ViewValueList = &ViewData->VP; ViewNumList = &ViewData->NbVP;
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TP", 2)){
    	ViewValueList = &ViewData->TP; ViewNumList = &ViewData->NbTP;
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SL", 2)){
    	ViewValueList = &ViewData->SL; ViewNumList = &ViewData->NbSL;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VL", 2)){
    	ViewValueList = &ViewData->VL; ViewNumList = &ViewData->NbVL;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TL", 2)){
    	ViewValueList = &ViewData->TL; ViewNumList = &ViewData->NbTL;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "ST", 2)){
    	ViewValueList = &ViewData->ST; ViewNumList = &ViewData->NbST;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VT", 2)){
    	ViewValueList = &ViewData->VT; ViewNumList = &ViewData->NbVT;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TT", 2)){
    	ViewValueList = &ViewData->TT; ViewNumList = &ViewData->NbTT;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SQ", 2)){
    	ViewValueList = &ViewData->SQ; ViewNumList = &ViewData->NbSQ;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VQ", 2)){
    	ViewValueList = &ViewData->VQ; ViewNumList = &ViewData->NbVQ;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TQ", 2)){
    	ViewValueList = &ViewData->TQ; ViewNumList = &ViewData->NbTQ;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SS", 2)){
    	ViewValueList = &ViewData->SS; ViewNumList = &ViewData->NbSS;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VS", 2)){
    	ViewValueList = &ViewData->VS; ViewNumList = &ViewData->NbVS;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TS", 2)){
    	ViewValueList = &ViewData->TS; ViewNumList = &ViewData->NbTS;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SH", 2)){
    	ViewValueList = &ViewData->SH; ViewNumList = &ViewData->NbSH;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VH", 2)){
    	ViewValueList = &ViewData->VH; ViewNumList = &ViewData->NbVH;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TH", 2)){
    	ViewValueList = &ViewData->TH; ViewNumList = &ViewData->NbTH;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SI", 2)){
    	ViewValueList = &ViewData->SI; ViewNumList = &ViewData->NbSI;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VI", 2)){
    	ViewValueList = &ViewData->VI; ViewNumList = &ViewData->NbVI;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TI", 2)){
    	ViewValueList = &ViewData->TI; ViewNumList = &ViewData->NbTI;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "SY", 2)){
    	ViewValueList = &ViewData->SY; ViewNumList = &ViewData->NbSY;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "VY", 2)){
    	ViewValueList = &ViewData->VY; ViewNumList = &ViewData->NbVY;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
          }
          else if(!strncmp((yyvsp[(1) - (1)].c), "TY", 2)){
    	ViewValueList = &ViewData->TY; ViewNumList = &ViewData->NbTY;
            if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
          }
          else{
    	yymsg(0, "Unknown element type '%s'", (yyvsp[(1) - (1)].c));	
    	ViewValueList = 0; ViewNumList = 0;
          }
    #endif
          ViewCoord.clear();
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 41:
    #line 419 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          if(ViewValueList){
    	for(int i = 0; i < 3; i++)
    	  for(unsigned int j = 0; j < ViewCoord.size() / 3; j++) 
    	    ViewValueList->push_back(ViewCoord[3 * j + i]);
          }
    #endif
        ;}
        break;
    
      case 42:
    #line 429 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          if(ViewValueList) (*ViewNumList)++;
    #endif
        ;}
        break;
    
      case 43:
    #line 438 "Gmsh.y"
        { 
    #if !defined(HAVE_NO_POST)
          for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(1) - (1)].c)[i]);
    #endif
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 44:
    #line 445 "Gmsh.y"
        { 
    #if !defined(HAVE_NO_POST)
          for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(3) - (3)].c)[i]);
    #endif
          Free((yyvsp[(3) - (3)].c));
        ;}
        break;
    
      case 45:
    #line 455 "Gmsh.y"
        { 
    #if !defined(HAVE_NO_POST)
          ViewData->T2D.push_back((yyvsp[(3) - (8)].d)); 
          ViewData->T2D.push_back((yyvsp[(5) - (8)].d));
          ViewData->T2D.push_back((yyvsp[(7) - (8)].d)); 
          ViewData->T2D.push_back(ViewData->T2C.size()); 
    #endif
        ;}
        break;
    
      case 46:
    #line 464 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          ViewData->NbT2++;
    #endif
        ;}
        break;
    
      case 47:
    #line 473 "Gmsh.y"
        { 
    #if !defined(HAVE_NO_POST)
          for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(1) - (1)].c)[i]);
    #endif
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 48:
    #line 480 "Gmsh.y"
        { 
    #if !defined(HAVE_NO_POST)
          for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(3) - (3)].c)[i]);
    #endif
          Free((yyvsp[(3) - (3)].c));
        ;}
        break;
    
      case 49:
    #line 490 "Gmsh.y"
        { 
    #if !defined(HAVE_NO_POST)
          ViewData->T3D.push_back((yyvsp[(3) - (10)].d)); ViewData->T3D.push_back((yyvsp[(5) - (10)].d));
          ViewData->T3D.push_back((yyvsp[(7) - (10)].d)); ViewData->T3D.push_back((yyvsp[(9) - (10)].d));
          ViewData->T3D.push_back(ViewData->T3C.size()); 
    #endif
        ;}
        break;
    
      case 50:
    #line 498 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          ViewData->NbT3++;
    #endif
        ;}
        break;
    
      case 51:
    #line 508 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          int type = 
    	(ViewData->NbSL || ViewData->NbVL) ? TYPE_LIN : 
    	(ViewData->NbST || ViewData->NbVT) ? TYPE_TRI : 
    	(ViewData->NbSQ || ViewData->NbVQ) ? TYPE_QUA : 
    	(ViewData->NbSS || ViewData->NbVS) ? TYPE_TET : 
    	(ViewData->NbSY || ViewData->NbVY) ? TYPE_PYR : 
    	(ViewData->NbSI || ViewData->NbVI) ? TYPE_PRI : 
          	(ViewData->NbSH || ViewData->NbVH) ? TYPE_HEX : 
    	0;
          ViewData->setInterpolationMatrices(type, ListOfListOfDouble2Matrix((yyvsp[(3) - (8)].l)), 
                                             ListOfListOfDouble2Matrix((yyvsp[(6) - (8)].l)));
    #endif
        ;}
        break;
    
      case 52:
    #line 527 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          int type = 
    	(ViewData->NbSL || ViewData->NbVL) ? TYPE_LIN : 
    	(ViewData->NbST || ViewData->NbVT) ? TYPE_TRI : 
    	(ViewData->NbSQ || ViewData->NbVQ) ? TYPE_QUA : 
    	(ViewData->NbSS || ViewData->NbVS) ? TYPE_TET : 
          	(ViewData->NbSH || ViewData->NbVH) ? TYPE_HEX : 
    	0;
          ViewData->setInterpolationMatrices(type, ListOfListOfDouble2Matrix((yyvsp[(3) - (14)].l)), 
                                             ListOfListOfDouble2Matrix((yyvsp[(6) - (14)].l)),
                                             ListOfListOfDouble2Matrix((yyvsp[(9) - (14)].l)), 
                                             ListOfListOfDouble2Matrix((yyvsp[(12) - (14)].l)));
    #endif
        ;}
        break;
    
      case 53:
    #line 546 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          ViewValueList = &ViewData->Time;
    #endif
        ;}
        break;
    
      case 54:
    #line 552 "Gmsh.y"
        {
        ;}
        break;
    
      case 55:
    #line 559 "Gmsh.y"
        { (yyval.i) = 0; ;}
        break;
    
      case 56:
    #line 560 "Gmsh.y"
        { (yyval.i) = 1; ;}
        break;
    
      case 57:
    #line 561 "Gmsh.y"
        { (yyval.i) = 2; ;}
        break;
    
      case 58:
    #line 562 "Gmsh.y"
        { (yyval.i) = 3; ;}
        break;
    
      case 59:
    #line 563 "Gmsh.y"
        { (yyval.i) = 4; ;}
        break;
    
      case 60:
    #line 567 "Gmsh.y"
        { (yyval.i) = 1; ;}
        break;
    
      case 61:
    #line 568 "Gmsh.y"
        { (yyval.i) = -1; ;}
        break;
    
      case 62:
    #line 576 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
    	if(!(yyvsp[(2) - (4)].i))
    	  gmsh_yysymbols[(yyvsp[(1) - (4)].c)].push_back((yyvsp[(3) - (4)].d));
    	else
    	  yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
          }
          else{
    	switch((yyvsp[(2) - (4)].i)){
    	case 0 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] = (yyvsp[(3) - (4)].d); break;
    	case 1 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] += (yyvsp[(3) - (4)].d); break;
    	case 2 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] -= (yyvsp[(3) - (4)].d); break;
    	case 3 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] *= (yyvsp[(3) - (4)].d); break;
    	case 4 : 
    	  if((yyvsp[(3) - (4)].d)) gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] /= (yyvsp[(3) - (4)].d); 
    	  else yymsg(0, "Division by zero in '%s /= %g'", (yyvsp[(1) - (4)].c), (yyvsp[(3) - (4)].d));
    	  break;
    	}
          }
          Free((yyvsp[(1) - (4)].c));
        ;}
        break;
    
      case 63:
    #line 598 "Gmsh.y"
        {
          int index = (int)(yyvsp[(3) - (7)].d);
          if(!gmsh_yysymbols.count((yyvsp[(1) - (7)].c))){
    	if(!(yyvsp[(5) - (7)].i)){
    	  gmsh_yysymbols[(yyvsp[(1) - (7)].c)].resize(index + 1, 0.);
    	  gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] = (yyvsp[(6) - (7)].d);
    	}
    	else
    	  yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (7)].c));
          }
          else{
    	if((int)gmsh_yysymbols[(yyvsp[(1) - (7)].c)].size() < index + 1)
    	  gmsh_yysymbols[(yyvsp[(1) - (7)].c)].resize(index + 1, 0.);
    	switch((yyvsp[(5) - (7)].i)){
    	case 0 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] = (yyvsp[(6) - (7)].d); break;
    	case 1 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] += (yyvsp[(6) - (7)].d); break;
    	case 2 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] -= (yyvsp[(6) - (7)].d); break;
    	case 3 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] *= (yyvsp[(6) - (7)].d); break;
    	case 4 : 
    	  if((yyvsp[(6) - (7)].d)) gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] /= (yyvsp[(6) - (7)].d); 
    	  else yymsg(0, "Division by zero in '%s[%d] /= %g'", (yyvsp[(1) - (7)].c), index, (yyvsp[(6) - (7)].d));
    	  break;
    	}
          }
          Free((yyvsp[(1) - (7)].c));
        ;}
        break;
    
      case 64:
    #line 625 "Gmsh.y"
        {
          if(List_Nbr((yyvsp[(4) - (9)].l)) != List_Nbr((yyvsp[(8) - (9)].l))){
    	yymsg(0, "Incompatible array dimensions in affectation");
          }
          else{
    	if(!gmsh_yysymbols.count((yyvsp[(1) - (9)].c))){
    	  if(!(yyvsp[(7) - (9)].i)){
    	    for(int i = 0; i < List_Nbr((yyvsp[(4) - (9)].l)); i++){
    	      int index = (int)(*(double*)List_Pointer((yyvsp[(4) - (9)].l), i));
    	      gmsh_yysymbols[(yyvsp[(1) - (9)].c)].resize(index + 1, 0.);
    	      gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] = *(double*)List_Pointer((yyvsp[(8) - (9)].l), i);
    	    }
    	  }
    	  else
    	    yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (9)].c));
    	}
    	else{
    	  for(int i = 0; i < List_Nbr((yyvsp[(4) - (9)].l)); i++){
    	    int index = (int)(*(double*)List_Pointer((yyvsp[(4) - (9)].l), i));
    	    double d = *(double*)List_Pointer((yyvsp[(8) - (9)].l), i);
    	    if((int)gmsh_yysymbols[(yyvsp[(1) - (9)].c)].size() < index + 1)
    	      gmsh_yysymbols[(yyvsp[(1) - (9)].c)].resize(index + 1, 0.);
    	    switch((yyvsp[(7) - (9)].i)){
    	    case 0 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] = d; break;
    	    case 1 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] += d; break;
    	    case 2 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] -= d; break;
    	    case 3 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] *= d; break;
    	    case 4 : 
    	      if((yyvsp[(8) - (9)].l)) gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] /= d; 
    	      else yymsg(0, "Division by zero in '%s[%d] /= %g'", (yyvsp[(1) - (9)].c), index, d);
    	      break;
    	    }
    	  }
    	}
          }
          Free((yyvsp[(1) - (9)].c));
          List_Delete((yyvsp[(4) - (9)].l));
          List_Delete((yyvsp[(8) - (9)].l));
        ;}
        break;
    
      case 65:
    #line 665 "Gmsh.y"
        {
          if(gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
    	gmsh_yysymbols[(yyvsp[(1) - (6)].c)].clear();
          gmsh_yysymbols[(yyvsp[(1) - (6)].c)] = std::vector<double>();
          for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++)
            gmsh_yysymbols[(yyvsp[(1) - (6)].c)].push_back(*(double*)List_Pointer((yyvsp[(5) - (6)].l), i));
          Free((yyvsp[(1) - (6)].c));
          List_Delete((yyvsp[(5) - (6)].l));
        ;}
        break;
    
      case 66:
    #line 675 "Gmsh.y"
        {
          // appends to the list
          for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++)
    	gmsh_yysymbols[(yyvsp[(1) - (6)].c)].push_back(*(double*)List_Pointer((yyvsp[(5) - (6)].l), i));
          Free((yyvsp[(1) - (6)].c));
          List_Delete((yyvsp[(5) - (6)].l));
        ;}
        break;
    
      case 67:
    #line 683 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c)); 
          else
    	gmsh_yysymbols[(yyvsp[(1) - (3)].c)][0] += (yyvsp[(2) - (3)].i);
          Free((yyvsp[(1) - (3)].c));
        ;}
        break;
    
      case 68:
    #line 691 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c)); 
          else{
    	int index = (int)(yyvsp[(3) - (6)].d);
    	if((int)gmsh_yysymbols[(yyvsp[(1) - (6)].c)].size() < index + 1)
    	  gmsh_yysymbols[(yyvsp[(1) - (6)].c)].resize(index + 1, 0.);
    	gmsh_yysymbols[(yyvsp[(1) - (6)].c)][index] += (yyvsp[(5) - (6)].i);
          }
          Free((yyvsp[(1) - (6)].c));
        ;}
        break;
    
      case 69:
    #line 703 "Gmsh.y"
        { 
          gmsh_yystringsymbols[(yyvsp[(1) - (4)].c)] = std::string((yyvsp[(3) - (4)].c));
          Free((yyvsp[(1) - (4)].c));
          Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 70:
    #line 712 "Gmsh.y"
        { 
          std::string tmp((yyvsp[(5) - (6)].c));
          StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), tmp);
          Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c))
        ;}
        break;
    
      case 71:
    #line 718 "Gmsh.y"
        { 
          std::string tmp((yyvsp[(8) - (9)].c));
          StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), tmp);
          Free((yyvsp[(1) - (9)].c)); Free((yyvsp[(6) - (9)].c)); Free((yyvsp[(8) - (9)].c))
        ;}
        break;
    
      case 72:
    #line 727 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d)){
    	switch((yyvsp[(4) - (6)].i)){
    	case 0 : d = (yyvsp[(5) - (6)].d); break;
    	case 1 : d += (yyvsp[(5) - (6)].d); break;
    	case 2 : d -= (yyvsp[(5) - (6)].d); break;
    	case 3 : d *= (yyvsp[(5) - (6)].d); break;
    	case 4 : 
    	  if((yyvsp[(5) - (6)].d)) d /= (yyvsp[(5) - (6)].d); 
    	  else yymsg(0, "Division by zero in '%s.%s /= %g'", (yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
    	  break;
    	}
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d);
          }
          Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(3) - (6)].c));
        ;}
        break;
    
      case 73:
    #line 745 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d)){
    	switch((yyvsp[(7) - (9)].i)){
    	case 0 : d = (yyvsp[(8) - (9)].d); break;
    	case 1 : d += (yyvsp[(8) - (9)].d); break;
    	case 2 : d -= (yyvsp[(8) - (9)].d); break;
    	case 3 : d *= (yyvsp[(8) - (9)].d); break;
    	case 4 : 
    	  if((yyvsp[(8) - (9)].d)) d /= (yyvsp[(8) - (9)].d); 
    	  else yymsg(0, "Division by zero in '%s[%d].%s /= %g'", (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].d));
    	  break;
    	}
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d);
          }
          Free((yyvsp[(1) - (9)].c)); Free((yyvsp[(6) - (9)].c));
        ;}
        break;
    
      case 74:
    #line 763 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d)){
    	d += (yyvsp[(4) - (5)].i);
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d);
          }
          Free((yyvsp[(1) - (5)].c)); Free((yyvsp[(3) - (5)].c));
        ;}
        break;
    
      case 75:
    #line 772 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d)){
    	d += (yyvsp[(7) - (8)].i);
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d);
          }
          Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(6) - (8)].c));
        ;}
        break;
    
      case 76:
    #line 784 "Gmsh.y"
        {
          ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), 0, (yyvsp[(5) - (8)].c), (yyvsp[(7) - (8)].u));
          Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(5) - (8)].c));
        ;}
        break;
    
      case 77:
    #line 789 "Gmsh.y"
        {
          ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (11)].c), (int)(yyvsp[(3) - (11)].d), (yyvsp[(8) - (11)].c), (yyvsp[(10) - (11)].u));
          Free((yyvsp[(1) - (11)].c)); Free((yyvsp[(8) - (11)].c));
        ;}
        break;
    
      case 78:
    #line 797 "Gmsh.y"
        {
          GmshColorTable *ct = GetColorTable(0);
          if(!ct)
    	yymsg(0, "View[%d] does not exist", 0);
          else{
    	ct->size = List_Nbr((yyvsp[(5) - (6)].l));
    	if(ct->size > COLORTABLE_NBMAX_COLOR)
    	  yymsg(0, "Too many (%d>%d) colors in View[%d].ColorTable", 
    		ct->size, COLORTABLE_NBMAX_COLOR, 0);
    	else
    	  for(int i = 0; i < ct->size; i++) List_Read((yyvsp[(5) - (6)].l), i, &ct->table[i]);
    	if(ct->size == 1){
    	  ct->size = 2;
    	  ct->table[1] = ct->table[0];
    	}
          }
          Free((yyvsp[(1) - (6)].c));
          List_Delete((yyvsp[(5) - (6)].l));
        ;}
        break;
    
      case 79:
    #line 817 "Gmsh.y"
        {
          GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (9)].d));
          if(!ct)
    	yymsg(0, "View[%d] does not exist", (int)(yyvsp[(3) - (9)].d));
          else{
    	ct->size = List_Nbr((yyvsp[(8) - (9)].l));
    	if(ct->size > COLORTABLE_NBMAX_COLOR)
    	  yymsg(0, "Too many (%d>%d) colors in View[%d].ColorTable", 
    		   ct->size, COLORTABLE_NBMAX_COLOR, (int)(yyvsp[(3) - (9)].d));
    	else
    	  for(int i = 0; i < ct->size; i++) List_Read((yyvsp[(8) - (9)].l), i, &ct->table[i]);
    	if(ct->size == 1){
    	  ct->size = 2;
    	  ct->table[1] = ct->table[0];
    	}
          }
          Free((yyvsp[(1) - (9)].c));
          List_Delete((yyvsp[(8) - (9)].l));
        ;}
        break;
    
      case 80:
    #line 840 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(1) - (5)].c),"Background"))
    	GModel::current()->getFields()->background_field = (int)(yyvsp[(4) - (5)].d);
          else
    	yymsg(0, "Unknown command %s Field", (yyvsp[(1) - (5)].c));
        ;}
        break;
    
      case 81:
    #line 847 "Gmsh.y"
        {
          if(!GModel::current()->getFields()->newField((int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c)))
    	yymsg(0, "Cannot create field %i of type '%s'", (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c));
          Free((yyvsp[(6) - (7)].c));
        ;}
        break;
    
      case 82:
    #line 853 "Gmsh.y"
        {
          Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
          if(field){
    	FieldOption *option = field->options[(yyvsp[(6) - (9)].c)];
    	if(option){
    	  try { option->numericalValue((yyvsp[(8) - (9)].d)); }
    	  catch(...){
    	    yymsg(0, "Cannot assign a numerical value to option '%s' "
    		  "in field %i of type '%s'", (yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
    	  }
    	}
    	else
    	  yymsg(0, "Unknown option '%s' in field %i of type '%s'",
    		(yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
          }
          else
    	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (9)].d));
          Free((yyvsp[(6) - (9)].c));
        ;}
        break;
    
      case 83:
    #line 873 "Gmsh.y"
        {
          Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
          if(field){
    	FieldOption *option = field->options[(yyvsp[(6) - (9)].c)];
    	if(option){
    	  try { option->string() = (yyvsp[(8) - (9)].c); }
    	  catch (...){
    	    yymsg(0, "Cannot assign a string value to  option '%s' "
    		  "in field %i of type '%s'", (yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
    	  }
    	}
    	else 
    	  yymsg(0, "Unknown option '%s' in field %i of type '%s'", 
    		(yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
          }
          else 
    	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (9)].d));
          Free((yyvsp[(6) - (9)].c));
          Free((yyvsp[(8) - (9)].c));
        ;}
        break;
    
      case 84:
    #line 894 "Gmsh.y"
        {
          Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (11)].d));
          if(field){
    	FieldOption *option = field->options[(yyvsp[(6) - (11)].c)];
    	if(option){
    	  std::list<int> &vl = option->list();
    	  vl.clear();
    	  for(int i = 0; i < List_Nbr((yyvsp[(9) - (11)].l)); i++){
    	    double id;
    	    List_Read((yyvsp[(9) - (11)].l), i, &id);
    	    vl.push_back((int)id);
    	  }
    	}
    	else
    	  yymsg(0, "Unknown option '%s' in field %i of type '%s'",
    		(yyvsp[(6) - (11)].c), (int)(yyvsp[(3) - (11)].d), field->getName());
          }
          else 
    	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (11)].d));
          Free((yyvsp[(6) - (11)].c));
          List_Delete((yyvsp[(9) - (11)].l));
        ;}
        break;
    
      case 85:
    #line 920 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          try {
    	PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].d)); 
          }
          catch (...) {
    	yymsg(0, "Unknown option '%s' or plugin '%s'", (yyvsp[(6) - (9)].c), (yyvsp[(3) - (9)].c));
          }
    #endif
          Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c));
        ;}
        break;
    
      case 86:
    #line 932 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          try {
    	PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].c)); 
          }
          catch (...) {
    	yymsg(0, "Unknown option '%s' or plugin '%s'", (yyvsp[(6) - (9)].c), (yyvsp[(3) - (9)].c));
          }
    #endif
          Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c)); Free((yyvsp[(8) - (9)].c));
        ;}
        break;
    
      case 87:
    #line 949 "Gmsh.y"
        { 
          (yyval.i) = (int)(yyvsp[(1) - (1)].d); 
        ;}
        break;
    
      case 88:
    #line 953 "Gmsh.y"
        { 
          (yyval.i) = GModel::current()->setPhysicalName
            (std::string((yyvsp[(1) - (1)].c)), curPhysDim, 
             ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 89:
    #line 963 "Gmsh.y"
        {
          (yyval.l) = 0;
        ;}
        break;
    
      case 90:
    #line 967 "Gmsh.y"
        {
          (yyval.l) = List_Create(1, 1, sizeof(Vertex*));
          Vertex *v = FindPoint((int)(yyvsp[(4) - (5)].d));
          if(!v)
    	yymsg(0, "Unknown point %d", (int)(yyvsp[(4) - (5)].d));
          else{
    	List_Add((yyval.l), &v);
          }
        ;}
        break;
    
      case 91:
    #line 979 "Gmsh.y"
        {
          for(int i = 0; i < 4; i++) (yyval.v)[i] = 0.;
        ;}
        break;
    
      case 92:
    #line 983 "Gmsh.y"
        {
          for(int i = 0; i < 4; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
        ;}
        break;
    
      case 93:
    #line 993 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindPoint(num)){
    	yymsg(0, "Point %d already exists", num);
          }
          else{
    	double x = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[0];
    	double y = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[1];
    	double z = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[2];
    	double lc = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[3];
    	if(lc == 0.) lc = MAX_LC; // no mesh size given at the point
    	Vertex *v;
    	if(!myGmshSurface)
    	  v = Create_Vertex(num, x, y, z, lc, 1.0);
    	else
    	  v = Create_Vertex(num, x, y, myGmshSurface, lc);
    	Tree_Add(GModel::current()->getGEOInternals()->Points, &v);
    	AddToTemporaryBoundingBox(v->Pos.X, v->Pos.Y, v->Pos.Z);
          }
          (yyval.s).Type = MSH_POINT;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 94:
    #line 1016 "Gmsh.y"
        {
          curPhysDim = 0;
        ;}
        break;
    
      case 95:
    #line 1020 "Gmsh.y"
        {
          int num = (int)(yyvsp[(5) - (9)].i);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
    	yymsg(0, "Physical point %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
    	List_Delete(temp);
    	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(8) - (9)].l));
          (yyval.s).Type = MSH_PHYSICAL_POINT;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 96:
    #line 1036 "Gmsh.y"
        {      
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(3) - (6)].l), i, &d);
    	Vertex *v = FindPoint((int)d); 	 
    	if(v)
    	  v->lc = (yyvsp[(5) - (6)].d);
    	else{
    	  GVertex *gv = GModel::current()->getVertexByTag((int)d);
    	  if(gv) 
    	    gv->setPrescribedMeshSizeAtVertex((yyvsp[(5) - (6)].d));
    	}
          }
          List_Delete((yyvsp[(3) - (6)].l));
          // dummy values
          (yyval.s).Type = 0;
          (yyval.s).Num = 0;
        ;}
        break;
    
      case 97:
    #line 1058 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
    				-1, -1, 0., 1.);
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	CreateReversedCurve(c);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (7)].l));
          (yyval.s).Type = MSH_SEGM_LINE;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 98:
    #line 1076 "Gmsh.y"
        {
          for (int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
    	double dnum;
    	List_Read((yyvsp[(3) - (4)].l), i, &dnum);
    	int num = (int) fabs(dnum);
    	Curve *c = FindCurve(num);
    	if (c){
    	  c->degenerated = true;
    	}
    	else{
    	  GEdge *ge = GModel::current()->getEdgeByTag(num);
    	  if (!ge){
    	    yymsg(0, "Curve %d does not exist", num);
    	  }
    	  else{
    	    ge->setTooSmall(true);
    	  }
    	}
          }
        ;}
        break;
    
      case 99:
    #line 1098 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL,
    				-1, -1, 0., 1.);
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	CreateReversedCurve(c);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (7)].l));
          (yyval.s).Type = MSH_SEGM_SPLN;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 100:
    #line 1116 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (8)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (8)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL,
    				-1, -1, 0., 1.);
            if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
              c->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
              c->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
              c->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
              End_Curve(c);
            }
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	Curve *rc = CreateReversedCurve(c);
            if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
              rc->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
              rc->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
              rc->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
              End_Curve(rc);
            }
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (8)].l));
          (yyval.s).Type = MSH_SEGM_CIRC;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 101:
    #line 1146 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (8)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (8)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL,
    				-1, -1, 0., 1.);
            if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
              c->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
              c->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
              c->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
              End_Curve(c);
            }
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	Curve *rc = CreateReversedCurve(c);
            if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
              rc->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
              rc->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
              rc->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
              End_Curve(rc);
            }
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (8)].l));
          (yyval.s).Type = MSH_SEGM_ELLI;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 102:
    #line 1176 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL,
    				-1, -1, 0., 1.);
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	CreateReversedCurve(c);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (7)].l));
          (yyval.s).Type = MSH_SEGM_BSPLN;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 103:
    #line 1194 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindCurve(num)){
    	yymsg(0, "Curve %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
    	Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL,
    				-1, -1, 0., 1.);
    	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	CreateReversedCurve(c);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(6) - (7)].l));
          (yyval.s).Type = MSH_SEGM_BEZIER;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 104:
    #line 1212 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (11)].d);
          if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
    	yymsg(0, "Wrong definition of Nurbs Curve %d: "
    	      "got %d knots, need N + D + 1 = %d + %d + 1 = %d",
    	      (int)(yyvsp[(3) - (11)].d), List_Nbr((yyvsp[(8) - (11)].l)), List_Nbr((yyvsp[(6) - (11)].l)), (int)(yyvsp[(10) - (11)].d), List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1);
          }
          else{
    	if(FindCurve(num)){
    	  yymsg(0, "Curve %d already exists", num);
    	}
    	else{
    	  List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (11)].l));
    	  Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)(yyvsp[(10) - (11)].d), temp, (yyvsp[(8) - (11)].l),
    				  -1, -1, 0., 1.);
    	  Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
    	  CreateReversedCurve(c);
    	  List_Delete(temp);
    	}
          }
          List_Delete((yyvsp[(6) - (11)].l));
          List_Delete((yyvsp[(8) - (11)].l));
          (yyval.s).Type = MSH_SEGM_NURBS;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 105:
    #line 1238 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindEdgeLoop(num)){
    	yymsg(0, "Line loop %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	sortEdgesInLoop(num, temp);
    	EdgeLoop *l = Create_EdgeLoop(num, temp);
    	Tree_Add(GModel::current()->getGEOInternals()->EdgeLoops, &l);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_SEGM_LOOP;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 106:
    #line 1255 "Gmsh.y"
        {
          curPhysDim = 1;
        ;}
        break;
    
      case 107:
    #line 1259 "Gmsh.y"
        {
          int num = (int)(yyvsp[(5) - (9)].i);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
    	yymsg(0, "Physical line %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
    	List_Delete(temp);
    	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(8) - (9)].l));
          (yyval.s).Type = MSH_PHYSICAL_LINE;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 108:
    #line 1278 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindSurface(num)){
    	yymsg(0, "Surface %d already exists", num);
          }
          else{
    	Surface *s = Create_Surface(num, MSH_SURF_PLAN);
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	setSurfaceGeneratrices(s, temp);
    	List_Delete(temp);
    	End_Surface(s);
    	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_SURF_PLAN;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 109:
    #line 1296 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (9)].d), type = 0;
          if(FindSurface(num)){
    	yymsg(0, "Surface %d already exists", num);
          }
          else{
    	double d;
    	List_Read((yyvsp[(7) - (9)].l), 0, &d);
    	EdgeLoop *el = FindEdgeLoop((int)fabs(d));
    	if(!el){
    	  yymsg(0, "Unknown line loop %d", (int)d);
    	}
    	else{
    	  int j = List_Nbr(el->Curves);
    	  if(j == 4){
    	    type = MSH_SURF_REGL;
    	  }
    	  else if(j == 3){
    	    type = MSH_SURF_TRIC;
    	  }
    	  else{
    	    yymsg(0, "Wrong definition of Ruled Surface %d: "
    		  "%d borders instead of 3 or 4", num, j);
    	    type = MSH_SURF_PLAN;
    	  }
    	  Surface *s = Create_Surface(num, type);
    	  List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
    	  setSurfaceGeneratrices(s, temp);
    	  List_Delete(temp);
    	  End_Surface(s);
    	  s->InSphereCenter = (yyvsp[(8) - (9)].l);
    	  Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
    	}
          }
          List_Delete((yyvsp[(7) - (9)].l));
          (yyval.s).Type = type;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 110:
    #line 1335 "Gmsh.y"
        {
          myGmshSurface = 0;
          (yyval.s).Type = 0;
          (yyval.s).Num = 0;
        ;}
        break;
    
      case 111:
    #line 1341 "Gmsh.y"
        {
          myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
          (yyval.s).Type = 0;
          (yyval.s).Num = 0;
        ;}
        break;
    
      case 112:
    #line 1347 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (10)].d);
          myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
          (yyval.s).Type = 0;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 113:
    #line 1354 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
    	yymsg(0, "Sphere %d has to be defined using 2 points (center + "
    	      "any point) and not %d", num, List_Nbr((yyvsp[(6) - (7)].l)));
          }
          else{
    	double p1,p2;
    	List_Read((yyvsp[(6) - (7)].l), 0, &p1);
    	List_Read((yyvsp[(6) - (7)].l), 1, &p2);
    	Vertex *v1 = FindPoint((int)p1);
    	Vertex *v2 = FindPoint((int)p2);
    	if(!v1) yymsg(0, "Sphere %d : unknown point %d", num, (int)p1);
    	if(!v2) yymsg(0, "Sphere %d : unknown point %d", num, (int)p2);
    	if(v1 && v2)
    	  myGmshSurface = gmshSphere::NewSphere
    	    (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z,
    	     sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) +
    		  (v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) +
    		  (v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z)));
          }
          (yyval.s).Type = 0;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 114:
    #line 1379 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
    	yymsg(0, "PolarSphere %d has to be defined using 2 points (center + "
    	      "any point) and not %d", num, List_Nbr((yyvsp[(6) - (7)].l)));
          }
          else{
    	double p1,p2;
    	List_Read((yyvsp[(6) - (7)].l), 0, &p1);
    	List_Read((yyvsp[(6) - (7)].l), 1, &p2);
    	Vertex *v1 = FindPoint((int)p1);
    	Vertex *v2 = FindPoint((int)p2);
    	if(!v1) yymsg(0, "PolarSphere %d : unknown point %d", num, (int)p1);
    	if(!v2) yymsg(0, "PolarSphere %d : unknown point %d", num, (int)p2);
    	if(v1 && v2)
    	  myGmshSurface = gmshPolarSphere::NewPolarSphere
    	    (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z,
    	     sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) +
    		  (v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) +
    		  (v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z)));
          }
          (yyval.s).Type = 0;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 115:
    #line 1404 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindSurfaceLoop(num)){
    	yymsg(0, "Surface loop %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	SurfaceLoop *l = Create_SurfaceLoop(num, temp);
    	Tree_Add(GModel::current()->getGEOInternals()->SurfaceLoops, &l);
    	List_Delete(temp);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_SURF_LOOP;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 116:
    #line 1420 "Gmsh.y"
        {
          curPhysDim = 2;
        ;}
        break;
    
      case 117:
    #line 1424 "Gmsh.y"
        {
          int num = (int)(yyvsp[(5) - (9)].i);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
    	yymsg(0, "Physical surface %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
    	List_Delete(temp);
    	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(8) - (9)].l));
          (yyval.s).Type = MSH_PHYSICAL_SURFACE;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 118:
    #line 1440 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
    	yymsg(0, "Physical volume %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	List_T *S[4] = {temp, 0, 0, 0};
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp, S);
    	List_Delete(temp);
            List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_PHYSICAL_VOLUME;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 119:
    #line 1458 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (12)].d);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
    	yymsg(0, "Physical surface %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (12)].l));
    	List_T *S[4] = {0, 0, 0, 0};
    	for (int i = 0; i < List_Nbr((yyvsp[(10) - (12)].l)); i++){
    	  List_T *ll;
    	  List_Read((yyvsp[(10) - (12)].l), i, &ll);
    	  S[i] = ListOfDouble2ListOfInt(ll);
              List_Delete(ll);
    	}
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp, S);
    	List_Delete(temp);
    	for (int i = 0; i < List_Nbr((yyvsp[(10) - (12)].l)); i++)
    	  List_Delete(S[i]);
            List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(7) - (12)].l));
          List_Delete((yyvsp[(10) - (12)].l));
          Free((yyvsp[(8) - (12)].c));
          (yyval.s).Type = MSH_PHYSICAL_SURFACE;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 120:
    #line 1485 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
    	yymsg(0, "Physical surface %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	List_T *S[4] = {0, 0, 0, 0};
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp, S);
    	List_Delete(temp);
            List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_PHYSICAL_SURFACE;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 121:
    #line 1502 "Gmsh.y"
        {
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
    	yymsg(0, "Physical line %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	List_T *S[4] = {temp, 0, 0, 0};
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp, S);
    	List_Delete(temp);
            List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_PHYSICAL_LINE;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 122:
    #line 1522 "Gmsh.y"
        {
          yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
          int num = (int)(yyvsp[(4) - (8)].d);
          if(FindVolume(num)){
    	yymsg(0, "Volume %d already exists", num);
          }
          else{
    	Volume *v = Create_Volume(num, MSH_VOLUME);
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
    	setVolumeSurfaces(v, temp);
    	List_Delete(temp);
    	Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
          }
          List_Delete((yyvsp[(7) - (8)].l));
          (yyval.s).Type = MSH_VOLUME;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 123:
    #line 1540 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (7)].d);
          if(FindVolume(num)){
    	yymsg(0, "Volume %d already exists", num);
          }
          else{
    	Volume *v = Create_Volume(num, MSH_VOLUME);
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
    	setVolumeSurfaces(v, temp);
    	List_Delete(temp);
    	Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
          }
          List_Delete((yyvsp[(6) - (7)].l));
          (yyval.s).Type = MSH_VOLUME;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 124:
    #line 1558 "Gmsh.y"
        {
    #if defined(HAVE_OCC)
          std::vector<double> data;
          for (int i = 0 ; i < List_Nbr((yyvsp[(5) - (9)].l)); i++){
            double d; List_Read((yyvsp[(5) - (9)].l), i, &d);
            data.push_back(d);
          }
          GModel::current()->addShape((yyvsp[(3) - (9)].c), data, (yyvsp[(7) - (9)].c));
          Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(7) - (9)].c));
          List_Delete((yyvsp[(5) - (9)].l));
    #endif
        ;}
        break;
    
      case 125:
    #line 1572 "Gmsh.y"
        {
          curPhysDim = 3;
        ;}
        break;
    
      case 126:
    #line 1576 "Gmsh.y"
        {
          int num = (int)(yyvsp[(5) - (9)].i);
          if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
    	yymsg(0, "Physical volume %d already exists", num);
          }
          else{
    	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
    	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
    	List_Delete(temp);
    	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
          }
          List_Delete((yyvsp[(8) - (9)].l));
          (yyval.s).Type = MSH_PHYSICAL_VOLUME;
          (yyval.s).Num = num;
        ;}
        break;
    
      case 127:
    #line 1598 "Gmsh.y"
        {
          TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
          (yyval.l) = (yyvsp[(4) - (5)].l);
        ;}
        break;
    
      case 128:
    #line 1603 "Gmsh.y"
        {
          RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
          (yyval.l) = (yyvsp[(10) - (11)].l);
        ;}
        break;
    
      case 129:
    #line 1608 "Gmsh.y"
        {
          SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
          (yyval.l) = (yyvsp[(4) - (5)].l);
        ;}
        break;
    
      case 130:
    #line 1613 "Gmsh.y"
        {
          DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
          (yyval.l) = (yyvsp[(8) - (9)].l);
        ;}
        break;
    
      case 131:
    #line 1618 "Gmsh.y"
        {
          (yyval.l) = List_Create(3, 3, sizeof(Shape));
          if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
            for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
              Shape TheShape;
              List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
              CopyShape(TheShape.Type, TheShape.Num, &TheShape.Num);
              List_Add((yyval.l), &TheShape);
            }
          }
          else if(!strcmp((yyvsp[(1) - (4)].c), "Boundary")){
            BoundaryShapes((yyvsp[(3) - (4)].l), (yyval.l));
          }
          else{
            yymsg(0, "Unknown command on multiple shapes: '%s'", (yyvsp[(1) - (4)].c));
          }
          Free((yyvsp[(1) - (4)].c));
          List_Delete((yyvsp[(3) - (4)].l));
        ;}
        break;
    
      case 132:
    #line 1638 "Gmsh.y"
        { 
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
          List_Delete((yyvsp[(4) - (9)].l));
        ;}
        break;
    
      case 133:
    #line 1644 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape*));
          List_T *tmp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
          List_Delete((yyvsp[(7) - (9)].l));
          SplitCurve((int)(yyvsp[(4) - (9)].d), tmp, (yyval.l));
          List_Delete(tmp);
        ;}
        break;
    
      case 134:
    #line 1654 "Gmsh.y"
        { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
        break;
    
      case 135:
    #line 1655 "Gmsh.y"
        { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
        break;
    
      case 136:
    #line 1660 "Gmsh.y"
        {
          (yyval.l) = List_Create(3, 3, sizeof(Shape));
        ;}
        break;
    
      case 137:
    #line 1664 "Gmsh.y"
        {
          List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
        ;}
        break;
    
      case 138:
    #line 1668 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(4) - (6)].l), i, &d);
    	Shape TheShape;
    	TheShape.Num = (int)d;
    	Vertex *v = FindPoint(std::abs(TheShape.Num));
    	if(v){
    	  TheShape.Type = MSH_POINT;
    	  List_Add((yyval.l), &TheShape);
    	}
    	else{
    	  GVertex *gv = GModel::current()->getVertexByTag(std::abs(TheShape.Num));
    	  if(gv){
    	    TheShape.Type = MSH_POINT_FROM_GMODEL;
    	    List_Add((yyval.l), &TheShape);
    	  }
    	  else
    	    yymsg(1, "Unknown point %d", TheShape.Num);
    	}
          }
        ;}
        break;
    
      case 139:
    #line 1691 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(4) - (6)].l), i, &d);
    	Shape TheShape;
    	TheShape.Num = (int)d;
    	Curve *c = FindCurve(std::abs(TheShape.Num));
    	if(c){
    	  TheShape.Type = c->Typ;
    	  List_Add((yyval.l), &TheShape);
    	}
    	else{
    	  GEdge *ge = GModel::current()->getEdgeByTag(std::abs(TheShape.Num));
    	  if(ge){
    	    TheShape.Type = MSH_SEGM_FROM_GMODEL;
    	    List_Add((yyval.l), &TheShape);
    	  }
    	  else
    	    yymsg(1, "Unknown curve %d", TheShape.Num);
    	}
          }
        ;}
        break;
    
      case 140:
    #line 1714 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(4) - (6)].l), i, &d);
    	Shape TheShape;
    	TheShape.Num = (int)d;
    	Surface *s = FindSurface(std::abs(TheShape.Num));
    	if(s){
    	  TheShape.Type = s->Typ;
    	  List_Add((yyval.l), &TheShape);
    	}
    	else{
    	  GFace *gf = GModel::current()->getFaceByTag(std::abs(TheShape.Num));
    	  if(gf){
    	    TheShape.Type = MSH_SURF_FROM_GMODEL;
    	    List_Add((yyval.l), &TheShape);
    	  }
    	  else
    	    yymsg(1, "Unknown surface %d", TheShape.Num);
    	}
          }
        ;}
        break;
    
      case 141:
    #line 1737 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(4) - (6)].l), i, &d);
    	Shape TheShape;
    	TheShape.Num = (int)d;
    	Volume *v = FindVolume(std::abs(TheShape.Num));
    	if(v){
    	  TheShape.Type = v->Typ;
    	  List_Add((yyval.l), &TheShape);
    	}
    	else{
    	  GRegion *gr = GModel::current()->getRegionByTag(std::abs(TheShape.Num));
    	  if(gr){
    	    TheShape.Type = MSH_VOLUME_FROM_GMODEL;
    	    List_Add((yyval.l), &TheShape);
    	  }
    	  else
    	    yymsg(1, "Unknown volume %d", TheShape.Num);
    	}
          }
        ;}
        break;
    
      case 142:
    #line 1765 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d[4];
              for(int i = 0; i < 4; i++)
                List_Read((yyvsp[(7) - (8)].l), i, &d[i]);
              gLevelset *ls = new gLevelsetPlane(d[0], d[1], d[2], d[3], t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (8)].d));
    #endif
        ;}
        break;
    
      case 143:
    #line 1787 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(List_Nbr((yyvsp[(12) - (14)].l)) == 0){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double n[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetPlane(pt, n, t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (14)].d));
    #endif
        ;}
        break;
    
      case 144:
    #line 1808 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(List_Nbr((yyvsp[(14) - (16)].l)) == 0){
            int t = (int)(yyvsp[(4) - (16)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double pt1[3] = {(yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2]};
              double pt2[3] = {(yyvsp[(10) - (16)].v)[0], (yyvsp[(10) - (16)].v)[1], (yyvsp[(10) - (16)].v)[2]};
              double pt3[3] = {(yyvsp[(12) - (16)].v)[0], (yyvsp[(12) - (16)].v)[1], (yyvsp[(12) - (16)].v)[2]};
              gLevelset *ls = new gLevelsetPlane(pt1, pt2, pt3, t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (16)].d));
    #endif
        ;}
        break;
    
      case 145:
    #line 1829 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
            int t = (int)(yyvsp[(4) - (12)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d;
              List_Read((yyvsp[(10) - (12)].l), 0, &d);
              gLevelset *ls = new gLevelsetSphere((yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], d, t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (12)].d));
    #endif
        ;}
        break;
    
      case 146:
    #line 1849 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              std::vector<const gLevelset *> vl;
              for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
                double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
                LevelSet *pl = FindLevelSet((int)d);
    	    if(!pl) yymsg(0, "Levelset Union %d : unknown levelset %d", t, (int)d);
                else vl.push_back(pl->ls);
              }
              gLevelset *ls = new gLevelsetUnion(vl);
              LevelSet *l = Create_LevelSet(t, ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (8)].c), "Intersection")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              std::vector<const gLevelset *> vl;
              for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
                double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
                LevelSet *pl = FindLevelSet((int)d);
    	    if(!pl) yymsg(0, "Levelset Intersection %d : unknown levelset %d", t, (int)d);
                else vl.push_back(pl->ls);
              }
              gLevelset *ls = new gLevelsetIntersection(vl);
              LevelSet *l = Create_LevelSet(t, ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (8)].c), "Cut")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              std::vector<const gLevelset *> vl;
              for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
                double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
                LevelSet *pl = FindLevelSet((int)d);
    	    if(!pl) yymsg(0, "Levelset Cut %d : unknown levelset %d", t, (int)d);
                else vl.push_back(pl->ls);
              }
              gLevelset *ls = new gLevelsetCut(vl);
              LevelSet *l = Create_LevelSet(t, ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (8)].c), "Crack")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              std::vector<const gLevelset *> vl;
              for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
                double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
                LevelSet *pl = FindLevelSet((int)d);
    	    if(!pl) yymsg(0, "Levelset Crack %d : unknown levelset %d", t, (int)d);
                else vl.push_back(pl->ls);
              }
              gLevelset *ls = new gLevelsetCrack(vl);
              LevelSet *l = Create_LevelSet(t, ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (8)].c), "Reverse")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d;
              List_Read((yyvsp[(7) - (8)].l), 0, &d);
              LevelSet *pl = FindLevelSet((int)d);
              gLevelset *ls = NULL;
              if(!pl) yymsg(0, "Levelset Reverse %d : unknown levelset %d", t, (int)d);
              else ls = new gLevelsetReverse(pl->ls);
              LevelSet *l = Create_LevelSet(t, ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
    #if !defined(HAVE_NO_POST)
          else if(!strcmp((yyvsp[(2) - (8)].c), "PostView")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              if(List_Nbr((yyvsp[(7) - (8)].l)) > 0){
                double d; List_Read((yyvsp[(7) - (8)].l), 0, &d);
                gLevelset *ls = new gLevelsetPostView((int)d, t);
                LevelSet *l = Create_LevelSet(ls->getTag(), ls);
                Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
              }
            }
          }
    #endif
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (8)].d));
          Free((yyvsp[(2) - (8)].c));
    #endif
        ;}
        break;
    
      case 147:
    #line 1961 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
            int t = (int)(yyvsp[(4) - (8)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              gLevelset *ls = new gLevelsetMathEval((yyvsp[(7) - (8)].c), t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition");
          Free((yyvsp[(2) - (8)].c)); Free((yyvsp[(7) - (8)].c));
    #endif
        ;}
        break;
    
      case 148:
    #line 1980 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
            int t = (int)(yyvsp[(4) - (6)].d);
            GModel *GM = GModel::current();
            GM->buildCutGModel(FindLevelSet(t)->ls);
            GM->setVisibility(0);
          }
          else
            yymsg(0, "Wrong levelset definition");
          Free((yyvsp[(2) - (6)].c));
    #endif
        ;}
        break;
    
      case 149:
    #line 1995 "Gmsh.y"
        {
    #if defined(HAVE_DINTEGRATION)
          if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d;
              List_Read((yyvsp[(12) - (14)].l), 0, &d);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetGenCylinder(pt, dir, d, t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (14)].c), "Cone") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d;
              List_Read((yyvsp[(12) - (14)].l), 0, &d);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetCone(pt, dir, d, t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 2){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d[2];
              for(int i = 0; i < 2; i++)
                List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetCylinder(pt, dir, d[0], d[1], t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 3){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d[3];
              for(int i = 0; i < 3; i++)
                List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetCylinder(pt, dir, d[0], d[1], d[2], t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (14)].c), "Ellipsoid") && List_Nbr((yyvsp[(12) - (14)].l)) == 3){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d[3];
              for(int i = 0; i < 3; i++)
                List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetEllipsoid(pt, dir, d[0], d[1], d[2], t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else if(!strcmp((yyvsp[(2) - (14)].c), "Quadric") && List_Nbr((yyvsp[(12) - (14)].l)) == 5){
            int t = (int)(yyvsp[(4) - (14)].d);
            if(FindLevelSet(t)){
    	  yymsg(0, "Levelset %d already exists", t);
            }
            else {
              double d[5];
              for(int i = 0; i < 5; i++)
                List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
              double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
              double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
              gLevelset *ls = new gLevelsetGeneralQuadric(pt, dir, d[0], d[1], 
                                                          d[2], d[3], d[4], t);
              LevelSet *l = Create_LevelSet(ls->getTag(), ls);
              Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
            }
          }
          else
            yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (14)].d));
          Free((yyvsp[(2) - (14)].c));
    #endif
        ;}
        break;
    
      case 150:
    #line 2103 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
    	Shape TheShape;
    	List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
    	DeleteShape(TheShape.Type, TheShape.Num);
          }
          List_Delete((yyvsp[(3) - (4)].l));
        ;}
        break;
    
      case 151:
    #line 2112 "Gmsh.y"
        {
          GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
        ;}
        break;
    
      case 152:
    #line 2116 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          if(!strcmp((yyvsp[(2) - (6)].c), "View")){
    	int index = (int)(yyvsp[(4) - (6)].d);
    	if(index >= 0 && index < (int)PView::list.size())
    	  delete PView::list[index];
    	else
    	  yymsg(0, "Unknown view %d", index);
          }
          else
    	yymsg(0, "Unknown command 'Delete %s'", (yyvsp[(2) - (6)].c));
    #endif
          Free((yyvsp[(2) - (6)].c));
        ;}
        break;
    
      case 153:
    #line 2131 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
            for(unsigned int i = 0; i < GModel::list.size(); i++){
              GModel::list[i]->destroy();
              GModel::list[i]->getGEOInternals()->destroy();
            }
          }
          else if(!strcmp((yyvsp[(2) - (3)].c), "Model")){
    	GModel::current()->destroy();
    	GModel::current()->getGEOInternals()->destroy();
          }
          else if(!strcmp((yyvsp[(2) - (3)].c), "Physicals")){
    	GModel::current()->getGEOInternals()->reset_physicals();
    	GModel::current()->deletePhysicalGroups();
          }
          else if(!strcmp((yyvsp[(2) - (3)].c), "Variables")){
    	gmsh_yysymbols.clear();
          }
          else{
    	if(gmsh_yysymbols.count((yyvsp[(2) - (3)].c)))
    	  gmsh_yysymbols.erase((yyvsp[(2) - (3)].c));
    	else
    	  yymsg(0, "Unknown object or expression to delete '%s'", (yyvsp[(2) - (3)].c));
          }
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 154:
    #line 2158 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
    	for(int i = PView::list.size() - 1; i >= 0; i--)
    	  if(PView::list[i]->getData()->empty()) delete PView::list[i];
          }
          else
    	yymsg(0, "Unknown command 'Delete %s %s'", (yyvsp[(2) - (4)].c), (yyvsp[(3) - (4)].c));
    #endif
          Free((yyvsp[(2) - (4)].c)); Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 155:
    #line 2175 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
    	Shape TheShape;
    	List_Read((yyvsp[(4) - (5)].l), i, &TheShape);
    	ColorShape(TheShape.Type, TheShape.Num, (yyvsp[(2) - (5)].u));
          }
          List_Delete((yyvsp[(4) - (5)].l));      
        ;}
        break;
    
      case 156:
    #line 2189 "Gmsh.y"
        {
          for(int i = 0; i < 4; i++)
    	VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 157:
    #line 2195 "Gmsh.y"
        {
          for(int i = 0; i < 4; i++)
    	VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 158:
    #line 2201 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
    	Shape TheShape;
    	List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
    	VisibilityShape(TheShape.Type, TheShape.Num, 1);
          }
          List_Delete((yyvsp[(3) - (4)].l));
        ;}
        break;
    
      case 159:
    #line 2210 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
    	Shape TheShape;
    	List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
    	VisibilityShape(TheShape.Type, TheShape.Num, 0);
          }
          List_Delete((yyvsp[(3) - (4)].l));
        ;}
        break;
    
      case 160:
    #line 2224 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
            std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
    	// Warning: we *don't* close included files (to allow user
    	// functions in these files). If you need to include many many
    	// files and don't have functions in the files, use "Merge"
    	// instead: some OSes limit the number of files a process can
    	// open simultaneously. The right solution would be of course
    	// to modify FunctionManager to reopen the files instead of
    	// using the FILE pointer, but hey, I'm lazy...
    	Msg::StatusBar(2, true, "Reading '%s'", tmp.c_str());
    	ParseFile(tmp, false, true);
    	SetBoundingBox();
    	Msg::StatusBar(2, true, "Read '%s'", tmp.c_str());
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "Print")){
    	// make sure we have the latest data from GEO_Internals in GModel
    	// (fixes bug where we would have no geometry in the picture if
    	// the print command is in the same file as the geometry)
    	GModel::current()->importGEOInternals();
            std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
    	CreateOutputFile(tmp, CTX::instance()->print.format);
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "Save")){
    	GModel::current()->importGEOInternals();
            std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
    	CreateOutputFile(tmp, CTX::instance()->mesh.format);
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "Merge") || !strcmp((yyvsp[(1) - (3)].c), "MergeWithBoundingBox")){
    	// MergeWithBoundingBox is deprecated
            std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
    	MergeFile(tmp, true);
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "System"))
    	SystemCall((yyvsp[(2) - (3)].c));
          else
    	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
          Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 161:
    #line 2264 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
    	int index = (int)(yyvsp[(4) - (7)].d);
    	if(index >= 0 && index < (int)PView::list.size()){
              std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
    	  PView::list[index]->write(tmp, CTX::instance()->post.fileFormat);
    	}
    	else
    	  yymsg(0, "Unknown view %d", index);
          }
          else
    	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
    #endif
          Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(6) - (7)].c));
        ;}
        break;
    
      case 162:
    #line 2281 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
    	int index = (int)(yyvsp[(5) - (7)].d);
    	if(index >= 0 && index < (int)PView::list.size())
    	  GModel::current()->getFields()->setBackgroundMesh(index);
    	else
    	  yymsg(0, "Unknown view %d", index);
          }
          else
    	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
    #endif
          Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(3) - (7)].c));
        ;}
        break;
    
      case 163:
    #line 2296 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
    	SleepInSeconds((yyvsp[(2) - (3)].d));
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "Remesh")){
    	yymsg(0, "Surface remeshing must be reinterfaced");
          }
          else if(!strcmp((yyvsp[(1) - (3)].c), "Mesh")){
    	int lock = CTX::instance()->lock;
    	CTX::instance()->lock = 0;
    	GModel::current()->importGEOInternals();
    	GModel::current()->mesh((int)(yyvsp[(2) - (3)].d));
    	CTX::instance()->lock = lock;
          }
          else
    	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
          Free((yyvsp[(1) - (3)].c));
        ;}
        break;
    
      case 164:
    #line 2315 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
           try {
    	 PluginManager::instance()->action((yyvsp[(3) - (7)].c), (yyvsp[(6) - (7)].c), 0);
           }
           catch(...) {
    	 yymsg(0, "Unknown action '%s' or plugin '%s'", (yyvsp[(6) - (7)].c), (yyvsp[(3) - (7)].c));
           }
    #endif
           Free((yyvsp[(3) - (7)].c)); Free((yyvsp[(6) - (7)].c));
         ;}
        break;
    
      case 165:
    #line 2327 "Gmsh.y"
        {
    #if !defined(HAVE_NO_POST)
          if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
    	PView::combine(false, 1, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromVisibleViews"))
    	PView::combine(false, 0, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "ElementsByViewName"))
    	PView::combine(false, 2, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "TimeStepsFromAllViews"))
    	PView::combine(true, 1, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "TimeStepsFromVisibleViews"))
    	PView::combine(true, 0, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "TimeStepsByViewName"))
    	PView::combine(true, 2, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "Views"))
    	PView::combine(false, 1, CTX::instance()->post.combineRemoveOrig);
          else if(!strcmp((yyvsp[(2) - (3)].c), "TimeSteps"))
    	PView::combine(true, 2, CTX::instance()->post.combineRemoveOrig);
          else
    	yymsg(0, "Unknown 'Combine' command");
    #endif
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 166:
    #line 2351 "Gmsh.y"
        {
          exit(0);
        ;}
        break;
    
      case 167:
    #line 2355 "Gmsh.y"
        {
          // FIXME: this is a hack to force a transfer from the old DB to
          // the new DB. This will become unnecessary if/when we fill the 
          // GModel directly during parsing.
          GModel::current()->importGEOInternals();
        ;}
        break;
    
      case 168:
    #line 2362 "Gmsh.y"
        {
          CTX::instance()->forcedBBox = 0;
          GModel::current()->importGEOInternals();
          SetBoundingBox();
        ;}
        break;
    
      case 169:
    #line 2368 "Gmsh.y"
        {
          CTX::instance()->forcedBBox = 1;
          SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
        ;}
        break;
    
      case 170:
    #line 2373 "Gmsh.y"
        {
    #if defined(HAVE_OPENGL)
          drawContext::global()->draw();
    #endif
        ;}
        break;
    
      case 171:
    #line 2379 "Gmsh.y"
        {
           GModel::current()->createTopologyFromMesh();
        ;}
        break;
    
      case 172:
    #line 2389 "Gmsh.y"
        {
          LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
          LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
          LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
          LoopControlVariablesNameTab[ImbricatedLoop] = NULL;
          fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
          yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
          if((yyvsp[(3) - (6)].d) > (yyvsp[(5) - (6)].d))
    	skip_until("For", "EndFor");
          else
    	ImbricatedLoop++;
          if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
    	yymsg(0, "Reached maximum number of imbricated loops");
    	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
          }
        ;}
        break;
    
      case 173:
    #line 2406 "Gmsh.y"
        {
          LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
          LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
          LoopControlVariablesTab[ImbricatedLoop][2] = (yyvsp[(7) - (8)].d);
          LoopControlVariablesNameTab[ImbricatedLoop] = NULL;
          fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
          yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
          if(((yyvsp[(7) - (8)].d) > 0. && (yyvsp[(3) - (8)].d) > (yyvsp[(5) - (8)].d)) || ((yyvsp[(7) - (8)].d) < 0. && (yyvsp[(3) - (8)].d) < (yyvsp[(5) - (8)].d)))
    	skip_until("For", "EndFor");
          else
    	ImbricatedLoop++;
          if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
    	yymsg(0, "Reached maximum number of imbricated loops");
    	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
          }
        ;}
        break;
    
      case 174:
    #line 2423 "Gmsh.y"
        {
          LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
          LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
          LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
          LoopControlVariablesNameTab[ImbricatedLoop] = (yyvsp[(2) - (8)].c);
          gmsh_yysymbols[(yyvsp[(2) - (8)].c)].resize(1);
          gmsh_yysymbols[(yyvsp[(2) - (8)].c)][0] = (yyvsp[(5) - (8)].d);
          fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
          yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
          if((yyvsp[(5) - (8)].d) > (yyvsp[(7) - (8)].d)) 
    	skip_until("For", "EndFor");
          else
    	ImbricatedLoop++;
          if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
    	yymsg(0, "Reached maximum number of imbricated loops");
    	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
          }
        ;}
        break;
    
      case 175:
    #line 2442 "Gmsh.y"
        {
          LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
          LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
          LoopControlVariablesTab[ImbricatedLoop][2] = (yyvsp[(9) - (10)].d);
          LoopControlVariablesNameTab[ImbricatedLoop] = (yyvsp[(2) - (10)].c);
          gmsh_yysymbols[(yyvsp[(2) - (10)].c)].resize(1);
          gmsh_yysymbols[(yyvsp[(2) - (10)].c)][0] = (yyvsp[(5) - (10)].d);
          fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
          yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
          if(((yyvsp[(9) - (10)].d) > 0. && (yyvsp[(5) - (10)].d) > (yyvsp[(7) - (10)].d)) || ((yyvsp[(9) - (10)].d) < 0. && (yyvsp[(5) - (10)].d) < (yyvsp[(7) - (10)].d)))
    	skip_until("For", "EndFor");
          else
    	ImbricatedLoop++;
          if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
    	yymsg(0, "Reached maximum number of imbricated loops");
    	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
          }
        ;}
        break;
    
      case 176:
    #line 2461 "Gmsh.y"
        {
          if(ImbricatedLoop <= 0){
    	yymsg(0, "Invalid For/EndFor loop");
    	ImbricatedLoop = 0;
          }
          else{
    	double x0 = LoopControlVariablesTab[ImbricatedLoop - 1][0];
    	double x1 = LoopControlVariablesTab[ImbricatedLoop - 1][1];
    	double step = LoopControlVariablesTab[ImbricatedLoop - 1][2];
    	int do_next = (step > 0.) ? (x0 + step <= x1) : (x0 + step >= x1);
    	if(do_next){
    	  LoopControlVariablesTab[ImbricatedLoop - 1][0] +=
    	    LoopControlVariablesTab[ImbricatedLoop - 1][2];
    	  if(LoopControlVariablesNameTab[ImbricatedLoop - 1]){
    	    if(!gmsh_yysymbols.count(LoopControlVariablesNameTab[ImbricatedLoop - 1]))
    	      yymsg(0, "Unknown loop variable");
    	    else
    	      gmsh_yysymbols[LoopControlVariablesNameTab[ImbricatedLoop - 1]][0] +=
    		LoopControlVariablesTab[ImbricatedLoop - 1][2];
    	  }
    	  fsetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop - 1]);
    	  gmsh_yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop - 1];
    	}
    	else
    	  ImbricatedLoop--;
          }
        ;}
        break;
    
      case 177:
    #line 2489 "Gmsh.y"
        {
          if(!FunctionManager::Instance()->createFunction
             ((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
    	yymsg(0, "Redefinition of function %s", (yyvsp[(2) - (2)].c));
          skip_until(NULL, "Return");
          //FIXME: wee leak $2
        ;}
        break;
    
      case 178:
    #line 2497 "Gmsh.y"
        {
          if(!FunctionManager::Instance()->leaveFunction
             (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
    	yymsg(0, "Error while exiting function");
        ;}
        break;
    
      case 179:
    #line 2503 "Gmsh.y"
        {
          if(!FunctionManager::Instance()->enterFunction
             ((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
    	yymsg(0, "Unknown function %s", (yyvsp[(2) - (3)].c));
          //FIXME: wee leak $2
        ;}
        break;
    
      case 180:
    #line 2510 "Gmsh.y"
        {
          if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
        ;}
        break;
    
      case 181:
    #line 2514 "Gmsh.y"
        {
        ;}
        break;
    
      case 182:
    #line 2523 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
    		    (yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		    NULL, (yyval.l));
          List_Delete((yyvsp[(4) - (5)].l));
        ;}
        break;
    
      case 183:
    #line 2531 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
    		    0., 0., 0., (yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d),
    		    NULL, (yyval.l));
          List_Delete((yyvsp[(10) - (11)].l));
        ;}
        break;
    
      case 184:
    #line 2539 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
    		    (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(7) - (13)].v)[0], (yyvsp[(7) - (13)].v)[1], (yyvsp[(7) - (13)].v)[2], (yyvsp[(9) - (13)].d),
    		    NULL, (yyval.l));
          List_Delete((yyvsp[(12) - (13)].l));
        ;}
        break;
    
      case 185:
    #line 2547 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 186:
    #line 2551 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
    		    (yyvsp[(2) - (7)].v)[0], (yyvsp[(2) - (7)].v)[1], (yyvsp[(2) - (7)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		    &extr, (yyval.l));
          List_Delete((yyvsp[(4) - (7)].l));
        ;}
        break;
    
      case 187:
    #line 2559 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 188:
    #line 2563 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
    		    0., 0., 0., (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(7) - (13)].d),
    		    &extr, (yyval.l));
          List_Delete((yyvsp[(10) - (13)].l));
        ;}
        break;
    
      case 189:
    #line 2571 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 190:
    #line 2575 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
    		    (yyvsp[(3) - (15)].v)[0], (yyvsp[(3) - (15)].v)[1], (yyvsp[(3) - (15)].v)[2], (yyvsp[(5) - (15)].v)[0], (yyvsp[(5) - (15)].v)[1], (yyvsp[(5) - (15)].v)[2], (yyvsp[(7) - (15)].v)[0], (yyvsp[(7) - (15)].v)[1], (yyvsp[(7) - (15)].v)[2], (yyvsp[(9) - (15)].d),
    		    &extr, (yyval.l));
          List_Delete((yyvsp[(12) - (15)].l));
        ;}
        break;
    
      case 191:
    #line 2583 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 192:
    #line 2587 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    		    &extr, (yyval.l));
          List_Delete((yyvsp[(3) - (6)].l));
        ;}
        break;
    
      case 193:
    #line 2596 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
    		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 194:
    #line 2603 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
    		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 195:
    #line 2610 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
    		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 196:
    #line 2617 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
    		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 197:
    #line 2624 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
    		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 198:
    #line 2631 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
    		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 199:
    #line 2638 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
    		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 200:
    #line 2645 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
    		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 201:
    #line 2652 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
    		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
    		   NULL, (yyval.l));
        ;}
        break;
    
      case 202:
    #line 2659 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 203:
    #line 2663 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
    		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 204:
    #line 2670 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 205:
    #line 2674 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
    		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 206:
    #line 2681 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 207:
    #line 2685 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
    		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 208:
    #line 2692 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 209:
    #line 2696 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
    		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 210:
    #line 2703 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 211:
    #line 2707 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
    		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 212:
    #line 2714 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 213:
    #line 2718 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
    		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 214:
    #line 2725 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 215:
    #line 2729 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
    		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 216:
    #line 2736 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 217:
    #line 2740 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
    		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 218:
    #line 2747 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        ;}
        break;
    
      case 219:
    #line 2751 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(Shape));
          ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
    		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
    		   &extr, (yyval.l));
        ;}
        break;
    
      case 220:
    #line 2762 "Gmsh.y"
        {
        ;}
        break;
    
      case 221:
    #line 2765 "Gmsh.y"
        {
        ;}
        break;
    
      case 222:
    #line 2771 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = true;
          extr.mesh.NbLayer = 1;
          extr.mesh.NbElmLayer.clear();
          extr.mesh.hLayer.clear();
          extr.mesh.NbElmLayer.push_back((int)fabs((yyvsp[(3) - (5)].d)));
          extr.mesh.hLayer.push_back(1.);
        ;}
        break;
    
      case 223:
    #line 2780 "Gmsh.y"
        {
          extr.mesh.ExtrudeMesh = true;
          extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
          if(List_Nbr((yyvsp[(3) - (7)].l)) == List_Nbr((yyvsp[(5) - (7)].l))){
    	extr.mesh.NbElmLayer.clear();
    	extr.mesh.hLayer.clear();
    	for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
    	  double d;
    	  List_Read((yyvsp[(3) - (7)].l), i, &d);
    	  extr.mesh.NbElmLayer.push_back((d > 0) ? (int)d : 1);
    	  List_Read((yyvsp[(5) - (7)].l), i, &d);
    	  extr.mesh.hLayer.push_back(d);
    	}
          }
          else
    	yymsg(0, "Wrong layer definition {%d, %d}", List_Nbr((yyvsp[(3) - (7)].l)), List_Nbr((yyvsp[(5) - (7)].l)));
          List_Delete((yyvsp[(3) - (7)].l));
          List_Delete((yyvsp[(5) - (7)].l));
        ;}
        break;
    
      case 224:
    #line 2800 "Gmsh.y"
        {
          yymsg(0, "Explicit region numbers in layers are deprecated");
          extr.mesh.ExtrudeMesh = true;
          extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (9)].l));
          if(List_Nbr((yyvsp[(3) - (9)].l)) == List_Nbr((yyvsp[(5) - (9)].l)) && List_Nbr((yyvsp[(3) - (9)].l)) == List_Nbr((yyvsp[(7) - (9)].l))){
    	extr.mesh.NbElmLayer.clear();
    	extr.mesh.hLayer.clear();
    	for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
    	  double d;
    	  List_Read((yyvsp[(3) - (9)].l), i, &d);
    	  extr.mesh.NbElmLayer.push_back((d > 0) ? (int)d : 1);
    	  List_Read((yyvsp[(7) - (9)].l), i, &d);
    	  extr.mesh.hLayer.push_back(d);
    	}
          }
          else
    	yymsg(0, "Wrong layer definition {%d, %d, %d}", List_Nbr((yyvsp[(3) - (9)].l)), 
    	      List_Nbr((yyvsp[(5) - (9)].l)), List_Nbr((yyvsp[(7) - (9)].l)));
          List_Delete((yyvsp[(3) - (9)].l));
          List_Delete((yyvsp[(5) - (9)].l));
          List_Delete((yyvsp[(7) - (9)].l));
        ;}
        break;
    
      case 225:
    #line 2823 "Gmsh.y"
        {
          extr.mesh.Recombine = true;
        ;}
        break;
    
      case 226:
    #line 2827 "Gmsh.y"
        {
          int num = (int)(yyvsp[(3) - (9)].d);
          if(FindSurface(num)){
    	yymsg(0, "Surface %d already exists", num);
          }
          else{
    	Surface *s = Create_Surface(num, MSH_SURF_DISCRETE);
    	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
    	extr.mesh.Holes[num].first = (yyvsp[(8) - (9)].d);
    	extr.mesh.Holes[num].second.clear();
    	for(int i = 0; i < List_Nbr((yyvsp[(6) - (9)].l)); i++){
    	  double d;
    	  List_Read((yyvsp[(6) - (9)].l), i, &d);
    	  extr.mesh.Holes[num].second.push_back((int)d);
    	}
          }
          List_Delete((yyvsp[(6) - (9)].l));
        ;}
        break;
    
      case 227:
    #line 2850 "Gmsh.y"
        {
          (yyval.v)[0] = (yyval.v)[1] = 1.;
        ;}
        break;
    
      case 228:
    #line 2854 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
            (yyval.v)[0] = 1.;
          else if(!strcmp((yyvsp[(2) - (3)].c), "Bump"))
            (yyval.v)[0] = 2.;
          else{
            yymsg(0, "Unknown transfinite mesh type");
            (yyval.v)[0] = 1.;
          }
          (yyval.v)[1] = (yyvsp[(3) - (3)].d);
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 229:
    #line 2869 "Gmsh.y"
        {
          (yyval.i) = -1; // left
        ;}
        break;
    
      case 230:
    #line 2873 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
            (yyval.i) = 1;
          else if(!strcmp((yyvsp[(1) - (1)].c), "Left"))
            (yyval.i) = -1;
          else // alternated
            (yyval.i) = 0;
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 231:
    #line 2885 "Gmsh.y"
        {
         (yyval.l) = List_Create(1, 1, sizeof(double));
       ;}
        break;
    
      case 232:
    #line 2889 "Gmsh.y"
        {
         (yyval.l) = (yyvsp[(2) - (2)].l);
       ;}
        break;
    
      case 233:
    #line 2894 "Gmsh.y"
        {
          (yyval.i) = 45;
        ;}
        break;
    
      case 234:
    #line 2898 "Gmsh.y"
        {
          (yyval.i) = (int)(yyvsp[(2) - (2)].d);
        ;}
        break;
    
      case 235:
    #line 2905 "Gmsh.y"
        {
          int type = (int)(yyvsp[(6) - (7)].v)[0];
          double coef = fabs((yyvsp[(6) - (7)].v)[1]);
          if(!(yyvsp[(3) - (7)].l)){
            List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
            if(List_Nbr(tmp)){
              for(int i = 0; i < List_Nbr(tmp); i++){
                Curve *c;
                List_Read(tmp, i, &c);
                c->Method = MESH_TRANSFINITE;
                c->nbPointsTransfinite = ((yyvsp[(5) - (7)].d) > 2) ? (int)(yyvsp[(5) - (7)].d) : 2;
                c->typeTransfinite = type;
                c->coeffTransfinite = coef;
              }
            }
            else{
              for(GModel::eiter it = GModel::current()->firstEdge(); 
                  it != GModel::current()->lastEdge(); it++){
                (*it)->meshAttributes.Method = MESH_TRANSFINITE;
                (*it)->meshAttributes.nbPointsTransfinite = ((yyvsp[(5) - (7)].d) > 2) ? (int)(yyvsp[(5) - (7)].d) : 2;
                (*it)->meshAttributes.typeTransfinite = type;
                (*it)->meshAttributes.coeffTransfinite = coef;
              }
            }
            List_Delete(tmp);
          }
          else{
            for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
              double d;
              List_Read((yyvsp[(3) - (7)].l), i, &d);
              int j = (int)fabs(d);
              for(int sign = -1; sign <= 1; sign += 2){
                Curve *c = FindCurve(sign * j);
                if(c){
                  c->Method = MESH_TRANSFINITE;
                  c->nbPointsTransfinite = ((yyvsp[(5) - (7)].d) > 2) ? (int)(yyvsp[(5) - (7)].d) : 2;
                  c->typeTransfinite = type * sign(d);
                  c->coeffTransfinite = coef;
                }
                else{
                  GEdge *ge = GModel::current()->getEdgeByTag(sign * j);
                  if(ge){
                    ge->meshAttributes.Method = MESH_TRANSFINITE;
                    ge->meshAttributes.nbPointsTransfinite = ((yyvsp[(5) - (7)].d) > 2) ? (int)(yyvsp[(5) - (7)].d) : 2;
                    ge->meshAttributes.typeTransfinite = type * sign(d);
                    ge->meshAttributes.coeffTransfinite = coef;
                  }
                  else if(sign > 0)
                    yymsg(0, "Unknown line %d", j);
                }
              }
            }
            List_Delete((yyvsp[(3) - (7)].l));
          }
        ;}
        break;
    
      case 236:
    #line 2961 "Gmsh.y"
        {
          int k = List_Nbr((yyvsp[(4) - (6)].l));
          if(k != 0 && k != 3 && k != 4){
            yymsg(0, "Wrong definition of Transfinite Surface: 0, 3 or 4 points needed");
          }
          else{
            if(!(yyvsp[(3) - (6)].l)){
              List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
              if(List_Nbr(tmp)){
                for(int i = 0; i < List_Nbr(tmp); i++){
                  Surface *s;
                  List_Read(tmp, i, &s);
                  s->Method = MESH_TRANSFINITE;
                  s->Recombine_Dir = (yyvsp[(5) - (6)].i);
                  List_Reset(s->TrsfPoints);
                }
              }
              else{
                for(GModel::fiter it = GModel::current()->firstFace(); 
                    it != GModel::current()->lastFace(); it++){
                  (*it)->meshAttributes.Method = MESH_TRANSFINITE;
                  (*it)->meshAttributes.transfiniteArrangement = (yyvsp[(5) - (6)].i);
                }
              }
              List_Delete(tmp);
            }
            else{
              for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
                double d;
                List_Read((yyvsp[(3) - (6)].l), i, &d);
                Surface *s = FindSurface((int)d);
                if(s){
                  s->Method = MESH_TRANSFINITE;
                  s->Recombine_Dir = (yyvsp[(5) - (6)].i);
                  List_Reset(s->TrsfPoints);
                  for(int j = 0; j < k; j++){
                    double p;
                    List_Read((yyvsp[(4) - (6)].l), j, &p);
                    Vertex *v = FindPoint((int)fabs(p));
                    if(v)
                      List_Add(s->TrsfPoints, &v);
                    else
                      yymsg(0, "Unknown point %d", (int)fabs(p));
                  }
                }
                else{
                  GFace *gf = GModel::current()->getFaceByTag((int)d);
                  if(gf){
                    gf->meshAttributes.Method = MESH_TRANSFINITE;
                    gf->meshAttributes.transfiniteArrangement = (yyvsp[(5) - (6)].i);
                    for(int j = 0; j < k; j++){
                      double p;
                      List_Read((yyvsp[(4) - (6)].l), j, &p);
                      GVertex *gv = GModel::current()->getVertexByTag((int)fabs(p));
                      if(gv)
                        gf->meshAttributes.corners.push_back(gv);
                      else
                        yymsg(0, "Unknown point %d", (int)fabs(p));
                    }
                  }
                  else
                    yymsg(0, "Unknown surface %d", (int)d);
                }
              }
              List_Delete((yyvsp[(3) - (6)].l));
            }
          }
          List_Delete((yyvsp[(4) - (6)].l));
        ;}
        break;
    
      case 237:
    #line 3031 "Gmsh.y"
        {
          yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
          List_Delete((yyvsp[(7) - (8)].l));
        ;}
        break;
    
      case 238:
    #line 3036 "Gmsh.y"
        {
          int k = List_Nbr((yyvsp[(4) - (5)].l));
          if(k != 0 && k != 6 && k != 8){
            yymsg(0, "Wrong definition of Transfinite Volume: "
                  "%d points instead of 6 or 8", k);
          }
          else{
            if(!(yyvsp[(3) - (5)].l)){
              List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
              if(List_Nbr(tmp)){
                for(int i = 0; i < List_Nbr(tmp); i++){
                  Volume *v;
                  List_Read(tmp, i, &v);
                  v->Method = MESH_TRANSFINITE;
                  List_Reset(v->TrsfPoints);
                }
              }
              else{
                for(GModel::riter it = GModel::current()->firstRegion(); 
                    it != GModel::current()->lastRegion(); it++){
                  (*it)->meshAttributes.Method = MESH_TRANSFINITE;
                }
              }
              List_Delete(tmp);
            }
            else{
              for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
                double d;
                List_Read((yyvsp[(3) - (5)].l), i, &d);
                Volume *v = FindVolume((int)d);
                if(v){
                  v->Method = MESH_TRANSFINITE;
                  List_Reset(v->TrsfPoints);
                  for(int i = 0; i < k; i++){
                    double p;
                    List_Read((yyvsp[(4) - (5)].l), i, &p);
                    Vertex *vert = FindPoint((int)fabs(p));
                    if(vert)
                      List_Add(v->TrsfPoints, &vert);
                    else
                      yymsg(0, "Unknown point %d", (int)fabs(p));
                  }
                }
                else{
                  GRegion *gr = GModel::current()->getRegionByTag((int)d);
                  if(gr){
                    gr->meshAttributes.Method = MESH_TRANSFINITE;
                    for(int i = 0; i < k; i++){
                      double p;
                      List_Read((yyvsp[(4) - (5)].l), i, &p);
                      GVertex *gv = GModel::current()->getVertexByTag((int)fabs(p));
                      if(gv)
                        gr->meshAttributes.corners.push_back(gv);
                      else
                        yymsg(0, "Unknown point %d", (int)fabs(p));
                    }
                  }
                  else
                    yymsg(0, "Unknown volume %d", (int)d);
                }
              }
              List_Delete((yyvsp[(3) - (5)].l));
            }
          }
          List_Delete((yyvsp[(4) - (5)].l));
        ;}
        break;
    
      case 239:
    #line 3103 "Gmsh.y"
        {
          if(!(yyvsp[(3) - (5)].l)){
    	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
            if(List_Nbr(tmp)){
              for(int i = 0; i < List_Nbr(tmp); i++){
                Surface *s;
                List_Read(tmp, i, &s);
                s->Recombine = 1;
                s->RecombineAngle = (yyvsp[(4) - (5)].i);
              }
            }
            else{
              for(GModel::fiter it = GModel::current()->firstFace(); 
                  it != GModel::current()->lastFace(); it++){
                (*it)->meshAttributes.recombine = 1;
                (*it)->meshAttributes.recombineAngle = (yyvsp[(4) - (5)].i);
              }
            }
            List_Delete(tmp);
          }
          else{
            for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
              double d;
              List_Read((yyvsp[(3) - (5)].l), i, &d);
              Surface *s = FindSurface((int)d);
              if(s){
                s->Recombine = 1;
                s->RecombineAngle = (yyvsp[(4) - (5)].i);
              }
              else{
                GFace *gf = GModel::current()->getFaceByTag((int)d);
                if(gf){
                  gf->meshAttributes.recombine = 1;
                  gf->meshAttributes.recombineAngle = (yyvsp[(4) - (5)].i);
                }
                else
                  yymsg(1, "Unknown surface %d", (int)d);
              }
            }
            List_Delete((yyvsp[(3) - (5)].l));
          }
        ;}
        break;
    
      case 240:
    #line 3146 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
    	double d;
    	List_Read((yyvsp[(3) - (6)].l), i, &d);
    	int j = (int)d;
    	Surface *s = FindSurface(j);
    	if(s){
              s->TransfiniteSmoothing = (int)(yyvsp[(5) - (6)].d);
            }
            else{
    	  GFace *gf = GModel::current()->getFaceByTag(j);
    	  if(gf)
                gf->meshAttributes.transfiniteSmoothing = (int)(yyvsp[(5) - (6)].d);
              else
    	    yymsg(1, "Unknown surface %d", (int)(yyvsp[(5) - (6)].d));
            }
          }
          List_Delete((yyvsp[(3) - (6)].l));
        ;}
        break;
    
      case 241:
    #line 3172 "Gmsh.y"
        { 
          Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
          if(s){
    	setSurfaceEmbeddedPoints(s, (yyvsp[(3) - (10)].l));
          }
          else{
            GFace *gf = GModel::current()->getFaceByTag((int)(yyvsp[(8) - (10)].d));
            if(gf){
              for(int i = 0; i < List_Nbr((yyvsp[(3) - (10)].l)); i++){
                int iPoint;
                List_Read((yyvsp[(3) - (10)].l), i, &iPoint);
                GVertex *gv = GModel::current()->getVertexByTag(iPoint);
                if(gv)
                  gf->addEmbeddedVertex(gv);
                else
                  yymsg(0, "Unknown point %d", iPoint);
              }
            }
            else
              yymsg(0, "Unknown surface %d", (int)(yyvsp[(8) - (10)].d));
          }
        ;}
        break;
    
      case 242:
    #line 3195 "Gmsh.y"
        {
          Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
          if(s){
    	setSurfaceEmbeddedCurves(s, (yyvsp[(3) - (10)].l));
          }
          else{
            GFace *gf = GModel::current()->getFaceByTag((int)(yyvsp[(8) - (10)].d));
            if(gf){
              for(int i = 0; i < List_Nbr((yyvsp[(3) - (10)].l)); i++){
                int iCurve;
                List_Read((yyvsp[(3) - (10)].l), i, &iCurve);
                GEdge *ge = GModel::current()->getEdgeByTag(iCurve);
                if(ge)
                  gf->addEmbeddedEdge(ge);
                else
                  yymsg(0, "Unknown line %d", iCurve);
              }
            }
            else
              yymsg(0, "Unknown surface %d", (int)(yyvsp[(8) - (10)].d));
          }
        ;}
        break;
    
      case 243:
    #line 3218 "Gmsh.y"
        {
        ;}
        break;
    
      case 244:
    #line 3221 "Gmsh.y"
        {
        ;}
        break;
    
      case 245:
    #line 3230 "Gmsh.y"
        { 
          ReplaceAllDuplicates();
        ;}
        break;
    
      case 246:
    #line 3234 "Gmsh.y"
        { 
          if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
            ReplaceAllDuplicates();
          else if(!strcmp((yyvsp[(2) - (3)].c), "Mesh"))
            GModel::current()->removeDuplicateMeshVertices(CTX::instance()->geom.tolerance);
          else
            yymsg(0, "Unknown coherence command");
          Free((yyvsp[(2) - (3)].c));
        ;}
        break;
    
      case 247:
    #line 3249 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
        break;
    
      case 248:
    #line 3250 "Gmsh.y"
        { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
        break;
    
      case 249:
    #line 3251 "Gmsh.y"
        { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
        break;
    
      case 250:
    #line 3252 "Gmsh.y"
        { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
        break;
    
      case 251:
    #line 3253 "Gmsh.y"
        { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
        break;
    
      case 252:
    #line 3254 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
        break;
    
      case 253:
    #line 3255 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
        break;
    
      case 254:
    #line 3256 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
        break;
    
      case 255:
    #line 3258 "Gmsh.y"
        { 
          if(!(yyvsp[(3) - (3)].d))
    	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
          else
    	(yyval.d) = (yyvsp[(1) - (3)].d) / (yyvsp[(3) - (3)].d);     
        ;}
        break;
    
      case 256:
    #line 3264 "Gmsh.y"
        { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
        break;
    
      case 257:
    #line 3265 "Gmsh.y"
        { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
        break;
    
      case 258:
    #line 3266 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
        break;
    
      case 259:
    #line 3267 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
        break;
    
      case 260:
    #line 3268 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 261:
    #line 3269 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 262:
    #line 3270 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 263:
    #line 3271 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 264:
    #line 3272 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 265:
    #line 3273 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
        break;
    
      case 266:
    #line 3274 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
        break;
    
      case 267:
    #line 3275 "Gmsh.y"
        { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 268:
    #line 3276 "Gmsh.y"
        { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 269:
    #line 3277 "Gmsh.y"
        { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
        break;
    
      case 270:
    #line 3278 "Gmsh.y"
        { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 271:
    #line 3279 "Gmsh.y"
        { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 272:
    #line 3280 "Gmsh.y"
        { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 273:
    #line 3281 "Gmsh.y"
        { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 274:
    #line 3282 "Gmsh.y"
        { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 275:
    #line 3283 "Gmsh.y"
        { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 276:
    #line 3284 "Gmsh.y"
        { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 277:
    #line 3285 "Gmsh.y"
        { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
        break;
    
      case 278:
    #line 3286 "Gmsh.y"
        { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 279:
    #line 3287 "Gmsh.y"
        { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 280:
    #line 3288 "Gmsh.y"
        { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 281:
    #line 3289 "Gmsh.y"
        { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 282:
    #line 3290 "Gmsh.y"
        { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
        break;
    
      case 283:
    #line 3291 "Gmsh.y"
        { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 284:
    #line 3292 "Gmsh.y"
        { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 285:
    #line 3293 "Gmsh.y"
        { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 286:
    #line 3294 "Gmsh.y"
        { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 287:
    #line 3295 "Gmsh.y"
        { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
        break;
    
      case 288:
    #line 3297 "Gmsh.y"
        { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 289:
    #line 3298 "Gmsh.y"
        { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 290:
    #line 3299 "Gmsh.y"
        { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
        break;
    
      case 291:
    #line 3300 "Gmsh.y"
        { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 292:
    #line 3301 "Gmsh.y"
        { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 293:
    #line 3302 "Gmsh.y"
        { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 294:
    #line 3303 "Gmsh.y"
        { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 295:
    #line 3304 "Gmsh.y"
        { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 296:
    #line 3305 "Gmsh.y"
        { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
        break;
    
      case 297:
    #line 3306 "Gmsh.y"
        { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 298:
    #line 3307 "Gmsh.y"
        { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
        break;
    
      case 299:
    #line 3308 "Gmsh.y"
        { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 300:
    #line 3309 "Gmsh.y"
        { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 301:
    #line 3310 "Gmsh.y"
        { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 302:
    #line 3311 "Gmsh.y"
        { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 303:
    #line 3312 "Gmsh.y"
        { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
        break;
    
      case 304:
    #line 3313 "Gmsh.y"
        { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
        break;
    
      case 305:
    #line 3314 "Gmsh.y"
        { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 306:
    #line 3315 "Gmsh.y"
        { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 307:
    #line 3316 "Gmsh.y"
        { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
        break;
    
      case 308:
    #line 3317 "Gmsh.y"
        { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
        break;
    
      case 309:
    #line 3326 "Gmsh.y"
        { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
        break;
    
      case 310:
    #line 3327 "Gmsh.y"
        { (yyval.d) = 3.141592653589793; ;}
        break;
    
      case 311:
    #line 3328 "Gmsh.y"
        { (yyval.d) = Msg::GetCommRank(); ;}
        break;
    
      case 312:
    #line 3329 "Gmsh.y"
        { (yyval.d) = Msg::GetCommSize(); ;}
        break;
    
      case 313:
    #line 3330 "Gmsh.y"
        { (yyval.d) = GetGmshMajorVersion(); ;}
        break;
    
      case 314:
    #line 3331 "Gmsh.y"
        { (yyval.d) = GetGmshMinorVersion(); ;}
        break;
    
      case 315:
    #line 3332 "Gmsh.y"
        { (yyval.d) = GetGmshPatchVersion(); ;}
        break;
    
      case 316:
    #line 3337 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
    	(yyval.d) = 0.;
          }
          else
    	(yyval.d) = gmsh_yysymbols[(yyvsp[(1) - (1)].c)][0];
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 317:
    #line 3350 "Gmsh.y"
        {
          char tmpstring[1024];
          sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
          if(!gmsh_yysymbols.count(tmpstring)){
    	yymsg(0, "Unknown variable '%s'", tmpstring);
    	(yyval.d) = 0.;
          }
          else
    	(yyval.d) = gmsh_yysymbols[tmpstring][0];
          Free((yyvsp[(1) - (5)].c));
        ;}
        break;
    
      case 318:
    #line 3362 "Gmsh.y"
        {
          int index = (int)(yyvsp[(3) - (4)].d);
          if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
    	(yyval.d) = 0.;
          }
          else if((int)gmsh_yysymbols[(yyvsp[(1) - (4)].c)].size() < index + 1){
    	yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (4)].c), index);
    	(yyval.d) = 0.;
          }
          else
    	(yyval.d) = gmsh_yysymbols[(yyvsp[(1) - (4)].c)][index];
          Free((yyvsp[(1) - (4)].c));
        ;}
        break;
    
      case 319:
    #line 3377 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
    	(yyval.d) = 0.;
          }
          else
    	(yyval.d) = gmsh_yysymbols[(yyvsp[(2) - (4)].c)].size();
          Free((yyvsp[(2) - (4)].c));
        ;}
        break;
    
      case 320:
    #line 3387 "Gmsh.y"
        {
          if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
    	(yyval.d) = 0.;
          }
          else
    	(yyval.d) = (gmsh_yysymbols[(yyvsp[(1) - (2)].c)][0] += (yyvsp[(2) - (2)].i));
          Free((yyvsp[(1) - (2)].c));
        ;}
        break;
    
      case 321:
    #line 3397 "Gmsh.y"
        {
          int index = (int)(yyvsp[(3) - (5)].d);
          if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (5)].c));
    	(yyval.d) = 0.;
          }
          else if((int)gmsh_yysymbols[(yyvsp[(1) - (5)].c)].size() < index + 1){
    	yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (5)].c), index);
    	(yyval.d) = 0.;
          }
          else
    	(yyval.d) = (gmsh_yysymbols[(yyvsp[(1) - (5)].c)][index] += (yyvsp[(5) - (5)].i));
          Free((yyvsp[(1) - (5)].c));
        ;}
        break;
    
      case 322:
    #line 3415 "Gmsh.y"
        {
          NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
          Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
        ;}
        break;
    
      case 323:
    #line 3420 "Gmsh.y"
        {
          NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
          Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
        ;}
        break;
    
      case 324:
    #line 3425 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
    	d += (yyvsp[(4) - (4)].i);
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d);
    	(yyval.d) = d;
          }
          Free((yyvsp[(1) - (4)].c)); Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 325:
    #line 3435 "Gmsh.y"
        {
          double d = 0.;
          if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
    	d += (yyvsp[(7) - (7)].i);
    	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d);
    	(yyval.d) = d;
          }
          Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(6) - (7)].c));
        ;}
        break;
    
      case 326:
    #line 3445 "Gmsh.y"
        { 
          (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
          Free((yyvsp[(3) - (6)].c));
        ;}
        break;
    
      case 327:
    #line 3453 "Gmsh.y"
        {
          memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
        ;}
        break;
    
      case 328:
    #line 3457 "Gmsh.y"
        {
          for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
        ;}
        break;
    
      case 329:
    #line 3461 "Gmsh.y"
        { 
          for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
        ;}
        break;
    
      case 330:
    #line 3465 "Gmsh.y"
        { 
          for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
        ;}
        break;
    
      case 331:
    #line 3469 "Gmsh.y"
        {
          for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
        ;}
        break;
    
      case 332:
    #line 3476 "Gmsh.y"
        { 
          (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
        ;}
        break;
    
      case 333:
    #line 3480 "Gmsh.y"
        { 
          (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
        ;}
        break;
    
      case 334:
    #line 3484 "Gmsh.y"
        {
          (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
        ;}
        break;
    
      case 335:
    #line 3488 "Gmsh.y"
        {
          (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
        ;}
        break;
    
      case 336:
    #line 3495 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(List_T*));
          List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
        ;}
        break;
    
      case 337:
    #line 3500 "Gmsh.y"
        {
          List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
        ;}
        break;
    
      case 338:
    #line 3507 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(double));
          List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
        ;}
        break;
    
      case 339:
    #line 3512 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(1) - (1)].l);
        ;}
        break;
    
      case 340:
    #line 3516 "Gmsh.y"
        {
          // creates an empty list
          (yyval.l) = List_Create(2, 1, sizeof(double));
        ;}
        break;
    
      case 341:
    #line 3521 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(2) - (3)].l);
        ;}
        break;
    
      case 342:
    #line 3525 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(3) - (4)].l);
          for(int i = 0; i < List_Nbr((yyval.l)); i++){
    	double *pd = (double*)List_Pointer((yyval.l), i);
    	(*pd) = - (*pd);
          }
        ;}
        break;
    
      case 343:
    #line 3533 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(4) - (5)].l);
          for(int i = 0; i < List_Nbr((yyval.l)); i++){
    	double *pd = (double*)List_Pointer((yyval.l), i);
    	(*pd) *= (yyvsp[(1) - (5)].d);
          }
        ;}
        break;
    
      case 344:
    #line 3544 "Gmsh.y"
        { 
          (yyval.l) = (yyvsp[(1) - (1)].l); 
        ;}
        break;
    
      case 345:
    #line 3548 "Gmsh.y"
        {
          if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
            (yyval.l) = 0;
          else{
            yyerror("Unknown special string for list replacement");
            (yyval.l) = List_Create(2, 1, sizeof(double));
          }
        ;}
        break;
    
      case 346:
    #line 3560 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(2) - (2)].l);
          for(int i = 0; i < List_Nbr((yyval.l)); i++){
    	double *pd = (double*)List_Pointer((yyval.l), i);
    	(*pd) = - (*pd);
          }
        ;}
        break;
    
      case 347:
    #line 3568 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(3) - (3)].l);
          for(int i = 0; i < List_Nbr((yyval.l)); i++){
    	double *pd = (double*)List_Pointer((yyval.l), i);
    	(*pd) *= (yyvsp[(1) - (3)].d);
          }
        ;}
        break;
    
      case 348:
    #line 3576 "Gmsh.y"
        { 
          (yyval.l) = List_Create(2, 1, sizeof(double)); 
          for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d)); 
              ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d += 1.) : (d -= 1.)) 
    	List_Add((yyval.l), &d);
        ;}
        break;
    
      case 349:
    #line 3583 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(double)); 
          if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
            yymsg(0, "Wrong increment in '%g:%g:%g'", (yyvsp[(1) - (5)].d), (yyvsp[(3) - (5)].d), (yyvsp[(5) - (5)].d));
    	List_Add((yyval.l), &((yyvsp[(1) - (5)].d)));
          }
          else
    	for(double d = (yyvsp[(1) - (5)].d); ((yyvsp[(5) - (5)].d) > 0) ? (d <= (yyvsp[(3) - (5)].d)) : (d >= (yyvsp[(3) - (5)].d)); d += (yyvsp[(5) - (5)].d))
    	  List_Add((yyval.l), &d);
       ;}
        break;
    
      case 350:
    #line 3594 "Gmsh.y"
        {
          // Returns the coordinates of a point and fills a list with it.
          // This allows to ensure e.g. that relative point positions are
          // always conserved
          Vertex *v = FindPoint((int)(yyvsp[(3) - (4)].d));
          (yyval.l) = List_Create(3, 1, sizeof(double));      
          if(!v) {
    	yymsg(0, "Unknown point '%d'", (int)(yyvsp[(3) - (4)].d));
    	double d = 0.0;
    	List_Add((yyval.l), &d);
    	List_Add((yyval.l), &d);
    	List_Add((yyval.l), &d);
          }
          else{
    	List_Add((yyval.l), &v->Pos.X);
    	List_Add((yyval.l), &v->Pos.Y);
    	List_Add((yyval.l), &v->Pos.Z);
          }
        ;}
        break;
    
      case 351:
    #line 3614 "Gmsh.y"
        {
          (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
          for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
    	Shape *s = (Shape*) List_Pointer((yyvsp[(1) - (1)].l), i);
    	double d = s->Num;
    	List_Add((yyval.l), &d);
          }
          List_Delete((yyvsp[(1) - (1)].l));
        ;}
        break;
    
      case 352:
    #line 3624 "Gmsh.y"
        {
          (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
          for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
    	Shape *s = (Shape*) List_Pointer((yyvsp[(1) - (1)].l), i);
    	double d = s->Num;
    	List_Add((yyval.l), &d);
          }
          List_Delete((yyvsp[(1) - (1)].l));
        ;}
        break;
    
      case 353:
    #line 3634 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(double));
          if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c));
          else
    	for(unsigned int i = 0; i < gmsh_yysymbols[(yyvsp[(1) - (3)].c)].size(); i++)
    	  List_Add((yyval.l), &gmsh_yysymbols[(yyvsp[(1) - (3)].c)][i]);
          Free((yyvsp[(1) - (3)].c));
        ;}
        break;
    
      case 354:
    #line 3644 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(double));
          if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
    	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c));
          else{
    	for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
    	  int index = (int)(*(double*)List_Pointer_Fast((yyvsp[(4) - (6)].l), i));
    	  if((int)gmsh_yysymbols[(yyvsp[(1) - (6)].c)].size() < index + 1)
    	    yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (6)].c), index);
    	  else
    	    List_Add((yyval.l), &gmsh_yysymbols[(yyvsp[(1) - (6)].c)][index]);
    	}
          }
          Free((yyvsp[(1) - (6)].c));
          List_Delete((yyvsp[(4) - (6)].l));
        ;}
        break;
    
      case 355:
    #line 3664 "Gmsh.y"
        {
          (yyval.l) = List_Create(2, 1, sizeof(double));
          List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
        ;}
        break;
    
      case 356:
    #line 3669 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(1) - (1)].l);
        ;}
        break;
    
      case 357:
    #line 3673 "Gmsh.y"
        {
          List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
        ;}
        break;
    
      case 358:
    #line 3677 "Gmsh.y"
        {
          for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
    	double d;
    	List_Read((yyvsp[(3) - (3)].l), i, &d);
    	List_Add((yyval.l), &d);
          }
          List_Delete((yyvsp[(3) - (3)].l));
        ;}
        break;
    
      case 359:
    #line 3689 "Gmsh.y"
        {
          (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
        ;}
        break;
    
      case 360:
    #line 3693 "Gmsh.y"
        {
          (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
        ;}
        break;
    
      case 361:
    #line 3705 "Gmsh.y"
        {
          int flag;
          (yyval.u) = GetColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
          if(flag) yymsg(0, "Unknown color '%s'", (yyvsp[(1) - (1)].c));
          Free((yyvsp[(1) - (1)].c));
        ;}
        break;
    
      case 362:
    #line 3712 "Gmsh.y"
        {
          unsigned int val = 0;
          ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
          (yyval.u) = val;
          Free((yyvsp[(1) - (5)].c)); Free((yyvsp[(5) - (5)].c));
        ;}
        break;
    
      case 363:
    #line 3722 "Gmsh.y"
        {
          (yyval.l) = (yyvsp[(2) - (3)].l);
        ;}
        break;
    
      case 364:
    #line 3726 "Gmsh.y"
        {
          (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
          GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
          if(!ct)
    	yymsg(0, "View[%d] does not exist", (int)(yyvsp[(3) - (6)].d));
          else{
    	for(int i = 0; i < ct->size; i++) 
    	  List_Add((yyval.l), &ct->table[i]);
          }
          Free((yyvsp[(1) - (6)].c));
        ;}
        break;
    
      case 365:
    #line 3741 "Gmsh.y"
        {
          (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
          List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
        ;}
        break;
    
      case 366:
    #line 3746 "Gmsh.y"
        {
          List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
        ;}
        break;
    
      case 367:
    #line 3753 "Gmsh.y"
        {
          (yyval.c) = (yyvsp[(1) - (1)].c);
        ;}
        break;
    
      case 368:
    #line 3757 "Gmsh.y"
        {
          if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
    	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
    	(yyval.c) = (yyvsp[(1) - (1)].c);
          }
          else{
    	std::string val = gmsh_yystringsymbols[(yyvsp[(1) - (1)].c)];
    	(yyval.c) = (char *)Malloc((val.size() + 1) * sizeof(char));
    	strcpy((yyval.c), val.c_str());
    	Free((yyvsp[(1) - (1)].c));
          }
        ;}
        break;
    
      case 369:
    #line 3770 "Gmsh.y"
        { 
          std::string out;
          StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
          (yyval.c) = (char*)Malloc((out.size() + 1) * sizeof(char));
          strcpy((yyval.c), out.c_str());
          Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
        ;}
        break;
    
      case 370:
    #line 3778 "Gmsh.y"
        { 
          std::string out;
          StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
          (yyval.c) = (char*)Malloc((out.size() + 1) * sizeof(char));
          strcpy((yyval.c), out.c_str());
          Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
        ;}
        break;
    
      case 371:
    #line 3789 "Gmsh.y"
        {
          (yyval.c) = (yyvsp[(1) - (1)].c);
        ;}
        break;
    
      case 372:
    #line 3793 "Gmsh.y"
        {
          (yyval.c) = (char *)Malloc(32 * sizeof(char));
          time_t now;
          time(&now);
          strcpy((yyval.c), ctime(&now));
          (yyval.c)[strlen((yyval.c)) - 1] = '\0';
        ;}
        break;
    
      case 373:
    #line 3801 "Gmsh.y"
        {
          (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
          strcpy((yyval.c), (yyvsp[(3) - (6)].c));
          strcat((yyval.c), (yyvsp[(5) - (6)].c));
          Free((yyvsp[(3) - (6)].c));
          Free((yyvsp[(5) - (6)].c));
        ;}
        break;
    
      case 374:
    #line 3809 "Gmsh.y"
        {
          (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
          int i;
          for(i = strlen((yyvsp[(3) - (4)].c)) - 1; i >= 0; i--){
    	if((yyvsp[(3) - (4)].c)[i] == '.'){
    	  strncpy((yyval.c), (yyvsp[(3) - (4)].c), i);
    	  (yyval.c)[i]='\0';
    	  break;
    	}
          }
          if(i <= 0) strcpy((yyval.c), (yyvsp[(3) - (4)].c));
          Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 375:
    #line 3823 "Gmsh.y"
        {
          (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
          int i;
          for(i = strlen((yyvsp[(3) - (4)].c)) - 1; i >= 0; i--){
    	if((yyvsp[(3) - (4)].c)[i] == '/' || (yyvsp[(3) - (4)].c)[i] == '\\')
    	  break;
          }
          if(i <= 0)
    	strcpy((yyval.c), (yyvsp[(3) - (4)].c));
          else
    	strcpy((yyval.c), &(yyvsp[(3) - (4)].c)[i+1]);
          Free((yyvsp[(3) - (4)].c));
        ;}
        break;
    
      case 376:
    #line 3837 "Gmsh.y"
        {
          (yyval.c) = (yyvsp[(3) - (4)].c);
        ;}
        break;
    
      case 377:
    #line 3841 "Gmsh.y"
        {
          char tmpstring[1024];
          int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
          if(i < 0){
    	yymsg(0, "Too few arguments in Sprintf");
    	(yyval.c) = (yyvsp[(3) - (6)].c);
          }
          else if(i > 0){
    	yymsg(0, "%d extra argument%s in Sprintf", i, (i > 1) ? "s" : "");
    	(yyval.c) = (yyvsp[(3) - (6)].c);
          }
          else{
    	(yyval.c) = (char*)Malloc((strlen(tmpstring) + 1) * sizeof(char));
    	strcpy((yyval.c), tmpstring);
    	Free((yyvsp[(3) - (6)].c));
          }
          List_Delete((yyvsp[(5) - (6)].l));
        ;}
        break;
    
    
    /* Line 1267 of yacc.c.  */
    #line 8508 "Gmsh.tab.cpp"
          default: break;
        }
      YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
    
      YYPOPSTACK (yylen);
      yylen = 0;
      YY_STACK_PRINT (yyss, yyssp);
    
      *++yyvsp = yyval;
    
    
      /* Now `shift' the result of the reduction.  Determine what state
         that goes to, based on the state we popped back to and the rule
         number reduced by.  */
    
      yyn = yyr1[yyn];
    
      yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
      if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
        yystate = yytable[yystate];
      else
        yystate = yydefgoto[yyn - YYNTOKENS];
    
      goto yynewstate;
    
    
    /*------------------------------------.
    | yyerrlab -- here on detecting error |
    `------------------------------------*/
    yyerrlab:
      /* If not already recovering from an error, report this error.  */
      if (!yyerrstatus)
        {
          ++yynerrs;
    #if ! YYERROR_VERBOSE
          yyerror (YY_("syntax error"));
    #else
          {
    	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
    	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
    	  {
    	    YYSIZE_T yyalloc = 2 * yysize;
    	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
    	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
    	    if (yymsg != yymsgbuf)
    	      YYSTACK_FREE (yymsg);
    	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
    	    if (yymsg)
    	      yymsg_alloc = yyalloc;
    	    else
    	      {
    		yymsg = yymsgbuf;
    		yymsg_alloc = sizeof yymsgbuf;
    	      }
    	  }
    
    	if (0 < yysize && yysize <= yymsg_alloc)
    	  {
    	    (void) yysyntax_error (yymsg, yystate, yychar);
    	    yyerror (yymsg);
    	  }
    	else
    	  {
    	    yyerror (YY_("syntax error"));
    	    if (yysize != 0)
    	      goto yyexhaustedlab;
    	  }
          }
    #endif
        }
    
    
    
      if (yyerrstatus == 3)
        {
          /* If just tried and failed to reuse look-ahead token after an
    	 error, discard it.  */
    
          if (yychar <= YYEOF)
    	{
    	  /* Return failure if at end of input.  */
    	  if (yychar == YYEOF)
    	    YYABORT;
    	}
          else
    	{
    	  yydestruct ("Error: discarding",
    		      yytoken, &yylval);
    	  yychar = YYEMPTY;
    	}
        }
    
      /* Else will try to reuse look-ahead token after shifting the error
         token.  */
      goto yyerrlab1;
    
    
    /*---------------------------------------------------.
    | yyerrorlab -- error raised explicitly by YYERROR.  |
    `---------------------------------------------------*/
    yyerrorlab:
    
      /* Pacify compilers like GCC when the user code never invokes
         YYERROR and the label yyerrorlab therefore never appears in user
         code.  */
      if (/*CONSTCOND*/ 0)
         goto yyerrorlab;
    
      /* Do not reclaim the symbols of the rule which action triggered
         this YYERROR.  */
      YYPOPSTACK (yylen);
      yylen = 0;
      YY_STACK_PRINT (yyss, yyssp);
      yystate = *yyssp;
      goto yyerrlab1;
    
    
    /*-------------------------------------------------------------.
    | yyerrlab1 -- common code for both syntax error and YYERROR.  |
    `-------------------------------------------------------------*/
    yyerrlab1:
      yyerrstatus = 3;	/* Each real token shifted decrements this.  */
    
      for (;;)
        {
          yyn = yypact[yystate];
          if (yyn != YYPACT_NINF)
    	{
    	  yyn += YYTERROR;
    	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
    	    {
    	      yyn = yytable[yyn];
    	      if (0 < yyn)
    		break;
    	    }
    	}
    
          /* Pop the current state because it cannot handle the error token.  */
          if (yyssp == yyss)
    	YYABORT;
    
    
          yydestruct ("Error: popping",
    		  yystos[yystate], yyvsp);
          YYPOPSTACK (1);
          yystate = *yyssp;
          YY_STACK_PRINT (yyss, yyssp);
        }
    
      if (yyn == YYFINAL)
        YYACCEPT;
    
      *++yyvsp = yylval;
    
    
      /* Shift the error token.  */
      YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
    
      yystate = yyn;
      goto yynewstate;
    
    
    /*-------------------------------------.
    | yyacceptlab -- YYACCEPT comes here.  |
    `-------------------------------------*/
    yyacceptlab:
      yyresult = 0;
      goto yyreturn;
    
    /*-----------------------------------.
    | yyabortlab -- YYABORT comes here.  |
    `-----------------------------------*/
    yyabortlab:
      yyresult = 1;
      goto yyreturn;
    
    #ifndef yyoverflow
    /*-------------------------------------------------.
    | yyexhaustedlab -- memory exhaustion comes here.  |
    `-------------------------------------------------*/
    yyexhaustedlab:
      yyerror (YY_("memory exhausted"));
      yyresult = 2;
      /* Fall through.  */
    #endif
    
    yyreturn:
      if (yychar != YYEOF && yychar != YYEMPTY)
         yydestruct ("Cleanup: discarding lookahead",
    		 yytoken, &yylval);
      /* Do not reclaim the symbols of the rule which action triggered
         this YYABORT or YYACCEPT.  */
      YYPOPSTACK (yylen);
      YY_STACK_PRINT (yyss, yyssp);
      while (yyssp != yyss)
        {
          yydestruct ("Cleanup: popping",
    		  yystos[*yyssp], yyvsp);
          YYPOPSTACK (1);
        }
    #ifndef yyoverflow
      if (yyss != yyssa)
        YYSTACK_FREE (yyss);
    #endif
    #if YYERROR_VERBOSE
      if (yymsg != yymsgbuf)
        YYSTACK_FREE (yymsg);
    #endif
      /* Make sure YYID is used.  */
      return YYID (yyresult);
    }
    
    
    #line 3861 "Gmsh.y"
    
    
    int PrintListOfDouble(char *format, List_T *list, char *buffer)
    {
      int j, k;
      char tmp1[256], tmp2[256];
    
      j = 0;
      buffer[j] = '\0';
    
      while(j < (int)strlen(format) && format[j] != '%') j++;
      strncpy(buffer, format, j); 
      buffer[j]='\0'; 
      for(int i = 0; i < List_Nbr(list); i++){
        k = j;
        j++;
        if(j < (int)strlen(format)){
          if(format[j] == '%'){
    	strcat(buffer, "%");
    	j++;
          }
          while(j < (int)strlen(format) && format[j] != '%') j++;
          if(k != j){
    	strncpy(tmp1, &(format[k]), j-k);
    	tmp1[j-k] = '\0';
    	sprintf(tmp2, tmp1, *(double*)List_Pointer(list, i)); 
    	strcat(buffer, tmp2);
          }
        }
        else
          return List_Nbr(list)-i;
      }
      if(j != (int)strlen(format))
        return -1;
      return 0;
    }
    
    fullMatrix<double> ListOfListOfDouble2Matrix(List_T *list)
    {
      int M = List_Nbr(list);
      int N = 0;
      for(int i = 0; i < M; i++){
        List_T *line = *(List_T**)List_Pointer_Fast(list, i);
        N = std::max(N, List_Nbr(line));
      }
      fullMatrix<double> mat(M, N);
      for(int i = 0; i < M; i++){
        List_T *line = *(List_T**)List_Pointer_Fast(list, i);
        for(int j = 0; j < List_Nbr(line); j++){
          double val;
          List_Read(line, j, &val);
          mat(i, j) = val;
        }
      }
      for(int i = 0; i < List_Nbr(list); i++)
        List_Delete(*(List_T**)List_Pointer(list, i));
      List_Delete(list);
      return mat;
    }
    
    void yyerror(const char *s)
    {
      Msg::Error("'%s', line %d : %s (%s)", gmsh_yyname.c_str(), gmsh_yylineno - 1,
                 s, gmsh_yytext);
      gmsh_yyerrorstate++;
    }
    
    void yymsg(int level, const char *fmt, ...)
    {
      va_list args;
      char tmp[1024];
    
      va_start(args, fmt);
      vsprintf(tmp, fmt, args);
      va_end(args);
    
      if(level == 0){
        Msg::Error("'%s', line %d : %s", gmsh_yyname.c_str(), gmsh_yylineno - 1, tmp);
        gmsh_yyerrorstate++;
      }
      else
        Msg::Warning("'%s', line %d : %s", gmsh_yyname.c_str(), gmsh_yylineno - 1, tmp);
    }