Changeset 2162c2c for src


Ignore:
Timestamp:
Jan 11, 2017, 4:11:02 PM (9 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
075734f
Parents:
bb82c03 (diff), d3a85240 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Location:
src
Files:
2 added
56 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    rbb82c03 r2162c2c  
    656656        }
    657657
    658         void CodeGenerator::visit( TupleExpr * tupleExpr ) { assert( false ); }
     658        void CodeGenerator::visit( UntypedTupleExpr * tupleExpr ) { assertf( false, "UntypedTupleExpr should not make it to Code Gen" ); }
     659
     660        void CodeGenerator::visit( TupleExpr * tupleExpr ) { assertf( false, "TupleExpr should not make it to Code Gen" ); }
    659661
    660662        void CodeGenerator::visit( TypeExpr * typeExpr ) {}
  • src/CodeGen/CodeGenerator.h

    rbb82c03 r2162c2c  
    7272                virtual void visit( CommaExpr *commaExpr );
    7373                virtual void visit( CompoundLiteralExpr *compLitExpr );
     74                virtual void visit( UntypedTupleExpr *tupleExpr );
    7475                virtual void visit( TupleExpr *tupleExpr );
    7576                virtual void visit( TypeExpr *typeExpr );
  • src/CodeGen/GenType.cc

    rbb82c03 r2162c2c  
    4141                virtual void visit( EnumInstType *enumInst );
    4242                virtual void visit( TypeInstType *typeInst );
     43                virtual void visit( TupleType * tupleType );
    4344                virtual void visit( VarArgsType *varArgsType );
    4445                virtual void visit( ZeroType *zeroType );
     
    197198        }
    198199
     200        void GenType::visit( TupleType * tupleType ) {
     201                assertf( ! mangle, "Tuple types should not make it to Code Gen." );
     202                Visitor::visit( tupleType );
     203        }
     204
    199205        void GenType::visit( VarArgsType *varArgsType ) {
    200206                typeString = "__builtin_va_list " + typeString;
  • src/GenPoly/Box.cc

    rbb82c03 r2162c2c  
    136136                        template< typename DeclClass >
    137137                        DeclClass *handleDecl( DeclClass *decl, Type *type );
    138 
    139                         using PolyMutator::mutate;
     138                        template< typename AggDecl >
     139                        AggDecl * handleAggDecl( AggDecl * aggDecl );
     140
     141                        typedef PolyMutator Parent;
     142                        using Parent::mutate;
    140143                        virtual DeclarationWithType *mutate( FunctionDecl *functionDecl ) override;
    141144                        virtual ObjectDecl *mutate( ObjectDecl *objectDecl ) override;
     145                        virtual StructDecl *mutate( StructDecl *structDecl ) override;
     146                        virtual UnionDecl *mutate( UnionDecl *unionDecl ) override;
    142147                        virtual TypeDecl *mutate( TypeDecl *typeDecl ) override;
    143148                        virtual TypedefDecl *mutate( TypedefDecl *typedefDecl ) override;
     
    686691                        for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
    687692                                TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
    688                                 assert(paramType && "Aggregate parameters should be type expressions");
     693                                assertf(paramType, "Aggregate parameters should be type expressions");
    689694                                paramType->set_type( replaceWithConcrete( appExpr, paramType->get_type(), false ) );
    690695                        }
     
    783788                void Pass1::boxParams( ApplicationExpr *appExpr, FunctionType *function, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars ) {
    784789                        for ( std::list< DeclarationWithType *>::const_iterator param = function->get_parameters().begin(); param != function->get_parameters().end(); ++param, ++arg ) {
    785                                 assert( arg != appExpr->get_args().end() );
     790                                assertf( arg != appExpr->get_args().end(), "boxParams: missing argument for param %s to %s in %s", toString( *param ).c_str(), toString( function ).c_str(), toString( appExpr ).c_str() );
    786791                                addCast( *arg, (*param)->get_type(), exprTyVars );
    787792                                boxParam( (*param)->get_type(), *arg, exprTyVars );
     
    11271132                        makeTyVarMap( function, exprTyVars ); // xxx - should this take into account the variables already bound in scopeTyVars (i.e. remove them from exprTyVars?)
    11281133                        ReferenceToType *dynRetType = isDynRet( function, exprTyVars );
    1129                         Type *concRetType = appExpr->get_result()->isVoid() ? nullptr : appExpr->get_result();// ?: dynRetType; // xxx - is concRetType a good name?
    1130 
     1134
     1135                        // NOTE: addDynRetParam needs to know the actual (generated) return type so it can make a temp variable, so pass the result type from the appExpr
     1136                        // passTypeVars needs to know the program-text return type (i.e. the distinction between _conc_T30 and T3(int))
     1137                        // concRetType may not be a good name in one or both of these places. A more appropriate name change is welcome.
    11311138                        if ( dynRetType ) {
     1139                                Type *concRetType = appExpr->get_result()->isVoid() ? nullptr : appExpr->get_result();
    11321140                                ret = addDynRetParam( appExpr, function, concRetType, arg ); // xxx - used to use dynRetType instead of concRetType
    11331141                        } else if ( needsAdapter( function, scopeTyVars ) && ! needsAdapter( function, exprTyVars) ) { // xxx - exprTyVars is used above...?
     
    11421150                        arg = appExpr->get_args().begin();
    11431151
     1152                        Type *concRetType = replaceWithConcrete( appExpr, dynRetType );
    11441153                        passTypeVars( appExpr, concRetType, arg, exprTyVars ); // xxx - used to use dynRetType instead of concRetType; this changed so that the correct type paramaters are passed for return types (it should be the concrete type's parameters, not the formal type's)
    11451154                        addInferredParams( appExpr, function, arg, exprTyVars );
     
    12711280                template< typename DeclClass >
    12721281                DeclClass * Pass2::handleDecl( DeclClass *decl, Type *type ) {
    1273                         DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) );
     1282                        DeclClass *ret = static_cast< DeclClass *>( Parent::mutate( decl ) );
    12741283
    12751284                        return ret;
     
    13051314                }
    13061315
     1316                template< typename AggDecl >
     1317                AggDecl * Pass2::handleAggDecl( AggDecl * aggDecl ) {
     1318                        // prevent tyVars from leaking into containing scope
     1319                        scopeTyVars.beginScope();
     1320                        Parent::mutate( aggDecl );
     1321                        scopeTyVars.endScope();
     1322                        return aggDecl;
     1323                }
     1324
     1325                StructDecl * Pass2::mutate( StructDecl *aggDecl ) {
     1326                        return handleAggDecl( aggDecl );
     1327                }
     1328
     1329                UnionDecl * Pass2::mutate( UnionDecl *aggDecl ) {
     1330                        return handleAggDecl( aggDecl );
     1331                }
     1332
    13071333                TypeDecl * Pass2::mutate( TypeDecl *typeDecl ) {
    13081334                        addToTyVarMap( typeDecl, scopeTyVars );
     
    13101336                                return handleDecl( typeDecl, typeDecl->get_base() );
    13111337                        } else {
    1312                                 return Mutator::mutate( typeDecl );
     1338                                return Parent::mutate( typeDecl );
    13131339                        }
    13141340                }
     
    13221348                        makeTyVarMap( pointerType, scopeTyVars );
    13231349
    1324                         Type *ret = Mutator::mutate( pointerType );
     1350                        Type *ret = Parent::mutate( pointerType );
    13251351
    13261352                        scopeTyVars.endScope();
  • src/GenPoly/InstantiateGeneric.cc

    rbb82c03 r2162c2c  
    1818#include <utility>
    1919#include <vector>
     20#include <unordered_map>
    2021
    2122#include "InstantiateGeneric.h"
     
    2425#include "GenPoly.h"
    2526#include "ScopedSet.h"
     27#include "PolyMutator.h"
    2628
    2729#include "ResolvExpr/typeops.h"
     
    146148        }
    147149
     150        // collect the environments of each TypeInstType so that type variables can be replaced
     151        // xxx - possibly temporary solution. Access to type environments is required in GenericInstantiator, but it needs to be a DeclMutator which does not provide easy access to the type environments.
     152        class EnvFinder final : public GenPoly::PolyMutator {
     153        public:
     154                virtual Type * mutate( TypeInstType * inst ) override {
     155                        if ( env ) envMap[inst] = env;
     156                        return inst;
     157                }
     158
     159                // don't want to associate an environment with TypeInstTypes that occur in function types - this may actually only apply to function types belonging to DeclarationWithTypes (or even just FunctionDecl)?
     160                virtual Type * mutate( FunctionType * ftype ) override {
     161                        return ftype;
     162                }
     163                std::unordered_map< ReferenceToType *, TypeSubstitution * > envMap;
     164        };
     165
    148166        /// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately
    149167        class GenericInstantiator final : public DeclMutator {
     
    154172                /// Namer for concrete types
    155173                UniqueName typeNamer;
    156 
     174                /// Reference to mapping of environments
     175                const std::unordered_map< ReferenceToType *, TypeSubstitution * > & envMap;
    157176        public:
    158                 GenericInstantiator() : DeclMutator(), instantiations(), dtypeStatics(), typeNamer("_conc_") {}
     177                GenericInstantiator( const std::unordered_map< ReferenceToType *, TypeSubstitution * > & envMap ) : DeclMutator(), instantiations(), dtypeStatics(), typeNamer("_conc_"), envMap( envMap ) {}
    159178
    160179                using DeclMutator::mutate;
     
    174193                void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }
    175194
     195                void replaceParametersWithConcrete( std::list< Expression* >& params );
     196                Type *replaceWithConcrete( Type *type, bool doClone );
     197
    176198                /// Strips a dtype-static aggregate decl of its type parameters, marks it as stripped
    177199                void stripDtypeParams( AggregateDecl *base, std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs );
     
    179201
    180202        void instantiateGeneric( std::list< Declaration* > &translationUnit ) {
    181                 GenericInstantiator instantiator;
     203                EnvFinder finder;
     204                mutateAll( translationUnit, finder );
     205                GenericInstantiator instantiator( finder.envMap );
    182206                instantiator.mutateDeclarationList( translationUnit );
    183207        }
     
    209233                                // can pretend that any ftype is `void (*)(void)`
    210234                                out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
     235                                break;
     236                        case TypeDecl::Ttype:
     237                                assertf( false, "Ttype parameters are not currently allowed as parameters to generic types." );
    211238                                break;
    212239                        }
     
    253280        }
    254281
     282        /// xxx - more or less copied from box -- these should be merged with those somehow...
     283        void GenericInstantiator::replaceParametersWithConcrete( std::list< Expression* >& params ) {
     284                for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
     285                        TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
     286                        assertf(paramType, "Aggregate parameters should be type expressions");
     287                        paramType->set_type( replaceWithConcrete( paramType->get_type(), false ) );
     288                }
     289        }
     290
     291        Type *GenericInstantiator::replaceWithConcrete( Type *type, bool doClone ) {
     292                if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( type ) ) {
     293                        if ( envMap.count( typeInst ) ) {
     294                                TypeSubstitution * env = envMap.at( typeInst );
     295                                Type *concrete = env->lookup( typeInst->get_name() );
     296                                if ( concrete ) {
     297                                        return concrete->clone();
     298                                }
     299                                else return typeInst->clone();
     300                        }
     301                } else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) {
     302                        if ( doClone ) {
     303                                structType = structType->clone();
     304                        }
     305                        replaceParametersWithConcrete( structType->get_parameters() );
     306                        return structType;
     307                } else if ( UnionInstType *unionType = dynamic_cast< UnionInstType* >( type ) ) {
     308                        if ( doClone ) {
     309                                unionType = unionType->clone();
     310                        }
     311                        replaceParametersWithConcrete( unionType->get_parameters() );
     312                        return unionType;
     313                }
     314                return type;
     315        }
     316
     317
    255318        Type* GenericInstantiator::mutate( StructInstType *inst ) {
    256319                // mutate subtypes
     
    262325                if ( inst->get_parameters().empty() ) return inst;
    263326
     327                // need to replace type variables to ensure that generic types are instantiated for the return values of polymorphic functions (in particular, for thunks, because they are not [currently] copy constructed).
     328                replaceWithConcrete( inst, false );
     329
    264330                // check for an already-instantiatiated dtype-static type
    265331                if ( dtypeStatics.find( inst->get_baseStruct() ) != dtypeStatics.end() ) {
     
    269335
    270336                // check if type can be concretely instantiated; put substitutions into typeSubs
    271                 assert( inst->get_baseParameters() && "Base struct has parameters" );
     337                assertf( inst->get_baseParameters(), "Base struct has parameters" );
    272338                std::list< TypeExpr* > typeSubs;
    273339                genericType gt = makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs );
  • src/GenPoly/ScrubTyVars.cc

    rbb82c03 r2162c2c  
    3131                          case TypeDecl::Any:
    3232                          case TypeDecl::Dtype:
     33                          case TypeDecl::Ttype:
    3334                                {
    3435                                        PointerType *ret = new PointerType( Type::Qualifiers(), new VoidType( typeInst->get_qualifiers() ) );
  • src/GenPoly/Specialize.cc

    rbb82c03 r2162c2c  
    3232#include "Common/utility.h"
    3333#include "InitTweak/InitTweak.h"
     34#include "Tuples/Tuples.h"
    3435
    3536namespace GenPoly {
    36         const std::list<Label> noLabels;
    37 
     37        class Specializer;
    3838        class Specialize final : public PolyMutator {
     39                friend class Specializer;
    3940          public:
    40                 Specialize( std::string paramPrefix = "_p" );
    41 
    4241                using PolyMutator::mutate;
    4342                virtual Expression * mutate( ApplicationExpr *applicationExpr ) override;
     
    4847                // virtual Expression * mutate( CommaExpr *commaExpr );
    4948
    50           private:
    51                 Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams = 0 );
    52                 Expression *doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams = 0 );
     49                Specializer * specializer = nullptr;
    5350                void handleExplicitParams( ApplicationExpr *appExpr );
    54 
    55                 UniqueName thunkNamer;
    56                 std::string paramPrefix;
    5751        };
    5852
    59         void convertSpecializations( std::list< Declaration* >& translationUnit ) {
    60                 Specialize specializer;
    61                 mutateAll( translationUnit, specializer );
    62         }
    63 
    64         Specialize::Specialize( std::string paramPrefix )
    65                 : thunkNamer( "_thunk" ), paramPrefix( paramPrefix ) {
    66         }
     53        class Specializer {
     54          public:
     55                Specializer( Specialize & spec ) : spec( spec ), env( spec.env ), stmtsToAdd( spec.stmtsToAdd ) {}
     56                virtual bool needsSpecialization( Type * formalType, Type * actualType, TypeSubstitution * env ) = 0;
     57                virtual Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) = 0;
     58                virtual Expression *doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams = 0 );
     59
     60          protected:
     61                Specialize & spec;
     62                std::string paramPrefix = "_p";
     63                TypeSubstitution *& env;
     64                std::list< Statement * > & stmtsToAdd;
     65        };
     66
     67        // for normal polymorphic -> monomorphic function conversion
     68        class PolySpecializer : public Specializer {
     69          public:
     70                PolySpecializer( Specialize & spec ) : Specializer( spec ) {}
     71                virtual bool needsSpecialization( Type * formalType, Type * actualType, TypeSubstitution * env ) override;
     72                virtual Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) override;
     73        };
     74
     75        // // for tuple -> non-tuple function conversion
     76        class TupleSpecializer : public Specializer {
     77          public:
     78                TupleSpecializer( Specialize & spec ) : Specializer( spec ) {}
     79                virtual bool needsSpecialization( Type * formalType, Type * actualType, TypeSubstitution * env ) override;
     80                virtual Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) override;
     81        };
    6782
    6883        /// Looks up open variables in actual type, returning true if any of them are bound in the environment or formal type.
    69         bool needsSpecialization( Type *formalType, Type *actualType, TypeSubstitution *env ) {
     84        bool PolySpecializer::needsSpecialization( Type *formalType, Type *actualType, TypeSubstitution *env ) {
    7085                if ( env ) {
    7186                        using namespace ResolvExpr;
     
    92107
    93108        /// Generates a thunk that calls `actual` with type `funType` and returns its address
    94         Expression * Specialize::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) {
     109        Expression * PolySpecializer::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) {
     110                static UniqueName thunkNamer( "_thunk" );
     111
    95112                FunctionType *newType = funType->clone();
    96113                if ( env ) {
    97                         TypeSubstitution newEnv( *env );
    98114                        // it is important to replace only occurrences of type variables that occur free in the
    99115                        // thunk's type
    100                         newEnv.applyFree( newType );
     116                        env->applyFree( newType );
    101117                } // if
    102118                // create new thunk with same signature as formal type (C linkage, empty body)
     
    125141                std::list< Statement* > oldStmts;
    126142                oldStmts.splice( oldStmts.end(), stmtsToAdd );
    127                 handleExplicitParams( appExpr );
     143                spec.handleExplicitParams( appExpr );
    128144                paramPrefix = oldParamPrefix;
    129145                // write any statements added for recursive specializations into the thunk body
     
    147163        }
    148164
    149         Expression * Specialize::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
     165        Expression * Specializer::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
    150166                assertf( actual->has_result(), "attempting to specialize an untyped expression" );
    151167                if ( needsSpecialization( formalType, actual->get_result(), env ) ) {
    152                         FunctionType *funType;
    153                         if ( ( funType = getFunctionType( formalType ) ) ) {
     168                        if ( FunctionType *funType = getFunctionType( formalType ) ) {
    154169                                ApplicationExpr *appExpr;
    155170                                VariableExpr *varExpr;
     
    170185        }
    171186
     187        bool TupleSpecializer::needsSpecialization( Type *formalType, Type *actualType, TypeSubstitution *env ) {
     188                if ( FunctionType * ftype = getFunctionType( formalType ) ) {
     189                        return ftype->isTtype();
     190                }
     191                return false;
     192        }
     193
     194        /// restructures arg to match the structure of a single formal parameter. Assumes that atomic types are compatible (as the Resolver should have ensured this)
     195        template< typename OutIterator >
     196        void matchOneFormal( Expression * arg, unsigned & idx, Type * formal, OutIterator out ) {
     197                if ( TupleType * tupleType = dynamic_cast< TupleType * >( formal ) ) {
     198                        std::list< Expression * > exprs;
     199                        for ( Type * t : *tupleType ) {
     200                                matchOneFormal( arg, idx, t, back_inserter( exprs ) );
     201                        }
     202                        *out++ = new TupleExpr( exprs );
     203                } else {
     204                        *out++ = new TupleIndexExpr( arg->clone(), idx++ );
     205                }
     206        }
     207
     208        /// restructures the ttype argument to match the structure of the formal parameters of the actual function.
     209        // [begin, end) are the formal parameters.
     210        // args is the list of arguments currently given to the actual function, the last of which needs to be restructured.
     211        template< typename Iterator, typename OutIterator >
     212        void fixLastArg( Expression * last, Iterator begin, Iterator end, OutIterator out ) {
     213                // safe_dynamic_cast for the assertion
     214                safe_dynamic_cast< TupleType * >( last->get_result() );
     215                unsigned idx = 0;
     216                for ( ; begin != end; ++begin ) {
     217                        DeclarationWithType * formal = *begin;
     218                        Type * formalType = formal->get_type();
     219                        matchOneFormal( last, idx, formalType, out );
     220                }
     221                delete last;
     222        }
     223
     224        Expression * TupleSpecializer::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) {
     225                static UniqueName thunkNamer( "_tupleThunk" );
     226
     227                FunctionType *newType = funType->clone();
     228                if ( env ) {
     229                        // it is important to replace only occurrences of type variables that occur free in the
     230                        // thunk's type
     231                        env->applyFree( newType );
     232                } // if
     233                // create new thunk with same signature as formal type (C linkage, empty body)
     234                FunctionDecl *thunkFunc = new FunctionDecl( thunkNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, newType, new CompoundStmt( noLabels ), false, false );
     235                thunkFunc->fixUniqueId();
     236
     237                // thunks may be generated and not used - silence warning with attribute
     238                thunkFunc->get_attributes().push_back( new Attribute( "unused" ) );
     239
     240                // thread thunk parameters into call to actual function, naming thunk parameters as we go
     241                UniqueName paramNamer( paramPrefix );
     242                ApplicationExpr *appExpr = new ApplicationExpr( actual );
     243
     244                FunctionType * actualType = getFunctionType( actual->get_result() )->clone();
     245                if ( env ) {
     246                        // need to apply the environment to the actual function's type, since it may itself be polymorphic
     247                        env->apply( actualType );
     248                }
     249                std::unique_ptr< FunctionType > actualTypeManager( actualType ); // for RAII
     250                std::list< DeclarationWithType * >::iterator actualBegin = actualType->get_parameters().begin();
     251                std::list< DeclarationWithType * >::iterator actualEnd = actualType->get_parameters().end();
     252                std::list< DeclarationWithType * >::iterator formalBegin = funType->get_parameters().begin();
     253                std::list< DeclarationWithType * >::iterator formalEnd = funType->get_parameters().end();
     254
     255                Expression * last = nullptr;
     256                for ( DeclarationWithType* param : thunkFunc->get_functionType()->get_parameters() ) {
     257                        // walk the parameters to the actual function alongside the parameters to the thunk to find the location where the ttype parameter begins to satisfy parameters in the actual function.
     258                        param->set_name( paramNamer.newName() );
     259                        assertf( formalBegin != formalEnd, "Reached end of formal parameters before finding ttype parameter" );
     260                        if ( Tuples::isTtype((*formalBegin)->get_type()) ) {
     261                                last = new VariableExpr( param );
     262                                break;
     263                        }
     264                        assertf( actualBegin != actualEnd, "reached end of actual function's arguments before finding ttype parameter" );
     265                        ++actualBegin;
     266                        ++formalBegin;
     267
     268                        appExpr->get_args().push_back( new VariableExpr( param ) );
     269                } // for
     270                assert( last );
     271                fixLastArg( last, actualBegin, actualEnd, back_inserter( appExpr->get_args() ) );
     272                appExpr->set_env( maybeClone( env ) );
     273                if ( inferParams ) {
     274                        appExpr->get_inferParams() = *inferParams;
     275                } // if
     276
     277                // handle any specializations that may still be present
     278                std::string oldParamPrefix = paramPrefix;
     279                paramPrefix += "p";
     280                // save stmtsToAdd in oldStmts
     281                std::list< Statement* > oldStmts;
     282                oldStmts.splice( oldStmts.end(), stmtsToAdd );
     283                spec.mutate( appExpr );
     284                paramPrefix = oldParamPrefix;
     285                // write any statements added for recursive specializations into the thunk body
     286                thunkFunc->get_statements()->get_kids().splice( thunkFunc->get_statements()->get_kids().end(), stmtsToAdd );
     287                // restore oldStmts into stmtsToAdd
     288                stmtsToAdd.splice( stmtsToAdd.end(), oldStmts );
     289
     290                // add return (or valueless expression) to the thunk
     291                Statement *appStmt;
     292                if ( funType->get_returnVals().empty() ) {
     293                        appStmt = new ExprStmt( noLabels, appExpr );
     294                } else {
     295                        appStmt = new ReturnStmt( noLabels, appExpr );
     296                } // if
     297                thunkFunc->get_statements()->get_kids().push_back( appStmt );
     298
     299                // add thunk definition to queue of statements to add
     300                stmtsToAdd.push_back( new DeclStmt( noLabels, thunkFunc ) );
     301                // return address of thunk function as replacement expression
     302                return new AddressExpr( new VariableExpr( thunkFunc ) );
     303        }
     304
    172305        void Specialize::handleExplicitParams( ApplicationExpr *appExpr ) {
    173306                // create thunks for the explicit parameters
     
    178311                std::list< Expression* >::iterator actual;
    179312                for ( formal = function->get_parameters().begin(), actual = appExpr->get_args().begin(); formal != function->get_parameters().end() && actual != appExpr->get_args().end(); ++formal, ++actual ) {
    180                         *actual = doSpecialization( (*formal )->get_type(), *actual, &appExpr->get_inferParams() );
     313                        *actual = specializer->doSpecialization( (*formal )->get_type(), *actual, &appExpr->get_inferParams() );
    181314                }
    182315        }
     
    190323                        // don't need to do this for intrinsic calls, because they aren't actually passed
    191324                        for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) {
    192                                 inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() );
     325                                inferParam->second.expr = specializer->doSpecialization( inferParam->second.formalType, inferParam->second.expr, inferParam->second.inferParams.get() );
    193326                        }
    194 
    195327                        handleExplicitParams( appExpr );
    196328                }
    197 
    198329                return appExpr;
    199330        }
     
    202333                addrExpr->get_arg()->acceptMutator( *this );
    203334                assert( addrExpr->has_result() );
    204                 addrExpr->set_arg( doSpecialization( addrExpr->get_result(), addrExpr->get_arg() ) );
     335                addrExpr->set_arg( specializer->doSpecialization( addrExpr->get_result(), addrExpr->get_arg() ) );
    205336                return addrExpr;
    206337        }
     
    212343                        return castExpr;
    213344                }
    214                 Expression *specialized = doSpecialization( castExpr->get_result(), castExpr->get_arg() );
     345                Expression *specialized = specializer->doSpecialization( castExpr->get_result(), castExpr->get_arg() );
    215346                if ( specialized != castExpr->get_arg() ) {
    216347                        // assume here that the specialization incorporates the cast
     
    236367        //      return commaExpr;
    237368        // }
     369
     370        void convertSpecializations( std::list< Declaration* >& translationUnit ) {
     371                Specialize spec;
     372
     373                TupleSpecializer tupleSpec( spec );
     374                spec.specializer = &tupleSpec;
     375                mutateAll( translationUnit, spec );
     376
     377                PolySpecializer polySpec( spec );
     378                spec.specializer = &polySpec;
     379                mutateAll( translationUnit, spec );
     380        }
    238381} // namespace GenPoly
    239382
  • src/InitTweak/FixInit.cc

    rbb82c03 r2162c2c  
    3838#include "SynTree/AddStmtVisitor.h"
    3939#include "CodeGen/GenType.h"  // for warning/error messages
     40#include "Tuples/Tuples.h"
    4041
    4142bool ctordtorp = false; // print all debug
     
    392393
    393394                bool ResolveCopyCtors::skipCopyConstruct( Type * type ) {
    394                         return dynamic_cast< VarArgsType * >( type ) || GenPoly::getFunctionType( type );
     395                        return dynamic_cast< VarArgsType * >( type ) || GenPoly::getFunctionType( type ) || Tuples::isTtype( type );
    395396                }
    396397
     
    10991100                        addDeclaration( tmp );
    11001101
     1102                        // xxx - this can be TupleAssignExpr now. Need to properly handle this case.
    11011103                        ApplicationExpr * callExpr = safe_dynamic_cast< ApplicationExpr * > ( ctorExpr->get_callExpr() );
    11021104                        TypeSubstitution * env = ctorExpr->get_env();
  • src/InitTweak/InitTweak.cc

    rbb82c03 r2162c2c  
    487487                virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }
    488488                virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }
     489                virtual void visit( UntypedTupleExpr *tupleExpr ) { isConstExpr = false; }
    489490                virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }
    490491                virtual void visit( TupleAssignExpr *tupleExpr ) { isConstExpr = false; }
  • src/Parser/DeclarationNode.cc

    rbb82c03 r2162c2c  
    948948//      if ( variable.name ) {
    949949        if ( variable.tyClass != NoTypeClass ) {
    950                 static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Ftype, TypeDecl::Dtype };
     950                static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Dtype, TypeDecl::Ftype, TypeDecl::Ttype };
     951                assertf( sizeof(kindMap)/sizeof(kindMap[0] == NoTypeClass-1), "DeclarationNode::build: kindMap is out of sync." );
     952                assertf( variable.tyClass < sizeof(kindMap)/sizeof(kindMap[0]), "Variable's tyClass is out of bounds." );
    951953//              TypeDecl * ret = new TypeDecl( *variable.name, DeclarationNode::NoStorageClass, nullptr, kindMap[ variable.tyClass ] );
    952954                TypeDecl * ret = new TypeDecl( *name, DeclarationNode::NoStorageClass, nullptr, kindMap[ variable.tyClass ] );
  • src/Parser/ExpressionNode.cc

    rbb82c03 r2162c2c  
    323323
    324324Expression *build_tuple( ExpressionNode * expr_node ) {
    325         TupleExpr *ret = new TupleExpr();
    326         buildMoveList( expr_node, ret->get_exprs() );
    327         return ret;
     325        std::list< Expression * > exprs;
     326        buildMoveList( expr_node, exprs );
     327        return new UntypedTupleExpr( exprs );;
    328328}
    329329
  • src/Parser/ParseNode.h

    rbb82c03 r2162c2c  
    204204        enum Length { Short, Long, LongLong, NoLength };
    205205        enum Aggregate { Struct, Union, Trait, NoAggregate };
    206         enum TypeClass { Otype, Dtype, Ftype, NoTypeClass };
     206        enum TypeClass { Otype, Dtype, Ftype, Ttype, NoTypeClass };
    207207        enum BuiltinType { Valist, Zero, One, NoBuiltinType };
    208208
  • src/Parser/lex.cc

    rbb82c03 r2162c2c  
    382382        (yy_c_buf_p) = yy_cp;
    383383
    384 #define YY_NUM_RULES 185
    385 #define YY_END_OF_BUFFER 186
     384#define YY_NUM_RULES 186
     385#define YY_END_OF_BUFFER 187
    386386/* This struct is not used in this scanner,
    387387   but its presence is necessary. */
     
    391391        flex_int32_t yy_nxt;
    392392        };
    393 static yyconst flex_int16_t yy_accept[905] =
     393static yyconst flex_int16_t yy_accept[909] =
    394394    {   0,
    395         0,    0,    0,    0,    0,    0,  120,  120,  123,  123,
    396       186,  184,    7,    9,    8,  143,  122,  105,  148,  151,
    397       119,  130,  131,  146,  144,  134,  145,  137,  147,  110,
    398       111,  112,  135,  136,  153,  155,  154,  156,  184,  105,
    399       128,  184,  129,  149,  105,  107,  105,  105,  105,  105,
    400       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    401       105,  105,  105,  132,  152,  133,  150,    7,  184,    4,
    402         4,  185,  108,  185,  109,  120,  121,  127,  123,  124,
    403         7,    9,    0,    8,  160,  179,  105,    0,  172,  142,
    404       165,  173,  170,  157,  168,  158,  169,  167,    0,  116,
    405 
    406         3,    0,  171,  115,  113,    0,    0,  113,  113,    0,
    407         0,  113,  112,  112,  112,    0,  112,  140,  141,  139,
    408       161,  163,  159,  164,  162,    0,    0,    0,    0,    0,
     395        0,    0,    0,    0,    0,    0,  121,  121,  124,  124,
     396      187,  185,    7,    9,    8,  144,  123,  106,  149,  152,
     397      120,  131,  132,  147,  145,  135,  146,  138,  148,  111,
     398      112,  113,  136,  137,  154,  156,  155,  157,  185,  106,
     399      129,  185,  130,  150,  106,  108,  106,  106,  106,  106,
     400      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     401      106,  106,  106,  133,  153,  134,  151,    7,  185,    4,
     402        4,  186,  109,  186,  110,  121,  122,  128,  124,  125,
     403        7,    9,    0,    8,  161,  180,  106,    0,  173,  143,
     404      166,  174,  171,  158,  169,  159,  170,  168,    0,  117,
     405
     406        3,    0,  172,  116,  114,    0,    0,  114,  114,    0,
     407        0,  114,  113,  113,  113,    0,  113,  141,  142,  140,
     408      162,  164,  160,  165,  163,    0,    0,    0,    0,    0,
    409409        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    410       106,  178,    0,  122,  119,  105,    0,    0,  175,    0,
    411       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    412       105,  105,  105,  105,  105,  105,  105,   38,  105,  105,
    413       105,  105,  105,  105,  105,  105,  105,  105,   57,  105,
    414       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    415       105,  105,  105,  105,  105,  105,  105,  174,  166,    7,
    416 
    417         0,    0,    0,    2,    0,    5,  108,    0,    0,    0,
    418       120,    0,  126,  125,  125,    0,    0,    0,  123,    0,
     410      107,  179,    0,  123,  120,  106,    0,    0,  176,    0,
     411      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     412      106,  106,  106,  106,  106,  106,  106,   38,  106,  106,
     413      106,  106,  106,  106,  106,  106,  106,  106,   57,  106,
     414      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     415      106,  106,  106,  106,  106,  106,  106,  106,  175,  167,
     416
     417        7,    0,    0,    0,    2,    0,    5,  109,    0,    0,
     418        0,  121,    0,  127,  126,  126,    0,    0,    0,  124,
    419419        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    420         0,    0,    0,    0,  138,  116,  117,    0,  117,  117,
    421         0,    0,    6,  117,  113,    0,    0,    0,  117,    0,
    422       113,  113,  113,  113,    0,  114,    0,    0,  112,  112,
    423       112,  112,    0,  176,  177,    0,  182,  180,    0,    0,
    424         0,  106,    0,    0,    0,    0,    0,    0,    0,    0,
    425       105,   17,  105,  105,  105,  105,  105,  105,  105,  105,
    426       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    427 
    428        14,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    429       105,  105,  105,  105,  105,  105,  105,  105,  105,   51,
    430       105,  105,  105,   64,  105,  105,  105,  105,  105,  105,
    431       105,  105,  105,  105,  105,  105,  105,  105,  105,   91,
    432       105,  105,  105,  105,  105,  105,  105,  105,    0,    0,
    433         0,    0,    0,    0,    0,    0,  125,    0,    0,    0,
    434         0,    0,  125,    0,    0,  183,    0,    0,    0,    0,
    435         0,    0,    0,  117,    0,  117,    0,  117,    0,  117,
    436         0,    0,  117,    0,  113,  113,    0,    0,  114,  114,
    437         0,  114,    0,  114,  112,  112,    0,    0,    0,    0,
    438 
    439         0,    0,    0,    0,    0,    0,  181,  105,  105,  105,
    440       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    441       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    442        21,  105,   24,  105,   27,  105,  105,  105,  105,  105,
    443       105,  105,   41,  105,   43,  105,  105,  105,  105,  105,
    444       105,  105,   56,  105,   67,  105,  105,  105,  105,  105,
    445       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    446       105,  105,   99,  105,  105,  105,    0,    0,    0,    0,
     420        0,    0,    0,    0,    0,  139,  117,  118,    0,  118,
     421      118,    0,    0,    6,  118,  114,    0,    0,    0,  118,
     422        0,  114,  114,  114,  114,    0,  115,    0,    0,  113,
     423      113,  113,  113,    0,  177,  178,    0,  183,  181,    0,
     424        0,    0,  107,    0,    0,    0,    0,    0,    0,    0,
     425        0,  106,   17,  106,  106,  106,  106,  106,  106,  106,
     426      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     427
     428      106,   14,  106,  106,  106,  106,  106,  106,  106,  106,
     429      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     430       51,  106,  106,  106,   64,  106,  106,  106,  106,  106,
     431      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     432       91,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     433        0,    0,    0,    0,    0,    0,    0,    0,  126,    0,
     434        0,    0,    0,    0,  126,    0,    0,  184,    0,    0,
     435        0,    0,    0,    0,    0,  118,    0,  118,    0,  118,
     436        0,  118,    0,    0,  118,    0,  114,  114,    0,    0,
     437      115,  115,    0,  115,    0,  115,  113,  113,    0,    0,
     438
     439        0,    0,    0,    0,    0,    0,    0,    0,  182,  106,
     440      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     441      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     442      106,  106,   21,  106,   24,  106,   27,  106,  106,  106,
     443      106,  106,  106,  106,   41,  106,   43,  106,  106,  106,
     444      106,  106,  106,  106,   56,  106,   67,  106,  106,  106,
     445      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     446      106,  106,  106,  106,  106,  100,  106,  106,  106,    0,
    447447        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    448       125,    0,    0,    0,    0,    0,  117,    0,    0,    0,
    449 
    450         0,    0,    0,    0,  114,  114,    0,  118,    0,  114,
    451       114,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    452         0,    0,    0,    0,  105,  105,   22,  105,  105,  105,
    453       105,  105,  105,  105,   15,  105,  105,  105,  105,  105,
    454       105,  105,  105,  105,  105,  105,  105,  105,  105,   23,
    455        25,  105,   32,  105,  105,  105,  105,   40,  105,  105,
    456       105,  105,   49,  105,  105,   54,  105,  105,   71,   72,
    457       105,  105,  105,   78,  105,  105,  105,  105,  105,   88,
    458        90,  105,  105,   96,  105,  105,  103,  105,    0,    0,
     448        0,    0,    0,  126,    0,    0,    0,    0,    0,  118,
     449
     450        0,    0,    0,    0,    0,    0,    0,  115,  115,    0,
     451      119,    0,  115,  115,    0,    0,    0,    0,    0,    0,
     452        0,    0,    0,    0,    0,    0,    0,  106,  106,   22,
     453      106,  106,  106,  106,  106,  106,  106,   15,  106,  106,
     454      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     455      106,  106,   23,   25,  106,   32,  106,  106,  106,  106,
     456       40,  106,  106,  106,  106,   49,  106,  106,   54,  106,
     457      106,   71,   72,  106,  106,  106,   78,  106,  106,  106,
     458      106,  106,   88,   90,   92,  106,  106,   97,  106,  106,
     459      104,  106,    0,    0,    0,    0,    0,    0,    0,    0,
     460
    459461        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    460 
    461         0,    0,    0,    0,    0,    0,    0,  118,    0,    0,
    462       114,  118,  118,  118,  118,    0,  114,    0,    0,    0,
    463         0,    0,    0,    0,    0,    0,    0,  105,    0,  105,
    464       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    465       105,  105,  105,  105,  105,   59,  105,  105,  105,  105,
    466       105,  105,  105,  105,   28,  105,  105,  105,   39,   42,
    467        45,  105,  105,   52,  105,   61,   68,  105,  105,   77,
    468        79,   82,   83,   85,   86,  105,  105,   93,  105,  105,
    469       104,    0,    1,    0,    0,    0,    0,    0,    0,  108,
    470         0,    0,    0,  125,    0,    0,    0,    0,  118,    0,
    471 
    472       118,  118,    0,    0,    0,    0,    0,    0,    0,    0,
    473         0,  105,  105,   18,  105,  105,  105,  105,  105,  105,
    474       105,   16,  105,  105,  105,   33,  105,  105,  105,  105,
    475       105,  105,  105,  105,  105,  105,  105,  105,   36,   37,
    476       105,   48,   53,  105,  105,  105,   92,  105,  105,    0,
     462        0,  119,    0,    0,  115,  119,  119,  119,  119,    0,
     463      115,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     464        0,  106,    0,  106,  106,  106,  106,  106,  106,  106,
     465      106,  106,  106,  106,  106,  106,  106,  106,  106,   59,
     466      106,  106,  106,  106,  106,  106,  106,  106,   28,  106,
     467      106,  106,   39,   42,   45,  106,  106,   52,  106,   61,
     468       68,  106,  106,   77,   79,   82,   83,   85,   86,  106,
     469      106,   94,  106,  106,  105,    0,    1,    0,    0,    0,
     470        0,    0,    0,  109,    0,    0,    0,  126,    0,    0,
     471
     472        0,    0,  119,    0,  119,  119,    0,    0,    0,    0,
     473        0,    0,    0,    0,    0,  106,  106,   18,  106,  106,
     474      106,  106,  106,  106,  106,   16,  106,  106,  106,   33,
     475      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     476      106,  106,   36,   37,  106,   48,   53,  106,  106,  106,
     477       93,  106,  106,    0,    0,    0,    0,    0,    0,    0,
     478        0,    0,    0,    0,    0,    0,   10,   11,   29,   55,
     479      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     480      106,   60,   62,   65,  106,  106,   80,   95,  106,  106,
     481       35,  106,   47,   73,   74,  106,   98,  101,    0,    0,
     482
    477483        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    478         0,    0,   10,   11,   29,   55,  105,  105,  105,  105,
    479       105,  105,  105,  105,  105,  105,  105,   60,   62,   65,
    480       105,  105,   80,   94,  105,  105,   35,  105,   47,   73,
    481        74,  105,   97,  100,    0,    0,    0,    0,    0,    0,
    482 
    483         0,    0,    0,    0,    0,    0,  105,   69,  105,  105,
    484        12,  105,  105,   30,   34,  105,  105,  105,   66,  105,
    485       105,  105,  105,  105,  105,  105,    0,    0,    0,    0,
    486         0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
    487       105,  105,  105,  105,  105,  105,  105,   50,   63,   75,
    488        81,   95,  101,  105,  105,  105,    0,    0,    0,    0,
    489         0,    0,    0,    0,  105,  105,   13,   19,  105,  105,
    490        31,  105,  105,  105,   26,   46,   89,    0,    0,  105,
    491       105,  105,  105,  105,  105,   76,  102,  105,   87,   20,
    492       105,  105,   44,   84,  105,  105,  105,  105,  105,  105,
    493 
    494       105,   98,   70,    0
     484      106,   69,  106,  106,   12,  106,  106,   30,   34,  106,
     485      106,  106,   66,  106,  106,  106,  106,  106,  106,  106,
     486        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     487        0,    0,    0,   58,  106,  106,  106,  106,  106,  106,
     488      106,   50,   63,   75,   81,   96,  102,  106,  106,  106,
     489        0,    0,    0,    0,    0,    0,    0,    0,  106,  106,
     490       13,   19,  106,  106,   31,  106,  106,  106,   26,   46,
     491       89,    0,    0,  106,  106,  106,  106,  106,  106,   76,
     492      103,  106,   87,   20,  106,  106,   44,   84,  106,  106,
     493
     494      106,  106,  106,  106,  106,   99,   70,    0
    495495    } ;
    496496
     
    540540    } ;
    541541
    542 static yyconst flex_int16_t yy_base[1079] =
     542static yyconst flex_int16_t yy_base[1083] =
    543543    {   0,
    544         0,   84, 2323, 2322,   94,    0,  177,  178,  179,  180,
    545      2338, 2866,  191, 2866,  197,   55, 2866, 2283,   60,  173,
    546      2866, 2866, 2866,   56,  188, 2866,  191,  189,  204,  216,
    547       275,    0, 2300, 2866,  216, 2298,  152,  344,  155,  220,
    548      2866,  159, 2866,  217,  226, 2866,  185,  154,  212,  251,
    549       237,  270,  235,  257,  241,  279,  193,  305,  314,  333,
    550       238,  228,  227, 2866,  225, 2866, 2295,  402,  390, 2866,
    551      2306, 2866, 2273,  235, 2866,    0, 2866,  426,    0, 2866,
    552       417, 2866,  439,  451, 2866,  498, 2270,  264, 2866, 2866,
    553      2866, 2866, 2866, 2286, 2866, 2285, 2866, 2866, 2297,  559,
    554 
    555      2866, 2313, 2866,  438,  444,  511,  534,  289,  253,  197,
    556       380,  305,    0,  319,  280,  198,  322, 2866, 2866, 2866,
    557      2281, 2866, 2866, 2866, 2278, 2277,  218,  312, 2292,  350,
    558       459,  368,  398,  440,  405,  448, 2272,  441, 2219,  458,
    559      2247, 2866,  335, 2866, 2866,  321, 2243, 2242, 2866, 2214,
    560       444,  297,  433,  372,  425,  454,  434,  461,  570,  455,
    561       468,  385,  474,  475,  494,  492,  489,  464,  488,  491,
    562       513,  503,  430,  521,  517,  519,  516,  522, 2240,  526,
    563       523,  276,  460,  524,  542,  555,  554,  561,  325,  558,
    564       584,  552,  600,  586,  593,  588,  595, 2866, 2866,  667,
    565 
    566       655, 2287,  682, 2866,  688, 2866, 2236,  590, 2232, 2230,
    567         0,  648, 2866, 2866,  675, 2227, 2224, 2223,    0, 2246,
    568       578,  631,  654,  685,  698,  660,  689,  670,  692, 2242,
    569       695,  701, 2200, 2198, 2866,    0,  693,  720,  685,  711,
    570      2197, 2247, 2866,  737,  745,  666,  757,  763,  797,  780,
    571       599, 2866, 2203, 2178,    0,  805, 2224,  806,  617, 2866,
    572      2199, 2172,  819, 2866, 2866, 2203, 2866, 2866,  707,  722,
    573      2182, 2182,  699, 2177, 2174, 2171,    0, 2170,    0, 2141,
    574       743,  724,  739,  689,  741,  720,  623,  759,  762,  804,
    575       681,  795,  749,  746,  799,  801,  765,  784,  803,  811,
    576 
    577      2170,  814,  818,  827,  831,  817,  821,  833,  835,  841,
    578       842,  834,  843,  844,  845,  847,  849,  857,  858,  860,
    579       851,  859,  866, 2167,  867,  868,  869,  871,  873,  874,
    580       763,  875,  876,  880,  881,  884,  887,  888,  885, 2164,
    581       891,  936,  894,  897,  905,  899,  901,  902,  965,  961,
    582      2160, 2159, 2157,    0, 2154,    0,  952,  956, 2153,    0,
    583      2152,    0, 2150,    0, 2169, 2866,  951,  952, 2148, 2145,
    584         0, 2143,    0, 2866,  967,  986,  978, 2866,  992, 1032,
    585      2140, 1008, 1054, 2136, 2866, 2866,  915,  951, 1040,  993,
    586      1079,  956, 1071,  994, 2866, 2866, 2132, 2130, 2128,    0,
    587 
    588      2125,    0, 2123,    0, 2121,    0, 2866,  935,  969,  973,
    589       968, 1012,  975, 1056,  992, 1058,  997, 1032,  993, 1000,
    590      1060, 1061, 1066, 1070, 1073, 1030, 1071, 1069, 1072, 1078,
    591      2121,  700, 2118, 1085, 2117, 1079, 1081, 1089, 1087, 1098,
    592      1096, 1099, 2116, 1101, 2114, 1105, 1106, 1107, 1109, 1112,
    593      1113, 1114, 2111, 1115, 2108, 1117, 1119, 1120, 1118, 1124,
    594      1126, 1121, 1136, 1130, 1134, 1135, 1149, 1137, 1138, 1150,
    595      1152, 1153, 2107, 1151, 1154, 1167, 1205, 2103,    0, 2101,
    596         0, 2098,    0, 2095,    0, 1204, 2094,    0, 2093,    0,
    597      2091, 2088, 2085,    0, 2084,    0, 1208, 2083, 1214, 1230,
    598 
    599      1216, 1255, 1221, 1172, 1169, 2866, 1271, 1289, 1282, 2093,
    600      2066, 2075, 2074,    0, 2073,    0, 2071,    0, 2068,    0,
    601      2065,    0, 2064,    0, 1190, 1159, 2066, 1193, 1195, 1197,
    602      1212, 1237, 1231, 1265, 1248, 1266, 1267, 1213, 1268, 1269,
    603      1283, 1270, 1271,  234, 1285, 1273, 1274, 1287, 1293, 2064,
    604      1306, 1301, 2061, 1290, 1303, 1305, 1308, 2058, 1312, 1309,
    605      1311, 1313, 2057, 1314, 1319, 2056, 1316, 1322, 2054, 2051,
    606      1315, 1327, 1330, 2050, 1333, 1332, 1336, 1334, 1338, 1345,
    607      2049, 1335, 1348, 2047, 1346, 1349, 2044, 1351, 2093, 2039,
    608         0, 2037,    0, 2004,    0, 2002,    0, 2001,    0, 1998,
    609 
    610         0, 1995,    0, 1994,    0, 1394, 1404, 1428, 1415, 1993,
    611      2866, 1421, 1370, 1391, 1419, 1991, 2866, 1988,    0, 1985,
    612         0, 1984,    0, 1983,    0,    0,    0, 1984,    0, 1352,
    613      1406, 1408, 1359, 1354, 1409, 1415, 1412, 1411, 1423, 1433,
    614      1425, 1430, 1435, 1437, 1439, 1448, 1442, 1449, 1440, 1444,
    615      1453, 1450, 1452, 1456, 1981, 1458, 1460, 1463, 1980, 1979,
    616      1977, 1466, 1467, 1974, 1470, 1973, 1972, 1469, 1473, 1970,
    617      1963, 1961, 1960, 1957, 1953, 1475, 1479, 1949, 1476, 1477,
    618      1945, 1992, 2866, 1938,    0, 1937,    0,    0,    0, 1938,
    619         0,    0,    0, 2866,    0,    0,    0,    0, 1525, 1932,
    620 
    621      2866, 2866, 1531, 1931,    0, 1930,    0,    0,    0,    0,
    622      1928, 1488, 1483, 1928, 1491, 1507, 1518, 1490, 1519, 1521,
    623      1508, 1927, 1525, 1529, 1527, 1541, 1530, 1384, 1543, 1539,
    624      1558, 1547, 1549, 1512, 1545, 1552, 1553, 1554, 1926, 1924,
    625      1557, 1921, 1920, 1556, 1537, 1560, 1919, 1561, 1564,    0,
    626         0,    0, 1914, 1911, 1910, 1612,    0, 1909, 1907, 1904,
    627      1903, 1902, 1903, 1900, 1899, 1898, 1568, 1572, 1566, 1577,
    628      1590, 1570, 1578, 1579, 1591, 1596, 1625, 1896, 1598, 1893,
    629      1599, 1603, 1604, 1608, 1606, 1612, 1892, 1613, 1891, 1889,
    630      1886, 1614, 1885, 1884, 1879, 1872, 1870, 1869, 1866, 1865,
    631 
    632      1864, 1862, 1845, 1836, 1835, 1832, 1616, 1828, 1617, 1622,
    633      1620, 1619, 1624, 1626, 1825, 1628, 1644, 1630, 1818, 1631,
    634      1639, 1645, 1647, 1634, 1649, 1651, 1813, 1812, 1791, 1790,
    635      1789, 1782, 1780, 1779, 1737, 1735, 1733, 1732, 1730, 1732,
    636      1652, 1654, 1655, 1657, 1659, 1662, 1663, 1731, 1729, 1668,
    637      1727, 1724, 1669, 1670, 1664, 1675, 1719, 1718, 1671, 1629,
    638      1564, 1468, 1350, 1269, 1678, 1681, 1239, 1682, 1688, 1689,
    639      1238, 1690, 1692, 1696, 1206, 1171, 1157, 1035, 1031, 1691,
    640      1697, 1700, 1704, 1702, 1706,  998,  560, 1701,  527,  395,
    641      1707, 1710,  357,  300, 1708, 1713, 1715, 1718, 1716, 1719,
    642 
    643      1720,  233,  137, 2866, 1794, 1807, 1820, 1830, 1840, 1853,
    644      1863, 1876, 1889, 1902, 1910, 1920, 1927, 1934, 1941, 1948,
    645      1955, 1962, 1969, 1976, 1983, 1990, 1994, 2002, 2008, 2015,
    646      2022, 2029, 2036, 2039, 2046, 2052, 2065, 2078, 2085, 2092,
    647      2099, 2106, 2109, 2116, 2119, 2126, 2129, 2136, 2139, 2146,
    648      2149, 2156, 2159, 2166, 2169, 2176, 2184, 2191, 2198, 2205,
    649      2212, 2215, 2222, 2225, 2232, 2235, 2242, 2248, 2261, 2268,
    650      2275, 2278, 2285, 2288, 2295, 2298, 2305, 2308, 2315, 2318,
    651      2325, 2328, 2335, 2342, 2345, 2352, 2355, 2362, 2369, 2376,
    652      2379, 2386, 2389, 2396, 2399, 2406, 2409, 2416, 2419, 2426,
    653 
    654      2432, 2445, 2452, 2459, 2462, 2469, 2472, 2479, 2482, 2489,
    655      2492, 2499, 2502, 2509, 2512, 2519, 2522, 2529, 2532, 2539,
    656      2546, 2549, 2556, 2559, 2566, 2569, 2576, 2579, 2582, 2588,
    657      2595, 2604, 2611, 2618, 2621, 2628, 2631, 2634, 2640, 2647,
    658      2650, 2653, 2656, 2659, 2662, 2665, 2668, 2675, 2678, 2685,
    659      2688, 2691, 2694, 2697, 2707, 2714, 2717, 2720, 2723, 2730,
    660      2737, 2744, 2747, 2754, 2761, 2768, 2775, 2782, 2789, 2796,
    661      2803, 2810, 2817, 2824, 2831, 2838, 2845, 2852
     544        0,   84, 2330, 2327,   94,    0,  177,  178,  179,  180,
     545     2341, 2877,  191, 2877,  197,   55, 2877, 2287,   60,  173,
     546     2877, 2877, 2877,   56,  188, 2877,  191,  189,  204,  216,
     547      275,    0, 2306, 2877,  216, 2305,  152,  344,  155,  220,
     548     2877,  159, 2877,  217,  226, 2877,  185,  154,  212,  251,
     549      237,  270,  235,  257,  241,  279,  193,  305,  314,  351,
     550      238,  228,  227, 2877,  225, 2877, 2300,  406,  412, 2877,
     551     2309, 2877, 2277,  235, 2877,    0, 2877,  439,    0, 2877,
     552      426, 2877,  452,  464, 2877,  511, 2276,  264, 2877, 2877,
     553     2877, 2877, 2877, 2293, 2877, 2290, 2877, 2877, 2300,  572,
     554
     555     2877, 2317, 2877,  451,  457,  524,  547,  298,  253,  197,
     556      312,  279,    0,  342,  325,  198,  322, 2877, 2877, 2877,
     557     2287, 2877, 2877, 2877, 2285, 2282,  218,  312, 2295,  350,
     558      363,  368,  369,  391,  411,  417, 2276,  452, 2225,  453,
     559     2254, 2877,  274, 2877, 2877,  438, 2248, 2245, 2877, 2218,
     560      435,  282,  353,  277,  391,  419,  442,  320,  583,  451,
     561      446,  443,  479,  469,  364,  472,  481,  454,  458,  484,
     562      503,  493,  352,  506,  486,  453,  507,  509, 2246,  539,
     563      532,  524,  516,  528,  556,  530,  540,  552,  553,  564,
     564      574,  538,  576,  613,  573,  597,  602,  571, 2877, 2877,
     565
     566      668,  674, 2294,  680, 2877,  686, 2877, 2241,  603, 2235,
     567     2234,    0,  683, 2877, 2877,  692, 2233, 2231, 2211,    0,
     568     2233,  556,  627,  630,  662,  699,  688,  692,  693,  696,
     569     2230,  700,  703, 2205, 2202, 2877,    0,  695,  726,  693,
     570      701, 2201, 2253, 2877,  747,  742,  700,  753,  760,  793,
     571      815,  746, 2877, 2210, 2183,    0,  802, 2227,  801,  754,
     572     2877, 2203, 2178,  839, 2877, 2877, 2210, 2877, 2877,  709,
     573      723, 2187, 2185,  755, 2181, 2180, 2178,    0, 2175,    0,
     574     2144,  694,  736,  737,  741,  614,  739,  738,  742,  798,
     575      807,  792,  802,  797,  746,  816,  748,  791,  824,  819,
     576
     577      826, 2174,  827,  830,  831,  440,  834,  838,  836,  843,
     578      847,  849,  841,  850,  861,  853,  862,  851,  863,  865,
     579      872,  864,  873,  874, 2173,  749,  875,  876,  878,  880,
     580      881,  882,  884,  885,  886,  888,  889,  892,  898,  896,
     581     2171,  899,  906,  944,  901,  907,  913,  917,  908,  911,
     582      976,  977, 2165, 2164, 2163,    0, 2161,    0,  964,  968,
     583     2158,    0, 2157,    0, 2156,    0, 2176, 2877,  964,  967,
     584     2153, 2147,    0, 2143,    0, 2877,  979,  998,  990, 2877,
     585     1004, 1044, 2141, 1020, 1066, 2139, 2877, 2877,  963, 1006,
     586     1052, 1005, 1091,  968, 1083, 1006, 2877, 2877, 2136, 2134,
     587
     588     2132,    0, 2129,    0, 2126,    0, 2125,    0, 2877,  931,
     589      981,  985,  928, 1024,  987, 1068,  958, 1070, 1060, 1010,
     590     1005, 1072, 1083, 1022, 1078, 1082, 1088, 1042, 1084, 1081,
     591     1089, 1097, 2127, 1090, 2125, 1095, 2122, 1093, 1091, 1109,
     592     1101, 1111, 1115, 1116, 2119, 1118, 2118, 1119, 1120, 1121,
     593     1123, 1126, 1127, 1128, 2117, 1129, 2115, 1131, 1134, 1135,
     594     1132, 1138, 1140, 1143, 1148, 1149, 1150, 1152, 1155, 1151,
     595     1161, 1164, 1166, 1168, 1169, 2112, 1170, 1172, 1175, 1221,
     596     2106,    0, 2105,    0, 2104,    0, 2102,    0, 1216, 2099,
     597        0, 2096,    0, 2095, 2094, 2092,    0, 2089,    0, 1223,
     598
     599     2086, 1229, 1245, 1231, 1270, 1236, 1186, 1185, 2877, 1286,
     600     1304, 1297, 2097, 2072, 2082, 2079,    0, 2076,    0, 2075,
     601        0, 2074,    0, 2072,    0, 2069,    0, 1190, 1210, 2069,
     602     1191, 1227, 1212, 1230, 1253, 1246, 1254, 1280, 1281, 1282,
     603     1284, 1228, 1287, 1286, 1288, 1285,  234, 1293, 1289, 1304,
     604     1300, 1305, 2068, 1322, 1306, 2067, 1308, 1313, 1318, 1320,
     605     2065, 1323, 1324, 1326, 1327, 2062, 1330, 1331, 2061, 1334,
     606     1335, 2060, 2058, 1337, 1339, 1340, 2055, 1004, 1346, 1347,
     607     1348, 1349, 1364, 2054, 2053, 1351, 1353, 2051, 1350, 1355,
     608     2018, 1362, 2066, 2012,    0, 2009,    0, 2006,    0, 2005,
     609
     610        0, 2004,    0, 2002,    0, 1999,    0, 1996,    0, 1401,
     611     1407, 1435, 1418, 1995, 2877, 1424, 1411, 1421, 1427, 1994,
     612     2877, 1992,    0, 1989,    0, 1988,    0, 1987,    0,    0,
     613        0, 1988,    0, 1412, 1422, 1419, 1387, 1369, 1416, 1433,
     614     1436, 1403, 1446, 1441, 1431, 1432, 1451, 1452, 1455, 1456,
     615     1457, 1486, 1460, 1461, 1462, 1464, 1463, 1467, 1985, 1465,
     616     1468, 1470, 1984, 1983, 1981, 1472, 1466, 1974, 1478, 1972,
     617     1971, 1480, 1484, 1968, 1964, 1960, 1956, 1953, 1952, 1487,
     618     1494, 1951, 1497, 1483, 1949, 1996, 2877, 1942,    0, 1941,
     619        0,    0,    0, 1942,    0,    0,    0, 2877,    0,    0,
     620
     621        0,    0, 1537, 1936, 2877, 2877, 1543, 1935,    0, 1934,
     622        0,    0,    0,    0, 1932, 1499, 1519, 1932, 1500, 1524,
     623     1530, 1501, 1502, 1533, 1537, 1931, 1532, 1541, 1534, 1539,
     624     1544,  599, 1548, 1549, 1579, 1556, 1557, 1560, 1561, 1562,
     625     1563, 1564, 1930, 1928, 1567, 1925, 1924, 1566, 1569, 1572,
     626     1923, 1574, 1578,    0,    0,    0, 1918, 1915, 1914, 1624,
     627        0, 1913, 1911, 1908, 1907, 1906, 1907, 1904, 1903, 1902,
     628     1580, 1588, 1576, 1577, 1601, 1583, 1602, 1589, 1604, 1603,
     629     1636, 1900, 1609, 1897, 1610, 1614, 1617, 1622, 1618, 1623,
     630     1896, 1624, 1895, 1893, 1886, 1626, 1884, 1883, 1877, 1876,
     631
     632     1875, 1873, 1856, 1847, 1846, 1843, 1836, 1833, 1826, 1824,
     633     1628, 1826, 1629, 1630, 1631, 1632, 1635, 1637, 1805, 1639,
     634     1667, 1642, 1804, 1643, 1653, 1658, 1651, 1652, 1659, 1662,
     635     1800, 1793, 1791, 1790, 1748, 1745, 1744, 1742, 1741, 1737,
     636     1735, 1733, 1732, 1734, 1663, 1664, 1666, 1672, 1673, 1674,
     637     1675, 1731, 1689, 1676, 1644, 1522, 1680, 1685, 1686, 1687,
     638     1500, 1411, 1363, 1362, 1260, 1219, 1218, 1047, 1690, 1688,
     639     1046, 1700, 1695, 1701,  924, 1704, 1708, 1709,  839,  794,
     640      759,  702,  636, 1682, 1710, 1713, 1714, 1715, 1717,  638,
     641      536, 1719,  488,  441, 1721, 1722,  408,  281, 1723, 1726,
     642
     643     1727, 1729, 1728, 1730, 1733,  233,  137, 2877, 1805, 1818,
     644     1831, 1841, 1851, 1864, 1874, 1887, 1900, 1913, 1921, 1931,
     645     1938, 1945, 1952, 1959, 1966, 1973, 1980, 1987, 1994, 2001,
     646     2005, 2013, 2019, 2026, 2033, 2040, 2047, 2050, 2057, 2063,
     647     2076, 2089, 2096, 2103, 2110, 2117, 2120, 2127, 2130, 2137,
     648     2140, 2147, 2150, 2157, 2160, 2167, 2170, 2177, 2180, 2187,
     649     2195, 2202, 2209, 2216, 2223, 2226, 2233, 2236, 2243, 2246,
     650     2253, 2259, 2272, 2279, 2286, 2289, 2296, 2299, 2306, 2309,
     651     2316, 2319, 2326, 2329, 2336, 2339, 2346, 2353, 2356, 2363,
     652     2366, 2373, 2380, 2387, 2390, 2397, 2400, 2407, 2410, 2417,
     653
     654     2420, 2427, 2430, 2437, 2443, 2456, 2463, 2470, 2473, 2480,
     655     2483, 2490, 2493, 2500, 2503, 2510, 2513, 2520, 2523, 2530,
     656     2533, 2540, 2543, 2550, 2557, 2560, 2567, 2570, 2577, 2580,
     657     2587, 2590, 2593, 2599, 2606, 2615, 2622, 2629, 2632, 2639,
     658     2642, 2645, 2651, 2658, 2661, 2664, 2667, 2670, 2673, 2676,
     659     2679, 2686, 2689, 2696, 2699, 2702, 2705, 2708, 2718, 2725,
     660     2728, 2731, 2734, 2741, 2748, 2755, 2758, 2765, 2772, 2779,
     661     2786, 2793, 2800, 2807, 2814, 2821, 2828, 2835, 2842, 2849,
     662     2856, 2863
    662663    } ;
    663664
    664 static yyconst flex_int16_t yy_def[1079] =
     665static yyconst flex_int16_t yy_def[1083] =
    665666    {   0,
    666       904,    1,  905,  905,  904,    5,  906,  906,  907,  907,
    667       904,  904,  904,  904,  904,  904,  904,  908,  904,  904,
    668       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    669       904,   31,  904,  904,  904,  904,  904,  904,  909,  908,
    670       904,  904,  904,  904,  908,  904,  908,  908,  908,  908,
     667      908,    1,  909,  909,  908,    5,  910,  910,  911,  911,
     668      908,  908,  908,  908,  908,  908,  908,  912,  908,  908,
    671669      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    672       908,  908,  908,  904,  904,  904,  904,  904,  910,  904,
    673       904,  904,  911,  904,  904,  912,  904,  904,  913,  904,
    674       904,  904,  904,  904,  904,  904,  908,  904,  904,  904,
    675       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    676 
    677       904,  914,  904,  904,   30,  904,  904,  904,  904,  915,
    678        30,  904,   31,  904,  904,   31,  904,  904,  904,  904,
    679       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    680       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    681       916,  904,  904,  904,  904,  908,  917,  918,  904,  904,
     670      908,   31,  908,  908,  908,  908,  908,  908,  913,  912,
     671      908,  908,  908,  908,  912,  908,  912,  912,  912,  912,
     672      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
     673      912,  912,  912,  908,  908,  908,  908,  908,  914,  908,
     674      908,  908,  915,  908,  908,  916,  908,  908,  917,  908,
     675      908,  908,  908,  908,  908,  908,  912,  908,  908,  908,
     676      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     677
     678      908,  918,  908,  908,   30,  908,  908,  908,  908,  919,
     679       30,  908,   31,  908,  908,   31,  908,  908,  908,  908,
     680      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     681      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     682      920,  908,  908,  908,  908,  912,  921,  922,  908,  908,
     683      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
     684      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
     685      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
     686      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
     687      912,  912,  912,  912,  912,  912,  912,  912,  908,  908,
     688
     689      908,  914,  914,  914,  908,  914,  908,  915,  908,  923,
     690      924,  916,  908,  908,  908,  908,  925,  926,  927,  917,
     691      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     692      908,  908,  908,  928,  929,  908,  100,  908,  908,  908,
     693      908,  100,  918,  908,  100,  111,  246,  908,  908,  908,
     694      908,  908,  908,  908,  908,  930,  931,  932,  908,  908,
     695      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     696      908,  908,  933,  908,  934,  935,  936,  937,  938,  939,
     697      908,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     698      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     699
     700      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     701      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     702      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     703      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     704      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     705      941,  942,  943,  944,  945,  946,  947,  948,  908,  908,
     706      949,  950,  951,  952,  953,  954,  908,  908,  908,  908,
     707      908,  955,  956,  957,  958,  908,  908,  908,  908,  908,
     708      908,  908,  382,  908,  378,  385,  908,  908,  959,  960,
     709      961,  908,  908,  908,  961,  908,  908,  908,  962,  963,
     710
     711      964,  965,  966,  967,  968,  969,  970,  971,  908,  972,
     712      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     713      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     714      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     715      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     716      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     717      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     718      972,  972,  972,  972,  972,  972,  972,  972,  972,  973,
     719      974,  975,  976,  977,  978,  979,  980,  981,  908,  982,
     720      983,  984,  985,  986,  986,  987,  988,  989,  990,  908,
     721
     722      500,  908,  908,  991,  908,  991,  908,  908,  908,  908,
     723      908,  908,  908,  908,  992,  993,  994,  995,  996,  997,
     724      998,  999, 1000, 1001, 1002, 1003, 1004, 1005, 1005, 1005,
     725     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     726     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     727     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     728     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     729     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     730     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     731     1005, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
     732
     733     1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022,  908,
     734      908,  908,  908, 1023,  908,  612,  908,  908,  908,  616,
     735      908, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032,
     736     1033, 1034, 1035, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
     737     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
     738     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
     739     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
     740     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
     741     1034, 1034, 1034, 1034, 1034, 1036,  908, 1037, 1038, 1039,
     742     1040, 1041, 1042, 1043, 1044, 1045, 1046,  908, 1047, 1048,
     743
     744     1049, 1050,  908,  703,  908,  908,  908, 1051, 1052, 1053,
     745     1054, 1055, 1056, 1057, 1058, 1059, 1059, 1059, 1059, 1059,
     746     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     747     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     748     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     749     1059, 1059, 1059, 1060, 1061, 1062, 1063, 1064, 1065,  908,
     750     1066, 1051, 1053, 1067, 1068, 1058, 1059, 1059, 1059, 1059,
     751     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     752     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     753     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1069, 1070,
     754
     755     1063, 1071, 1064, 1072, 1065, 1073, 1074, 1067, 1075, 1068,
     756     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     757     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     758     1076, 1069, 1077, 1070, 1078, 1071, 1079, 1072, 1080, 1073,
     759     1081, 1074, 1075, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     760     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     761     1082, 1076, 1077, 1078, 1079, 1053, 1080, 1081, 1059, 1059,
     762     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     763     1059, 1082, 1053, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     764     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     765
     766     1059, 1059, 1059, 1059, 1059, 1059, 1059,    0,  908,  908,
    682767      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    683768      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    684769      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    685770      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    686       908,  908,  908,  908,  908,  908,  908,  904,  904,  904,
    687 
    688       910,  910,  910,  904,  910,  904,  911,  904,  919,  920,
    689       912,  904,  904,  904,  904,  921,  922,  923,  913,  904,
    690       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    691       904,  904,  924,  925,  904,  100,  904,  904,  904,  904,
    692       100,  914,  904,  100,  111,  245,  904,  904,  904,  904,
    693       904,  904,  904,  904,  926,  927,  928,  904,  904,  904,
    694       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    695       904,  929,  904,  930,  931,  932,  933,  934,  935,  904,
    696       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    697       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    698 
    699       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    700       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    701       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    702       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    703       936,  936,  936,  936,  936,  936,  936,  936,  937,  938,
    704       939,  940,  941,  942,  943,  944,  904,  904,  945,  946,
    705       947,  948,  949,  950,  904,  904,  904,  904,  904,  951,
    706       952,  953,  954,  904,  904,  904,  904,  904,  904,  904,
    707       380,  904,  376,  383,  904,  904,  955,  956,  957,  904,
    708       904,  904,  957,  904,  904,  904,  958,  959,  960,  961,
    709 
    710       962,  963,  964,  965,  966,  967,  904,  968,  968,  968,
    711       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    712       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    713       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    714       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    715       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    716       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    717       968,  968,  968,  968,  968,  968,  969,  970,  971,  972,
    718       973,  974,  975,  976,  977,  904,  978,  979,  980,  981,
    719       982,  982,  983,  984,  985,  986,  904,  497,  904,  904,
    720 
    721       987,  904,  987,  904,  904,  904,  904,  904,  904,  904,
    722       904,  988,  989,  990,  991,  992,  993,  994,  995,  996,
    723       997,  998,  999, 1000, 1001, 1001, 1001, 1001, 1001, 1001,
    724      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    725      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    726      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    727      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    728      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    729      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1002, 1003,
    730      1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
    731 
    732      1014, 1015, 1016, 1017, 1018,  904,  904,  904,  904, 1019,
    733       904,  608,  904,  904,  904,  612,  904, 1020, 1021, 1022,
    734      1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1030,
    735      1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
    736      1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
    737      1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
    738      1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
    739      1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
    740      1030, 1032,  904, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
    741      1040, 1041, 1042,  904, 1043, 1044, 1045, 1046,  904,  699,
    742 
    743       904,  904,  904, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
    744      1054, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    745      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    746      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    747      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1056,
    748      1057, 1058, 1059, 1060, 1061,  904, 1062, 1047, 1049, 1063,
    749      1064, 1054, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    750      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    751      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    752      1055, 1055, 1055, 1055, 1065, 1066, 1059, 1067, 1060, 1068,
    753 
    754      1061, 1069, 1070, 1063, 1071, 1064, 1055, 1055, 1055, 1055,
    755      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    756      1055, 1055, 1055, 1055, 1055, 1055, 1072, 1065, 1073, 1066,
    757      1074, 1067, 1075, 1068, 1076, 1069, 1077, 1070, 1071, 1055,
    758      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    759      1055, 1055, 1055, 1055, 1055, 1055, 1078, 1072, 1073, 1074,
    760      1075, 1049, 1076, 1077, 1055, 1055, 1055, 1055, 1055, 1055,
    761      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1078, 1049, 1055,
    762      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    763      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    764 
    765      1055, 1055, 1055,    0,  904,  904,  904,  904,  904,  904,
    766       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    767       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    768       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    769       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    770       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    771       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    772       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    773       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    774       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    775 
    776       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    777       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    778       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    779       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    780       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    781       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    782       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    783       904,  904,  904,  904,  904,  904,  904,  904
     771      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     772      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     773      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     774      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     775      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     776
     777      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     778      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     779      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     780      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     781      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     782      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     783      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     784      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     785      908,  908
    784786    } ;
    785787
    786 static yyconst flex_int16_t yy_nxt[2952] =
     788static yyconst flex_int16_t yy_nxt[2963] =
    787789    {   0,
    788790       12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
     
    809811
    810812       84,   84,   84,   83,   92,   94,   88,  143,  147,   99,
    811        96,  100,  100,  100,  100,  100,  100,  255,  904,   95,
     813       96,  100,  100,  100,  100,  100,  100,  256,  908,   95,
    812814      101,   86,   97,   98,   86,  102,  162,  119,  144,   78,
    813815       78,   78,   78,  145,  148,  103,  104,   88,  105,  105,
    814       105,  105,  106,  106,  120,   88,  121,  122,  149,  266,
    815       150,  267,  257,  263,  185,  107,  198,  648,  160,  108,
     816      105,  105,  106,  106,  120,   88,  121,  122,  149,  267,
     817      150,  268,  258,  264,  185,  107,  199,  652,  160,  108,
    816818      161,  151,  152,  153,   88,  109,  110,  154,  155,  163,
    817819      156,  111,   88,  157,  158,  146,  164,  107,   88,   88,
    818        88,  159,  165,  112,  209,   88,   88,   88,  197,   88,
    819        88,  109,  196,   88,  110,  104,  253,  113,  113,  113,
    820 
    821       113,  113,  113,   88,  170,  178,  171,  199,  195,   88,
    822       210,  181,  166,  233,  107,  172,  167,  182,  114,  179,
    823       254,  168,   88,  261,  115,  169,  180,  173,   88,  144,
    824       116,   88,  251,  326,  145,  174,  107,  175,  252,  234,
    825       176,  144,  117,  266,  177,  267,  145,  262,  183,   88,
    826       115,  126,   88,  184,  252,  127,  128,   88,  129,  193,
    827       130,  131,  259,  132,  252,  133,   88,  283,  260,  186,
    828       187,  260,  251,   88,  134,  135,  136,   88,  190,  188,
    829       252,  266,  189,  267,  274,   88,  191,  268,  146,  259,
    830       337,  203,  204,  192,  260,  137,  203,  260,  138,  266,
    831 
    832       904,  267,  194,  200,   82,   83,   83,   83,  200,   88,
    833       275,  201,  205,  205,  205,  205,  205,  205,   81,   82,
    834        83,   83,   83,   81,   88,  139,  140,  212,  213,  266,
    835       904,  267,  212,  285,  214,  258,  266,   88,  267,  214,
    836        83,   82,   83,   83,   83,   83,  303,   88,  215,  215,
    837       215,  215,   83,   82,   84,   84,   84,   83,  904,  214,
    838       244,  244,  244,  244,  244,  244,  245,  245,  245,  245,
    839       269,  266,  266,  267,  267,  216,  268,   88,  214,  266,
    840       270,  267,   88,  214,  214,   88,   88,  214,  214,  266,
    841       266,  267,  267,  286,  904,  214,   88,  317,  214,  246,
    842 
    843       214,  217,  214,  284,  218,  220,   88,   88,  288,  221,
    844       222,  281,   88,   88,  223,  224,   88,  225,  282,  226,
    845        88,  327,  904,  301,  287,  289,   88,   88,  227,  228,
    846       229,  104,  306,  106,  106,  106,  106,  106,  106,  311,
    847        88,   88,  302,   88,   88,  307,   88,  304,  305,  230,
    848       107,  248,  231,  248,  309,   88,  249,  249,  249,  249,
    849       249,  249,  310,  308,  313,   88,  247,  312,   88,   88,
    850       314,   88,  107,   88,   88,   88,   88,  316,   88,   88,
    851       232,  236,  236,  236,  236,  236,  236,  319,  315,  250,
    852       318,  320,  325,  323,   88,  321,  322,  237,  238,  239,
    853 
    854       324,  240,  239,  328,   88,  329,   88,   88,  144,  365,
    855        88,  366,   88,   88,  241,  330,  331,  333,  335,  239,
    856       238,  239,   88,  341,  240,  332,  239,  290,  291,  292,
    857       338,  293,  294,  336,  334,  295,   88,  296,   88,  351,
    858        88,  339,  297,  298,  299,   88,  300,   88,  385,  212,
    859       213,  343,   88,  347,  212,  342,  203,  204,  345,  344,
    860       346,  203,  365,  340,  366,  352,  395,  348,  200,   82,
    861        83,   83,   83,  200,  385,   88,  201,  205,  205,  205,
    862       205,  205,  205,  203,  204,  365,  904,  366,  203,  349,
    863       204,  365,  395,  366,  349,  414,  350,  357,  357,  357,
    864 
    865       357,  365,  366,  366,  205,  205,  205,  205,  205,  205,
    866       205,  205,  205,  205,  205,  205,  365,  366,  366,  367,
    867       365,  382,  366,  365,  368,  366,  365,  374,  366,  365,
    868       358,  366,  365,   88,  366,  374,  374,  375,  266,  375,
    869       267,   88,  376,  376,  376,  376,  376,  376,  397,  378,
    870       374,  378,   88,  266,  378,  267,  420,  411,  374,  380,
    871       380,  380,  380,  380,  380,  104,  550,  245,  245,  245,
    872       245,  378,   88,  378,  398,  377,   88,  413,  378,  106,
    873       106,  106,  106,  106,  106,  249,  249,  249,  249,  249,
    874       249,   88,  381,   88,  409,   88,  107,  248,   88,  248,
    875 
    876       246,   88,  249,  249,  249,  249,  249,  249,  408,  410,
    877       412,   88,  258,  423,   88,   88,  415,   88,  107,  383,
    878       383,  383,  383,  383,  383,  388,  427,  422,  106,  106,
    879       106,  106,  106,  106,  416,  237,   88,  239,  461,  240,
    880       239,  113,  113,  113,  113,  113,  113,   88,  390,  428,
    881       391,   88,  384,   88,  392,   88,   88,  239,  426,  239,
    882       393,  258,  240,   88,  239,  421,   88,  424,  425,   88,
    883        88,  417,  394,   88,  263,  432,  391,  418,  419,   88,
    884       392,  430,  429,   88,  431,   88,   88,   88,  433,  435,
    885       434,  436,  439,   88,   88,   88,   88,   88,  440,   88,
    886 
    887       441,   88,  444,   88,  443,  442,  437,  438,  446,   88,
    888        88,   88,   88,  445,  448,  449,  447,  450,   88,   88,
    889        88,   88,  452,   88,  457,   88,   88,   88,   88,  453,
    890       455,  454,   88,   88,  451,  456,   88,   88,  459,   88,
    891        88,  464,  458,   88,  144,  463,   88,  462,  460,   88,
    892       469,   88,  470,   88,   88,  465,  474,   88,  468,  466,
    893       502,  467,  472,  204,  471,  473,  349,  204,  475,  202,
    894       503,  349,  476,  350,  214,  214,  214,  214,  357,  357,
    895       357,  357,  365,  365,  366,  366,  502,   88,   88,  376,
    896       376,  376,  376,  376,  376,  375,  502,  375,  525,  510,
    897 
    898       376,  376,  376,  376,  376,  376,  504,  486,  497,  497,
    899       497,  497,  497,  497,  236,  236,  236,  236,  236,  236,
    900        88,   88,  502,  511,  237,   88,  239,   88,  240,  239,
    901       245,  245,  245,  245,  106,  106,  505,  526,  530,  528,
    902       527,  498,  506,  506,   88,   88,  239,  379,  239,   88,
    903        88,  240,   88,  239,  380,  380,  380,  380,  380,  380,
    904       388,  505,  534,  382,   88,  537,  532,  536,  506,  506,
    905       237,  238,  239,  529,  240,  239,  383,  383,  383,  383,
    906       383,  383,   88,  390,   88,  391,  904,  381,  545,  392,
    907       904,  904,  239,  238,  239,  393,  507,  240,  507,  239,
    908 
    909       535,  508,  508,  508,  508,  508,  508,  394,   88,  384,
    910        88,  391,   88,   88,  390,  392,  391,  531,   88,  533,
    911       392,   88,   88,   88,   88,   88,  512,  542,  538,  539,
    912        88,   88,  547,   88,  509,  540,  541,   88,  394,   88,
    913       543,   88,  391,  548,  546,  549,  392,  544,   88,  551,
    914        88,   88,  552,   88,  554,  553,  556,   88,   88,   88,
    915       558,   88,  555,  557,   88,   88,   88,   88,  559,   88,
    916        88,   88,   88,   88,  562,  566,   88,  560,   88,  564,
    917       561,  570,   88,  563,  567,  565,   88,   88,   88,   88,
    918        88,  571,  568,  569,  578,  574,  572,  575,  573,  577,
    919 
    920       576,   88,   88,   88,   88,   88,   88,  204,  579,   88,
    921       582,   88,  581,  589,  580,  587,  585,  502,  611,   88,
    922       583,  584,  588,   88,  631,  586,  214,  214,  214,  214,
    923       497,  497,  497,  497,  497,  497,  380,  380,  380,  380,
    924       380,  380,   88,  502,  611,   88,  237,   88,  239,   88,
    925       240,  239,  383,  383,  383,  383,  383,  383,   88,  630,
    926       632,  502,  634,  498,   88,   88,  502,  633,  239,  499,
    927       239,  503,  607,  240,  607,  239,  610,  608,  608,  608,
    928       608,  608,  608,   88,  642,  500,  635,  502,  637,   88,
    929        88,   88,  502,  508,  508,  508,  508,  508,  508,  507,
    930 
    931        88,  507,  636,  639,  508,  508,  508,  508,  508,  508,
    932       609,  612,  612,  612,  612,  612,  612,   88,   88,   88,
    933        88,   88,   88,   88,  904,   88,   88,  613,  638,  614,
    934       644,  615,  614,  646,  641,   88,  647,   88,  640,   88,
    935       645,  643,   88,  651,  616,   88,  649,  650,  652,  614,
    936       653,  614,  654,   88,  615,   88,  614,   88,   88,  656,
    937        88,   88,  655,   88,   88,   88,   88,   88,   88,  659,
    938       657,   88,  658,  660,   88,  662,  665,  666,  661,   88,
    939       663,  664,   88,  667,   88,   88,   88,   88,   88,  668,
    940        88,  676,  669,  671,  672,  673,  677,   88,   88,  670,
    941 
    942        88,   88,  675,   88,   88,  904,   88,  777,  674,  712,
    943       678,   88,  701,  701,  680,  679,  497,  497,  497,  497,
    944       497,  497,  713,  717,  716,  681,  608,  608,  608,  608,
    945       608,  608,  607,  701,  607,  701,   88,  608,  608,  608,
    946       608,  608,  608,  612,  612,  612,  612,  612,  612,  606,
    947       699,  699,  699,  699,  699,  699,  701,  702,   88,  702,
    948        88,   88,  702,   88,   88,  714,  613,   88,  614,  715,
    949       615,  614,  720,  731,  719,   88,  616,   88,  722,  702,
    950       721,  702,   88,  700,  718,   88,  702,   88,  614,   88,
    951       614,   88,   88,  615,   88,  614,   88,  725,  723,  724,
    952 
    953        88,   88,   88,  729,   88,   88,  727,  732,   88,  726,
    954        88,  730,   88,  728,  734,   88,  733,  737,   88,   88,
    955       735,   88,   88,  879,  740,   88,  736,   88,   88,   88,
    956       744,   88,  745,  738,  739,   88,  746,  748,  741,  743,
    957        88,  747,   88,   88,  749,  764,  742,  699,  699,  699,
    958       699,  699,  699,  612,  612,  612,  612,  612,  612,   88,
    959        88,  763,  768,  613,   88,  614,  766,  615,  614,  765,
    960        88,   88,  783,   88,  769,  767,  770,   88,  771,   88,
    961       700,   88,   88,  772,  780,  614,  703,  614,  774,   88,
    962       615,   88,  614,   88,  773,   88,  775,   88,  778,   88,
    963 
    964       779,   88,  781,  776,   88,   88,   88,  784,   88,   88,
    965        88,  791,   88,   88,  782,  787,   88,  785,   88,  904,
    966        88,  793,   88,  809,   88,  794,  786,  788,  790,   88,
    967        88,   88,  789,  792,  699,  699,  699,  699,  699,  699,
    968       807,  808,   88,   88,  810,  812,  815,  813,   88,  817,
    969        88,   88,  811,  818,  819,   88,   88,  814,   88,  821,
    970        88,  816,  820,  822,   88,   88,   88,  756,   88,   88,
    971       848,   88,   88,  823,   88,  843,   88,   88,   88,  845,
    972        88,  846,   88,   88,  904,  849,   88,  824,  825,  826,
    973       841,   88,  842,  844,  851,  840,   88,   88,  847,   88,
    974 
    975       852,   88,  854,   88,   88,  850,   88,   88,  853,   88,
    976       867,   88,  855,  866,   88,   88,   88,  871,  868,  856,
    977        88,   88,   88,  873,  874,  865,  904,   88,  876,  869,
    978        88,  875,  872,   88,   88,  870,  877,  882,  881,  880,
    979        88,   88,   88,   88,   88,  885,  884,  886,   88,   88,
    980       883,  887,   88,   88,   88,  890,   88,  892,   88,   88,
    981        88,  893,   88,  888,  889,   88,  891,   88,   88,  897,
    982        88,   88,   88,  904,  878,  894,   88,  896,  898,   88,
    983       895,   88,  903,   88,   88,  904,  901,  904,  864,  899,
    984       904,  900,  863,  902,   70,   70,   70,   70,   70,   70,
    985 
    986        70,   70,   70,   70,   70,   70,   70,   76,   76,   76,
     820       88,  159,  165,  112,  210,   88,   88,   88,  198,   88,
     821       88,  109,  197,   88,  110,  104,  254,  113,  113,  113,
     822
     823      113,  113,  113,   88,  170,  178,  171,  200,  196,   88,
     824      211,  181,  166,  234,  107,  172,  167,  182,  114,  179,
     825      255,  168,   88,  275,  115,  169,  180,  173,  253,   88,
     826      116,   88,  908,   88,   88,  174,  107,  175,  286,  235,
     827      176,  252,  117,  267,  177,  268,  252,  253,  183,  276,
     828      115,  126,  284,  184,  253,  127,  128,   88,  129,  144,
     829      130,  131,  908,  132,  145,  133,   88,  259,  262,  186,
     830      187,  261,   88,  253,  134,  135,  136,  194,  190,  188,
     831      269,  267,  189,  268,  290,  260,  191,  269,  192,  260,
     832      908,  261,  263,  193,  267,  137,  268,  261,  138,  267,
     833
     834      267,  268,  268,   88,   88,   88,  146,  201,   82,   83,
     835       83,   83,  201,  204,  205,  202,   88,  261,  204,  318,
     836      195,  270,  267,  285,  268,  139,  140,   81,   82,   83,
     837       83,   83,   81,  309,  206,  206,  206,  206,  206,  206,
     838      213,  214,  267,   88,  268,  213,  144,  215,  267,  271,
     839      268,  145,  215,   83,   82,   83,   83,   83,   83,  287,
     840       88,  216,  216,  216,  216,   83,   82,   84,   84,   84,
     841       83,   88,  215,  245,  245,  245,  245,  245,  245,  246,
     842      246,  246,  246,  267,  267,  268,  268,   88,  217,  288,
     843       88,  215,   88,   88,   88,   88,  215,  215,   88,  436,
     844
     845      215,  215,  282,   88,  304,   88,   88,  908,  215,  283,
     846       88,  215,  247,  215,  218,  215,  289,  219,  221,  302,
     847      303,   88,  222,  223,   88,  321,  307,  224,  225,  312,
     848      226,   88,  227,   88,  310,  908,   88,  313,   88,  308,
     849       88,  228,  229,  230,  104,   88,  106,  106,  106,  106,
     850      106,  106,  305,  306,  311,   88,  320,  314,   88,   88,
     851      315,   88,  231,  107,  249,  232,  249,  317,   88,  250,
     852      250,  250,  250,  250,  250,  319,   88,  328,  316,  248,
     853       88,  327,   88,  323,   88,  107,  322,  367,   88,  368,
     854       88,   88,   88,  233,  237,  237,  237,  237,  237,  237,
     855
     856      333,  326,  251,  334,   88,   88,  324,  329,   88,  336,
     857      238,  239,  240,  325,  241,  240,   88,  342,  338,  330,
     858      335,  144,  781,   88,  337,   88,   88,  242,   88,  331,
     859      332,  340,  240,  239,  240,   88,  339,  241,  345,  240,
     860      291,  292,  293,  350,  294,  295,  346,  343,  296,   88,
     861      297,   88,  353,  341,   88,  298,  299,  300,  367,  301,
     862      368,  367,  347,  368,  348,   88,   88,  349,  344,  201,
     863       82,   83,   83,   83,  201,  204,  205,  202,  354,  368,
     864      204,  204,  205,  414,  213,  214,  204,  351,  205,  213,
     865       88,  908,  351,  367,  352,  368,  206,  206,  206,  206,
     866
     867      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
     868      206,  206,  206,  206,  359,  359,  359,  359,  368,  367,
     869      908,  368,  369,  367,  367,  368,  368,  367,  370,  368,
     870      367,  367,  368,  368,  367,  376,  368,  376,  376,  380,
     871      267,  380,  268,  377,  380,  377,   88,  360,  378,  378,
     872      378,  378,  378,  378,  267,  384,  268,  908,  376,  410,
     873      376,  380,  104,  380,  246,  246,  246,  246,  380,  382,
     874      382,  382,  382,  382,  382,  106,  106,  106,  106,  106,
     875      106,  379,  250,  250,  250,  250,  250,  250,   88,   88,
     876       88,   88,  107,   88,   88,  387,  415,  247,   88,  417,
     877
     878       88,   88,  383,  397,  399,  428,  411,  412,  259,  413,
     879      416,   88,  457,  425,  107,  385,  385,  385,  385,  385,
     880      385,  387,  390,  106,  106,  106,  106,  106,  106,  397,
     881      400,  238,  249,  240,  249,  241,  240,  250,  250,  250,
     882      250,  250,  250,   88,   88,  392,   88,  393,  386,   88,
     883       88,  394,  429,  240,   88,  240,  259,  395,  241,   88,
     884      240,  113,  113,  113,  113,  113,  113,  422,   88,  396,
     885      418,   88,  423,  393,  419,  424,   88,  394,   88,   88,
     886      420,  421,   88,   88,  426,  427,   88,  434,   88,  430,
     887       88,   88,  435,   88,  264,   88,  432,  433,  431,   88,
     888
     889      441,   88,   88,   88,  442,   88,  437,  443,  438,  439,
     890      440,  445,  444,   88,   88,   88,   88,   88,  449,  446,
     891      450,  447,  451,  448,   88,   88,   88,   88,   88,  452,
     892       88,  459,   88,   88,   88,  454,   88,   88,   88,  456,
     893       88,   88,  458,  455,   88,  461,  453,  466,   88,  460,
     894       88,   88,  144,   88,  465,  462,  464,  463,   88,   88,
     895       88,  471,  467,   88,  468,   88,  469,  473,  470,   88,
     896      472,  474,  475,  476,  477,  478,   88,  351,  205,  205,
     897       88,  479,  351,   88,  352,  203,  215,  215,  215,  215,
     898      359,  359,  359,  359,  528,  367,   88,  368,  367,  531,
     899
     900      368,  378,  378,  378,  378,  378,  378,  377,  505,  377,
     901       88,  513,  378,  378,  378,  378,  378,  378,  506,  489,
     902      500,  500,  500,  500,  500,  500,  237,  237,  237,  237,
     903      237,  237,  535,   88,  505,  514,  238,   88,  240,   88,
     904      241,  240,  246,  246,  246,  246,  106,  106,  508,  529,
     905      533,  505,  530,  501,  509,  509,   88,   88,  240,  381,
     906      240,  507,   88,  241,  675,  240,  382,  382,  382,  382,
     907      382,  382,  390,  508,   88,  384,   88,  505,  538,  539,
     908      509,  509,  238,  239,  240,  532,  241,  240,  385,  385,
     909      385,  385,  385,  385,   88,  392,  543,  393,   88,  383,
     910
     911      548,  394,  908,  908,  240,  239,  240,  395,  510,  241,
     912      510,  240,   88,  511,  511,  511,  511,  511,  511,  396,
     913       88,  386,   88,  393,   88,  537,  392,  394,  393,  534,
     914       88,  536,  394,   88,   88,   88,   88,  540,  515,  545,
     915       88,   88,   88,   88,  550,   88,  512,   88,  544,   88,
     916      396,  541,  542,   88,  393,  546,  553,  549,  394,  554,
     917      551,   88,  547,   88,  552,  556,  555,   88,   88,  559,
     918       88,   88,   88,   88,  557,   88,  558,  561,   88,   88,
     919       88,   88,  560,   88,   88,  562,   88,   88,  565,  569,
     920       88,  563,   88,  567,  564,   88,  573,  566,  570,  568,
     921
     922       88,   88,   88,   88,   88,  574,  571,   88,  572,  578,
     923      575,  581,  576,   88,  582,  580,   88,  577,   88,  579,
     924       88,   88,   88,  205,   88,  585,  586,   88,  583,  593,
     925      592,  505,  589,  591,  615,  584,  587,  588,  215,  215,
     926      215,  215,   88,   88,  590,  500,  500,  500,  500,  500,
     927      500,  382,  382,  382,  382,  382,  382,  505,  636,  634,
     928      615,  238,   88,  240,   88,  241,  240,  385,  385,  385,
     929      385,  385,  385,  908,  883,  635,  505,  638,  501,   88,
     930       88,  505,   88,  240,  502,  240,  506,  611,  241,  611,
     931      240,  614,  612,  612,  612,  612,  612,  612,   88,  637,
     932
     933      503,  647,  505,  641,  639,   88,   88,  505,  511,  511,
     934      511,  511,  511,  511,  510,  908,  510,  642,  640,  511,
     935      511,  511,  511,  511,  511,  613,  616,  616,  616,  616,
     936      616,  616,   88,   88,   88,  643,   88,   88,   88,   88,
     937       88,   88,  617,  649,  618,   88,  619,  618,  648,  645,
     938      651,  650,   88,  644,  653,  646,   88,   88,   88,  620,
     939       88,  656,  657,  654,  618,   88,  618,  659,  658,  619,
     940       88,  618,   88,  655,   88,   88,   88,  660,   88,   88,
     941      661,  663,   88,   88,  664,  662,   88,   88,  669,   88,
     942      666,   88,   88,  665,  667,  670,  671,  668,   88,   88,
     943
     944       88,   88,   88,   88,  673,   88,  677,   88,  676,  674,
     945      680,  672,  681,  679,   88,  682,   88,  908,  908,  683,
     946      684,   88,  678,  500,  500,  500,  500,  500,  500,  612,
     947      612,  612,  612,  612,  612,  611,  685,  611,  721,   88,
     948      612,  612,  612,  612,  612,  612,  616,  616,  616,  616,
     949      616,  616,  720,  705,  705,   88,  610,  703,  703,  703,
     950      703,  703,  703,  705,   88,  706,  908,  706,   88,  716,
     951      706,   88,  725,  617,   88,  618,  705,  619,  618,  620,
     952      719,  718,  717,   88,   88,   88,  705,  706,   88,  706,
     953      704,  722,  723,   88,  706,  618,  724,  618,   88,  729,
     954
     955      619,  726,  618,   88,   88,  728,  727,   88,   88,   88,
     956      735,  733,   88,   88,   88,   88,   88,   88,   88,   88,
     957       88,  731,   88,  738,   88,  730,  734,  736,  741,  732,
     958       88,  744,   88,  737,  739,   88,   88,  740,   88,   88,
     959      742,  748,  743,  749,  745,  746,   88,  747,  750,   88,
     960      753,   88,   88,   88,   88,  882,  751,  773,  752,  703,
     961      703,  703,  703,  703,  703,  616,  616,  616,  616,  616,
     962      616,   88,  767,  772,   88,  617,   88,  618,  769,  619,
     963      618,  768,   88,  770,   88,   88,   88,  771,  774,   88,
     964      776,   88,  704,   88,  779,  778,   88,  618,  707,  618,
     965
     966       88,   88,  619,  782,  618,  784,  777,  775,   88,   88,
     967      783,  785,   88,   88,   88,   88,   88,  780,   88,   88,
     968      787,   88,  786,  788,   88,  791,   88,  789,   88,   88,
     969       88,   88,   88,  813,  797,   88,  790,  792,  794,  798,
     970       88,   88,  793,  795,  814,  796,  703,  703,  703,  703,
     971      703,  703,  811,   88,   88,   88,   88,  812,  816,  819,
     972      821,   88,   88,  815,  822,  823,   88,  818,  820,   88,
     973       88,  817,  825,  824,   88,   88,   88,  826,   88,  760,
     974       88,   88,   88,   88,   88,  827,  847,   88,   88,   88,
     975      849,   88,  850,  852,   88,   88,   88,  853,  828,  829,
     976
     977      846,  830,  845,   88,   88,   88,  848,  844,  855,  851,
     978       88,   88,  857,  856,   88,   88,   88,  854,   88,   88,
     979      858,  871,  859,  870,   88,   88,   88,   88,   88,  875,
     980      860,  877,   88,  872,   88,  878,  869,   88,   88,   88,
     981       88,   88,   88,  873,  876,  885,  879,   88,  881,  874,
     982      880,  884,   88,   88,  892,  886,   88,  887,  888,  889,
     983       88,   88,   88,  890,  891,   88,   88,   88,  894,   88,
     984      896,   88,  897,   88,   88,   88,  895,  893,   88,   88,
     985       88,   88,   88,   88,  901,   88,   88,  908,  908,  900,
     986      868,  902,  908,  898,  899,  907,  867,  908,  905,  865,
     987
     988      908,  903,  904,  864,  906,   70,   70,   70,   70,   70,
     989       70,   70,   70,   70,   70,   70,   70,   70,   76,   76,
    987990       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
    988        79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
    989        79,   79,   79,   87,  904,  861,   87,  904,   87,   87,
    990        87,   87,   87,  141,  860,  904,  859,  141,  141,  141,
    991       141,  141,  141,  202,  202,  202,  202,  202,  202,  202,
    992       202,  202,  202,  202,  202,  202,  207,  904,  858,  207,
    993        88,  207,  207,  207,  207,  207,  211,   88,  211,  211,
    994        88,  211,  211,  211,  211,  211,  211,  904,  211,  219,
    995       839,  904,  219,  219,  219,  219,  219,  219,  219,  219,
    996 
    997       838,  219,  242,  242,  242,  242,  242,  242,  242,  242,
    998       242,  242,  242,  242,  242,  256,  256,  836,  256,  904,
    999       834,  904,  256,  272,  832,  904,  272,  830,  272,  272,
    1000       272,  272,  272,  276,  828,  276,   88,   88,   88,  276,
    1001       278,   88,  278,   88,   88,   88,  278,  353,   88,  353,
    1002        88,   88,   88,  353,  355,   88,  355,  904,  806,  804,
    1003       355,  359,  904,  359,  904,  801,  799,  359,  361,  797,
    1004       361,   88,   88,   88,  361,  363,   88,  363,   88,   88,
    1005        88,  363,  370,  762,  370,  759,  758,  756,  370,  372,
    1006       208,  372,  752,  751,  683,  372,  387,   88,  387,  389,
    1007 
    1008       389,   88,  389,  389,  389,   88,  389,  256,  256,   88,
    1009       256,  272,   88,   88,  272,   88,  272,  272,  272,  272,
    1010       272,  399,   88,  399,   88,   88,   88,  399,  401,   88,
    1011       401,   88,   88,   88,  401,  403,   88,  403,  710,  709,
    1012       707,  403,  276,  705,  276,  405,  703,  405,  610,  698,
    1013       697,  405,  278,  695,  278,   87,  693,  691,   87,  689,
    1014        87,   87,   87,   87,   87,  202,  202,  202,  202,  202,
    1015       202,  202,  202,  202,  202,  202,  202,  202,  477,  477,
    1016       477,  477,  477,  477,  477,  477,  477,  477,  477,  477,
    1017       477,  478,  687,  478,  685,  683,   88,  478,  480,   88,
    1018 
    1019       480,   88,   88,   88,  480,  482,   88,  482,   88,   88,
    1020        88,  482,  353,   88,  353,  484,   88,  484,   88,  629,
    1021       627,  484,  355,  625,  355,  487,  623,  487,  621,  619,
    1022       512,  487,  359,  617,  359,  489,  617,  489,  606,  605,
    1023       603,  489,  361,  492,  361,  491,  492,  491,  601,  599,
    1024       597,  491,  363,  595,  363,  493,  593,  493,  591,   88,
    1025        88,  493,  370,   88,  370,  495,   88,  495,   88,   88,
    1026        88,  495,  372,   88,  372,  501,  524,  501,  522,  501,
    1027       520,  501,  387,  518,  387,  516,  387,  514,  387,  389,
    1028       389,  500,  389,  389,  389,  499,  389,  513,  496,  513,
    1029 
    1030       494,  366,  366,  513,  515,  492,  515,  490,  488,  485,
    1031       515,  517,  483,  517,  481,  479,   88,  517,  399,   88,
    1032       399,  519,   88,  519,  407,  406,  404,  519,  401,  402,
    1033       401,  521,  400,  521,  273,  268,  267,  521,  403,  396,
    1034       403,  523,  396,  523,  255,  386,  386,  523,  405,  243,
    1035       405,   87,  379,  373,   87,  371,   87,   87,   87,   87,
    1036        87,  477,  477,  477,  477,  477,  477,  477,  477,  477,
    1037       477,  477,  477,  477,  590,  369,  590,  365,  364,  362,
    1038       590,  478,  360,  478,  592,  356,  592,  354,  208,  204,
    1039       592,  480,   88,  480,  594,  280,  594,  279,  277,  273,
    1040 
    1041       594,  482,  268,  482,  596,  271,  596,  268,  266,  265,
    1042       596,  484,  264,  484,  598,  243,  598,  235,   86,   86,
    1043       598,  487,   88,  487,  600,  208,  600,  206,   86,  123,
    1044       600,  489,  118,  489,  491,   88,  491,  904,   71,   71,
    1045       491,  602,  904,  602,  904,  904,  904,  602,  493,  904,
    1046       493,  604,  904,  604,  904,  904,  904,  604,  495,  904,
    1047       495,  501,  904,  501,  904,  501,  904,  501,  389,  904,
    1048       389,  904,  904,  904,  389,  618,  904,  618,  904,  904,
    1049       904,  618,  513,  904,  513,  620,  904,  620,  904,  904,
    1050       904,  620,  515,  904,  515,  622,  904,  622,  904,  904,
    1051 
    1052       904,  622,  517,  904,  517,  624,  904,  624,  904,  904,
    1053       904,  624,  519,  904,  519,  626,  904,  626,  904,  904,
    1054       904,  626,  521,  904,  521,  628,  904,  628,  904,  904,
    1055       904,  628,  523,  904,  523,   87,  904,  904,   87,  904,
    1056        87,   87,   87,   87,   87,  682,  682,  682,  682,  682,
    1057       682,  682,  682,  682,  682,  682,  682,  682,  684,  904,
    1058       684,  904,  904,  904,  684,  590,  904,  590,  686,  904,
    1059       686,  904,  904,  904,  686,  592,  904,  592,  688,  904,
    1060       688,  904,  904,  904,  688,  594,  904,  594,  690,  904,
    1061       690,  904,  904,  904,  690,  596,  904,  596,  692,  904,
    1062 
    1063       692,  904,  904,  904,  692,  598,  904,  598,  694,  904,
    1064       694,  904,  904,  904,  694,  600,  904,  600,  696,  904,
    1065       696,  904,  904,  904,  696,  602,  904,  602,   87,  904,
    1066        87,  904,  904,  904,   87,  604,  904,  604,  501,  904,
    1067       501,  904,  904,  904,  501,  704,  904,  704,  904,  904,
    1068       904,  704,  618,  904,  618,  706,  904,  706,  904,  904,
    1069       904,  706,  620,  904,  620,  708,  904,  708,  904,  904,
    1070       904,  708,  622,  904,  622,  141,  904,  141,  904,  904,
    1071       904,  141,  624,  904,  624,  711,  904,  711,  626,  904,
    1072       626,   87,  904,  904,   87,  904,   87,   87,   87,   87,
    1073 
    1074        87,  628,  904,  628,  682,  682,  682,  682,  682,  682,
    1075       682,  682,  682,  682,  682,  682,  682,  750,  904,  750,
    1076       904,  904,  904,  750,  684,  904,  684,  207,  904,  207,
    1077       904,  904,  904,  207,  686,  904,  686,  753,  904,  753,
    1078       688,  904,  688,  207,  904,  904,  207,  904,  207,  207,
    1079       207,  207,  207,  690,  904,  690,  754,  904,  754,  692,
    1080       904,  692,  694,  904,  694,  755,  904,  755,  696,  904,
    1081       696,   87,  904,   87,  757,  904,  757,  904,  904,  904,
    1082       757,  704,  904,  704,  272,  904,  272,  904,  904,  904,
    1083       272,  706,  904,  706,  760,  904,  760,  708,  904,  708,
    1084 
    1085       141,  904,  141,  761,  904,  761,  904,  904,  904,  761,
    1086        87,  904,  904,   87,  904,   87,   87,   87,   87,   87,
    1087       795,  904,  795,  750,  904,  750,  207,  904,  207,  796,
    1088       904,  796,  904,  904,  904,  796,  798,  904,  798,  904,
    1089       904,  904,  798,  800,  904,  800,  904,  904,  904,  800,
    1090       802,  904,  802,  803,  904,  803,  904,  904,  904,  803,
    1091       805,  904,  805,  904,  904,  904,  805,  827,  904,  827,
    1092       904,  904,  904,  827,  829,  904,  829,  904,  904,  904,
    1093       829,  831,  904,  831,  904,  904,  904,  831,  833,  904,
    1094       833,  904,  904,  904,  833,  835,  904,  835,  904,  904,
    1095 
    1096       904,  835,  837,  904,  837,  904,  904,  904,  837,  628,
    1097       904,  628,  904,  904,  904,  628,  857,  904,  857,  904,
    1098       904,  904,  857,  690,  904,  690,  904,  904,  904,  690,
    1099       694,  904,  694,  904,  904,  904,  694,   87,  904,   87,
    1100       904,  904,  904,   87,  862,  904,  862,  904,  904,  904,
    1101       862,  141,  904,  141,  904,  904,  904,  141,  207,  904,
    1102       207,  904,  904,  904,  207,   11,  904,  904,  904,  904,
    1103       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1104       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1105       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1106 
    1107       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1108       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1109       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1110       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1111       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1112       904
     991       76,   79,   79,   79,   79,   79,   79,   79,   79,   79,
     992       79,   79,   79,   79,   87,  908,  863,   87,  908,   87,
     993       87,   87,   87,   87,  141,  862,   88,   88,  141,  141,
     994      141,  141,  141,  141,  203,  203,  203,  203,  203,  203,
     995      203,  203,  203,  203,  203,  203,  203,  208,   88,  908,
     996      208,  843,  208,  208,  208,  208,  208,  212,  908,  212,
     997      212,  842,  212,  212,  212,  212,  212,  212,  840,  212,
     998
     999      220,  908,  838,  220,  220,  220,  220,  220,  220,  220,
     1000      220,  908,  220,  243,  243,  243,  243,  243,  243,  243,
     1001      243,  243,  243,  243,  243,  243,  257,  257,  836,  257,
     1002      908,  834,  832,  257,  273,   88,   88,  273,   88,  273,
     1003      273,  273,  273,  273,  277,   88,  277,   88,   88,   88,
     1004      277,  279,   88,  279,   88,   88,   88,  279,  355,   88,
     1005      355,  908,  810,  808,  355,  357,  908,  357,  908,  805,
     1006      803,  357,  361,  801,  361,   88,   88,   88,  361,  363,
     1007       88,  363,   88,   88,   88,  363,  365,  766,  365,  763,
     1008      762,  760,  365,  372,  209,  372,  756,  755,  687,  372,
     1009
     1010      374,   88,  374,   88,   88,   88,  374,  389,   88,  389,
     1011      391,  391,   88,  391,  391,  391,   88,  391,  257,  257,
     1012       88,  257,  273,   88,   88,  273,   88,  273,  273,  273,
     1013      273,  273,  401,   88,  401,   88,   88,   88,  401,  403,
     1014       88,  403,  714,  713,  711,  403,  405,  709,  405,  707,
     1015      614,  702,  405,  277,  701,  277,  407,  699,  407,  697,
     1016      695,  693,  407,  279,  691,  279,   87,  689,  687,   87,
     1017       88,   87,   87,   87,   87,   87,  203,  203,  203,  203,
     1018      203,  203,  203,  203,  203,  203,  203,  203,  203,  480,
     1019      480,  480,  480,  480,  480,  480,  480,  480,  480,  480,
     1020
     1021      480,  480,  481,   88,  481,   88,   88,   88,  481,  483,
     1022       88,  483,   88,   88,   88,  483,  485,   88,  485,   88,
     1023       88,   88,  485,  355,  633,  355,  487,  631,  487,  629,
     1024      627,  625,  487,  357,  623,  357,  490,  515,  490,  621,
     1025      621,  610,  490,  361,  609,  361,  492,  607,  492,  495,
     1026      495,  605,  492,  363,  603,  363,  494,  601,  494,  599,
     1027      597,  595,  494,  365,   88,  365,  496,   88,  496,   88,
     1028       88,   88,  496,  372,   88,  372,  498,   88,  498,   88,
     1029      527,  525,  498,  374,  523,  374,  504,  521,  504,  519,
     1030      504,  517,  504,  389,  503,  389,  502,  389,  499,  389,
     1031
     1032      391,  391,  497,  391,  391,  391,  368,  391,  516,  368,
     1033      516,  495,  493,  491,  516,  518,  488,  518,  486,  484,
     1034      482,  518,  520,   88,  520,   88,   88,  409,  520,  401,
     1035      408,  401,  522,  406,  522,  404,  402,  274,  522,  403,
     1036      269,  403,  524,  268,  524,  398,  398,  256,  524,  405,
     1037      388,  405,  526,  388,  526,  244,  381,  375,  526,  407,
     1038      373,  407,   87,  371,  367,   87,  366,   87,   87,   87,
     1039       87,   87,  480,  480,  480,  480,  480,  480,  480,  480,
     1040      480,  480,  480,  480,  480,  594,  364,  594,  362,  358,
     1041      356,  594,  481,  209,  481,  596,  205,  596,   88,  281,
     1042
     1043      280,  596,  483,  278,  483,  598,  274,  598,  269,  272,
     1044      269,  598,  485,  267,  485,  600,  266,  600,  265,  244,
     1045      236,  600,  487,   86,  487,  602,   86,  602,   88,  209,
     1046      207,  602,  490,   86,  490,  604,  123,  604,  118,   88,
     1047      908,  604,  492,   71,  492,  494,   71,  494,  908,  908,
     1048      908,  494,  606,  908,  606,  908,  908,  908,  606,  496,
     1049      908,  496,  608,  908,  608,  908,  908,  908,  608,  498,
     1050      908,  498,  504,  908,  504,  908,  504,  908,  504,  391,
     1051      908,  391,  908,  908,  908,  391,  622,  908,  622,  908,
     1052      908,  908,  622,  516,  908,  516,  624,  908,  624,  908,
     1053
     1054      908,  908,  624,  518,  908,  518,  626,  908,  626,  908,
     1055      908,  908,  626,  520,  908,  520,  628,  908,  628,  908,
     1056      908,  908,  628,  522,  908,  522,  630,  908,  630,  908,
     1057      908,  908,  630,  524,  908,  524,  632,  908,  632,  908,
     1058      908,  908,  632,  526,  908,  526,   87,  908,  908,   87,
     1059      908,   87,   87,   87,   87,   87,  686,  686,  686,  686,
     1060      686,  686,  686,  686,  686,  686,  686,  686,  686,  688,
     1061      908,  688,  908,  908,  908,  688,  594,  908,  594,  690,
     1062      908,  690,  908,  908,  908,  690,  596,  908,  596,  692,
     1063      908,  692,  908,  908,  908,  692,  598,  908,  598,  694,
     1064
     1065      908,  694,  908,  908,  908,  694,  600,  908,  600,  696,
     1066      908,  696,  908,  908,  908,  696,  602,  908,  602,  698,
     1067      908,  698,  908,  908,  908,  698,  604,  908,  604,  700,
     1068      908,  700,  908,  908,  908,  700,  606,  908,  606,   87,
     1069      908,   87,  908,  908,  908,   87,  608,  908,  608,  504,
     1070      908,  504,  908,  908,  908,  504,  708,  908,  708,  908,
     1071      908,  908,  708,  622,  908,  622,  710,  908,  710,  908,
     1072      908,  908,  710,  624,  908,  624,  712,  908,  712,  908,
     1073      908,  908,  712,  626,  908,  626,  141,  908,  141,  908,
     1074      908,  908,  141,  628,  908,  628,  715,  908,  715,  630,
     1075
     1076      908,  630,   87,  908,  908,   87,  908,   87,   87,   87,
     1077       87,   87,  632,  908,  632,  686,  686,  686,  686,  686,
     1078      686,  686,  686,  686,  686,  686,  686,  686,  754,  908,
     1079      754,  908,  908,  908,  754,  688,  908,  688,  208,  908,
     1080      208,  908,  908,  908,  208,  690,  908,  690,  757,  908,
     1081      757,  692,  908,  692,  208,  908,  908,  208,  908,  208,
     1082      208,  208,  208,  208,  694,  908,  694,  758,  908,  758,
     1083      696,  908,  696,  698,  908,  698,  759,  908,  759,  700,
     1084      908,  700,   87,  908,   87,  761,  908,  761,  908,  908,
     1085      908,  761,  708,  908,  708,  273,  908,  273,  908,  908,
     1086
     1087      908,  273,  710,  908,  710,  764,  908,  764,  712,  908,
     1088      712,  141,  908,  141,  765,  908,  765,  908,  908,  908,
     1089      765,   87,  908,  908,   87,  908,   87,   87,   87,   87,
     1090       87,  799,  908,  799,  754,  908,  754,  208,  908,  208,
     1091      800,  908,  800,  908,  908,  908,  800,  802,  908,  802,
     1092      908,  908,  908,  802,  804,  908,  804,  908,  908,  908,
     1093      804,  806,  908,  806,  807,  908,  807,  908,  908,  908,
     1094      807,  809,  908,  809,  908,  908,  908,  809,  831,  908,
     1095      831,  908,  908,  908,  831,  833,  908,  833,  908,  908,
     1096      908,  833,  835,  908,  835,  908,  908,  908,  835,  837,
     1097
     1098      908,  837,  908,  908,  908,  837,  839,  908,  839,  908,
     1099      908,  908,  839,  841,  908,  841,  908,  908,  908,  841,
     1100      632,  908,  632,  908,  908,  908,  632,  861,  908,  861,
     1101      908,  908,  908,  861,  694,  908,  694,  908,  908,  908,
     1102      694,  698,  908,  698,  908,  908,  908,  698,   87,  908,
     1103       87,  908,  908,  908,   87,  866,  908,  866,  908,  908,
     1104      908,  866,  141,  908,  141,  908,  908,  908,  141,  208,
     1105      908,  208,  908,  908,  908,  208,   11,  908,  908,  908,
     1106      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1107      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1108
     1109      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1110      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1111      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1112      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1113      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1114      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1115      908,  908
    11131116    } ;
    11141117
    1115 static yyconst flex_int16_t yy_chk[2952] =
     1118static yyconst flex_int16_t yy_chk[2963] =
    11161119    {   0,
    11171120        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    11341137        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
    11351138        5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
    1136         8,    9,   10,   37,   37,   20,   39,    9,   10,  903,
     1139        8,    9,   10,   37,   37,   20,   39,    9,   10,  907,
    11371140        7,    8,   13,   13,   13,   13,   13,   13,   15,   15,
    11381141
     
    11421145        8,    9,   10,   40,   42,   29,   30,   47,   30,   30,
    11431146       30,   30,   30,   30,   35,   57,   35,   35,   44,  127,
    1144        44,  127,  110,  116,   57,   30,   65,  544,   47,   30,
     1147       44,  127,  110,  116,   57,   30,   65,  547,   47,   30,
    11451148       47,   45,   45,   45,   49,   30,   30,   45,   45,   49,
    11461149       45,   30,   40,   45,   45,   40,   49,   30,   45,   63,
    1147        62,   45,   49,   30,   74,  902,  544,   53,   63,   51,
     1150       62,   45,   49,   30,   74,  906,  547,   53,   63,   51,
    11481151       61,   30,   62,   55,   30,   31,  109,   31,   31,   31,
    11491152
    11501153       31,   31,   31,   50,   51,   53,   51,   65,   61,   54,
    11511154       74,   55,   50,   88,   31,   51,   50,   55,   31,   54,
    1152       109,   50,   52,  115,   31,   50,   54,   52,  182,  146,
    1153        31,   56,  108,  182,  146,   52,   31,   52,  108,   88,
    1154        52,   60,   31,  128,   52,  128,   60,  115,   56,  152,
    1155        31,   38,  894,   56,  112,   38,   38,   58,   38,   60,
    1156        38,   38,  114,   38,  108,   38,   59,  152,  114,   58,
    1157        58,  117,  112,  146,   38,   38,   38,  189,   59,   58,
    1158       112,  130,   58,  130,  143,   60,   59,  132,   60,  117,
    1159       189,   69,   69,   59,  114,   38,   69,  117,   38,  132,
    1160 
    1161       111,  132,   60,   68,   68,   68,   68,   68,   68,  893,
    1162       143,   68,   69,   69,   69,   69,   69,   69,   81,   81,
    1163        81,   81,   81,   81,  154,   38,   38,   78,   78,  133,
    1164       111,  133,   78,  154,   78,  111,  135,  162,  135,   78,
    1165        83,   83,   83,   83,   83,   83,  162,  890,   78,   78,
    1166        78,   78,   84,   84,   84,   84,   84,   84,  111,   78,
    1167       104,  104,  104,  104,  104,  104,  105,  105,  105,  105,
    1168       134,  134,  138,  134,  138,   78,  131,  155,   78,  136,
    1169       136,  136,  173,   78,   78,  153,  157,   78,   78,  140,
    1170       131,  140,  131,  155,  105,   78,  151,  173,   78,  105,
    1171 
    1172        78,   78,   78,  153,   78,   86,  156,  160,  157,   86,
    1173        86,  151,  183,  158,   86,   86,  168,   86,  151,   86,
    1174       161,  183,  105,  160,  156,  158,  163,  164,   86,   86,
    1175        86,  106,  164,  106,  106,  106,  106,  106,  106,  168,
    1176       169,  167,  161,  170,  166,  164,  165,  163,  163,   86,
    1177       106,  107,   86,  107,  166,  172,  107,  107,  107,  107,
    1178       107,  107,  167,  165,  170,  171,  106,  169,  177,  175,
    1179       171,  176,  106,  174,  178,  181,  184,  172,  180,  889,
    1180        86,  100,  100,  100,  100,  100,  100,  175,  171,  107,
    1181       174,  176,  181,  180,  185,  177,  178,  100,  100,  100,
    1182 
    1183       180,  100,  100,  184,  192,  185,  187,  186,  193,  221,
    1184       190,  221,  887,  188,  100,  185,  185,  187,  188,  100,
    1185       100,  100,  159,  192,  100,  186,  100,  159,  159,  159,
    1186       190,  159,  159,  188,  187,  159,  191,  159,  194,  208,
    1187       196,  191,  159,  159,  159,  195,  159,  197,  251,  212,
    1188       212,  194,  193,  196,  212,  193,  201,  201,  195,  194,
    1189       195,  201,  222,  191,  222,  208,  259,  197,  200,  200,
    1190       200,  200,  200,  200,  251,  287,  200,  201,  201,  201,
    1191       201,  201,  201,  203,  203,  223,  246,  223,  203,  205,
    1192       205,  226,  259,  226,  205,  287,  205,  215,  215,  215,
    1193 
    1194       215,  228,  224,  228,  203,  203,  203,  203,  203,  203,
    1195       205,  205,  205,  205,  205,  205,  224,  225,  224,  227,
    1196       227,  246,  227,  229,  229,  229,  231,  239,  231,  225,
    1197       215,  225,  232,  291,  232,  237,  237,  238,  269,  238,
    1198       269,  284,  238,  238,  238,  238,  238,  238,  273,  240,
    1199       239,  240,  432,  270,  240,  270,  291,  284,  237,  244,
    1200       244,  244,  244,  244,  244,  245,  432,  245,  245,  245,
    1201       245,  240,  286,  240,  273,  238,  282,  286,  240,  247,
    1202       247,  247,  247,  247,  247,  248,  248,  248,  248,  248,
    1203       248,  283,  244,  285,  282,  281,  247,  250,  294,  250,
    1204 
    1205       245,  293,  250,  250,  250,  250,  250,  250,  281,  283,
    1206       285,  288,  247,  294,  289,  331,  288,  297,  247,  249,
    1207       249,  249,  249,  249,  249,  256,  297,  293,  258,  258,
    1208       258,  258,  258,  258,  289,  249,  298,  249,  331,  249,
    1209       249,  263,  263,  263,  263,  263,  263,  292,  256,  298,
    1210       256,  295,  249,  296,  256,  299,  290,  249,  296,  249,
    1211       256,  258,  249,  300,  249,  292,  302,  295,  295,  306,
    1212       303,  290,  256,  307,  263,  303,  256,  290,  290,  304,
    1213       256,  300,  299,  305,  302,  308,  312,  309,  304,  306,
    1214       305,  307,  309,  310,  311,  313,  314,  315,  310,  316,
    1215 
    1216       311,  317,  314,  321,  313,  312,  308,  308,  316,  318,
    1217       319,  322,  320,  315,  318,  319,  317,  320,  323,  325,
    1218       326,  327,  321,  328,  327,  329,  330,  332,  333,  322,
    1219       325,  323,  334,  335,  320,  326,  336,  339,  329,  337,
    1220       338,  334,  328,  341,  342,  333,  343,  332,  330,  344,
    1221       339,  346,  341,  347,  348,  335,  346,  345,  338,  336,
    1222       387,  337,  344,  350,  343,  345,  349,  349,  347,  350,
    1223       387,  349,  348,  349,  357,  357,  357,  357,  358,  358,
    1224       358,  358,  367,  368,  367,  368,  387,  408,  342,  375,
    1225       375,  375,  375,  375,  375,  377,  388,  377,  408,  392,
    1226 
    1227       377,  377,  377,  377,  377,  377,  388,  357,  376,  376,
    1228       376,  376,  376,  376,  379,  379,  379,  379,  379,  379,
    1229       411,  409,  388,  392,  376,  410,  376,  413,  376,  376,
    1230       382,  382,  382,  382,  382,  382,  390,  409,  413,  411,
    1231       410,  376,  390,  394,  415,  419,  376,  379,  376,  417,
    1232       886,  376,  420,  376,  380,  380,  380,  380,  380,  380,
    1233       389,  394,  417,  382,  412,  420,  415,  419,  390,  394,
    1234       380,  380,  380,  412,  380,  380,  383,  383,  383,  383,
    1235       383,  383,  426,  389,  418,  389,  879,  380,  426,  389,
    1236       878,  393,  380,  380,  380,  389,  391,  380,  391,  380,
    1237 
    1238       418,  391,  391,  391,  391,  391,  391,  389,  414,  383,
    1239       416,  389,  421,  422,  393,  389,  393,  414,  423,  416,
    1240       393,  428,  424,  427,  429,  425,  393,  424,  421,  421,
    1241       430,  436,  428,  437,  391,  422,  423,  434,  393,  439,
    1242       425,  438,  393,  429,  427,  430,  393,  425,  441,  434,
    1243       440,  442,  436,  444,  438,  437,  440,  446,  447,  448,
    1244       442,  449,  439,  441,  450,  451,  452,  454,  444,  456,
    1245       459,  457,  458,  462,  448,  452,  460,  446,  461,  450,
    1246       447,  458,  464,  449,  454,  451,  465,  466,  463,  468,
    1247       469,  459,  456,  457,  466,  462,  460,  463,  461,  465,
    1248 
    1249       464,  467,  470,  474,  471,  472,  475,  477,  467,  877,
    1250       470,  526,  469,  477,  468,  475,  472,  504,  505,  476,
    1251       470,  471,  476,  876,  526,  474,  486,  486,  486,  486,
    1252       497,  497,  497,  497,  497,  497,  499,  499,  499,  499,
    1253       499,  499,  525,  504,  505,  528,  497,  529,  497,  530,
    1254       497,  497,  500,  500,  500,  500,  500,  500,  875,  525,
    1255       528,  501,  530,  497,  531,  538,  503,  529,  497,  499,
    1256       497,  501,  502,  497,  502,  497,  503,  502,  502,  502,
    1257       502,  502,  502,  533,  538,  500,  531,  501,  533,  532,
    1258       871,  867,  503,  507,  507,  507,  507,  507,  507,  509,
    1259 
    1260       535,  509,  532,  535,  509,  509,  509,  509,  509,  509,
    1261       502,  508,  508,  508,  508,  508,  508,  534,  536,  537,
    1262       539,  540,  542,  543,  864,  546,  547,  508,  534,  508,
    1263       540,  508,  508,  542,  537,  541,  543,  545,  536,  548,
    1264       541,  539,  554,  547,  508,  549,  545,  546,  548,  508,
    1265       549,  508,  551,  552,  508,  555,  508,  556,  551,  554,
    1266       557,  560,  552,  561,  559,  562,  564,  571,  567,  557,
    1267       555,  565,  556,  559,  568,  561,  565,  567,  560,  572,
    1268       562,  564,  573,  568,  576,  575,  578,  582,  577,  571,
    1269       579,  580,  572,  575,  576,  577,  582,  580,  585,  573,
    1270 
    1271       583,  586,  579,  588,  630,  863,  634,  728,  578,  630,
    1272       583,  633,  613,  613,  586,  585,  606,  606,  606,  606,
    1273       606,  606,  630,  634,  633,  588,  607,  607,  607,  607,
    1274       607,  607,  609,  614,  609,  613,  728,  609,  609,  609,
    1275       609,  609,  609,  612,  612,  612,  612,  612,  612,  606,
    1276       608,  608,  608,  608,  608,  608,  614,  615,  631,  615,
    1277       632,  635,  615,  638,  637,  631,  608,  636,  608,  632,
    1278       608,  608,  637,  648,  636,  639,  612,  641,  639,  615,
    1279       638,  615,  642,  608,  635,  640,  615,  643,  608,  644,
    1280       608,  645,  649,  608,  647,  608,  650,  642,  640,  641,
    1281 
    1282       646,  648,  652,  646,  653,  651,  644,  649,  654,  643,
    1283       656,  647,  657,  645,  651,  658,  650,  654,  662,  663,
    1284       652,  668,  665,  862,  658,  669,  653,  676,  679,  680,
    1285       668,  677,  669,  656,  657,  713,  676,  679,  662,  665,
    1286       712,  677,  718,  715,  680,  713,  663,  699,  699,  699,
    1287       699,  699,  699,  703,  703,  703,  703,  703,  703,  716,
    1288       721,  712,  718,  699,  734,  699,  716,  699,  699,  715,
    1289       717,  719,  734,  720,  719,  717,  720,  723,  721,  725,
    1290       699,  724,  727,  723,  731,  699,  703,  699,  725,  745,
    1291       699,  730,  699,  726,  724,  729,  726,  735,  729,  732,
    1292 
    1293       730,  733,  732,  727,  736,  737,  738,  735,  744,  741,
    1294       731,  745,  746,  748,  733,  738,  749,  736,  769,  861,
    1295       767,  748,  772,  769,  768,  749,  737,  741,  744,  770,
    1296       773,  774,  741,  746,  756,  756,  756,  756,  756,  756,
    1297       767,  768,  771,  775,  770,  772,  775,  773,  776,  777,
    1298       779,  781,  771,  779,  781,  782,  783,  774,  785,  783,
    1299       784,  776,  782,  784,  786,  788,  792,  756,  807,  809,
    1300       817,  812,  811,  785,  810,  811,  813,  777,  814,  813,
    1301       816,  814,  818,  820,  860,  818,  824,  786,  788,  792,
    1302       809,  821,  810,  812,  821,  807,  817,  822,  816,  823,
    1303 
    1304       822,  825,  824,  826,  841,  820,  842,  843,  823,  844,
    1305       843,  845,  825,  842,  846,  847,  855,  846,  844,  826,
    1306       850,  853,  854,  850,  853,  841,  859,  856,  855,  845,
    1307       865,  854,  847,  866,  868,  845,  856,  868,  866,  865,
    1308       869,  870,  872,  880,  873,  872,  870,  873,  874,  881,
    1309       869,  874,  882,  888,  884,  882,  883,  884,  885,  891,
    1310       895,  885,  892,  880,  881,  896,  883,  897,  899,  895,
    1311       898,  900,  901,  858,  857,  888,  852,  892,  896,  851,
    1312       891,  849,  901,  848,  840,  839,  899,  838,  837,  897,
    1313       836,  898,  835,  900,  905,  905,  905,  905,  905,  905,
    1314 
    1315       905,  905,  905,  905,  905,  905,  905,  906,  906,  906,
    1316       906,  906,  906,  906,  906,  906,  906,  906,  906,  906,
    1317       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    1318       907,  907,  907,  908,  834,  833,  908,  832,  908,  908,
    1319       908,  908,  908,  909,  831,  830,  829,  909,  909,  909,
    1320       909,  909,  909,  910,  910,  910,  910,  910,  910,  910,
    1321       910,  910,  910,  910,  910,  910,  911,  828,  827,  911,
    1322       819,  911,  911,  911,  911,  911,  912,  815,  912,  912,
    1323       808,  912,  912,  912,  912,  912,  912,  806,  912,  913,
    1324       805,  804,  913,  913,  913,  913,  913,  913,  913,  913,
    1325 
    1326       803,  913,  914,  914,  914,  914,  914,  914,  914,  914,
    1327       914,  914,  914,  914,  914,  915,  915,  802,  915,  801,
    1328       800,  799,  915,  916,  798,  797,  916,  796,  916,  916,
    1329       916,  916,  916,  917,  795,  917,  794,  793,  791,  917,
    1330       918,  790,  918,  789,  787,  780,  918,  919,  778,  919,
    1331       766,  765,  764,  919,  920,  763,  920,  762,  761,  760,
    1332       920,  921,  759,  921,  758,  755,  754,  921,  922,  753,
    1333       922,  747,  743,  742,  922,  923,  740,  923,  739,  722,
    1334       714,  923,  924,  711,  924,  706,  704,  700,  924,  925,
    1335       690,  925,  686,  684,  682,  925,  926,  681,  926,  927,
    1336 
    1337       927,  678,  927,  927,  927,  675,  927,  928,  928,  674,
    1338       928,  929,  673,  672,  929,  671,  929,  929,  929,  929,
    1339       929,  930,  670,  930,  667,  666,  664,  930,  931,  661,
    1340       931,  660,  659,  655,  931,  932,  628,  932,  624,  622,
    1341       620,  932,  933,  618,  933,  934,  616,  934,  610,  604,
    1342       602,  934,  935,  600,  935,  936,  598,  596,  936,  594,
    1343       936,  936,  936,  936,  936,  937,  937,  937,  937,  937,
    1344       937,  937,  937,  937,  937,  937,  937,  937,  938,  938,
    1345       938,  938,  938,  938,  938,  938,  938,  938,  938,  938,
    1346       938,  939,  592,  939,  590,  589,  587,  939,  940,  584,
    1347 
    1348       940,  581,  574,  570,  940,  941,  569,  941,  566,  563,
    1349       558,  941,  942,  553,  942,  943,  550,  943,  527,  523,
    1350       521,  943,  944,  519,  944,  945,  517,  945,  515,  513,
    1351       512,  945,  946,  511,  946,  947,  510,  947,  498,  495,
    1352       493,  947,  948,  492,  948,  949,  491,  949,  489,  487,
    1353       484,  949,  950,  482,  950,  951,  480,  951,  478,  473,
    1354       455,  951,  952,  453,  952,  953,  445,  953,  443,  435,
    1355       433,  953,  954,  431,  954,  955,  405,  955,  403,  955,
    1356       401,  955,  956,  399,  956,  398,  956,  397,  956,  957,
    1357       957,  384,  957,  957,  957,  381,  957,  958,  372,  958,
    1358 
    1359       370,  369,  365,  958,  959,  363,  959,  361,  359,  355,
    1360       959,  960,  353,  960,  352,  351,  340,  960,  961,  324,
    1361       961,  962,  301,  962,  280,  278,  276,  962,  963,  275,
    1362       963,  964,  274,  964,  272,  271,  266,  964,  965,  262,
    1363       965,  966,  261,  966,  257,  254,  253,  966,  967,  242,
    1364       967,  968,  241,  234,  968,  233,  968,  968,  968,  968,
    1365       968,  969,  969,  969,  969,  969,  969,  969,  969,  969,
    1366       969,  969,  969,  969,  970,  230,  970,  220,  218,  217,
    1367       970,  971,  216,  971,  972,  210,  972,  209,  207,  202,
    1368       972,  973,  179,  973,  974,  150,  974,  148,  147,  141,
    1369 
    1370       974,  975,  139,  975,  976,  137,  976,  129,  126,  125,
    1371       976,  977,  121,  977,  978,  102,  978,   99,   96,   94,
    1372       978,  979,   87,  979,  980,   73,  980,   71,   67,   36,
    1373       980,  981,   33,  981,  982,   18,  982,   11,    4,    3,
    1374       982,  983,    0,  983,    0,    0,    0,  983,  984,    0,
    1375       984,  985,    0,  985,    0,    0,    0,  985,  986,    0,
    1376       986,  987,    0,  987,    0,  987,    0,  987,  988,    0,
    1377       988,    0,    0,    0,  988,  989,    0,  989,    0,    0,
    1378         0,  989,  990,    0,  990,  991,    0,  991,    0,    0,
    1379         0,  991,  992,    0,  992,  993,    0,  993,    0,    0,
    1380 
    1381         0,  993,  994,    0,  994,  995,    0,  995,    0,    0,
    1382         0,  995,  996,    0,  996,  997,    0,  997,    0,    0,
    1383         0,  997,  998,    0,  998,  999,    0,  999,    0,    0,
    1384         0,  999, 1000,    0, 1000, 1001,    0,    0, 1001,    0,
    1385      1001, 1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1002,
    1386      1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1003,    0,
    1387      1003,    0,    0,    0, 1003, 1004,    0, 1004, 1005,    0,
    1388      1005,    0,    0,    0, 1005, 1006,    0, 1006, 1007,    0,
    1389      1007,    0,    0,    0, 1007, 1008,    0, 1008, 1009,    0,
    1390      1009,    0,    0,    0, 1009, 1010,    0, 1010, 1011,    0,
    1391 
    1392      1011,    0,    0,    0, 1011, 1012,    0, 1012, 1013,    0,
    1393      1013,    0,    0,    0, 1013, 1014,    0, 1014, 1015,    0,
    1394      1015,    0,    0,    0, 1015, 1016,    0, 1016, 1017,    0,
    1395      1017,    0,    0,    0, 1017, 1018,    0, 1018, 1019,    0,
    1396      1019,    0,    0,    0, 1019, 1020,    0, 1020,    0,    0,
    1397         0, 1020, 1021,    0, 1021, 1022,    0, 1022,    0,    0,
    1398         0, 1022, 1023,    0, 1023, 1024,    0, 1024,    0,    0,
    1399         0, 1024, 1025,    0, 1025, 1026,    0, 1026,    0,    0,
    1400         0, 1026, 1027,    0, 1027, 1028,    0, 1028, 1029,    0,
    1401      1029, 1030,    0,    0, 1030,    0, 1030, 1030, 1030, 1030,
    1402 
    1403      1030, 1031,    0, 1031, 1032, 1032, 1032, 1032, 1032, 1032,
    1404      1032, 1032, 1032, 1032, 1032, 1032, 1032, 1033,    0, 1033,
    1405         0,    0,    0, 1033, 1034,    0, 1034, 1035,    0, 1035,
    1406         0,    0,    0, 1035, 1036,    0, 1036, 1037,    0, 1037,
    1407      1038,    0, 1038, 1039,    0,    0, 1039,    0, 1039, 1039,
    1408      1039, 1039, 1039, 1040,    0, 1040, 1041,    0, 1041, 1042,
    1409         0, 1042, 1043,    0, 1043, 1044,    0, 1044, 1045,    0,
    1410      1045, 1046,    0, 1046, 1047,    0, 1047,    0,    0,    0,
    1411      1047, 1048,    0, 1048, 1049,    0, 1049,    0,    0,    0,
    1412      1049, 1050,    0, 1050, 1051,    0, 1051, 1052,    0, 1052,
    1413 
    1414      1053,    0, 1053, 1054,    0, 1054,    0,    0,    0, 1054,
    1415      1055,    0,    0, 1055,    0, 1055, 1055, 1055, 1055, 1055,
    1416      1056,    0, 1056, 1057,    0, 1057, 1058,    0, 1058, 1059,
    1417         0, 1059,    0,    0,    0, 1059, 1060,    0, 1060,    0,
    1418         0,    0, 1060, 1061,    0, 1061,    0,    0,    0, 1061,
    1419      1062,    0, 1062, 1063,    0, 1063,    0,    0,    0, 1063,
    1420      1064,    0, 1064,    0,    0,    0, 1064, 1065,    0, 1065,
    1421         0,    0,    0, 1065, 1066,    0, 1066,    0,    0,    0,
    1422      1066, 1067,    0, 1067,    0,    0,    0, 1067, 1068,    0,
    1423      1068,    0,    0,    0, 1068, 1069,    0, 1069,    0,    0,
    1424 
    1425         0, 1069, 1070,    0, 1070,    0,    0,    0, 1070, 1071,
    1426         0, 1071,    0,    0,    0, 1071, 1072,    0, 1072,    0,
    1427         0,    0, 1072, 1073,    0, 1073,    0,    0,    0, 1073,
    1428      1074,    0, 1074,    0,    0,    0, 1074, 1075,    0, 1075,
    1429         0,    0,    0, 1075, 1076,    0, 1076,    0,    0,    0,
    1430      1076, 1077,    0, 1077,    0,    0,    0, 1077, 1078,    0,
    1431      1078,    0,    0,    0, 1078,  904,  904,  904,  904,  904,
    1432       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1433       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1434       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1435 
    1436       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1437       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1438       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1439       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1440       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1441       904
     1155      109,   50,   52,  143,   31,   50,   54,   52,  112,  154,
     1156       31,   56,  111,  898,  152,   52,   31,   52,  154,   88,
     1157       52,  108,   31,  128,   52,  128,  112,  108,   56,  143,
     1158       31,   38,  152,   56,  112,   38,   38,   58,   38,   60,
     1159       38,   38,  111,   38,   60,   38,   59,  111,  115,   58,
     1160       58,  117,  158,  108,   38,   38,   38,   60,   59,   58,
     1161      131,  130,   58,  130,  158,  114,   59,  132,   59,  117,
     1162      111,  114,  115,   59,  131,   38,  131,  117,   38,  132,
     1163
     1164      133,  132,  133,   60,  173,  153,   60,   68,   68,   68,
     1165       68,   68,   68,   69,   69,   68,  165,  114,   69,  173,
     1166       60,  134,  134,  153,  134,   38,   38,   81,   81,   81,
     1167       81,   81,   81,  165,   69,   69,   69,   69,   69,   69,
     1168       78,   78,  135,  155,  135,   78,  146,   78,  136,  136,
     1169      136,  146,   78,   83,   83,   83,   83,   83,   83,  155,
     1170      897,   78,   78,   78,   78,   84,   84,   84,   84,   84,
     1171       84,  156,   78,  104,  104,  104,  104,  104,  104,  105,
     1172      105,  105,  105,  138,  140,  138,  140,  151,   78,  156,
     1173      146,   78,  306,  894,  157,  162,   78,   78,  161,  306,
     1174
     1175       78,   78,  151,  160,  162,  176,  168,  105,   78,  151,
     1176      169,   78,  105,   78,   78,   78,  157,   78,   86,  160,
     1177      161,  164,   86,   86,  166,  176,  164,   86,   86,  168,
     1178       86,  163,   86,  167,  166,  105,  170,  169,  175,  164,
     1179      893,   86,   86,   86,  106,  172,  106,  106,  106,  106,
     1180      106,  106,  163,  163,  167,  171,  175,  170,  174,  177,
     1181      171,  178,   86,  106,  107,   86,  107,  172,  183,  107,
     1182      107,  107,  107,  107,  107,  174,  182,  183,  171,  106,
     1183      184,  182,  186,  178,  181,  106,  177,  222,  891,  222,
     1184      192,  180,  187,   86,  100,  100,  100,  100,  100,  100,
     1185
     1186      186,  181,  107,  187,  188,  189,  180,  184,  185,  188,
     1187      100,  100,  100,  180,  100,  100,  190,  192,  189,  185,
     1188      187,  194,  732,  198,  188,  195,  191,  100,  193,  185,
     1189      185,  191,  100,  100,  100,  159,  190,  100,  195,  100,
     1190      159,  159,  159,  198,  159,  159,  195,  193,  159,  196,
     1191      159,  732,  209,  191,  197,  159,  159,  159,  223,  159,
     1192      223,  224,  196,  224,  196,  194,  286,  197,  194,  201,
     1193      201,  201,  201,  201,  201,  202,  202,  201,  209,  225,
     1194      202,  204,  204,  286,  213,  213,  204,  206,  206,  213,
     1195      890,  883,  206,  225,  206,  225,  202,  202,  202,  202,
     1196
     1197      202,  202,  204,  204,  204,  204,  204,  204,  206,  206,
     1198      206,  206,  206,  206,  216,  216,  216,  216,  226,  227,
     1199      247,  227,  228,  228,  229,  228,  229,  230,  230,  230,
     1200      226,  232,  226,  232,  233,  240,  233,  238,  238,  241,
     1201      270,  241,  270,  239,  241,  239,  282,  216,  239,  239,
     1202      239,  239,  239,  239,  271,  247,  271,  882,  240,  282,
     1203      238,  241,  246,  241,  246,  246,  246,  246,  241,  245,
     1204      245,  245,  245,  245,  245,  248,  248,  248,  248,  248,
     1205      248,  239,  249,  249,  249,  249,  249,  249,  283,  284,
     1206      288,  287,  248,  285,  289,  252,  287,  246,  295,  289,
     1207
     1208      297,  326,  245,  260,  274,  297,  283,  284,  248,  285,
     1209      288,  881,  326,  295,  248,  250,  250,  250,  250,  250,
     1210      250,  252,  257,  259,  259,  259,  259,  259,  259,  260,
     1211      274,  250,  251,  250,  251,  250,  250,  251,  251,  251,
     1212      251,  251,  251,  298,  292,  257,  880,  257,  250,  294,
     1213      290,  257,  298,  250,  293,  250,  259,  257,  250,  291,
     1214      250,  264,  264,  264,  264,  264,  264,  292,  296,  257,
     1215      290,  300,  293,  257,  291,  294,  299,  257,  301,  303,
     1216      291,  291,  304,  305,  296,  296,  307,  304,  309,  299,
     1217      308,  879,  305,  313,  264,  310,  301,  303,  300,  311,
     1218
     1219      310,  312,  314,  318,  311,  316,  307,  312,  308,  309,
     1220      309,  314,  313,  315,  317,  319,  322,  320,  318,  315,
     1221      319,  316,  320,  317,  321,  323,  324,  327,  328,  321,
     1222      329,  328,  330,  331,  332,  322,  333,  334,  335,  324,
     1223      336,  337,  327,  323,  338,  330,  321,  335,  340,  329,
     1224      339,  342,  344,  345,  334,  331,  333,  332,  343,  346,
     1225      349,  340,  336,  350,  337,  347,  338,  343,  339,  348,
     1226      342,  345,  346,  347,  348,  349,  875,  351,  351,  352,
     1227      413,  350,  351,  410,  351,  352,  359,  359,  359,  359,
     1228      360,  360,  360,  360,  410,  369,  344,  369,  370,  413,
     1229
     1230      370,  377,  377,  377,  377,  377,  377,  379,  389,  379,
     1231      417,  394,  379,  379,  379,  379,  379,  379,  389,  359,
     1232      378,  378,  378,  378,  378,  378,  381,  381,  381,  381,
     1233      381,  381,  417,  411,  389,  394,  378,  412,  378,  415,
     1234      378,  378,  384,  384,  384,  384,  384,  384,  392,  411,
     1235      415,  390,  412,  378,  392,  396,  578,  421,  378,  381,
     1236      378,  390,  420,  378,  578,  378,  382,  382,  382,  382,
     1237      382,  382,  391,  396,  424,  384,  414,  390,  420,  421,
     1238      392,  396,  382,  382,  382,  414,  382,  382,  385,  385,
     1239      385,  385,  385,  385,  428,  391,  424,  391,  871,  382,
     1240
     1241      428,  391,  868,  395,  382,  382,  382,  391,  393,  382,
     1242      393,  382,  419,  393,  393,  393,  393,  393,  393,  391,
     1243      416,  385,  418,  391,  422,  419,  395,  391,  395,  416,
     1244      425,  418,  395,  430,  426,  423,  429,  422,  395,  426,
     1245      427,  431,  434,  439,  430,  438,  393,  436,  425,  432,
     1246      395,  423,  423,  441,  395,  427,  434,  429,  395,  436,
     1247      431,  440,  427,  442,  432,  439,  438,  443,  444,  442,
     1248      446,  448,  449,  450,  440,  451,  441,  444,  452,  453,
     1249      454,  456,  443,  458,  461,  446,  459,  460,  450,  454,
     1250      462,  448,  463,  452,  449,  464,  460,  451,  456,  453,
     1251
     1252      465,  466,  467,  470,  468,  461,  458,  469,  459,  465,
     1253      462,  468,  463,  471,  469,  467,  472,  464,  473,  466,
     1254      474,  475,  477,  480,  478,  472,  473,  479,  470,  480,
     1255      479,  507,  475,  478,  508,  471,  473,  474,  489,  489,
     1256      489,  489,  528,  531,  477,  500,  500,  500,  500,  500,
     1257      500,  502,  502,  502,  502,  502,  502,  507,  531,  528,
     1258      508,  500,  529,  500,  533,  500,  500,  503,  503,  503,
     1259      503,  503,  503,  867,  866,  529,  504,  533,  500,  532,
     1260      542,  506,  534,  500,  502,  500,  504,  505,  500,  505,
     1261      500,  506,  505,  505,  505,  505,  505,  505,  536,  532,
     1262
     1263      503,  542,  504,  536,  534,  535,  537,  506,  510,  510,
     1264      510,  510,  510,  510,  512,  865,  512,  537,  535,  512,
     1265      512,  512,  512,  512,  512,  505,  511,  511,  511,  511,
     1266      511,  511,  538,  539,  540,  538,  541,  546,  544,  543,
     1267      545,  549,  511,  544,  511,  548,  511,  511,  543,  540,
     1268      546,  545,  551,  539,  548,  541,  550,  552,  555,  511,
     1269      557,  551,  552,  549,  511,  558,  511,  555,  554,  511,
     1270      559,  511,  560,  550,  554,  562,  563,  557,  564,  565,
     1271      558,  560,  567,  568,  562,  559,  570,  571,  568,  574,
     1272      564,  575,  576,  563,  565,  570,  571,  567,  579,  580,
     1273
     1274      581,  582,  589,  586,  575,  587,  580,  590,  579,  576,
     1275      583,  574,  586,  582,  592,  587,  583,  864,  863,  589,
     1276      590,  638,  581,  610,  610,  610,  610,  610,  610,  611,
     1277      611,  611,  611,  611,  611,  613,  592,  613,  638,  637,
     1278      613,  613,  613,  613,  613,  613,  616,  616,  616,  616,
     1279      616,  616,  637,  617,  617,  642,  610,  612,  612,  612,
     1280      612,  612,  612,  618,  634,  619,  862,  619,  639,  634,
     1281      619,  636,  642,  612,  635,  612,  617,  612,  612,  616,
     1282      636,  635,  634,  645,  646,  640,  618,  619,  641,  619,
     1283      612,  639,  640,  644,  619,  612,  641,  612,  643,  646,
     1284
     1285      612,  643,  612,  647,  648,  645,  644,  649,  650,  651,
     1286      652,  650,  653,  654,  655,  657,  656,  660,  667,  658,
     1287      661,  648,  662,  655,  666,  647,  651,  653,  658,  649,
     1288      669,  662,  672,  654,  656,  684,  673,  657,  652,  680,
     1289      660,  672,  661,  673,  666,  667,  681,  669,  680,  683,
     1290      684,  716,  719,  722,  723,  861,  681,  723,  683,  703,
     1291      703,  703,  703,  703,  703,  707,  707,  707,  707,  707,
     1292      707,  717,  716,  722,  856,  703,  720,  703,  719,  703,
     1293      703,  717,  721,  720,  727,  724,  729,  721,  724,  725,
     1294      727,  730,  703,  728,  730,  729,  731,  703,  707,  703,
     1295
     1296      733,  734,  703,  733,  703,  735,  728,  725,  736,  737,
     1297      734,  736,  738,  739,  740,  741,  742,  731,  748,  745,
     1298      738,  749,  737,  739,  750,  742,  752,  740,  773,  774,
     1299      753,  735,  771,  773,  752,  776,  741,  745,  748,  753,
     1300      772,  778,  745,  749,  774,  750,  760,  760,  760,  760,
     1301      760,  760,  771,  775,  777,  780,  779,  772,  776,  779,
     1302      781,  783,  785,  775,  783,  785,  786,  778,  780,  787,
     1303      789,  777,  787,  786,  788,  790,  792,  788,  796,  760,
     1304      811,  813,  814,  815,  816,  789,  815,  817,  781,  818,
     1305      817,  820,  818,  821,  822,  824,  855,  822,  790,  792,
     1306
     1307      814,  796,  813,  827,  828,  825,  816,  811,  825,  820,
     1308      826,  829,  827,  826,  830,  845,  846,  824,  847,  821,
     1309      828,  847,  829,  846,  848,  849,  850,  851,  854,  850,
     1310      830,  854,  857,  848,  884,  857,  845,  858,  859,  860,
     1311      870,  853,  869,  849,  851,  870,  858,  873,  860,  849,
     1312      859,  869,  872,  874,  884,  872,  876,  873,  874,  876,
     1313      877,  878,  885,  877,  878,  886,  887,  888,  886,  889,
     1314      888,  892,  889,  895,  896,  899,  887,  885,  900,  901,
     1315      903,  902,  904,  852,  899,  905,  844,  843,  842,  896,
     1316      841,  900,  840,  892,  895,  905,  839,  838,  903,  837,
     1317
     1318      836,  901,  902,  835,  904,  909,  909,  909,  909,  909,
     1319      909,  909,  909,  909,  909,  909,  909,  909,  910,  910,
     1320      910,  910,  910,  910,  910,  910,  910,  910,  910,  910,
     1321      910,  911,  911,  911,  911,  911,  911,  911,  911,  911,
     1322      911,  911,  911,  911,  912,  834,  833,  912,  832,  912,
     1323      912,  912,  912,  912,  913,  831,  823,  819,  913,  913,
     1324      913,  913,  913,  913,  914,  914,  914,  914,  914,  914,
     1325      914,  914,  914,  914,  914,  914,  914,  915,  812,  810,
     1326      915,  809,  915,  915,  915,  915,  915,  916,  808,  916,
     1327      916,  807,  916,  916,  916,  916,  916,  916,  806,  916,
     1328
     1329      917,  805,  804,  917,  917,  917,  917,  917,  917,  917,
     1330      917,  803,  917,  918,  918,  918,  918,  918,  918,  918,
     1331      918,  918,  918,  918,  918,  918,  919,  919,  802,  919,
     1332      801,  800,  799,  919,  920,  798,  797,  920,  795,  920,
     1333      920,  920,  920,  920,  921,  794,  921,  793,  791,  784,
     1334      921,  922,  782,  922,  770,  769,  768,  922,  923,  767,
     1335      923,  766,  765,  764,  923,  924,  763,  924,  762,  759,
     1336      758,  924,  925,  757,  925,  751,  747,  746,  925,  926,
     1337      744,  926,  743,  726,  718,  926,  927,  715,  927,  710,
     1338      708,  704,  927,  928,  694,  928,  690,  688,  686,  928,
     1339
     1340      929,  685,  929,  682,  679,  678,  929,  930,  677,  930,
     1341      931,  931,  676,  931,  931,  931,  675,  931,  932,  932,
     1342      674,  932,  933,  671,  670,  933,  668,  933,  933,  933,
     1343      933,  933,  934,  665,  934,  664,  663,  659,  934,  935,
     1344      632,  935,  628,  626,  624,  935,  936,  622,  936,  620,
     1345      614,  608,  936,  937,  606,  937,  938,  604,  938,  602,
     1346      600,  598,  938,  939,  596,  939,  940,  594,  593,  940,
     1347      591,  940,  940,  940,  940,  940,  941,  941,  941,  941,
     1348      941,  941,  941,  941,  941,  941,  941,  941,  941,  942,
     1349      942,  942,  942,  942,  942,  942,  942,  942,  942,  942,
     1350
     1351      942,  942,  943,  588,  943,  585,  584,  577,  943,  944,
     1352      573,  944,  572,  569,  566,  944,  945,  561,  945,  556,
     1353      553,  530,  945,  946,  526,  946,  947,  524,  947,  522,
     1354      520,  518,  947,  948,  516,  948,  949,  515,  949,  514,
     1355      513,  501,  949,  950,  498,  950,  951,  496,  951,  495,
     1356      494,  492,  951,  952,  490,  952,  953,  487,  953,  485,
     1357      483,  481,  953,  954,  476,  954,  955,  457,  955,  455,
     1358      447,  445,  955,  956,  437,  956,  957,  435,  957,  433,
     1359      407,  405,  957,  958,  403,  958,  959,  401,  959,  400,
     1360      959,  399,  959,  960,  386,  960,  383,  960,  374,  960,
     1361
     1362      961,  961,  372,  961,  961,  961,  371,  961,  962,  367,
     1363      962,  365,  363,  361,  962,  963,  357,  963,  355,  354,
     1364      353,  963,  964,  341,  964,  325,  302,  281,  964,  965,
     1365      279,  965,  966,  277,  966,  276,  275,  273,  966,  967,
     1366      272,  967,  968,  267,  968,  263,  262,  258,  968,  969,
     1367      255,  969,  970,  254,  970,  243,  242,  235,  970,  971,
     1368      234,  971,  972,  231,  221,  972,  219,  972,  972,  972,
     1369      972,  972,  973,  973,  973,  973,  973,  973,  973,  973,
     1370      973,  973,  973,  973,  973,  974,  218,  974,  217,  211,
     1371      210,  974,  975,  208,  975,  976,  203,  976,  179,  150,
     1372
     1373      148,  976,  977,  147,  977,  978,  141,  978,  139,  137,
     1374      129,  978,  979,  126,  979,  980,  125,  980,  121,  102,
     1375       99,  980,  981,   96,  981,  982,   94,  982,   87,   73,
     1376       71,  982,  983,   67,  983,  984,   36,  984,   33,   18,
     1377       11,  984,  985,    4,  985,  986,    3,  986,    0,    0,
     1378        0,  986,  987,    0,  987,    0,    0,    0,  987,  988,
     1379        0,  988,  989,    0,  989,    0,    0,    0,  989,  990,
     1380        0,  990,  991,    0,  991,    0,  991,    0,  991,  992,
     1381        0,  992,    0,    0,    0,  992,  993,    0,  993,    0,
     1382        0,    0,  993,  994,    0,  994,  995,    0,  995,    0,
     1383
     1384        0,    0,  995,  996,    0,  996,  997,    0,  997,    0,
     1385        0,    0,  997,  998,    0,  998,  999,    0,  999,    0,
     1386        0,    0,  999, 1000,    0, 1000, 1001,    0, 1001,    0,
     1387        0,    0, 1001, 1002,    0, 1002, 1003,    0, 1003,    0,
     1388        0,    0, 1003, 1004,    0, 1004, 1005,    0,    0, 1005,
     1389        0, 1005, 1005, 1005, 1005, 1005, 1006, 1006, 1006, 1006,
     1390     1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1007,
     1391        0, 1007,    0,    0,    0, 1007, 1008,    0, 1008, 1009,
     1392        0, 1009,    0,    0,    0, 1009, 1010,    0, 1010, 1011,
     1393        0, 1011,    0,    0,    0, 1011, 1012,    0, 1012, 1013,
     1394
     1395        0, 1013,    0,    0,    0, 1013, 1014,    0, 1014, 1015,
     1396        0, 1015,    0,    0,    0, 1015, 1016,    0, 1016, 1017,
     1397        0, 1017,    0,    0,    0, 1017, 1018,    0, 1018, 1019,
     1398        0, 1019,    0,    0,    0, 1019, 1020,    0, 1020, 1021,
     1399        0, 1021,    0,    0,    0, 1021, 1022,    0, 1022, 1023,
     1400        0, 1023,    0,    0,    0, 1023, 1024,    0, 1024,    0,
     1401        0,    0, 1024, 1025,    0, 1025, 1026,    0, 1026,    0,
     1402        0,    0, 1026, 1027,    0, 1027, 1028,    0, 1028,    0,
     1403        0,    0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,
     1404        0,    0, 1030, 1031,    0, 1031, 1032,    0, 1032, 1033,
     1405
     1406        0, 1033, 1034,    0,    0, 1034,    0, 1034, 1034, 1034,
     1407     1034, 1034, 1035,    0, 1035, 1036, 1036, 1036, 1036, 1036,
     1408     1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1037,    0,
     1409     1037,    0,    0,    0, 1037, 1038,    0, 1038, 1039,    0,
     1410     1039,    0,    0,    0, 1039, 1040,    0, 1040, 1041,    0,
     1411     1041, 1042,    0, 1042, 1043,    0,    0, 1043,    0, 1043,
     1412     1043, 1043, 1043, 1043, 1044,    0, 1044, 1045,    0, 1045,
     1413     1046,    0, 1046, 1047,    0, 1047, 1048,    0, 1048, 1049,
     1414        0, 1049, 1050,    0, 1050, 1051,    0, 1051,    0,    0,
     1415        0, 1051, 1052,    0, 1052, 1053,    0, 1053,    0,    0,
     1416
     1417        0, 1053, 1054,    0, 1054, 1055,    0, 1055, 1056,    0,
     1418     1056, 1057,    0, 1057, 1058,    0, 1058,    0,    0,    0,
     1419     1058, 1059,    0,    0, 1059,    0, 1059, 1059, 1059, 1059,
     1420     1059, 1060,    0, 1060, 1061,    0, 1061, 1062,    0, 1062,
     1421     1063,    0, 1063,    0,    0,    0, 1063, 1064,    0, 1064,
     1422        0,    0,    0, 1064, 1065,    0, 1065,    0,    0,    0,
     1423     1065, 1066,    0, 1066, 1067,    0, 1067,    0,    0,    0,
     1424     1067, 1068,    0, 1068,    0,    0,    0, 1068, 1069,    0,
     1425     1069,    0,    0,    0, 1069, 1070,    0, 1070,    0,    0,
     1426        0, 1070, 1071,    0, 1071,    0,    0,    0, 1071, 1072,
     1427
     1428        0, 1072,    0,    0,    0, 1072, 1073,    0, 1073,    0,
     1429        0,    0, 1073, 1074,    0, 1074,    0,    0,    0, 1074,
     1430     1075,    0, 1075,    0,    0,    0, 1075, 1076,    0, 1076,
     1431        0,    0,    0, 1076, 1077,    0, 1077,    0,    0,    0,
     1432     1077, 1078,    0, 1078,    0,    0,    0, 1078, 1079,    0,
     1433     1079,    0,    0,    0, 1079, 1080,    0, 1080,    0,    0,
     1434        0, 1080, 1081,    0, 1081,    0,    0,    0, 1081, 1082,
     1435        0, 1082,    0,    0,    0, 1082,  908,  908,  908,  908,
     1436      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1437      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1438
     1439      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1440      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1441      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1442      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1443      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1444      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1445      908,  908
    14421446    } ;
    14431447
    14441448/* Table of booleans, true if rule could match eol. */
    1445 static yyconst flex_int32_t yy_rule_can_match_eol[186] =
     1449static yyconst flex_int32_t yy_rule_can_match_eol[187] =
    14461450    {   0,
    144714511, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     
    14511455    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14521456    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1453     0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     1457    0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14541458    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14551459    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1456     0, 0, 0, 0, 0, 0,     };
     1460    0, 0, 0, 0, 0, 0, 0,     };
    14571461
    14581462static yy_state_type yy_last_accepting_state;
     
    14761480 * The contents of this file are covered under the licence agreement in the
    14771481 * file "LICENCE" distributed with Cforall.
    1478  * 
    1479  * lex.l -- 
    1480  * 
     1482 *
     1483 * lex.l --
     1484 *
    14811485 * Author           : Peter A. Buhr
    14821486 * Created On       : Sat Sep 22 08:58:10 2001
     
    15441548
    15451549
    1546 #line 1547 "Parser/lex.cc"
     1550#line 1551 "Parser/lex.cc"
    15471551
    15481552#define INITIAL 0
     
    17391743
    17401744                                   /* line directives */
    1741 #line 1742 "Parser/lex.cc"
     1745#line 1746 "Parser/lex.cc"
    17421746
    17431747        if ( !(yy_init) )
     
    17931797                                {
    17941798                                yy_current_state = (int) yy_def[yy_current_state];
    1795                                 if ( yy_current_state >= 905 )
     1799                                if ( yy_current_state >= 909 )
    17961800                                        yy_c = yy_meta[(unsigned int) yy_c];
    17971801                                }
     
    17991803                        ++yy_cp;
    18001804                        }
    1801                 while ( yy_base[yy_current_state] != 2866 );
     1805                while ( yy_base[yy_current_state] != 2877 );
    18021806
    18031807yy_find_action:
     
    23202324YY_RULE_SETUP
    23212325#line 260 "lex.ll"
     2326{ KEYWORD_RETURN(TTYPE); }                              // CFA
     2327        YY_BREAK
     2328case 93:
     2329YY_RULE_SETUP
     2330#line 261 "lex.ll"
    23222331{ KEYWORD_RETURN(TYPEDEF); }
    2323         YY_BREAK
    2324 case 93:
    2325 YY_RULE_SETUP
    2326 #line 261 "lex.ll"
    2327 { KEYWORD_RETURN(TYPEOF); }                             // GCC
    23282332        YY_BREAK
    23292333case 94:
     
    23402344YY_RULE_SETUP
    23412345#line 264 "lex.ll"
     2346{ KEYWORD_RETURN(TYPEOF); }                             // GCC
     2347        YY_BREAK
     2348case 97:
     2349YY_RULE_SETUP
     2350#line 265 "lex.ll"
    23422351{ KEYWORD_RETURN(UNION); }
    23432352        YY_BREAK
    2344 case 97:
    2345 YY_RULE_SETUP
    2346 #line 265 "lex.ll"
     2353case 98:
     2354YY_RULE_SETUP
     2355#line 266 "lex.ll"
    23472356{ KEYWORD_RETURN(UNSIGNED); }
    23482357        YY_BREAK
    2349 case 98:
    2350 YY_RULE_SETUP
    2351 #line 266 "lex.ll"
     2358case 99:
     2359YY_RULE_SETUP
     2360#line 267 "lex.ll"
    23522361{ KEYWORD_RETURN(VALIST); }                     // GCC
    23532362        YY_BREAK
    2354 case 99:
    2355 YY_RULE_SETUP
    2356 #line 267 "lex.ll"
     2363case 100:
     2364YY_RULE_SETUP
     2365#line 268 "lex.ll"
    23572366{ KEYWORD_RETURN(VOID); }
    23582367        YY_BREAK
    2359 case 100:
    2360 YY_RULE_SETUP
    2361 #line 268 "lex.ll"
     2368case 101:
     2369YY_RULE_SETUP
     2370#line 269 "lex.ll"
    23622371{ KEYWORD_RETURN(VOLATILE); }
    2363         YY_BREAK
    2364 case 101:
    2365 YY_RULE_SETUP
    2366 #line 269 "lex.ll"
    2367 { KEYWORD_RETURN(VOLATILE); }                   // GCC
    23682372        YY_BREAK
    23692373case 102:
     
    23752379YY_RULE_SETUP
    23762380#line 271 "lex.ll"
     2381{ KEYWORD_RETURN(VOLATILE); }                   // GCC
     2382        YY_BREAK
     2383case 104:
     2384YY_RULE_SETUP
     2385#line 272 "lex.ll"
    23772386{ KEYWORD_RETURN(WHILE); }
    23782387        YY_BREAK
    2379 case 104:
    2380 YY_RULE_SETUP
    2381 #line 272 "lex.ll"
     2388case 105:
     2389YY_RULE_SETUP
     2390#line 273 "lex.ll"
    23822391{ NUMERIC_RETURN(ZERO_T); }                             // CFA
    23832392        YY_BREAK
    23842393/* identifier */
    2385 case 105:
    2386 YY_RULE_SETUP
    2387 #line 275 "lex.ll"
     2394case 106:
     2395YY_RULE_SETUP
     2396#line 276 "lex.ll"
    23882397{ IDENTIFIER_RETURN(); }
    23892398        YY_BREAK
    2390 case 106:
    2391 YY_RULE_SETUP
    2392 #line 276 "lex.ll"
     2399case 107:
     2400YY_RULE_SETUP
     2401#line 277 "lex.ll"
    23932402{ ATTRIBUTE_RETURN(); }
    23942403        YY_BREAK
    2395 case 107:
    2396 YY_RULE_SETUP
    2397 #line 277 "lex.ll"
     2404case 108:
     2405YY_RULE_SETUP
     2406#line 278 "lex.ll"
    23982407{ BEGIN BKQUOTE; }
    23992408        YY_BREAK
    2400 case 108:
    2401 YY_RULE_SETUP
    2402 #line 278 "lex.ll"
     2409case 109:
     2410YY_RULE_SETUP
     2411#line 279 "lex.ll"
    24032412{ IDENTIFIER_RETURN(); }
    24042413        YY_BREAK
    2405 case 109:
    2406 YY_RULE_SETUP
    2407 #line 279 "lex.ll"
     2414case 110:
     2415YY_RULE_SETUP
     2416#line 280 "lex.ll"
    24082417{ BEGIN 0; }
    24092418        YY_BREAK
    24102419/* numeric constants */
    2411 case 110:
    2412 YY_RULE_SETUP
    2413 #line 282 "lex.ll"
     2420case 111:
     2421YY_RULE_SETUP
     2422#line 283 "lex.ll"
    24142423{ NUMERIC_RETURN(ZERO); }                               // CFA
    24152424        YY_BREAK
    2416 case 111:
    2417 YY_RULE_SETUP
    2418 #line 283 "lex.ll"
     2425case 112:
     2426YY_RULE_SETUP
     2427#line 284 "lex.ll"
    24192428{ NUMERIC_RETURN(ONE); }                                // CFA
    2420         YY_BREAK
    2421 case 112:
    2422 YY_RULE_SETUP
    2423 #line 284 "lex.ll"
    2424 { NUMERIC_RETURN(INTEGERconstant); }
    24252429        YY_BREAK
    24262430case 113:
     
    24372441YY_RULE_SETUP
    24382442#line 287 "lex.ll"
     2443{ NUMERIC_RETURN(INTEGERconstant); }
     2444        YY_BREAK
     2445case 116:
     2446YY_RULE_SETUP
     2447#line 288 "lex.ll"
    24392448{ NUMERIC_RETURN(REALDECIMALconstant); } // must appear before floating_constant
    24402449        YY_BREAK
    2441 case 116:
    2442 YY_RULE_SETUP
    2443 #line 288 "lex.ll"
     2450case 117:
     2451YY_RULE_SETUP
     2452#line 289 "lex.ll"
    24442453{ NUMERIC_RETURN(REALFRACTIONconstant); } // must appear before floating_constant
    2445         YY_BREAK
    2446 case 117:
    2447 YY_RULE_SETUP
    2448 #line 289 "lex.ll"
    2449 { NUMERIC_RETURN(FLOATINGconstant); }
    24502454        YY_BREAK
    24512455case 118:
     
    24542458{ NUMERIC_RETURN(FLOATINGconstant); }
    24552459        YY_BREAK
     2460case 119:
     2461YY_RULE_SETUP
     2462#line 291 "lex.ll"
     2463{ NUMERIC_RETURN(FLOATINGconstant); }
     2464        YY_BREAK
    24562465/* character constant, allows empty value */
    2457 case 119:
    2458 YY_RULE_SETUP
    2459 #line 293 "lex.ll"
     2466case 120:
     2467YY_RULE_SETUP
     2468#line 294 "lex.ll"
    24602469{ BEGIN QUOTE; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
    24612470        YY_BREAK
    2462 case 120:
    2463 YY_RULE_SETUP
    2464 #line 294 "lex.ll"
     2471case 121:
     2472YY_RULE_SETUP
     2473#line 295 "lex.ll"
    24652474{ strtext->append( yytext, yyleng ); }
    24662475        YY_BREAK
    2467 case 121:
    2468 /* rule 121 can match eol */
    2469 YY_RULE_SETUP
    2470 #line 295 "lex.ll"
     2476case 122:
     2477/* rule 122 can match eol */
     2478YY_RULE_SETUP
     2479#line 296 "lex.ll"
    24712480{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
    24722481        YY_BREAK
    24732482/* ' stop highlighting */
    24742483/* string constant */
    2475 case 122:
    2476 YY_RULE_SETUP
    2477 #line 299 "lex.ll"
     2484case 123:
     2485YY_RULE_SETUP
     2486#line 300 "lex.ll"
    24782487{ BEGIN STRING; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
    24792488        YY_BREAK
    2480 case 123:
    2481 YY_RULE_SETUP
    2482 #line 300 "lex.ll"
     2489case 124:
     2490YY_RULE_SETUP
     2491#line 301 "lex.ll"
    24832492{ strtext->append( yytext, yyleng ); }
    24842493        YY_BREAK
    2485 case 124:
    2486 /* rule 124 can match eol */
    2487 YY_RULE_SETUP
    2488 #line 301 "lex.ll"
     2494case 125:
     2495/* rule 125 can match eol */
     2496YY_RULE_SETUP
     2497#line 302 "lex.ll"
    24892498{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
    24902499        YY_BREAK
    24912500/* " stop highlighting */
    24922501/* common character/string constant */
    2493 case 125:
    2494 YY_RULE_SETUP
    2495 #line 305 "lex.ll"
     2502case 126:
     2503YY_RULE_SETUP
     2504#line 306 "lex.ll"
    24962505{ rm_underscore(); strtext->append( yytext, yyleng ); }
    24972506        YY_BREAK
    2498 case 126:
    2499 /* rule 126 can match eol */
    2500 YY_RULE_SETUP
    2501 #line 306 "lex.ll"
     2507case 127:
     2508/* rule 127 can match eol */
     2509YY_RULE_SETUP
     2510#line 307 "lex.ll"
    25022511{}                                              // continuation (ALSO HANDLED BY CPP)
    25032512        YY_BREAK
    2504 case 127:
    2505 YY_RULE_SETUP
    2506 #line 307 "lex.ll"
     2513case 128:
     2514YY_RULE_SETUP
     2515#line 308 "lex.ll"
    25072516{ strtext->append( yytext, yyleng ); } // unknown escape character
    25082517        YY_BREAK
    25092518/* punctuation */
    2510 case 128:
    2511 YY_RULE_SETUP
    2512 #line 310 "lex.ll"
    2513 { ASCIIOP_RETURN(); }
    2514         YY_BREAK
    25152519case 129:
    25162520YY_RULE_SETUP
     
    25412545YY_RULE_SETUP
    25422546#line 316 "lex.ll"
     2547{ ASCIIOP_RETURN(); }
     2548        YY_BREAK
     2549case 135:
     2550YY_RULE_SETUP
     2551#line 317 "lex.ll"
    25432552{ ASCIIOP_RETURN(); }                                   // also operator
    2544         YY_BREAK
    2545 case 135:
    2546 YY_RULE_SETUP
    2547 #line 317 "lex.ll"
    2548 { ASCIIOP_RETURN(); }
    25492553        YY_BREAK
    25502554case 136:
     
    25562560YY_RULE_SETUP
    25572561#line 319 "lex.ll"
     2562{ ASCIIOP_RETURN(); }
     2563        YY_BREAK
     2564case 138:
     2565YY_RULE_SETUP
     2566#line 320 "lex.ll"
    25582567{ ASCIIOP_RETURN(); }                                   // also operator
    25592568        YY_BREAK
    2560 case 138:
    2561 YY_RULE_SETUP
    2562 #line 320 "lex.ll"
     2569case 139:
     2570YY_RULE_SETUP
     2571#line 321 "lex.ll"
    25632572{ NAMEDOP_RETURN(ELLIPSIS); }
    25642573        YY_BREAK
    25652574/* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
    2566 case 139:
    2567 YY_RULE_SETUP
    2568 #line 323 "lex.ll"
     2575case 140:
     2576YY_RULE_SETUP
     2577#line 324 "lex.ll"
    25692578{ RETURN_VAL('['); }
    25702579        YY_BREAK
    2571 case 140:
    2572 YY_RULE_SETUP
    2573 #line 324 "lex.ll"
     2580case 141:
     2581YY_RULE_SETUP
     2582#line 325 "lex.ll"
    25742583{ RETURN_VAL(']'); }
    25752584        YY_BREAK
    2576 case 141:
    2577 YY_RULE_SETUP
    2578 #line 325 "lex.ll"
     2585case 142:
     2586YY_RULE_SETUP
     2587#line 326 "lex.ll"
    25792588{ RETURN_VAL('{'); }
    25802589        YY_BREAK
    2581 case 142:
    2582 YY_RULE_SETUP
    2583 #line 326 "lex.ll"
     2590case 143:
     2591YY_RULE_SETUP
     2592#line 327 "lex.ll"
    25842593{ RETURN_VAL('}'); }
    25852594        YY_BREAK
    25862595/* operators */
    2587 case 143:
    2588 YY_RULE_SETUP
    2589 #line 329 "lex.ll"
    2590 { ASCIIOP_RETURN(); }
    2591         YY_BREAK
    25922596case 144:
    25932597YY_RULE_SETUP
     
    26572661case 157:
    26582662YY_RULE_SETUP
    2659 #line 344 "lex.ll"
     2663#line 343 "lex.ll"
     2664{ ASCIIOP_RETURN(); }
     2665        YY_BREAK
     2666case 158:
     2667YY_RULE_SETUP
     2668#line 345 "lex.ll"
    26602669{ NAMEDOP_RETURN(ICR); }
    26612670        YY_BREAK
    2662 case 158:
    2663 YY_RULE_SETUP
    2664 #line 345 "lex.ll"
     2671case 159:
     2672YY_RULE_SETUP
     2673#line 346 "lex.ll"
    26652674{ NAMEDOP_RETURN(DECR); }
    26662675        YY_BREAK
    2667 case 159:
    2668 YY_RULE_SETUP
    2669 #line 346 "lex.ll"
     2676case 160:
     2677YY_RULE_SETUP
     2678#line 347 "lex.ll"
    26702679{ NAMEDOP_RETURN(EQ); }
    26712680        YY_BREAK
    2672 case 160:
    2673 YY_RULE_SETUP
    2674 #line 347 "lex.ll"
     2681case 161:
     2682YY_RULE_SETUP
     2683#line 348 "lex.ll"
    26752684{ NAMEDOP_RETURN(NE); }
    26762685        YY_BREAK
    2677 case 161:
    2678 YY_RULE_SETUP
    2679 #line 348 "lex.ll"
     2686case 162:
     2687YY_RULE_SETUP
     2688#line 349 "lex.ll"
    26802689{ NAMEDOP_RETURN(LS); }
    26812690        YY_BREAK
    2682 case 162:
    2683 YY_RULE_SETUP
    2684 #line 349 "lex.ll"
     2691case 163:
     2692YY_RULE_SETUP
     2693#line 350 "lex.ll"
    26852694{ NAMEDOP_RETURN(RS); }
    26862695        YY_BREAK
    2687 case 163:
    2688 YY_RULE_SETUP
    2689 #line 350 "lex.ll"
     2696case 164:
     2697YY_RULE_SETUP
     2698#line 351 "lex.ll"
    26902699{ NAMEDOP_RETURN(LE); }
    26912700        YY_BREAK
    2692 case 164:
    2693 YY_RULE_SETUP
    2694 #line 351 "lex.ll"
     2701case 165:
     2702YY_RULE_SETUP
     2703#line 352 "lex.ll"
    26952704{ NAMEDOP_RETURN(GE); }
    26962705        YY_BREAK
    2697 case 165:
    2698 YY_RULE_SETUP
    2699 #line 352 "lex.ll"
     2706case 166:
     2707YY_RULE_SETUP
     2708#line 353 "lex.ll"
    27002709{ NAMEDOP_RETURN(ANDAND); }
    27012710        YY_BREAK
    2702 case 166:
    2703 YY_RULE_SETUP
    2704 #line 353 "lex.ll"
     2711case 167:
     2712YY_RULE_SETUP
     2713#line 354 "lex.ll"
    27052714{ NAMEDOP_RETURN(OROR); }
    27062715        YY_BREAK
    2707 case 167:
    2708 YY_RULE_SETUP
    2709 #line 354 "lex.ll"
     2716case 168:
     2717YY_RULE_SETUP
     2718#line 355 "lex.ll"
    27102719{ NAMEDOP_RETURN(ARROW); }
    27112720        YY_BREAK
    2712 case 168:
    2713 YY_RULE_SETUP
    2714 #line 355 "lex.ll"
     2721case 169:
     2722YY_RULE_SETUP
     2723#line 356 "lex.ll"
    27152724{ NAMEDOP_RETURN(PLUSassign); }
    27162725        YY_BREAK
    2717 case 169:
    2718 YY_RULE_SETUP
    2719 #line 356 "lex.ll"
     2726case 170:
     2727YY_RULE_SETUP
     2728#line 357 "lex.ll"
    27202729{ NAMEDOP_RETURN(MINUSassign); }
    27212730        YY_BREAK
    2722 case 170:
    2723 YY_RULE_SETUP
    2724 #line 357 "lex.ll"
     2731case 171:
     2732YY_RULE_SETUP
     2733#line 358 "lex.ll"
    27252734{ NAMEDOP_RETURN(MULTassign); }
    27262735        YY_BREAK
    2727 case 171:
    2728 YY_RULE_SETUP
    2729 #line 358 "lex.ll"
     2736case 172:
     2737YY_RULE_SETUP
     2738#line 359 "lex.ll"
    27302739{ NAMEDOP_RETURN(DIVassign); }
    27312740        YY_BREAK
    2732 case 172:
    2733 YY_RULE_SETUP
    2734 #line 359 "lex.ll"
     2741case 173:
     2742YY_RULE_SETUP
     2743#line 360 "lex.ll"
    27352744{ NAMEDOP_RETURN(MODassign); }
    27362745        YY_BREAK
    2737 case 173:
    2738 YY_RULE_SETUP
    2739 #line 360 "lex.ll"
     2746case 174:
     2747YY_RULE_SETUP
     2748#line 361 "lex.ll"
    27402749{ NAMEDOP_RETURN(ANDassign); }
    27412750        YY_BREAK
    2742 case 174:
    2743 YY_RULE_SETUP
    2744 #line 361 "lex.ll"
     2751case 175:
     2752YY_RULE_SETUP
     2753#line 362 "lex.ll"
    27452754{ NAMEDOP_RETURN(ORassign); }
    27462755        YY_BREAK
    2747 case 175:
    2748 YY_RULE_SETUP
    2749 #line 362 "lex.ll"
     2756case 176:
     2757YY_RULE_SETUP
     2758#line 363 "lex.ll"
    27502759{ NAMEDOP_RETURN(ERassign); }
    27512760        YY_BREAK
    2752 case 176:
    2753 YY_RULE_SETUP
    2754 #line 363 "lex.ll"
     2761case 177:
     2762YY_RULE_SETUP
     2763#line 364 "lex.ll"
    27552764{ NAMEDOP_RETURN(LSassign); }
    27562765        YY_BREAK
    2757 case 177:
    2758 YY_RULE_SETUP
    2759 #line 364 "lex.ll"
     2766case 178:
     2767YY_RULE_SETUP
     2768#line 365 "lex.ll"
    27602769{ NAMEDOP_RETURN(RSassign); }
    27612770        YY_BREAK
    2762 case 178:
    2763 YY_RULE_SETUP
    2764 #line 366 "lex.ll"
     2771case 179:
     2772YY_RULE_SETUP
     2773#line 367 "lex.ll"
    27652774{ NAMEDOP_RETURN(ATassign); }                   // CFA
    27662775        YY_BREAK
    27672776/* CFA, operator identifier */
    2768 case 179:
    2769 YY_RULE_SETUP
    2770 #line 369 "lex.ll"
     2777case 180:
     2778YY_RULE_SETUP
     2779#line 370 "lex.ll"
    27712780{ IDENTIFIER_RETURN(); }                                // unary
    2772         YY_BREAK
    2773 case 180:
    2774 YY_RULE_SETUP
    2775 #line 370 "lex.ll"
    2776 { IDENTIFIER_RETURN(); }
    27772781        YY_BREAK
    27782782case 181:
     
    27842788YY_RULE_SETUP
    27852789#line 372 "lex.ll"
     2790{ IDENTIFIER_RETURN(); }
     2791        YY_BREAK
     2792case 183:
     2793YY_RULE_SETUP
     2794#line 373 "lex.ll"
    27862795{ IDENTIFIER_RETURN(); }                // binary
    27872796        YY_BREAK
     
    28122821          an argument list.
    28132822        */
    2814 case 183:
    2815 YY_RULE_SETUP
    2816 #line 399 "lex.ll"
     2823case 184:
     2824YY_RULE_SETUP
     2825#line 400 "lex.ll"
    28172826{
    28182827        // 1 or 2 character unary operator ?
     
    28272836        YY_BREAK
    28282837/* unknown characters */
    2829 case 184:
    2830 YY_RULE_SETUP
    2831 #line 411 "lex.ll"
     2838case 185:
     2839YY_RULE_SETUP
     2840#line 412 "lex.ll"
    28322841{ printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
    28332842        YY_BREAK
    2834 case 185:
    2835 YY_RULE_SETUP
    2836 #line 413 "lex.ll"
     2843case 186:
     2844YY_RULE_SETUP
     2845#line 414 "lex.ll"
    28372846ECHO;
    28382847        YY_BREAK
    2839 #line 2840 "Parser/lex.cc"
     2848#line 2849 "Parser/lex.cc"
    28402849case YY_STATE_EOF(INITIAL):
    28412850case YY_STATE_EOF(COMMENT):
     
    31343143                        {
    31353144                        yy_current_state = (int) yy_def[yy_current_state];
    3136                         if ( yy_current_state >= 905 )
     3145                        if ( yy_current_state >= 909 )
    31373146                                yy_c = yy_meta[(unsigned int) yy_c];
    31383147                        }
     
    31623171                {
    31633172                yy_current_state = (int) yy_def[yy_current_state];
    3164                 if ( yy_current_state >= 905 )
     3173                if ( yy_current_state >= 909 )
    31653174                        yy_c = yy_meta[(unsigned int) yy_c];
    31663175                }
    31673176        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
    3168         yy_is_jam = (yy_current_state == 904);
     3177        yy_is_jam = (yy_current_state == 908);
    31693178
    31703179        return yy_is_jam ? 0 : yy_current_state;
     
    38123821#define YYTABLES_NAME "yytables"
    38133822
    3814 #line 413 "lex.ll"
     3823#line 414 "lex.ll"
    38153824
    38163825
  • src/Parser/lex.ll

    rbb82c03 r2162c2c  
    44 * The contents of this file are covered under the licence agreement in the
    55 * file "LICENCE" distributed with Cforall.
    6  * 
    7  * lex.l -- 
    8  * 
     6 *
     7 * lex.l --
     8 *
    99 * Author           : Peter A. Buhr
    1010 * Created On       : Sat Sep 22 08:58:10 2001
     
    258258trait                   { KEYWORD_RETURN(TRAIT); }                              // CFA
    259259try                             { KEYWORD_RETURN(TRY); }                                // CFA
     260ttype                   { KEYWORD_RETURN(TTYPE); }                              // CFA
    260261typedef                 { KEYWORD_RETURN(TYPEDEF); }
    261262typeof                  { KEYWORD_RETURN(TYPEOF); }                             // GCC
  • src/Parser/parser.cc

    rbb82c03 r2162c2c  
    159159     FTYPE = 291,
    160160     DTYPE = 292,
    161      TRAIT = 293,
    162      SIZEOF = 294,
    163      OFFSETOF = 295,
    164      ATTRIBUTE = 296,
    165      EXTENSION = 297,
    166      IF = 298,
    167      ELSE = 299,
    168      SWITCH = 300,
    169      CASE = 301,
    170      DEFAULT = 302,
    171      DO = 303,
    172      WHILE = 304,
    173      FOR = 305,
    174      BREAK = 306,
    175      CONTINUE = 307,
    176      GOTO = 308,
    177      RETURN = 309,
    178      CHOOSE = 310,
    179      DISABLE = 311,
    180      ENABLE = 312,
    181      FALLTHRU = 313,
    182      TRY = 314,
    183      CATCH = 315,
    184      CATCHRESUME = 316,
    185      FINALLY = 317,
    186      THROW = 318,
    187      THROWRESUME = 319,
    188      AT = 320,
    189      ASM = 321,
    190      ALIGNAS = 322,
    191      ALIGNOF = 323,
    192      ATOMIC = 324,
    193      GENERIC = 325,
    194      NORETURN = 326,
    195      STATICASSERT = 327,
    196      THREADLOCAL = 328,
    197      IDENTIFIER = 329,
    198      QUOTED_IDENTIFIER = 330,
    199      TYPEDEFname = 331,
    200      TYPEGENname = 332,
    201      ATTR_IDENTIFIER = 333,
    202      ATTR_TYPEDEFname = 334,
    203      ATTR_TYPEGENname = 335,
    204      INTEGERconstant = 336,
    205      CHARACTERconstant = 337,
    206      STRINGliteral = 338,
    207      REALDECIMALconstant = 339,
    208      REALFRACTIONconstant = 340,
    209      FLOATINGconstant = 341,
    210      ZERO = 342,
    211      ONE = 343,
    212      ARROW = 344,
    213      ICR = 345,
    214      DECR = 346,
    215      LS = 347,
    216      RS = 348,
    217      LE = 349,
    218      GE = 350,
    219      EQ = 351,
    220      NE = 352,
    221      ANDAND = 353,
    222      OROR = 354,
    223      ELLIPSIS = 355,
    224      MULTassign = 356,
    225      DIVassign = 357,
    226      MODassign = 358,
    227      PLUSassign = 359,
    228      MINUSassign = 360,
    229      LSassign = 361,
    230      RSassign = 362,
    231      ANDassign = 363,
    232      ERassign = 364,
    233      ORassign = 365,
    234      ATassign = 366,
    235      THEN = 367
     161     TTYPE = 293,
     162     TRAIT = 294,
     163     SIZEOF = 295,
     164     OFFSETOF = 296,
     165     ATTRIBUTE = 297,
     166     EXTENSION = 298,
     167     IF = 299,
     168     ELSE = 300,
     169     SWITCH = 301,
     170     CASE = 302,
     171     DEFAULT = 303,
     172     DO = 304,
     173     WHILE = 305,
     174     FOR = 306,
     175     BREAK = 307,
     176     CONTINUE = 308,
     177     GOTO = 309,
     178     RETURN = 310,
     179     CHOOSE = 311,
     180     DISABLE = 312,
     181     ENABLE = 313,
     182     FALLTHRU = 314,
     183     TRY = 315,
     184     CATCH = 316,
     185     CATCHRESUME = 317,
     186     FINALLY = 318,
     187     THROW = 319,
     188     THROWRESUME = 320,
     189     AT = 321,
     190     ASM = 322,
     191     ALIGNAS = 323,
     192     ALIGNOF = 324,
     193     ATOMIC = 325,
     194     GENERIC = 326,
     195     NORETURN = 327,
     196     STATICASSERT = 328,
     197     THREADLOCAL = 329,
     198     IDENTIFIER = 330,
     199     QUOTED_IDENTIFIER = 331,
     200     TYPEDEFname = 332,
     201     TYPEGENname = 333,
     202     ATTR_IDENTIFIER = 334,
     203     ATTR_TYPEDEFname = 335,
     204     ATTR_TYPEGENname = 336,
     205     INTEGERconstant = 337,
     206     CHARACTERconstant = 338,
     207     STRINGliteral = 339,
     208     REALDECIMALconstant = 340,
     209     REALFRACTIONconstant = 341,
     210     FLOATINGconstant = 342,
     211     ZERO = 343,
     212     ONE = 344,
     213     ARROW = 345,
     214     ICR = 346,
     215     DECR = 347,
     216     LS = 348,
     217     RS = 349,
     218     LE = 350,
     219     GE = 351,
     220     EQ = 352,
     221     NE = 353,
     222     ANDAND = 354,
     223     OROR = 355,
     224     ELLIPSIS = 356,
     225     MULTassign = 357,
     226     DIVassign = 358,
     227     MODassign = 359,
     228     PLUSassign = 360,
     229     MINUSassign = 361,
     230     LSassign = 362,
     231     RSassign = 363,
     232     ANDassign = 364,
     233     ERassign = 365,
     234     ORassign = 366,
     235     ATassign = 367,
     236     THEN = 368
    236237   };
    237238#endif
     
    272273#define FTYPE 291
    273274#define DTYPE 292
    274 #define TRAIT 293
    275 #define SIZEOF 294
    276 #define OFFSETOF 295
    277 #define ATTRIBUTE 296
    278 #define EXTENSION 297
    279 #define IF 298
    280 #define ELSE 299
    281 #define SWITCH 300
    282 #define CASE 301
    283 #define DEFAULT 302
    284 #define DO 303
    285 #define WHILE 304
    286 #define FOR 305
    287 #define BREAK 306
    288 #define CONTINUE 307
    289 #define GOTO 308
    290 #define RETURN 309
    291 #define CHOOSE 310
    292 #define DISABLE 311
    293 #define ENABLE 312
    294 #define FALLTHRU 313
    295 #define TRY 314
    296 #define CATCH 315
    297 #define CATCHRESUME 316
    298 #define FINALLY 317
    299 #define THROW 318
    300 #define THROWRESUME 319
    301 #define AT 320
    302 #define ASM 321
    303 #define ALIGNAS 322
    304 #define ALIGNOF 323
    305 #define ATOMIC 324
    306 #define GENERIC 325
    307 #define NORETURN 326
    308 #define STATICASSERT 327
    309 #define THREADLOCAL 328
    310 #define IDENTIFIER 329
    311 #define QUOTED_IDENTIFIER 330
    312 #define TYPEDEFname 331
    313 #define TYPEGENname 332
    314 #define ATTR_IDENTIFIER 333
    315 #define ATTR_TYPEDEFname 334
    316 #define ATTR_TYPEGENname 335
    317 #define INTEGERconstant 336
    318 #define CHARACTERconstant 337
    319 #define STRINGliteral 338
    320 #define REALDECIMALconstant 339
    321 #define REALFRACTIONconstant 340
    322 #define FLOATINGconstant 341
    323 #define ZERO 342
    324 #define ONE 343
    325 #define ARROW 344
    326 #define ICR 345
    327 #define DECR 346
    328 #define LS 347
    329 #define RS 348
    330 #define LE 349
    331 #define GE 350
    332 #define EQ 351
    333 #define NE 352
    334 #define ANDAND 353
    335 #define OROR 354
    336 #define ELLIPSIS 355
    337 #define MULTassign 356
    338 #define DIVassign 357
    339 #define MODassign 358
    340 #define PLUSassign 359
    341 #define MINUSassign 360
    342 #define LSassign 361
    343 #define RSassign 362
    344 #define ANDassign 363
    345 #define ERassign 364
    346 #define ORassign 365
    347 #define ATassign 366
    348 #define THEN 367
     275#define TTYPE 293
     276#define TRAIT 294
     277#define SIZEOF 295
     278#define OFFSETOF 296
     279#define ATTRIBUTE 297
     280#define EXTENSION 298
     281#define IF 299
     282#define ELSE 300
     283#define SWITCH 301
     284#define CASE 302
     285#define DEFAULT 303
     286#define DO 304
     287#define WHILE 305
     288#define FOR 306
     289#define BREAK 307
     290#define CONTINUE 308
     291#define GOTO 309
     292#define RETURN 310
     293#define CHOOSE 311
     294#define DISABLE 312
     295#define ENABLE 313
     296#define FALLTHRU 314
     297#define TRY 315
     298#define CATCH 316
     299#define CATCHRESUME 317
     300#define FINALLY 318
     301#define THROW 319
     302#define THROWRESUME 320
     303#define AT 321
     304#define ASM 322
     305#define ALIGNAS 323
     306#define ALIGNOF 324
     307#define ATOMIC 325
     308#define GENERIC 326
     309#define NORETURN 327
     310#define STATICASSERT 328
     311#define THREADLOCAL 329
     312#define IDENTIFIER 330
     313#define QUOTED_IDENTIFIER 331
     314#define TYPEDEFname 332
     315#define TYPEGENname 333
     316#define ATTR_IDENTIFIER 334
     317#define ATTR_TYPEDEFname 335
     318#define ATTR_TYPEGENname 336
     319#define INTEGERconstant 337
     320#define CHARACTERconstant 338
     321#define STRINGliteral 339
     322#define REALDECIMALconstant 340
     323#define REALFRACTIONconstant 341
     324#define FLOATINGconstant 342
     325#define ZERO 343
     326#define ONE 344
     327#define ARROW 345
     328#define ICR 346
     329#define DECR 347
     330#define LS 348
     331#define RS 349
     332#define LE 350
     333#define GE 351
     334#define EQ 352
     335#define NE 353
     336#define ANDAND 354
     337#define OROR 355
     338#define ELLIPSIS 356
     339#define MULTassign 357
     340#define DIVassign 358
     341#define MODassign 359
     342#define PLUSassign 360
     343#define MINUSassign 361
     344#define LSassign 362
     345#define RSassign 363
     346#define ANDassign 364
     347#define ERassign 365
     348#define ORassign 366
     349#define ATassign 367
     350#define THEN 368
    349351
    350352
     
    376378
    377379/* Line 293 of yacc.c  */
    378 #line 379 "Parser/parser.cc"
     380#line 381 "Parser/parser.cc"
    379381} YYSTYPE;
    380382# define YYSTYPE_IS_TRIVIAL 1
     
    388390
    389391/* Line 343 of yacc.c  */
    390 #line 391 "Parser/parser.cc"
     392#line 393 "Parser/parser.cc"
    391393
    392394#ifdef short
     
    607609#define YYFINAL  251
    608610/* YYLAST -- Last index in YYTABLE.  */
    609 #define YYLAST   10624
     611#define YYLAST   10466
    610612
    611613/* YYNTOKENS -- Number of terminals.  */
    612 #define YYNTOKENS  137
     614#define YYNTOKENS  138
    613615/* YYNNTS -- Number of nonterminals.  */
    614616#define YYNNTS  243
    615617/* YYNRULES -- Number of rules.  */
    616 #define YYNRULES  757
     618#define YYNRULES  758
    617619/* YYNRULES -- Number of states.  */
    618 #define YYNSTATES  1540
     620#define YYNSTATES  1541
    619621
    620622/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
    621623#define YYUNDEFTOK  2
    622 #define YYMAXUTOK   367
     624#define YYMAXUTOK   368
    623625
    624626#define YYTRANSLATE(YYX)                                                \
     
    631633       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    632634       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    633        2,     2,     2,   125,     2,     2,     2,   128,   122,     2,
    634      113,   114,   121,   123,   120,   124,   117,   127,     2,     2,
    635        2,     2,     2,     2,     2,     2,     2,     2,   134,   136,
    636      129,   135,   130,   133,     2,     2,     2,     2,     2,     2,
     635       2,     2,     2,   126,     2,     2,     2,   129,   123,     2,
     636     114,   115,   122,   124,   121,   125,   118,   128,     2,     2,
     637       2,     2,     2,     2,     2,     2,     2,     2,   135,   137,
     638     130,   136,   131,   134,     2,     2,     2,     2,     2,     2,
    637639       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    638640       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    639        2,   115,     2,   116,   131,     2,     2,     2,     2,     2,
     641       2,   116,     2,   117,   132,     2,     2,     2,     2,     2,
    640642       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    641643       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    642        2,     2,     2,   118,   132,   119,   126,     2,     2,     2,
     644       2,     2,     2,   119,   133,   120,   127,     2,     2,     2,
    643645       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    644646       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     
    664666      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
    665667      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    666      105,   106,   107,   108,   109,   110,   111,   112
     668     105,   106,   107,   108,   109,   110,   111,   112,   113
    667669};
    668670
     
    721723    1597,  1600,  1603,  1605,  1608,  1611,  1617,  1623,  1631,  1638,
    722724    1640,  1643,  1646,  1650,  1652,  1655,  1658,  1663,  1666,  1671,
    723     1672,  1677,  1680,  1682,  1684,  1686,  1687,  1690,  1696,  1702,
    724     1716,  1718,  1720,  1724,  1728,  1731,  1735,  1739,  1742,  1747,
    725     1749,  1756,  1766,  1767,  1779,  1781,  1785,  1789,  1793,  1795,
    726     1797,  1803,  1806,  1812,  1813,  1815,  1817,  1821,  1822,  1824,
    727     1826,  1828,  1830,  1831,  1838,  1841,  1843,  1846,  1851,  1854,
    728     1858,  1862,  1866,  1871,  1877,  1883,  1889,  1896,  1898,  1900,
    729     1902,  1906,  1907,  1913,  1914,  1916,  1918,  1921,  1928,  1930,
    730     1934,  1935,  1937,  1942,  1944,  1946,  1948,  1950,  1953,  1955,
    731     1958,  1961,  1963,  1967,  1970,  1974,  1978,  1981,  1986,  1991,
    732     1995,  2004,  2008,  2011,  2013,  2016,  2023,  2032,  2036,  2039,
    733     2043,  2047,  2052,  2057,  2061,  2063,  2065,  2067,  2072,  2079,
    734     2083,  2086,  2090,  2094,  2099,  2104,  2108,  2111,  2113,  2116,
    735     2119,  2121,  2125,  2128,  2132,  2136,  2139,  2144,  2149,  2153,
    736     2160,  2169,  2173,  2176,  2178,  2181,  2184,  2187,  2191,  2195,
    737     2198,  2203,  2208,  2212,  2219,  2228,  2232,  2235,  2237,  2240,
    738     2243,  2245,  2247,  2250,  2254,  2258,  2261,  2266,  2273,  2282,
    739     2284,  2287,  2290,  2292,  2295,  2298,  2302,  2306,  2308,  2313,
    740     2318,  2322,  2328,  2337,  2341,  2344,  2348,  2350,  2356,  2362,
    741     2369,  2376,  2378,  2381,  2384,  2386,  2389,  2392,  2396,  2400,
    742     2402,  2407,  2412,  2416,  2422,  2431,  2435,  2437,  2440,  2442,
    743     2445,  2452,  2458,  2465,  2473,  2481,  2483,  2486,  2489,  2491,
    744     2494,  2497,  2501,  2505,  2507,  2512,  2517,  2521,  2530,  2534,
    745     2536,  2538,  2541,  2543,  2545,  2548,  2552,  2555,  2559,  2562,
    746     2566,  2570,  2573,  2578,  2582,  2585,  2589,  2592,  2597,  2601,
    747     2604,  2611,  2618,  2625,  2633,  2635,  2638,  2640,  2642,  2644,
    748     2647,  2651,  2654,  2658,  2661,  2665,  2669,  2674,  2677,  2681,
    749     2686,  2689,  2695,  2702,  2709,  2710,  2712,  2713
     725    1672,  1677,  1680,  1682,  1684,  1686,  1688,  1689,  1692,  1698,
     726    1704,  1718,  1720,  1722,  1726,  1730,  1733,  1737,  1741,  1744,
     727    1749,  1751,  1758,  1768,  1769,  1781,  1783,  1787,  1791,  1795,
     728    1797,  1799,  1805,  1808,  1814,  1815,  1817,  1819,  1823,  1824,
     729    1826,  1828,  1830,  1832,  1833,  1840,  1843,  1845,  1848,  1853,
     730    1856,  1860,  1864,  1868,  1873,  1879,  1885,  1891,  1898,  1900,
     731    1902,  1904,  1908,  1909,  1915,  1916,  1918,  1920,  1923,  1930,
     732    1932,  1936,  1937,  1939,  1944,  1946,  1948,  1950,  1952,  1955,
     733    1957,  1960,  1963,  1965,  1969,  1972,  1976,  1980,  1983,  1988,
     734    1993,  1997,  2006,  2010,  2013,  2015,  2018,  2025,  2034,  2038,
     735    2041,  2045,  2049,  2054,  2059,  2063,  2065,  2067,  2069,  2074,
     736    2081,  2085,  2088,  2092,  2096,  2101,  2106,  2110,  2113,  2115,
     737    2118,  2121,  2123,  2127,  2130,  2134,  2138,  2141,  2146,  2151,
     738    2155,  2162,  2171,  2175,  2178,  2180,  2183,  2186,  2189,  2193,
     739    2197,  2200,  2205,  2210,  2214,  2221,  2230,  2234,  2237,  2239,
     740    2242,  2245,  2247,  2249,  2252,  2256,  2260,  2263,  2268,  2275,
     741    2284,  2286,  2289,  2292,  2294,  2297,  2300,  2304,  2308,  2310,
     742    2315,  2320,  2324,  2330,  2339,  2343,  2346,  2350,  2352,  2358,
     743    2364,  2371,  2378,  2380,  2383,  2386,  2388,  2391,  2394,  2398,
     744    2402,  2404,  2409,  2414,  2418,  2424,  2433,  2437,  2439,  2442,
     745    2444,  2447,  2454,  2460,  2467,  2475,  2483,  2485,  2488,  2491,
     746    2493,  2496,  2499,  2503,  2507,  2509,  2514,  2519,  2523,  2532,
     747    2536,  2538,  2540,  2543,  2545,  2547,  2550,  2554,  2557,  2561,
     748    2564,  2568,  2572,  2575,  2580,  2584,  2587,  2591,  2594,  2599,
     749    2603,  2606,  2613,  2620,  2627,  2635,  2637,  2640,  2642,  2644,
     750    2646,  2649,  2653,  2656,  2660,  2663,  2667,  2671,  2676,  2679,
     751    2683,  2688,  2691,  2697,  2704,  2711,  2712,  2714,  2715
    750752};
    751753
     
    753755static const yytype_int16 yyrhs[] =
    754756{
    755      308,     0,    -1,    -1,    -1,    81,    -1,    84,    -1,    85,
    756       -1,    86,    -1,    82,    -1,    74,    -1,    78,    -1,   144,
    757       -1,    74,    -1,    78,    -1,    74,    -1,   144,    -1,    87,
    758       -1,    88,    -1,   146,    -1,    83,    -1,   146,    83,    -1,
    759       74,    -1,   144,    -1,   174,    -1,   113,   176,   114,    -1,
    760      113,   180,   114,    -1,   147,    -1,   148,   115,   138,   171,
    761      139,   116,    -1,   148,   113,   149,   114,    -1,   148,   117,
    762      143,    -1,   148,   117,   115,   138,   151,   139,   116,    -1,
    763      148,    85,    -1,   148,    89,   143,    -1,   148,    89,   115,
    764      138,   151,   139,   116,    -1,   148,    90,    -1,   148,    91,
    765       -1,   113,   281,   114,   118,   285,   378,   119,    -1,   148,
    766      118,   149,   119,    -1,   150,    -1,   149,   120,   150,    -1,
    767       -1,   171,    -1,   152,    -1,   151,   120,   152,    -1,   153,
    768       -1,    84,   152,    -1,    84,   115,   138,   151,   139,   116,
    769       -1,   153,   117,   152,    -1,   153,   117,   115,   138,   151,
    770      139,   116,    -1,   153,    89,   152,    -1,   153,    89,   115,
    771      138,   151,   139,   116,    -1,    81,   154,    -1,    86,   154,
    772       -1,   143,   154,    -1,    -1,   154,    85,    -1,   148,    -1,
    773      140,    -1,   145,    -1,    42,   158,    -1,   156,   158,    -1,
    774      157,   158,    -1,    90,   155,    -1,    91,   155,    -1,    39,
    775      155,    -1,    39,   113,   281,   114,    -1,    68,   155,    -1,
    776       68,   113,   281,   114,    -1,    40,   113,   281,   120,   143,
    777      114,    -1,    78,    -1,    78,   113,   150,   114,    -1,    78,
    778      113,   282,   114,    -1,   121,    -1,   122,    -1,   123,    -1,
    779      124,    -1,   125,    -1,   126,    -1,   155,    -1,   113,   281,
    780      114,   158,    -1,   158,    -1,   159,   121,   158,    -1,   159,
    781      127,   158,    -1,   159,   128,   158,    -1,   159,    -1,   160,
    782      123,   159,    -1,   160,   124,   159,    -1,   160,    -1,   161,
    783       92,   160,    -1,   161,    93,   160,    -1,   161,    -1,   162,
    784      129,   161,    -1,   162,   130,   161,    -1,   162,    94,   161,
    785       -1,   162,    95,   161,    -1,   162,    -1,   163,    96,   162,
    786       -1,   163,    97,   162,    -1,   163,    -1,   164,   122,   163,
    787       -1,   164,    -1,   165,   131,   164,    -1,   165,    -1,   166,
    788      132,   165,    -1,   166,    -1,   167,    98,   166,    -1,   167,
    789       -1,   168,    99,   167,    -1,   168,    -1,   168,   133,   176,
    790      134,   169,    -1,   168,   133,   134,   169,    -1,   169,    -1,
    791      169,    -1,   155,   173,   171,    -1,    -1,   171,    -1,   135,
    792       -1,   111,    -1,   101,    -1,   102,    -1,   103,    -1,   104,
    793       -1,   105,    -1,   106,    -1,   107,    -1,   108,    -1,   109,
    794       -1,   110,    -1,   115,   138,   120,   175,   139,   116,    -1,
    795      115,   138,   171,   120,   175,   139,   116,    -1,   172,    -1,
    796      175,   120,   172,    -1,   171,    -1,   176,   120,   171,    -1,
    797       -1,   176,    -1,   179,    -1,   180,    -1,   184,    -1,   185,
    798       -1,   197,    -1,   199,    -1,   200,    -1,   205,    -1,   131,
    799      148,   118,   149,   119,   136,    -1,    74,   134,   318,   178,
    800       -1,   118,   119,    -1,   118,   138,   138,   216,   181,   139,
    801      119,    -1,   182,    -1,   181,   138,   182,    -1,   219,    -1,
    802       42,   219,    -1,   314,    -1,   178,   139,    -1,   178,    -1,
    803      183,   178,    -1,   177,   136,    -1,    43,   113,   176,   114,
    804      178,    -1,    43,   113,   176,   114,   178,    44,   178,    -1,
    805       45,   113,   176,   114,   190,    -1,    45,   113,   176,   114,
    806      118,   138,   212,   191,   119,    -1,    55,   113,   176,   114,
    807      190,    -1,    55,   113,   176,   114,   118,   138,   212,   193,
    808      119,    -1,   170,    -1,   170,   100,   170,    -1,   316,    -1,
    809      186,    -1,   187,   120,   186,    -1,    46,   187,   134,    -1,
    810       47,   134,    -1,   188,    -1,   189,   188,    -1,   189,   178,
    811       -1,    -1,   192,    -1,   189,   183,    -1,   192,   189,   183,
    812       -1,    -1,   194,    -1,   189,   196,    -1,   189,   183,   195,
    813       -1,   194,   189,   196,    -1,   194,   189,   183,   195,    -1,
    814       -1,   196,    -1,    58,    -1,    58,   136,    -1,    49,   113,
    815      176,   114,   178,    -1,    48,   178,    49,   113,   176,   114,
    816      136,    -1,    50,   113,   138,   198,   114,   178,    -1,   177,
    817      139,   136,   177,   136,   177,    -1,   219,   177,   136,   177,
    818       -1,    53,    74,   136,    -1,    53,   121,   176,   136,    -1,
    819       52,   136,    -1,    52,    74,   136,    -1,    51,   136,    -1,
    820       51,    74,   136,    -1,    54,   177,   136,    -1,    63,   172,
    821      136,    -1,    64,   172,   136,    -1,    64,   172,    65,   171,
    822      136,    -1,    59,   180,   201,    -1,    59,   180,   203,    -1,
    823       59,   180,   201,   203,    -1,   202,    -1,    60,   113,   100,
    824      114,   180,    -1,   202,    60,   113,   100,   114,   180,    -1,
    825       61,   113,   100,   114,   180,    -1,   202,    61,   113,   100,
    826      114,   180,    -1,    60,   113,   138,   138,   204,   139,   114,
    827      180,   139,    -1,   202,    60,   113,   138,   138,   204,   139,
    828      114,   180,   139,    -1,    61,   113,   138,   138,   204,   139,
    829      114,   180,   139,    -1,   202,    61,   113,   138,   138,   204,
    830      139,   114,   180,   139,    -1,    62,   180,    -1,   232,    -1,
    831      232,   315,    -1,   232,   363,    -1,   372,   143,    -1,   372,
    832       -1,    66,   206,   113,   145,   114,   136,    -1,    66,   206,
    833      113,   145,   134,   207,   114,   136,    -1,    66,   206,   113,
    834      145,   134,   207,   134,   207,   114,   136,    -1,    66,   206,
    835      113,   145,   134,   207,   134,   207,   134,   210,   114,   136,
    836       -1,    66,   206,    53,   113,   145,   134,   134,   207,   134,
    837      210,   134,   211,   114,   136,    -1,    -1,    11,    -1,    -1,
    838      208,    -1,   209,    -1,   208,   120,   209,    -1,   145,   113,
    839      170,   114,    -1,   115,   170,   116,   145,   113,   170,   114,
    840       -1,    -1,   145,    -1,   210,   120,   145,    -1,   143,    -1,
    841      211,   120,   143,    -1,   139,    -1,   213,    -1,   219,    -1,
    842      213,   138,   219,    -1,   139,    -1,   215,    -1,   229,    -1,
    843      215,   138,   229,    -1,    -1,   217,    -1,    31,   218,   136,
    844       -1,   217,    31,   218,   136,    -1,   280,    -1,   218,   120,
    845      280,    -1,   220,    -1,   229,    -1,   221,   139,   136,    -1,
    846      226,   139,   136,    -1,   223,   139,   136,    -1,   299,   139,
    847      136,    -1,   302,   139,   136,    -1,   222,   283,    -1,   238,
    848      222,   283,    -1,   221,   139,   120,   138,   278,   283,    -1,
    849      373,   278,   317,    -1,   376,   278,   317,    -1,   234,   376,
    850      278,   317,    -1,   224,    -1,   234,   224,    -1,   238,   224,
    851       -1,   238,   234,   224,    -1,   223,   139,   120,   138,   278,
    852       -1,   376,   278,   113,   138,   266,   139,   114,    -1,   225,
    853      278,   113,   138,   266,   139,   114,    -1,   115,   138,   268,
    854      139,   116,    -1,   115,   138,   268,   139,   120,   138,   269,
    855      139,   116,    -1,     3,   222,    -1,     3,   224,    -1,   226,
    856      139,   120,   138,   143,    -1,     3,   232,   315,    -1,   227,
    857      139,   120,   138,   315,    -1,   234,     3,   232,   315,    -1,
    858      232,     3,   315,    -1,   232,     3,   234,   315,    -1,     3,
    859      143,   135,   171,    -1,   228,   139,   120,   138,   143,   135,
    860      171,    -1,   230,   139,   136,    -1,   227,   139,   136,    -1,
    861      228,   139,   136,    -1,   246,   139,   136,    -1,   231,   315,
    862      317,   283,    -1,   230,   120,   318,   315,   317,   283,    -1,
    863      242,    -1,   246,    -1,   248,    -1,   289,    -1,   243,    -1,
    864      247,    -1,   249,    -1,   290,    -1,    -1,   234,    -1,   235,
    865       -1,   234,   235,    -1,   236,    -1,   320,    -1,    10,    -1,
    866       12,    -1,    11,    -1,    14,    -1,    69,    -1,    -1,    13,
    867      113,   237,   292,   114,    -1,   239,    -1,   234,   239,    -1,
    868      238,   234,   239,    -1,   240,    -1,   239,   240,    -1,     5,
     757     309,     0,    -1,    -1,    -1,    82,    -1,    85,    -1,    86,
     758      -1,    87,    -1,    83,    -1,    75,    -1,    79,    -1,   145,
     759      -1,    75,    -1,    79,    -1,    75,    -1,   145,    -1,    88,
     760      -1,    89,    -1,   147,    -1,    84,    -1,   147,    84,    -1,
     761      75,    -1,   145,    -1,   175,    -1,   114,   177,   115,    -1,
     762     114,   181,   115,    -1,   148,    -1,   149,   116,   139,   172,
     763     140,   117,    -1,   149,   114,   150,   115,    -1,   149,   118,
     764     144,    -1,   149,   118,   116,   139,   152,   140,   117,    -1,
     765     149,    86,    -1,   149,    90,   144,    -1,   149,    90,   116,
     766     139,   152,   140,   117,    -1,   149,    91,    -1,   149,    92,
     767      -1,   114,   282,   115,   119,   286,   379,   120,    -1,   149,
     768     119,   150,   120,    -1,   151,    -1,   150,   121,   151,    -1,
     769      -1,   172,    -1,   153,    -1,   152,   121,   153,    -1,   154,
     770      -1,    85,   153,    -1,    85,   116,   139,   152,   140,   117,
     771      -1,   154,   118,   153,    -1,   154,   118,   116,   139,   152,
     772     140,   117,    -1,   154,    90,   153,    -1,   154,    90,   116,
     773     139,   152,   140,   117,    -1,    82,   155,    -1,    87,   155,
     774      -1,   144,   155,    -1,    -1,   155,    86,    -1,   149,    -1,
     775     141,    -1,   146,    -1,    43,   159,    -1,   157,   159,    -1,
     776     158,   159,    -1,    91,   156,    -1,    92,   156,    -1,    40,
     777     156,    -1,    40,   114,   282,   115,    -1,    69,   156,    -1,
     778      69,   114,   282,   115,    -1,    41,   114,   282,   121,   144,
     779     115,    -1,    79,    -1,    79,   114,   151,   115,    -1,    79,
     780     114,   283,   115,    -1,   122,    -1,   123,    -1,   124,    -1,
     781     125,    -1,   126,    -1,   127,    -1,   156,    -1,   114,   282,
     782     115,   159,    -1,   159,    -1,   160,   122,   159,    -1,   160,
     783     128,   159,    -1,   160,   129,   159,    -1,   160,    -1,   161,
     784     124,   160,    -1,   161,   125,   160,    -1,   161,    -1,   162,
     785      93,   161,    -1,   162,    94,   161,    -1,   162,    -1,   163,
     786     130,   162,    -1,   163,   131,   162,    -1,   163,    95,   162,
     787      -1,   163,    96,   162,    -1,   163,    -1,   164,    97,   163,
     788      -1,   164,    98,   163,    -1,   164,    -1,   165,   123,   164,
     789      -1,   165,    -1,   166,   132,   165,    -1,   166,    -1,   167,
     790     133,   166,    -1,   167,    -1,   168,    99,   167,    -1,   168,
     791      -1,   169,   100,   168,    -1,   169,    -1,   169,   134,   177,
     792     135,   170,    -1,   169,   134,   135,   170,    -1,   170,    -1,
     793     170,    -1,   156,   174,   172,    -1,    -1,   172,    -1,   136,
     794      -1,   112,    -1,   102,    -1,   103,    -1,   104,    -1,   105,
     795      -1,   106,    -1,   107,    -1,   108,    -1,   109,    -1,   110,
     796      -1,   111,    -1,   116,   139,   121,   176,   140,   117,    -1,
     797     116,   139,   172,   121,   176,   140,   117,    -1,   173,    -1,
     798     176,   121,   173,    -1,   172,    -1,   177,   121,   172,    -1,
     799      -1,   177,    -1,   180,    -1,   181,    -1,   185,    -1,   186,
     800      -1,   198,    -1,   200,    -1,   201,    -1,   206,    -1,   132,
     801     149,   119,   150,   120,   137,    -1,    75,   135,   319,   179,
     802      -1,   119,   120,    -1,   119,   139,   139,   217,   182,   140,
     803     120,    -1,   183,    -1,   182,   139,   183,    -1,   220,    -1,
     804      43,   220,    -1,   315,    -1,   179,   140,    -1,   179,    -1,
     805     184,   179,    -1,   178,   137,    -1,    44,   114,   177,   115,
     806     179,    -1,    44,   114,   177,   115,   179,    45,   179,    -1,
     807      46,   114,   177,   115,   191,    -1,    46,   114,   177,   115,
     808     119,   139,   213,   192,   120,    -1,    56,   114,   177,   115,
     809     191,    -1,    56,   114,   177,   115,   119,   139,   213,   194,
     810     120,    -1,   171,    -1,   171,   101,   171,    -1,   317,    -1,
     811     187,    -1,   188,   121,   187,    -1,    47,   188,   135,    -1,
     812      48,   135,    -1,   189,    -1,   190,   189,    -1,   190,   179,
     813      -1,    -1,   193,    -1,   190,   184,    -1,   193,   190,   184,
     814      -1,    -1,   195,    -1,   190,   197,    -1,   190,   184,   196,
     815      -1,   195,   190,   197,    -1,   195,   190,   184,   196,    -1,
     816      -1,   197,    -1,    59,    -1,    59,   137,    -1,    50,   114,
     817     177,   115,   179,    -1,    49,   179,    50,   114,   177,   115,
     818     137,    -1,    51,   114,   139,   199,   115,   179,    -1,   178,
     819     140,   137,   178,   137,   178,    -1,   220,   178,   137,   178,
     820      -1,    54,    75,   137,    -1,    54,   122,   177,   137,    -1,
     821      53,   137,    -1,    53,    75,   137,    -1,    52,   137,    -1,
     822      52,    75,   137,    -1,    55,   178,   137,    -1,    64,   173,
     823     137,    -1,    65,   173,   137,    -1,    65,   173,    66,   172,
     824     137,    -1,    60,   181,   202,    -1,    60,   181,   204,    -1,
     825      60,   181,   202,   204,    -1,   203,    -1,    61,   114,   101,
     826     115,   181,    -1,   203,    61,   114,   101,   115,   181,    -1,
     827      62,   114,   101,   115,   181,    -1,   203,    62,   114,   101,
     828     115,   181,    -1,    61,   114,   139,   139,   205,   140,   115,
     829     181,   140,    -1,   203,    61,   114,   139,   139,   205,   140,
     830     115,   181,   140,    -1,    62,   114,   139,   139,   205,   140,
     831     115,   181,   140,    -1,   203,    62,   114,   139,   139,   205,
     832     140,   115,   181,   140,    -1,    63,   181,    -1,   233,    -1,
     833     233,   316,    -1,   233,   364,    -1,   373,   144,    -1,   373,
     834      -1,    67,   207,   114,   146,   115,   137,    -1,    67,   207,
     835     114,   146,   135,   208,   115,   137,    -1,    67,   207,   114,
     836     146,   135,   208,   135,   208,   115,   137,    -1,    67,   207,
     837     114,   146,   135,   208,   135,   208,   135,   211,   115,   137,
     838      -1,    67,   207,    54,   114,   146,   135,   135,   208,   135,
     839     211,   135,   212,   115,   137,    -1,    -1,    11,    -1,    -1,
     840     209,    -1,   210,    -1,   209,   121,   210,    -1,   146,   114,
     841     171,   115,    -1,   116,   171,   117,   146,   114,   171,   115,
     842      -1,    -1,   146,    -1,   211,   121,   146,    -1,   144,    -1,
     843     212,   121,   144,    -1,   140,    -1,   214,    -1,   220,    -1,
     844     214,   139,   220,    -1,   140,    -1,   216,    -1,   230,    -1,
     845     216,   139,   230,    -1,    -1,   218,    -1,    31,   219,   137,
     846      -1,   218,    31,   219,   137,    -1,   281,    -1,   219,   121,
     847     281,    -1,   221,    -1,   230,    -1,   222,   140,   137,    -1,
     848     227,   140,   137,    -1,   224,   140,   137,    -1,   300,   140,
     849     137,    -1,   303,   140,   137,    -1,   223,   284,    -1,   239,
     850     223,   284,    -1,   222,   140,   121,   139,   279,   284,    -1,
     851     374,   279,   318,    -1,   377,   279,   318,    -1,   235,   377,
     852     279,   318,    -1,   225,    -1,   235,   225,    -1,   239,   225,
     853      -1,   239,   235,   225,    -1,   224,   140,   121,   139,   279,
     854      -1,   377,   279,   114,   139,   267,   140,   115,    -1,   226,
     855     279,   114,   139,   267,   140,   115,    -1,   116,   139,   269,
     856     140,   117,    -1,   116,   139,   269,   140,   121,   139,   270,
     857     140,   117,    -1,     3,   223,    -1,     3,   225,    -1,   227,
     858     140,   121,   139,   144,    -1,     3,   233,   316,    -1,   228,
     859     140,   121,   139,   316,    -1,   235,     3,   233,   316,    -1,
     860     233,     3,   316,    -1,   233,     3,   235,   316,    -1,     3,
     861     144,   136,   172,    -1,   229,   140,   121,   139,   144,   136,
     862     172,    -1,   231,   140,   137,    -1,   228,   140,   137,    -1,
     863     229,   140,   137,    -1,   247,   140,   137,    -1,   232,   316,
     864     318,   284,    -1,   231,   121,   319,   316,   318,   284,    -1,
     865     243,    -1,   247,    -1,   249,    -1,   290,    -1,   244,    -1,
     866     248,    -1,   250,    -1,   291,    -1,    -1,   235,    -1,   236,
     867      -1,   235,   236,    -1,   237,    -1,   321,    -1,    10,    -1,
     868      12,    -1,    11,    -1,    14,    -1,    70,    -1,    -1,    13,
     869     114,   238,   293,   115,    -1,   240,    -1,   235,   240,    -1,
     870     239,   235,   240,    -1,   241,    -1,   240,   241,    -1,     5,
    869871      -1,     7,    -1,     4,    -1,     6,    -1,     8,    -1,     9,
    870       -1,    71,    -1,    73,    -1,    16,    -1,    21,    -1,    20,
     872      -1,    72,    -1,    74,    -1,    16,    -1,    21,    -1,    20,
    871873      -1,    18,    -1,    19,    -1,    17,    -1,    22,    -1,    23,
    872874      -1,    15,    -1,    27,    -1,    28,    -1,    29,    -1,    26,
    873       -1,    24,    -1,    25,    -1,   243,    -1,   238,   243,    -1,
    874      242,   240,    -1,   242,   240,   234,    -1,   242,   240,   243,
    875       -1,   244,    -1,   233,   245,   233,    -1,   241,    -1,   234,
    876      241,    -1,   244,   235,    -1,   244,   241,    -1,    30,   113,
    877      282,   114,    -1,    30,   113,   176,   114,    -1,    80,   113,
    878      282,   114,    -1,    80,   113,   176,   114,    -1,   247,    -1,
    879      238,   247,    -1,   246,   240,    -1,   246,   240,   234,    -1,
    880      250,    -1,   234,   250,    -1,   247,   235,    -1,   249,    -1,
    881      238,   249,    -1,   248,   240,    -1,   248,   240,   234,    -1,
    882       76,    -1,   234,    76,    -1,   249,   235,    -1,   251,    -1,
    883      262,    -1,   253,   118,   254,   119,    -1,   253,   280,    -1,
    884       -1,   253,   280,   252,   118,   254,   119,    -1,   253,   113,
    885      298,   114,   118,   254,   119,    -1,   253,   291,    -1,    33,
    886      318,    -1,    34,   318,    -1,    -1,   254,   255,    -1,   256,
    887      136,    -1,    42,   256,   136,    -1,   257,   136,    -1,    42,
    888      257,   136,    -1,   372,    -1,   372,   280,    -1,   256,   120,
    889      280,    -1,   256,   120,    -1,   232,   258,    -1,   257,   120,
    890      318,   258,    -1,    -1,   260,    -1,   324,   259,    -1,   337,
    891      259,    -1,   363,    -1,    -1,   260,    -1,   134,   170,    -1,
    892       32,   318,    -1,   261,   118,   264,   378,   119,    -1,   261,
    893      280,    -1,    -1,   261,   280,   263,   118,   264,   378,   119,
    894       -1,   280,   265,    -1,   264,   120,   280,   265,    -1,    -1,
    895      135,   170,    -1,    -1,   267,    -1,   269,    -1,   268,    -1,
    896      268,   139,   120,   138,   269,    -1,   269,   139,   120,   138,
    897      100,    -1,   268,   139,   120,   138,   100,    -1,   273,    -1,
    898      269,   139,   120,   138,   273,    -1,   268,   139,   120,   138,
    899      273,    -1,   268,   139,   120,   138,   269,   139,   120,   138,
    900      273,    -1,   274,    -1,   269,   139,   120,   138,   274,    -1,
    901       -1,   271,    -1,   272,    -1,   272,   139,   120,   138,   100,
    902       -1,   276,    -1,   275,    -1,   272,   139,   120,   138,   276,
    903       -1,   272,   139,   120,   138,   275,    -1,   275,    -1,   368,
    904      278,   379,    -1,   376,   278,   379,    -1,   234,   376,   278,
    905      379,    -1,   224,    -1,   276,    -1,   368,    -1,   376,    -1,
    906      234,   376,    -1,   377,    -1,   231,   342,   379,    -1,   231,
    907      346,   379,    -1,   231,    -1,   231,   357,    -1,   143,    -1,
    908      277,   120,   143,    -1,   141,    -1,    76,    -1,    77,    -1,
    909      142,    -1,    76,    -1,    77,    -1,   143,    -1,    76,    -1,
    910       77,    -1,   372,    -1,   232,    -1,   232,   363,    -1,   372,
    911       -1,   377,    -1,   232,    -1,   232,   351,    -1,    -1,   135,
    912      284,    -1,   111,   284,    -1,   171,    -1,   118,   285,   378,
    913      119,    -1,    -1,   284,    -1,   286,   284,    -1,   285,   120,
    914      284,    -1,   285,   120,   286,   284,    -1,   287,   134,    -1,
    915      280,   134,    -1,   288,    -1,   287,   288,    -1,   117,   280,
    916       -1,   115,   138,   171,   139,   116,    -1,   115,   138,   316,
    917      139,   116,    -1,   115,   138,   170,   100,   170,   139,   116,
    918       -1,   117,   115,   138,   151,   139,   116,    -1,   290,    -1,
    919      238,   290,    -1,   289,   240,    -1,   289,   240,   234,    -1,
    920      291,    -1,   234,   291,    -1,   290,   235,    -1,    77,   113,
    921      298,   114,    -1,   293,   379,    -1,   292,   120,   293,   379,
    922       -1,    -1,   295,   280,   294,   296,    -1,   232,   342,    -1,
    923       35,    -1,    37,    -1,    36,    -1,    -1,   296,   297,    -1,
    924      132,   280,   113,   298,   114,    -1,   132,   118,   138,   304,
    925      119,    -1,   132,   113,   138,   292,   139,   114,   118,   138,
    926      304,   119,   113,   298,   114,    -1,   282,    -1,   171,    -1,
    927      298,   120,   282,    -1,   298,   120,   171,    -1,    35,   300,
    928       -1,   239,    35,   300,    -1,   299,   120,   300,    -1,   301,
    929      296,    -1,   301,   296,   135,   282,    -1,   280,    -1,   279,
    930      113,   138,   292,   139,   114,    -1,    38,   280,   113,   138,
    931      292,   139,   114,   118,   119,    -1,    -1,    38,   280,   113,
    932      138,   292,   139,   114,   118,   303,   304,   119,    -1,   305,
    933       -1,   304,   138,   305,    -1,   306,   139,   136,    -1,   307,
    934      139,   136,    -1,   222,    -1,   224,    -1,   306,   139,   120,
    935      138,   278,    -1,   232,   315,    -1,   307,   139,   120,   138,
    936      315,    -1,    -1,   309,    -1,   311,    -1,   309,   138,   311,
    937       -1,    -1,   309,    -1,   219,    -1,   313,    -1,   205,    -1,
    938       -1,     5,    83,   312,   118,   310,   119,    -1,    42,   311,
    939       -1,   314,    -1,   329,   180,    -1,   333,   138,   214,   180,
    940       -1,   223,   180,    -1,   231,   329,   180,    -1,   234,   329,
    941      180,    -1,   238,   329,   180,    -1,   238,   234,   329,   180,
    942       -1,   231,   333,   138,   214,   180,    -1,   234,   333,   138,
    943      214,   180,    -1,   238,   333,   138,   214,   180,    -1,   238,
    944      234,   333,   138,   214,   180,    -1,   324,    -1,   337,    -1,
    945      329,    -1,   170,   126,   170,    -1,    -1,    66,   113,   145,
    946      114,   318,    -1,    -1,   319,    -1,   320,    -1,   319,   320,
    947       -1,    41,   113,   113,   321,   114,   114,    -1,   322,    -1,
    948      321,   120,   322,    -1,    -1,   323,    -1,   323,   113,   177,
    949      114,    -1,   278,    -1,   240,    -1,   241,    -1,   235,    -1,
    950      325,   318,    -1,   326,    -1,   327,   318,    -1,   328,   318,
    951       -1,   141,    -1,   113,   325,   114,    -1,   156,   324,    -1,
    952      156,   234,   324,    -1,   113,   326,   114,    -1,   325,   355,
    953       -1,   113,   326,   114,   355,    -1,   113,   327,   114,   356,
    954       -1,   113,   327,   114,    -1,   113,   326,   114,   113,   138,
    955      270,   139,   114,    -1,   113,   328,   114,    -1,   330,   318,
    956       -1,   331,    -1,   332,   318,    -1,   325,   113,   138,   270,
    957      139,   114,    -1,   113,   331,   114,   113,   138,   270,   139,
    958      114,    -1,   113,   330,   114,    -1,   156,   329,    -1,   156,
    959      234,   329,    -1,   113,   331,   114,    -1,   113,   331,   114,
    960      355,    -1,   113,   332,   114,   356,    -1,   113,   332,   114,
    961       -1,   334,    -1,   335,    -1,   336,    -1,   325,   113,   277,
    962      114,    -1,   113,   335,   114,   113,   277,   114,    -1,   113,
    963      334,   114,    -1,   156,   333,    -1,   156,   234,   333,    -1,
    964      113,   335,   114,    -1,   113,   335,   114,   355,    -1,   113,
    965      336,   114,   356,    -1,   113,   336,   114,    -1,   338,   318,
    966       -1,   339,    -1,   340,   318,    -1,   341,   318,    -1,   347,
    967       -1,   113,   338,   114,    -1,   156,   337,    -1,   156,   234,
    968      337,    -1,   113,   339,   114,    -1,   338,   355,    -1,   113,
    969      339,   114,   355,    -1,   113,   340,   114,   356,    -1,   113,
    970      340,   114,    -1,   338,   113,   138,   270,   139,   114,    -1,
    971      113,   339,   114,   113,   138,   270,   139,   114,    -1,   113,
    972      341,   114,    -1,   325,   318,    -1,   343,    -1,   344,   318,
    973       -1,   345,   318,    -1,   156,   342,    -1,   156,   234,   342,
    974       -1,   113,   343,   114,    -1,   325,   361,    -1,   113,   343,
    975      114,   355,    -1,   113,   344,   114,   356,    -1,   113,   344,
    976      114,    -1,   325,   113,   138,   270,   139,   114,    -1,   113,
    977      343,   114,   113,   138,   270,   139,   114,    -1,   113,   345,
    978      114,    -1,   347,   318,    -1,   348,    -1,   349,   318,    -1,
    979      350,   318,    -1,    76,    -1,    77,    -1,   156,   346,    -1,
    980      156,   234,   346,    -1,   113,   348,   114,    -1,   347,   361,
    981       -1,   113,   348,   114,   361,    -1,   347,   113,   138,   270,
    982      139,   114,    -1,   113,   348,   114,   113,   138,   270,   139,
    983      114,    -1,   352,    -1,   353,   318,    -1,   354,   318,    -1,
    984      156,    -1,   156,   234,    -1,   156,   351,    -1,   156,   234,
    985      351,    -1,   113,   352,   114,    -1,   355,    -1,   113,   352,
    986      114,   355,    -1,   113,   353,   114,   356,    -1,   113,   353,
    987      114,    -1,   113,   138,   270,   139,   114,    -1,   113,   352,
    988      114,   113,   138,   270,   139,   114,    -1,   113,   354,   114,
    989       -1,   115,   116,    -1,   115,   116,   356,    -1,   356,    -1,
    990      115,   138,   171,   139,   116,    -1,   115,   138,   121,   139,
    991      116,    -1,   356,   115,   138,   171,   139,   116,    -1,   356,
    992      115,   138,   121,   139,   116,    -1,   358,    -1,   359,   318,
    993       -1,   360,   318,    -1,   156,    -1,   156,   234,    -1,   156,
    994      357,    -1,   156,   234,   357,    -1,   113,   358,   114,    -1,
    995      361,    -1,   113,   358,   114,   361,    -1,   113,   359,   114,
    996      356,    -1,   113,   359,   114,    -1,   113,   138,   270,   139,
    997      114,    -1,   113,   358,   114,   113,   138,   270,   139,   114,
    998       -1,   113,   360,   114,    -1,   362,    -1,   362,   356,    -1,
    999      356,    -1,   115,   116,    -1,   115,   138,   234,   121,   139,
    1000      116,    -1,   115,   138,   234,   139,   116,    -1,   115,   138,
    1001      234,   171,   139,   116,    -1,   115,   138,     7,   233,   171,
    1002      139,   116,    -1,   115,   138,   234,     7,   171,   139,   116,
    1003       -1,   364,    -1,   365,   318,    -1,   366,   318,    -1,   156,
    1004       -1,   156,   234,    -1,   156,   363,    -1,   156,   234,   363,
    1005       -1,   113,   364,   114,    -1,   355,    -1,   113,   364,   114,
    1006      355,    -1,   113,   365,   114,   356,    -1,   113,   365,   114,
    1007       -1,   113,   364,   114,   113,   138,   270,   139,   114,    -1,
    1008      113,   366,   114,    -1,   368,    -1,   376,    -1,   234,   376,
    1009       -1,   369,    -1,   370,    -1,   156,   232,    -1,   234,   156,
    1010      232,    -1,   156,   377,    -1,   234,   156,   377,    -1,   156,
    1011      367,    -1,   234,   156,   367,    -1,   115,   116,   232,    -1,
    1012      371,   232,    -1,   115,   116,   356,   232,    -1,   371,   356,
    1013      232,    -1,   356,   232,    -1,   115,   116,   369,    -1,   371,
    1014      369,    -1,   115,   116,   356,   369,    -1,   371,   356,   369,
    1015       -1,   356,   369,    -1,   115,   138,   234,   121,   139,   116,
    1016       -1,   115,   138,   234,   171,   139,   116,    -1,   115,   138,
    1017      238,   171,   139,   116,    -1,   115,   138,   238,   234,   171,
    1018      139,   116,    -1,   376,    -1,   234,   376,    -1,   373,    -1,
    1019      374,    -1,   375,    -1,   156,   232,    -1,   234,   156,   232,
    1020       -1,   156,   377,    -1,   234,   156,   377,    -1,   156,   372,
    1021       -1,   234,   156,   372,    -1,   115,   116,   232,    -1,   115,
    1022      116,   356,   232,    -1,   356,   232,    -1,   115,   116,   374,
    1023       -1,   115,   116,   356,   374,    -1,   356,   374,    -1,   115,
    1024      138,   269,   139,   116,    -1,   376,   113,   138,   266,   139,
    1025      114,    -1,   225,   113,   138,   266,   139,   114,    -1,    -1,
    1026      120,    -1,    -1,   135,   171,    -1
     875      -1,    24,    -1,    25,    -1,   244,    -1,   239,   244,    -1,
     876     243,   241,    -1,   243,   241,   235,    -1,   243,   241,   244,
     877      -1,   245,    -1,   234,   246,   234,    -1,   242,    -1,   235,
     878     242,    -1,   245,   236,    -1,   245,   242,    -1,    30,   114,
     879     283,   115,    -1,    30,   114,   177,   115,    -1,    81,   114,
     880     283,   115,    -1,    81,   114,   177,   115,    -1,   248,    -1,
     881     239,   248,    -1,   247,   241,    -1,   247,   241,   235,    -1,
     882     251,    -1,   235,   251,    -1,   248,   236,    -1,   250,    -1,
     883     239,   250,    -1,   249,   241,    -1,   249,   241,   235,    -1,
     884      77,    -1,   235,    77,    -1,   250,   236,    -1,   252,    -1,
     885     263,    -1,   254,   119,   255,   120,    -1,   254,   281,    -1,
     886      -1,   254,   281,   253,   119,   255,   120,    -1,   254,   114,
     887     299,   115,   119,   255,   120,    -1,   254,   292,    -1,    33,
     888     319,    -1,    34,   319,    -1,    -1,   255,   256,    -1,   257,
     889     137,    -1,    43,   257,   137,    -1,   258,   137,    -1,    43,
     890     258,   137,    -1,   373,    -1,   373,   281,    -1,   257,   121,
     891     281,    -1,   257,   121,    -1,   233,   259,    -1,   258,   121,
     892     319,   259,    -1,    -1,   261,    -1,   325,   260,    -1,   338,
     893     260,    -1,   364,    -1,    -1,   261,    -1,   135,   171,    -1,
     894      32,   319,    -1,   262,   119,   265,   379,   120,    -1,   262,
     895     281,    -1,    -1,   262,   281,   264,   119,   265,   379,   120,
     896      -1,   281,   266,    -1,   265,   121,   281,   266,    -1,    -1,
     897     136,   171,    -1,    -1,   268,    -1,   270,    -1,   269,    -1,
     898     269,   140,   121,   139,   270,    -1,   270,   140,   121,   139,
     899     101,    -1,   269,   140,   121,   139,   101,    -1,   274,    -1,
     900     270,   140,   121,   139,   274,    -1,   269,   140,   121,   139,
     901     274,    -1,   269,   140,   121,   139,   270,   140,   121,   139,
     902     274,    -1,   275,    -1,   270,   140,   121,   139,   275,    -1,
     903      -1,   272,    -1,   273,    -1,   273,   140,   121,   139,   101,
     904      -1,   277,    -1,   276,    -1,   273,   140,   121,   139,   277,
     905      -1,   273,   140,   121,   139,   276,    -1,   276,    -1,   369,
     906     279,   380,    -1,   377,   279,   380,    -1,   235,   377,   279,
     907     380,    -1,   225,    -1,   277,    -1,   369,    -1,   377,    -1,
     908     235,   377,    -1,   378,    -1,   232,   343,   380,    -1,   232,
     909     347,   380,    -1,   232,    -1,   232,   358,    -1,   144,    -1,
     910     278,   121,   144,    -1,   142,    -1,    77,    -1,    78,    -1,
     911     143,    -1,    77,    -1,    78,    -1,   144,    -1,    77,    -1,
     912      78,    -1,   373,    -1,   233,    -1,   233,   364,    -1,   373,
     913      -1,   378,    -1,   233,    -1,   233,   352,    -1,    -1,   136,
     914     285,    -1,   112,   285,    -1,   172,    -1,   119,   286,   379,
     915     120,    -1,    -1,   285,    -1,   287,   285,    -1,   286,   121,
     916     285,    -1,   286,   121,   287,   285,    -1,   288,   135,    -1,
     917     281,   135,    -1,   289,    -1,   288,   289,    -1,   118,   281,
     918      -1,   116,   139,   172,   140,   117,    -1,   116,   139,   317,
     919     140,   117,    -1,   116,   139,   171,   101,   171,   140,   117,
     920      -1,   118,   116,   139,   152,   140,   117,    -1,   291,    -1,
     921     239,   291,    -1,   290,   241,    -1,   290,   241,   235,    -1,
     922     292,    -1,   235,   292,    -1,   291,   236,    -1,    78,   114,
     923     299,   115,    -1,   294,   380,    -1,   293,   121,   294,   380,
     924      -1,    -1,   296,   281,   295,   297,    -1,   233,   343,    -1,
     925      35,    -1,    37,    -1,    36,    -1,    38,    -1,    -1,   297,
     926     298,    -1,   133,   281,   114,   299,   115,    -1,   133,   119,
     927     139,   305,   120,    -1,   133,   114,   139,   293,   140,   115,
     928     119,   139,   305,   120,   114,   299,   115,    -1,   283,    -1,
     929     172,    -1,   299,   121,   283,    -1,   299,   121,   172,    -1,
     930      35,   301,    -1,   240,    35,   301,    -1,   300,   121,   301,
     931      -1,   302,   297,    -1,   302,   297,   136,   283,    -1,   281,
     932      -1,   280,   114,   139,   293,   140,   115,    -1,    39,   281,
     933     114,   139,   293,   140,   115,   119,   120,    -1,    -1,    39,
     934     281,   114,   139,   293,   140,   115,   119,   304,   305,   120,
     935      -1,   306,    -1,   305,   139,   306,    -1,   307,   140,   137,
     936      -1,   308,   140,   137,    -1,   223,    -1,   225,    -1,   307,
     937     140,   121,   139,   279,    -1,   233,   316,    -1,   308,   140,
     938     121,   139,   316,    -1,    -1,   310,    -1,   312,    -1,   310,
     939     139,   312,    -1,    -1,   310,    -1,   220,    -1,   314,    -1,
     940     206,    -1,    -1,     5,    84,   313,   119,   311,   120,    -1,
     941      43,   312,    -1,   315,    -1,   330,   181,    -1,   334,   139,
     942     215,   181,    -1,   224,   181,    -1,   232,   330,   181,    -1,
     943     235,   330,   181,    -1,   239,   330,   181,    -1,   239,   235,
     944     330,   181,    -1,   232,   334,   139,   215,   181,    -1,   235,
     945     334,   139,   215,   181,    -1,   239,   334,   139,   215,   181,
     946      -1,   239,   235,   334,   139,   215,   181,    -1,   325,    -1,
     947     338,    -1,   330,    -1,   171,   127,   171,    -1,    -1,    67,
     948     114,   146,   115,   319,    -1,    -1,   320,    -1,   321,    -1,
     949     320,   321,    -1,    42,   114,   114,   322,   115,   115,    -1,
     950     323,    -1,   322,   121,   323,    -1,    -1,   324,    -1,   324,
     951     114,   178,   115,    -1,   279,    -1,   241,    -1,   242,    -1,
     952     236,    -1,   326,   319,    -1,   327,    -1,   328,   319,    -1,
     953     329,   319,    -1,   142,    -1,   114,   326,   115,    -1,   157,
     954     325,    -1,   157,   235,   325,    -1,   114,   327,   115,    -1,
     955     326,   356,    -1,   114,   327,   115,   356,    -1,   114,   328,
     956     115,   357,    -1,   114,   328,   115,    -1,   114,   327,   115,
     957     114,   139,   271,   140,   115,    -1,   114,   329,   115,    -1,
     958     331,   319,    -1,   332,    -1,   333,   319,    -1,   326,   114,
     959     139,   271,   140,   115,    -1,   114,   332,   115,   114,   139,
     960     271,   140,   115,    -1,   114,   331,   115,    -1,   157,   330,
     961      -1,   157,   235,   330,    -1,   114,   332,   115,    -1,   114,
     962     332,   115,   356,    -1,   114,   333,   115,   357,    -1,   114,
     963     333,   115,    -1,   335,    -1,   336,    -1,   337,    -1,   326,
     964     114,   278,   115,    -1,   114,   336,   115,   114,   278,   115,
     965      -1,   114,   335,   115,    -1,   157,   334,    -1,   157,   235,
     966     334,    -1,   114,   336,   115,    -1,   114,   336,   115,   356,
     967      -1,   114,   337,   115,   357,    -1,   114,   337,   115,    -1,
     968     339,   319,    -1,   340,    -1,   341,   319,    -1,   342,   319,
     969      -1,   348,    -1,   114,   339,   115,    -1,   157,   338,    -1,
     970     157,   235,   338,    -1,   114,   340,   115,    -1,   339,   356,
     971      -1,   114,   340,   115,   356,    -1,   114,   341,   115,   357,
     972      -1,   114,   341,   115,    -1,   339,   114,   139,   271,   140,
     973     115,    -1,   114,   340,   115,   114,   139,   271,   140,   115,
     974      -1,   114,   342,   115,    -1,   326,   319,    -1,   344,    -1,
     975     345,   319,    -1,   346,   319,    -1,   157,   343,    -1,   157,
     976     235,   343,    -1,   114,   344,   115,    -1,   326,   362,    -1,
     977     114,   344,   115,   356,    -1,   114,   345,   115,   357,    -1,
     978     114,   345,   115,    -1,   326,   114,   139,   271,   140,   115,
     979      -1,   114,   344,   115,   114,   139,   271,   140,   115,    -1,
     980     114,   346,   115,    -1,   348,   319,    -1,   349,    -1,   350,
     981     319,    -1,   351,   319,    -1,    77,    -1,    78,    -1,   157,
     982     347,    -1,   157,   235,   347,    -1,   114,   349,   115,    -1,
     983     348,   362,    -1,   114,   349,   115,   362,    -1,   348,   114,
     984     139,   271,   140,   115,    -1,   114,   349,   115,   114,   139,
     985     271,   140,   115,    -1,   353,    -1,   354,   319,    -1,   355,
     986     319,    -1,   157,    -1,   157,   235,    -1,   157,   352,    -1,
     987     157,   235,   352,    -1,   114,   353,   115,    -1,   356,    -1,
     988     114,   353,   115,   356,    -1,   114,   354,   115,   357,    -1,
     989     114,   354,   115,    -1,   114,   139,   271,   140,   115,    -1,
     990     114,   353,   115,   114,   139,   271,   140,   115,    -1,   114,
     991     355,   115,    -1,   116,   117,    -1,   116,   117,   357,    -1,
     992     357,    -1,   116,   139,   172,   140,   117,    -1,   116,   139,
     993     122,   140,   117,    -1,   357,   116,   139,   172,   140,   117,
     994      -1,   357,   116,   139,   122,   140,   117,    -1,   359,    -1,
     995     360,   319,    -1,   361,   319,    -1,   157,    -1,   157,   235,
     996      -1,   157,   358,    -1,   157,   235,   358,    -1,   114,   359,
     997     115,    -1,   362,    -1,   114,   359,   115,   362,    -1,   114,
     998     360,   115,   357,    -1,   114,   360,   115,    -1,   114,   139,
     999     271,   140,   115,    -1,   114,   359,   115,   114,   139,   271,
     1000     140,   115,    -1,   114,   361,   115,    -1,   363,    -1,   363,
     1001     357,    -1,   357,    -1,   116,   117,    -1,   116,   139,   235,
     1002     122,   140,   117,    -1,   116,   139,   235,   140,   117,    -1,
     1003     116,   139,   235,   172,   140,   117,    -1,   116,   139,     7,
     1004     234,   172,   140,   117,    -1,   116,   139,   235,     7,   172,
     1005     140,   117,    -1,   365,    -1,   366,   319,    -1,   367,   319,
     1006      -1,   157,    -1,   157,   235,    -1,   157,   364,    -1,   157,
     1007     235,   364,    -1,   114,   365,   115,    -1,   356,    -1,   114,
     1008     365,   115,   356,    -1,   114,   366,   115,   357,    -1,   114,
     1009     366,   115,    -1,   114,   365,   115,   114,   139,   271,   140,
     1010     115,    -1,   114,   367,   115,    -1,   369,    -1,   377,    -1,
     1011     235,   377,    -1,   370,    -1,   371,    -1,   157,   233,    -1,
     1012     235,   157,   233,    -1,   157,   378,    -1,   235,   157,   378,
     1013      -1,   157,   368,    -1,   235,   157,   368,    -1,   116,   117,
     1014     233,    -1,   372,   233,    -1,   116,   117,   357,   233,    -1,
     1015     372,   357,   233,    -1,   357,   233,    -1,   116,   117,   370,
     1016      -1,   372,   370,    -1,   116,   117,   357,   370,    -1,   372,
     1017     357,   370,    -1,   357,   370,    -1,   116,   139,   235,   122,
     1018     140,   117,    -1,   116,   139,   235,   172,   140,   117,    -1,
     1019     116,   139,   239,   172,   140,   117,    -1,   116,   139,   239,
     1020     235,   172,   140,   117,    -1,   377,    -1,   235,   377,    -1,
     1021     374,    -1,   375,    -1,   376,    -1,   157,   233,    -1,   235,
     1022     157,   233,    -1,   157,   378,    -1,   235,   157,   378,    -1,
     1023     157,   373,    -1,   235,   157,   373,    -1,   116,   117,   233,
     1024      -1,   116,   117,   357,   233,    -1,   357,   233,    -1,   116,
     1025     117,   375,    -1,   116,   117,   357,   375,    -1,   357,   375,
     1026      -1,   116,   139,   270,   140,   117,    -1,   377,   114,   139,
     1027     267,   140,   115,    -1,   226,   114,   139,   267,   140,   115,
     1028      -1,    -1,   121,    -1,    -1,   136,   172,    -1
    10271029};
    10281030
     
    10791081    1810,  1811,  1816,  1817,  1823,  1825,  1828,  1830,  1832,  1855,
    10801082    1856,  1858,  1860,  1865,  1866,  1868,  1873,  1878,  1879,  1885,
    1081     1884,  1888,  1892,  1894,  1896,  1902,  1903,  1908,  1913,  1915,
    1082     1920,  1922,  1923,  1925,  1930,  1932,  1934,  1939,  1941,  1946,
    1083     1951,  1959,  1965,  1964,  1978,  1979,  1984,  1985,  1989,  1994,
    1084     1999,  2007,  2012,  2023,  2024,  2029,  2030,  2036,  2037,  2041,
    1085     2042,  2043,  2046,  2045,  2056,  2065,  2071,  2077,  2086,  2092,
    1086     2098,  2104,  2110,  2118,  2124,  2132,  2138,  2147,  2148,  2149,
    1087     2153,  2159,  2160,  2166,  2167,  2171,  2172,  2177,  2183,  2184,
    1088     2187,  2189,  2190,  2194,  2195,  2196,  2197,  2231,  2233,  2234,
    1089     2236,  2241,  2246,  2251,  2253,  2255,  2260,  2262,  2264,  2266,
    1090     2271,  2273,  2282,  2284,  2285,  2290,  2292,  2294,  2299,  2301,
    1091     2303,  2308,  2310,  2312,  2321,  2322,  2323,  2327,  2329,  2331,
    1092     2336,  2338,  2340,  2345,  2347,  2349,  2364,  2366,  2367,  2369,
    1093     2374,  2375,  2380,  2382,  2384,  2389,  2391,  2393,  2395,  2400,
    1094     2402,  2404,  2414,  2416,  2417,  2419,  2424,  2426,  2428,  2433,
    1095     2435,  2437,  2439,  2444,  2446,  2448,  2479,  2481,  2482,  2484,
    1096     2489,  2494,  2502,  2504,  2506,  2511,  2513,  2518,  2520,  2534,
    1097     2535,  2537,  2542,  2544,  2546,  2548,  2550,  2555,  2556,  2558,
    1098     2560,  2565,  2567,  2569,  2575,  2577,  2579,  2583,  2585,  2587,
    1099     2589,  2603,  2604,  2606,  2611,  2613,  2615,  2617,  2619,  2624,
    1100     2625,  2627,  2629,  2634,  2636,  2638,  2644,  2645,  2647,  2656,
    1101     2659,  2661,  2664,  2666,  2668,  2681,  2682,  2684,  2689,  2691,
    1102     2693,  2695,  2697,  2702,  2703,  2705,  2707,  2712,  2714,  2722,
    1103     2723,  2724,  2729,  2730,  2734,  2736,  2738,  2740,  2742,  2744,
    1104     2751,  2753,  2755,  2757,  2759,  2762,  2764,  2766,  2768,  2770,
    1105     2775,  2777,  2779,  2784,  2810,  2811,  2813,  2817,  2818,  2822,
    1106     2824,  2826,  2828,  2830,  2832,  2839,  2841,  2843,  2845,  2847,
    1107     2849,  2854,  2861,  2863,  2881,  2883,  2888,  2889
     1083    1884,  1888,  1892,  1894,  1896,  1898,  1904,  1905,  1910,  1915,
     1084    1917,  1922,  1924,  1925,  1927,  1932,  1934,  1936,  1941,  1943,
     1085    1948,  1953,  1961,  1967,  1966,  1980,  1981,  1986,  1987,  1991,
     1086    1996,  2001,  2009,  2014,  2025,  2026,  2031,  2032,  2038,  2039,
     1087    2043,  2044,  2045,  2048,  2047,  2058,  2067,  2073,  2079,  2088,
     1088    2094,  2100,  2106,  2112,  2120,  2126,  2134,  2140,  2149,  2150,
     1089    2151,  2155,  2161,  2162,  2168,  2169,  2173,  2174,  2179,  2185,
     1090    2186,  2189,  2191,  2192,  2196,  2197,  2198,  2199,  2233,  2235,
     1091    2236,  2238,  2243,  2248,  2253,  2255,  2257,  2262,  2264,  2266,
     1092    2268,  2273,  2275,  2284,  2286,  2287,  2292,  2294,  2296,  2301,
     1093    2303,  2305,  2310,  2312,  2314,  2323,  2324,  2325,  2329,  2331,
     1094    2333,  2338,  2340,  2342,  2347,  2349,  2351,  2366,  2368,  2369,
     1095    2371,  2376,  2377,  2382,  2384,  2386,  2391,  2393,  2395,  2397,
     1096    2402,  2404,  2406,  2416,  2418,  2419,  2421,  2426,  2428,  2430,
     1097    2435,  2437,  2439,  2441,  2446,  2448,  2450,  2481,  2483,  2484,
     1098    2486,  2491,  2496,  2504,  2506,  2508,  2513,  2515,  2520,  2522,
     1099    2536,  2537,  2539,  2544,  2546,  2548,  2550,  2552,  2557,  2558,
     1100    2560,  2562,  2567,  2569,  2571,  2577,  2579,  2581,  2585,  2587,
     1101    2589,  2591,  2605,  2606,  2608,  2613,  2615,  2617,  2619,  2621,
     1102    2626,  2627,  2629,  2631,  2636,  2638,  2640,  2646,  2647,  2649,
     1103    2658,  2661,  2663,  2666,  2668,  2670,  2683,  2684,  2686,  2691,
     1104    2693,  2695,  2697,  2699,  2704,  2705,  2707,  2709,  2714,  2716,
     1105    2724,  2725,  2726,  2731,  2732,  2736,  2738,  2740,  2742,  2744,
     1106    2746,  2753,  2755,  2757,  2759,  2761,  2764,  2766,  2768,  2770,
     1107    2772,  2777,  2779,  2781,  2786,  2812,  2813,  2815,  2819,  2820,
     1108    2824,  2826,  2828,  2830,  2832,  2834,  2841,  2843,  2845,  2847,
     1109    2849,  2851,  2856,  2863,  2865,  2883,  2885,  2890,  2891
    11081110};
    11091111#endif
     
    11191121  "SIGNED", "UNSIGNED", "ZERO_T", "ONE_T", "VALIST", "BOOL", "COMPLEX",
    11201122  "IMAGINARY", "TYPEOF", "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE",
    1121   "FTYPE", "DTYPE", "TRAIT", "SIZEOF", "OFFSETOF", "ATTRIBUTE",
     1123  "FTYPE", "DTYPE", "TTYPE", "TRAIT", "SIZEOF", "OFFSETOF", "ATTRIBUTE",
    11221124  "EXTENSION", "IF", "ELSE", "SWITCH", "CASE", "DEFAULT", "DO", "WHILE",
    11231125  "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN", "CHOOSE", "DISABLE",
     
    12401242     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
    12411243     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
    1242      365,   366,   367,    40,    41,    91,    93,    46,   123,   125,
    1243       44,    42,    38,    43,    45,    33,   126,    47,    37,    60,
    1244       62,    94,   124,    63,    58,    61,    59
     1244     365,   366,   367,   368,    40,    41,    91,    93,    46,   123,
     1245     125,    44,    42,    38,    43,    45,    33,   126,    47,    37,
     1246      60,    62,    94,   124,    63,    58,    61,    59
    12451247};
    12461248# endif
     
    12491251static const yytype_uint16 yyr1[] =
    12501252{
    1251        0,   137,   138,   139,   140,   140,   140,   140,   140,   141,
    1252      141,   141,   142,   142,   143,   143,   144,   144,   145,   146,
    1253      146,   147,   147,   147,   147,   147,   148,   148,   148,   148,
    1254      148,   148,   148,   148,   148,   148,   148,   148,   149,   149,
    1255      150,   150,   151,   151,   152,   152,   152,   152,   152,   152,
    1256      152,   153,   153,   153,   154,   154,   155,   155,   155,   155,
    1257      155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
    1258      155,   155,   156,   156,   157,   157,   157,   157,   158,   158,
    1259      159,   159,   159,   159,   160,   160,   160,   161,   161,   161,
    1260      162,   162,   162,   162,   162,   163,   163,   163,   164,   164,
    1261      165,   165,   166,   166,   167,   167,   168,   168,   169,   169,
    1262      169,   170,   171,   171,   172,   172,   173,   173,   173,   173,
    1263      173,   173,   173,   173,   173,   173,   173,   173,   174,   174,
    1264      175,   175,   176,   176,   177,   177,   178,   178,   178,   178,
    1265      178,   178,   178,   178,   178,   179,   180,   180,   181,   181,
    1266      182,   182,   182,   182,   183,   183,   184,   185,   185,   185,
    1267      185,   185,   185,   186,   186,   186,   187,   187,   188,   188,
    1268      189,   189,   190,   191,   191,   192,   192,   193,   193,   194,
    1269      194,   194,   194,   195,   195,   196,   196,   197,   197,   197,
    1270      198,   198,   199,   199,   199,   199,   199,   199,   199,   199,
    1271      199,   199,   200,   200,   200,   201,   201,   201,   201,   201,
    1272      202,   202,   202,   202,   203,   204,   204,   204,   204,   204,
    1273      205,   205,   205,   205,   205,   206,   206,   207,   207,   208,
    1274      208,   209,   209,   210,   210,   210,   211,   211,   212,   212,
    1275      213,   213,   214,   214,   215,   215,   216,   216,   217,   217,
    1276      218,   218,   219,   219,   220,   220,   220,   220,   220,   221,
    1277      221,   221,   222,   222,   222,   223,   223,   223,   223,   223,
    1278      224,   224,   225,   225,   226,   226,   226,   227,   227,   227,
    1279      227,   227,   228,   228,   229,   229,   229,   229,   230,   230,
    1280      231,   231,   231,   231,   232,   232,   232,   232,   233,   233,
    1281      234,   234,   235,   235,   236,   236,   236,   236,   236,   237,
    1282      236,   238,   238,   238,   239,   239,   240,   240,   240,   240,
    1283      240,   240,   240,   240,   241,   241,   241,   241,   241,   241,
    1284      241,   241,   241,   241,   241,   241,   241,   241,   241,   242,
    1285      242,   242,   242,   242,   243,   243,   244,   244,   244,   244,
    1286      245,   245,   245,   245,   246,   246,   246,   246,   247,   247,
    1287      247,   248,   248,   248,   248,   249,   249,   249,   250,   250,
    1288      251,   251,   252,   251,   251,   251,   253,   253,   254,   254,
    1289      255,   255,   255,   255,   256,   256,   256,   256,   257,   257,
    1290      258,   258,   258,   258,   258,   259,   259,   260,   261,   262,
    1291      262,   263,   262,   264,   264,   265,   265,   266,   266,   267,
    1292      267,   267,   267,   267,   268,   268,   268,   268,   269,   269,
    1293      270,   270,   271,   271,   272,   272,   272,   272,   273,   273,
    1294      273,   273,   273,   274,   274,   274,   274,   274,   275,   275,
    1295      276,   276,   277,   277,   278,   278,   278,   279,   279,   279,
    1296      280,   280,   280,   281,   281,   281,   282,   282,   282,   282,
    1297      283,   283,   283,   284,   284,   285,   285,   285,   285,   285,
    1298      286,   286,   287,   287,   288,   288,   288,   288,   288,   289,
    1299      289,   289,   289,   290,   290,   290,   291,   292,   292,   294,
    1300      293,   293,   295,   295,   295,   296,   296,   297,   297,   297,
    1301      298,   298,   298,   298,   299,   299,   299,   300,   300,   301,
    1302      301,   302,   303,   302,   304,   304,   305,   305,   306,   306,
    1303      306,   307,   307,   308,   308,   309,   309,   310,   310,   311,
    1304      311,   311,   312,   311,   311,   313,   313,   313,   314,   314,
    1305      314,   314,   314,   314,   314,   314,   314,   315,   315,   315,
    1306      316,   317,   317,   318,   318,   319,   319,   320,   321,   321,
    1307      322,   322,   322,   323,   323,   323,   323,   324,   324,   324,
    1308      324,   325,   325,   326,   326,   326,   327,   327,   327,   327,
    1309      328,   328,   329,   329,   329,   330,   330,   330,   331,   331,
    1310      331,   332,   332,   332,   333,   333,   333,   334,   334,   334,
    1311      335,   335,   335,   336,   336,   336,   337,   337,   337,   337,
    1312      338,   338,   339,   339,   339,   340,   340,   340,   340,   341,
    1313      341,   341,   342,   342,   342,   342,   343,   343,   343,   344,
    1314      344,   344,   344,   345,   345,   345,   346,   346,   346,   346,
    1315      347,   347,   348,   348,   348,   349,   349,   350,   350,   351,
    1316      351,   351,   352,   352,   352,   352,   352,   353,   353,   353,
    1317      353,   354,   354,   354,   355,   355,   355,   356,   356,   356,
    1318      356,   357,   357,   357,   358,   358,   358,   358,   358,   359,
    1319      359,   359,   359,   360,   360,   360,   361,   361,   361,   362,
    1320      362,   362,   362,   362,   362,   363,   363,   363,   364,   364,
    1321      364,   364,   364,   365,   365,   365,   365,   366,   366,   367,
    1322      367,   367,   368,   368,   369,   369,   369,   369,   369,   369,
    1323      370,   370,   370,   370,   370,   370,   370,   370,   370,   370,
    1324      371,   371,   371,   371,   372,   372,   372,   373,   373,   374,
    1325      374,   374,   374,   374,   374,   375,   375,   375,   375,   375,
    1326      375,   376,   377,   377,   378,   378,   379,   379
     1253       0,   138,   139,   140,   141,   141,   141,   141,   141,   142,
     1254     142,   142,   143,   143,   144,   144,   145,   145,   146,   147,
     1255     147,   148,   148,   148,   148,   148,   149,   149,   149,   149,
     1256     149,   149,   149,   149,   149,   149,   149,   149,   150,   150,
     1257     151,   151,   152,   152,   153,   153,   153,   153,   153,   153,
     1258     153,   154,   154,   154,   155,   155,   156,   156,   156,   156,
     1259     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
     1260     156,   156,   157,   157,   158,   158,   158,   158,   159,   159,
     1261     160,   160,   160,   160,   161,   161,   161,   162,   162,   162,
     1262     163,   163,   163,   163,   163,   164,   164,   164,   165,   165,
     1263     166,   166,   167,   167,   168,   168,   169,   169,   170,   170,
     1264     170,   171,   172,   172,   173,   173,   174,   174,   174,   174,
     1265     174,   174,   174,   174,   174,   174,   174,   174,   175,   175,
     1266     176,   176,   177,   177,   178,   178,   179,   179,   179,   179,
     1267     179,   179,   179,   179,   179,   180,   181,   181,   182,   182,
     1268     183,   183,   183,   183,   184,   184,   185,   186,   186,   186,
     1269     186,   186,   186,   187,   187,   187,   188,   188,   189,   189,
     1270     190,   190,   191,   192,   192,   193,   193,   194,   194,   195,
     1271     195,   195,   195,   196,   196,   197,   197,   198,   198,   198,
     1272     199,   199,   200,   200,   200,   200,   200,   200,   200,   200,
     1273     200,   200,   201,   201,   201,   202,   202,   202,   202,   202,
     1274     203,   203,   203,   203,   204,   205,   205,   205,   205,   205,
     1275     206,   206,   206,   206,   206,   207,   207,   208,   208,   209,
     1276     209,   210,   210,   211,   211,   211,   212,   212,   213,   213,
     1277     214,   214,   215,   215,   216,   216,   217,   217,   218,   218,
     1278     219,   219,   220,   220,   221,   221,   221,   221,   221,   222,
     1279     222,   222,   223,   223,   223,   224,   224,   224,   224,   224,
     1280     225,   225,   226,   226,   227,   227,   227,   228,   228,   228,
     1281     228,   228,   229,   229,   230,   230,   230,   230,   231,   231,
     1282     232,   232,   232,   232,   233,   233,   233,   233,   234,   234,
     1283     235,   235,   236,   236,   237,   237,   237,   237,   237,   238,
     1284     237,   239,   239,   239,   240,   240,   241,   241,   241,   241,
     1285     241,   241,   241,   241,   242,   242,   242,   242,   242,   242,
     1286     242,   242,   242,   242,   242,   242,   242,   242,   242,   243,
     1287     243,   243,   243,   243,   244,   244,   245,   245,   245,   245,
     1288     246,   246,   246,   246,   247,   247,   247,   247,   248,   248,
     1289     248,   249,   249,   249,   249,   250,   250,   250,   251,   251,
     1290     252,   252,   253,   252,   252,   252,   254,   254,   255,   255,
     1291     256,   256,   256,   256,   257,   257,   257,   257,   258,   258,
     1292     259,   259,   259,   259,   259,   260,   260,   261,   262,   263,
     1293     263,   264,   263,   265,   265,   266,   266,   267,   267,   268,
     1294     268,   268,   268,   268,   269,   269,   269,   269,   270,   270,
     1295     271,   271,   272,   272,   273,   273,   273,   273,   274,   274,
     1296     274,   274,   274,   275,   275,   275,   275,   275,   276,   276,
     1297     277,   277,   278,   278,   279,   279,   279,   280,   280,   280,
     1298     281,   281,   281,   282,   282,   282,   283,   283,   283,   283,
     1299     284,   284,   284,   285,   285,   286,   286,   286,   286,   286,
     1300     287,   287,   288,   288,   289,   289,   289,   289,   289,   290,
     1301     290,   290,   290,   291,   291,   291,   292,   293,   293,   295,
     1302     294,   294,   296,   296,   296,   296,   297,   297,   298,   298,
     1303     298,   299,   299,   299,   299,   300,   300,   300,   301,   301,
     1304     302,   302,   303,   304,   303,   305,   305,   306,   306,   307,
     1305     307,   307,   308,   308,   309,   309,   310,   310,   311,   311,
     1306     312,   312,   312,   313,   312,   312,   314,   314,   314,   315,
     1307     315,   315,   315,   315,   315,   315,   315,   315,   316,   316,
     1308     316,   317,   318,   318,   319,   319,   320,   320,   321,   322,
     1309     322,   323,   323,   323,   324,   324,   324,   324,   325,   325,
     1310     325,   325,   326,   326,   327,   327,   327,   328,   328,   328,
     1311     328,   329,   329,   330,   330,   330,   331,   331,   331,   332,
     1312     332,   332,   333,   333,   333,   334,   334,   334,   335,   335,
     1313     335,   336,   336,   336,   337,   337,   337,   338,   338,   338,
     1314     338,   339,   339,   340,   340,   340,   341,   341,   341,   341,
     1315     342,   342,   342,   343,   343,   343,   343,   344,   344,   344,
     1316     345,   345,   345,   345,   346,   346,   346,   347,   347,   347,
     1317     347,   348,   348,   349,   349,   349,   350,   350,   351,   351,
     1318     352,   352,   352,   353,   353,   353,   353,   353,   354,   354,
     1319     354,   354,   355,   355,   355,   356,   356,   356,   357,   357,
     1320     357,   357,   358,   358,   358,   359,   359,   359,   359,   359,
     1321     360,   360,   360,   360,   361,   361,   361,   362,   362,   362,
     1322     363,   363,   363,   363,   363,   363,   364,   364,   364,   365,
     1323     365,   365,   365,   365,   366,   366,   366,   366,   367,   367,
     1324     368,   368,   368,   369,   369,   370,   370,   370,   370,   370,
     1325     370,   371,   371,   371,   371,   371,   371,   371,   371,   371,
     1326     371,   372,   372,   372,   372,   373,   373,   373,   374,   374,
     1327     375,   375,   375,   375,   375,   375,   376,   376,   376,   376,
     1328     376,   376,   377,   378,   378,   379,   379,   380,   380
    13271329};
    13281330
     
    13791381       2,     2,     1,     2,     2,     5,     5,     7,     6,     1,
    13801382       2,     2,     3,     1,     2,     2,     4,     2,     4,     0,
    1381        4,     2,     1,     1,     1,     0,     2,     5,     5,    13,
    1382        1,     1,     3,     3,     2,     3,     3,     2,     4,     1,
    1383        6,     9,     0,    11,     1,     3,     3,     3,     1,     1,
    1384        5,     2,     5,     0,     1,     1,     3,     0,     1,     1,
    1385        1,     1,     0,     6,     2,     1,     2,     4,     2,     3,
    1386        3,     3,     4,     5,     5,     5,     6,     1,     1,     1,
    1387        3,     0,     5,     0,     1,     1,     2,     6,     1,     3,
    1388        0,     1,     4,     1,     1,     1,     1,     2,     1,     2,
     1383       4,     2,     1,     1,     1,     1,     0,     2,     5,     5,
     1384      13,     1,     1,     3,     3,     2,     3,     3,     2,     4,
     1385       1,     6,     9,     0,    11,     1,     3,     3,     3,     1,
     1386       1,     5,     2,     5,     0,     1,     1,     3,     0,     1,
     1387       1,     1,     1,     0,     6,     2,     1,     2,     4,     2,
     1388       3,     3,     3,     4,     5,     5,     5,     6,     1,     1,
     1389       1,     3,     0,     5,     0,     1,     1,     2,     6,     1,
     1390       3,     0,     1,     4,     1,     1,     1,     1,     2,     1,
     1391       2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
     1392       3,     8,     3,     2,     1,     2,     6,     8,     3,     2,
     1393       3,     3,     4,     4,     3,     1,     1,     1,     4,     6,
     1394       3,     2,     3,     3,     4,     4,     3,     2,     1,     2,
    13891395       2,     1,     3,     2,     3,     3,     2,     4,     4,     3,
    1390        8,     3,     2,     1,     2,     6,     8,     3,     2,     3,
    1391        3,     4,     4,     3,     1,     1,     1,     4,     6,     3,
    1392        2,     3,     3,     4,     4,     3,     2,     1,     2,     2,
    1393        1,     3,     2,     3,     3,     2,     4,     4,     3,     6,
    1394        8,     3,     2,     1,     2,     2,     2,     3,     3,     2,
    1395        4,     4,     3,     6,     8,     3,     2,     1,     2,     2,
    1396        1,     1,     2,     3,     3,     2,     4,     6,     8,     1,
    1397        2,     2,     1,     2,     2,     3,     3,     1,     4,     4,
    1398        3,     5,     8,     3,     2,     3,     1,     5,     5,     6,
    1399        6,     1,     2,     2,     1,     2,     2,     3,     3,     1,
    1400        4,     4,     3,     5,     8,     3,     1,     2,     1,     2,
    1401        6,     5,     6,     7,     7,     1,     2,     2,     1,     2,
    1402        2,     3,     3,     1,     4,     4,     3,     8,     3,     1,
    1403        1,     2,     1,     1,     2,     3,     2,     3,     2,     3,
    1404        3,     2,     4,     3,     2,     3,     2,     4,     3,     2,
    1405        6,     6,     6,     7,     1,     2,     1,     1,     1,     2,
    1406        3,     2,     3,     2,     3,     3,     4,     2,     3,     4,
    1407        2,     5,     6,     6,     0,     1,     0,     2
     1396       6,     8,     3,     2,     1,     2,     2,     2,     3,     3,
     1397       2,     4,     4,     3,     6,     8,     3,     2,     1,     2,
     1398       2,     1,     1,     2,     3,     3,     2,     4,     6,     8,
     1399       1,     2,     2,     1,     2,     2,     3,     3,     1,     4,
     1400       4,     3,     5,     8,     3,     2,     3,     1,     5,     5,
     1401       6,     6,     1,     2,     2,     1,     2,     2,     3,     3,
     1402       1,     4,     4,     3,     5,     8,     3,     1,     2,     1,
     1403       2,     6,     5,     6,     7,     7,     1,     2,     2,     1,
     1404       2,     2,     3,     3,     1,     4,     4,     3,     8,     3,
     1405       1,     1,     2,     1,     1,     2,     3,     2,     3,     2,
     1406       3,     3,     2,     4,     3,     2,     3,     2,     4,     3,
     1407       2,     6,     6,     6,     7,     1,     2,     1,     1,     1,
     1408       2,     3,     2,     3,     2,     3,     3,     4,     2,     3,
     1409       4,     2,     5,     6,     6,     0,     1,     0,     2
    14081410};
    14091411
     
    14151417     298,   298,   318,   316,   319,   317,   320,   321,   304,   306,
    14161418     305,     0,   307,   332,   324,   329,   327,   328,   326,   325,
    1417      330,   331,   337,   338,   336,   333,   334,   335,   553,   553,
    1418      553,     0,     0,     0,   298,   225,   308,   322,   323,     9,
    1419      365,     0,    10,    16,    17,     0,     2,    72,    73,   571,
    1420       11,   298,   531,   529,   252,     3,   460,     3,   265,     0,
     1419     330,   331,   337,   338,   336,   333,   334,   335,   554,   554,
     1420     554,     0,     0,     0,   298,   225,   308,   322,   323,     9,
     1421     365,     0,    10,    16,    17,     0,     2,    72,    73,   572,
     1422      11,   298,   532,   530,   252,     3,   460,     3,   265,     0,
    14211423       3,     3,     3,   253,     3,     0,     0,     0,   299,   300,
    14221424     302,   298,   311,   314,   346,   290,   339,   344,   291,   354,
    14231425     292,   361,   358,   368,     0,     0,   369,   293,   479,   483,
    1424        3,     3,     0,     2,   525,   530,   535,   303,     0,     0,
    1425      553,   583,   553,     2,   594,   595,   596,   298,     0,   737,
    1426      738,     0,    14,     0,    15,   298,   274,   275,     0,   299,
    1427      294,   295,   296,   297,   532,   309,   398,   554,   555,   376,
    1428      377,    14,   451,   452,    13,   447,   450,     0,   509,   504,
    1429      495,   451,   452,     0,     0,   534,   226,     0,   298,     0,
     1426       3,     3,     0,     2,   526,   531,   536,   303,     0,     0,
     1427     554,   584,   554,     2,   595,   596,   597,   298,     0,   738,
     1428     739,     0,    14,     0,    15,   298,   274,   275,     0,   299,
     1429     294,   295,   296,   297,   533,   309,   398,   555,   556,   376,
     1430     377,    14,   451,   452,    13,   447,   450,     0,   510,   505,
     1431     496,   451,   452,     0,     0,   535,   226,     0,   298,     0,
    14301432       0,     0,     0,     0,     0,     0,     0,   298,   298,     0,
    1431      739,   299,   588,   600,   743,   736,   734,   741,     0,     0,
    1432        0,   259,     2,     0,   538,   445,   446,   444,     0,     0,
    1433        0,     0,   553,     0,   640,   641,     0,     0,   551,   547,
    1434      553,   568,   553,   553,   549,     2,   548,   553,   607,   553,
    1435      553,   610,     0,     0,     0,   298,   298,   316,   366,     2,
     1433     740,   299,   589,   601,   744,   737,   735,   742,     0,     0,
     1434       0,   259,     2,     0,   539,   445,   446,   444,     0,     0,
     1435       0,     0,   554,     0,   641,   642,     0,     0,   552,   548,
     1436     554,   569,   554,   554,   550,     2,   549,   554,   608,   554,
     1437     554,   611,     0,     0,     0,   298,   298,   316,   366,     2,
    14361438     298,   266,   301,   312,   347,   359,   484,     0,     2,     0,
    14371439     460,   267,   299,   340,   355,   362,   480,     0,     2,     0,
    14381440     315,   341,   348,   349,     0,   356,   360,   363,   367,   452,
    14391441     298,   378,   371,   375,     0,   400,   481,   485,     0,     0,
    1440        0,     1,   298,     2,   536,   582,   584,   298,     2,   747,
    1441      299,   750,   551,   551,     0,   299,     0,     0,   277,   553,
    1442      549,     2,   298,     0,     0,   298,   556,     2,   507,     2,
    1443      560,     0,     0,     0,     0,     0,     0,    21,    69,     4,
     1442       0,     1,   298,     2,   537,   583,   585,   298,     2,   748,
     1443     299,   751,   552,   552,     0,   299,     0,     0,   277,   554,
     1444     550,     2,   298,     0,     0,   298,   557,     2,   508,     2,
     1445     561,     0,     0,     0,     0,     0,     0,    21,    69,     4,
    14441446       8,    19,     5,     6,     7,     0,     0,   298,     2,    74,
    14451447      75,    76,    77,    57,    22,    58,    18,    26,    56,    78,
    14461448     298,     0,    80,    84,    87,    90,    95,    98,   100,   102,
    1447      104,   106,   108,   112,   501,    23,   458,   500,     0,   456,
    1448      457,     0,   572,   587,   590,   593,   599,   602,   605,     2,
    1449      745,   298,   748,     2,    72,   298,     3,   432,     0,   440,
     1449     104,   106,   108,   112,   502,    23,   458,   501,     0,   456,
     1450     457,     0,   573,   588,   591,   594,   600,   603,   606,     2,
     1451     746,   298,   749,     2,    72,   298,     3,   432,     0,   440,
    14501452     299,   298,   311,   339,   291,   354,   361,     3,     3,   414,
    1451      418,   428,   433,   479,   298,   434,   712,   713,   298,   435,
    1452      437,     2,   589,   601,   735,     2,     2,   254,     2,   465,
     1453     418,   428,   433,   479,   298,   434,   713,   714,   298,   435,
     1454     437,     2,   590,   602,   736,     2,     2,   254,     2,   465,
    14531455       0,   463,   462,   461,   146,     2,     2,   256,     2,     2,
    14541456     255,     2,   285,     2,   286,     0,   284,     0,     0,     0,
    1455        0,     0,     0,     0,     0,     0,   573,   612,     0,   460,
    1456        2,   567,   576,   666,   569,   570,   539,   298,     2,   606,
    1457      615,   608,   609,     0,   280,   298,   298,   345,   299,     0,
    1458      299,   298,   740,   744,   742,   540,   298,   551,   260,   268,
    1459      313,     0,     2,   541,   298,   505,   342,   343,   287,   357,
    1460      364,     0,   298,     0,   754,   405,     0,   482,   506,   257,
    1461      258,   526,   298,   442,     0,   298,   242,     0,     2,   244,
     1457       0,     0,     0,     0,     0,     0,   574,   613,     0,   460,
     1458       2,   568,   577,   667,   570,   571,   540,   298,     2,   607,
     1459     616,   609,   610,     0,   280,   298,   298,   345,   299,     0,
     1460     299,   298,   741,   745,   743,   541,   298,   552,   260,   268,
     1461     313,     0,     2,   542,   298,   506,   342,   343,   287,   357,
     1462     364,     0,   298,     0,   755,   405,     0,   482,   507,   257,
     1463     258,   527,   298,   442,     0,   298,   242,     0,     2,   244,
    14621464       0,   299,     0,   262,     2,   263,   282,     0,     0,     2,
    1463      298,   551,   298,   492,   494,   493,     0,     0,   756,     0,
    1464      298,     0,   298,   496,   298,   566,   564,   565,   563,     0,
    1465      558,   561,     0,     0,   298,    64,   298,    78,    59,   298,
    1466       66,   298,   298,    62,    63,     2,   132,     0,     0,   454,
    1467        0,   453,   734,   298,    20,    31,     0,    34,    35,    40,
    1468        2,     0,    40,   118,   119,   120,   121,   122,   123,   124,
    1469      125,   126,   127,   117,   116,     0,    60,    61,     0,     0,
     1465     298,   552,   298,   492,   494,   493,   495,     0,     0,   757,
     1466       0,   298,     0,   298,   497,   298,   567,   565,   566,   564,
     1467       0,   559,   562,     0,     0,   298,    64,   298,    78,    59,
     1468     298,    66,   298,   298,    62,    63,     2,   132,     0,     0,
     1469     454,     0,   453,   735,   298,    20,    31,     0,    34,    35,
     1470      40,     2,     0,    40,   118,   119,   120,   121,   122,   123,
     1471     124,   125,   126,   127,   117,   116,     0,    60,    61,     0,
    14701472       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1471        0,     0,     0,     0,     0,     0,     0,     2,   652,   459,
    1472      649,   553,   553,   657,   486,   298,     2,   591,   592,     0,
    1473      603,   604,     0,   746,   749,   298,   298,     0,   714,   299,
    1474      718,   709,   710,   716,     0,     2,     2,   674,   553,   756,
    1475      623,   553,   553,   756,   553,   637,   553,   553,   688,   441,
    1476      671,   553,   553,   679,   686,   298,   436,   299,     0,     0,
    1477      298,   724,   299,   729,   756,   721,   298,   726,   756,   298,
    1478      298,     0,     0,    21,     2,     0,    22,     0,   466,   754,
    1479        0,     0,   472,   246,     0,   298,     0,     0,     0,   551,
    1480      575,   579,   581,   611,   614,   618,   621,   574,   613,     0,
    1481      288,   664,     0,   298,   281,     0,     0,     0,     0,   279,
    1482        2,     0,   264,   542,   298,     0,     0,   298,     2,   370,
    1483      390,   379,     0,     0,   384,   378,   755,     0,     0,   403,
    1484        0,   299,     3,   421,     3,   425,   424,   597,     0,   537,
    1485      298,    72,     3,   298,   440,   299,     3,   434,   435,     2,
    1486        0,     0,     0,   491,   310,   298,     0,   487,   489,     3,
    1487        2,     2,     0,   508,     3,     0,   560,   134,     0,     0,
    1488      227,     0,     0,     0,     0,    41,     0,     0,   298,    24,
    1489        0,    25,     0,   698,   703,   455,   695,   553,   553,     0,
    1490      114,     3,     2,    32,     0,    38,     0,     2,    29,     0,
    1491      113,    81,    82,    83,    85,    86,    88,    89,    93,    94,
    1492       91,    92,    96,    97,    99,   101,   103,   105,   107,     0,
    1493        0,   298,     0,     0,     0,   653,   654,   650,   651,   503,
    1494      502,   298,     0,   720,   298,   725,   299,   298,   668,   711,
    1495      667,     2,   298,     0,     0,     0,     0,     0,     0,     0,
    1496        0,   689,     0,   675,   626,   642,   676,     2,   622,   629,
    1497      438,   624,   625,   439,     2,   636,   645,   638,   639,   672,
    1498      673,   687,   715,   719,   717,   756,   272,     2,   751,     2,
    1499      429,   723,   728,   430,     3,   408,     3,     3,     3,   460,
    1500        0,     0,     2,   474,   471,   755,     0,   467,     2,   470,
    1501      473,     0,   298,   247,   269,     3,   276,   278,     0,   460,
    1502        2,   577,   578,     2,   616,   617,     0,   665,   543,     3,
    1503      351,   350,   353,   352,   298,   544,     0,   545,   378,     0,
    1504        0,   298,     0,     0,   698,   388,   391,   395,   553,   395,
    1505      394,   387,   380,   553,   382,   385,   298,   405,   399,   111,
    1506      406,   754,     0,     0,   443,   245,     0,     0,     3,     2,
    1507      674,   436,     0,   533,     0,   756,   757,   495,     0,   298,
    1508      298,   298,     0,   557,   559,   135,     0,     0,   220,     0,
    1509        0,     0,   228,   229,    65,     0,    67,    70,    71,     0,
    1510      133,     0,     0,     0,   699,   700,   696,   697,   465,    79,
    1511      115,   130,     3,   114,     0,    28,    40,     3,     0,    37,
    1512      110,     0,     3,   656,   660,   663,   655,     3,   598,   722,
    1513      727,     2,    72,   298,     3,     3,   299,     0,     3,   628,
    1514      632,   635,   644,   678,   682,   685,   298,     3,   627,   643,
    1515      677,   298,   298,   431,   298,   298,     0,     0,     0,     0,
    1516      261,   111,     0,     3,     3,     0,   468,     0,   464,     0,
    1517        0,   250,   298,     0,     0,   134,     0,     0,     0,     0,
    1518        0,   134,     0,     0,   114,   114,    21,     0,     0,     3,
    1519      136,   137,     2,   148,   138,   139,   140,   141,   142,   143,
    1520      150,   152,     0,     0,     0,   289,   298,   298,   553,     0,
    1521      546,   298,   381,   383,     0,   397,   699,   392,   396,   393,
    1522      386,   390,   373,   404,     0,   585,     2,   670,   669,     0,
    1523      675,     2,   488,   490,   510,     3,   518,   519,     0,     2,
    1524      514,     3,     3,     0,     0,   562,   227,     0,     0,     0,
    1525      227,     0,     0,   702,   706,   708,   701,   754,   114,     0,
    1526        3,    54,     0,    54,    54,     3,    42,    44,    39,     0,
    1527        3,   109,     0,     2,   658,   659,     0,   298,     0,     0,
    1528        0,     3,   644,     0,     2,   630,   631,     2,   646,     2,
    1529      680,   681,     0,     0,    72,     0,     3,     3,     3,     3,
    1530      416,   415,   419,   753,     2,     2,   752,     0,     0,     0,
    1531        0,     3,   469,     3,     0,   248,   151,     3,   299,   298,
    1532        0,     0,     0,     0,     2,     0,   196,     0,   194,     0,
    1533        0,     0,     0,     0,     0,     0,   553,     0,   156,   153,
    1534      298,     0,     0,   271,   283,     3,     3,   552,   619,   374,
    1535      389,   402,   298,   270,   298,     0,   521,   498,   298,     0,
    1536        0,   497,   512,     0,     0,     0,   221,     0,   230,    68,
    1537        2,   704,   705,     0,   131,   128,     0,    51,     2,    45,
    1538       52,    53,     0,     0,     0,     0,    27,     0,   661,   298,
    1539      586,   730,   731,   732,     0,   683,   298,   298,   298,     3,
    1540        3,     0,   691,     0,     0,     0,     0,   298,   298,     3,
    1541      550,   475,   476,     0,   251,   299,     0,     0,     0,     0,
    1542      298,   197,   195,   192,     0,   198,     0,     0,     0,     0,
    1543      202,   205,   203,   199,     0,   200,   134,    40,   149,   147,
    1544      249,     0,     0,   423,   427,   426,     0,   515,     2,   516,
    1545        2,   517,   511,   298,   233,     0,   231,     0,   233,   298,
    1546       36,   129,    55,     0,    43,    33,     2,    49,     2,    47,
    1547       30,     3,   733,     3,     3,     3,     0,     0,   690,   692,
    1548      633,   647,   273,     2,   413,     3,   412,     0,   478,   134,
    1549        0,     0,   134,     3,     0,   134,   193,     0,     2,     2,
    1550      214,   204,     0,     0,     0,   145,     0,   580,   620,     2,
    1551        0,     0,     2,   234,     0,     0,   222,     0,     3,     3,
    1552        0,     0,     0,     0,     0,     0,   693,   694,   298,     0,
    1553      477,   157,     0,     0,     2,   170,   134,   159,     0,   187,
    1554        0,   134,     0,     2,   161,     0,     2,     0,     2,     2,
    1555        2,   201,    37,   298,   520,   522,   513,     0,     0,     0,
    1556        0,     0,     0,     3,     3,   662,   634,   648,   684,   417,
    1557      134,   163,   166,     0,   165,   169,     3,   172,   171,     0,
    1558      134,   189,   134,     3,     0,   298,     0,   298,     0,     2,
    1559        0,     2,   144,     2,   235,   236,     0,   232,   223,   707,
    1560       46,     0,     0,   158,     0,     0,   168,   238,   173,     2,
    1561      240,   188,     0,   191,   177,   206,     3,   215,   219,   208,
    1562        3,     0,   298,     0,   298,     0,     0,     0,    50,    48,
    1563      164,   167,   134,     0,   174,   298,   134,   134,     0,   178,
    1564        0,     0,   698,   216,   217,   218,     0,   207,     3,   209,
    1565        3,   298,   224,   237,   154,   175,   160,   134,   241,   190,
    1566      185,   183,   179,   162,   134,     0,   699,     0,     0,     0,
    1567        0,   155,   176,   186,   180,   184,   183,   181,     3,     3,
    1568        0,     0,   499,   182,   210,   212,     3,     3,   211,   213
     1473       0,     0,     0,     0,     0,     0,     0,     0,     2,   653,
     1474     459,   650,   554,   554,   658,   486,   298,     2,   592,   593,
     1475       0,   604,   605,     0,   747,   750,   298,   298,     0,   715,
     1476     299,   719,   710,   711,   717,     0,     2,     2,   675,   554,
     1477     757,   624,   554,   554,   757,   554,   638,   554,   554,   689,
     1478     441,   672,   554,   554,   680,   687,   298,   436,   299,     0,
     1479       0,   298,   725,   299,   730,   757,   722,   298,   727,   757,
     1480     298,   298,     0,     0,    21,     2,     0,    22,     0,   466,
     1481     755,     0,     0,   472,   246,     0,   298,     0,     0,     0,
     1482     552,   576,   580,   582,   612,   615,   619,   622,   575,   614,
     1483       0,   288,   665,     0,   298,   281,     0,     0,     0,     0,
     1484     279,     2,     0,   264,   543,   298,     0,     0,   298,     2,
     1485     370,   390,   379,     0,     0,   384,   378,   756,     0,     0,
     1486     403,     0,   299,     3,   421,     3,   425,   424,   598,     0,
     1487     538,   298,    72,     3,   298,   440,   299,     3,   434,   435,
     1488       2,     0,     0,     0,   491,   310,   298,     0,   487,   489,
     1489       3,     2,     2,     0,   509,     3,     0,   561,   134,     0,
     1490       0,   227,     0,     0,     0,     0,    41,     0,     0,   298,
     1491      24,     0,    25,     0,   699,   704,   455,   696,   554,   554,
     1492       0,   114,     3,     2,    32,     0,    38,     0,     2,    29,
     1493       0,   113,    81,    82,    83,    85,    86,    88,    89,    93,
     1494      94,    91,    92,    96,    97,    99,   101,   103,   105,   107,
     1495       0,     0,   298,     0,     0,     0,   654,   655,   651,   652,
     1496     504,   503,   298,     0,   721,   298,   726,   299,   298,   669,
     1497     712,   668,     2,   298,     0,     0,     0,     0,     0,     0,
     1498       0,     0,   690,     0,   676,   627,   643,   677,     2,   623,
     1499     630,   438,   625,   626,   439,     2,   637,   646,   639,   640,
     1500     673,   674,   688,   716,   720,   718,   757,   272,     2,   752,
     1501       2,   429,   724,   729,   430,     3,   408,     3,     3,     3,
     1502     460,     0,     0,     2,   474,   471,   756,     0,   467,     2,
     1503     470,   473,     0,   298,   247,   269,     3,   276,   278,     0,
     1504     460,     2,   578,   579,     2,   617,   618,     0,   666,   544,
     1505       3,   351,   350,   353,   352,   298,   545,     0,   546,   378,
     1506       0,     0,   298,     0,     0,   699,   388,   391,   395,   554,
     1507     395,   394,   387,   380,   554,   382,   385,   298,   405,   399,
     1508     111,   406,   755,     0,     0,   443,   245,     0,     0,     3,
     1509       2,   675,   436,     0,   534,     0,   757,   758,   496,     0,
     1510     298,   298,   298,     0,   558,   560,   135,     0,     0,   220,
     1511       0,     0,     0,   228,   229,    65,     0,    67,    70,    71,
     1512       0,   133,     0,     0,     0,   700,   701,   697,   698,   465,
     1513      79,   115,   130,     3,   114,     0,    28,    40,     3,     0,
     1514      37,   110,     0,     3,   657,   661,   664,   656,     3,   599,
     1515     723,   728,     2,    72,   298,     3,     3,   299,     0,     3,
     1516     629,   633,   636,   645,   679,   683,   686,   298,     3,   628,
     1517     644,   678,   298,   298,   431,   298,   298,     0,     0,     0,
     1518       0,   261,   111,     0,     3,     3,     0,   468,     0,   464,
     1519       0,     0,   250,   298,     0,     0,   134,     0,     0,     0,
     1520       0,     0,   134,     0,     0,   114,   114,    21,     0,     0,
     1521       3,   136,   137,     2,   148,   138,   139,   140,   141,   142,
     1522     143,   150,   152,     0,     0,     0,   289,   298,   298,   554,
     1523       0,   547,   298,   381,   383,     0,   397,   700,   392,   396,
     1524     393,   386,   390,   373,   404,     0,   586,     2,   671,   670,
     1525       0,   676,     2,   488,   490,   511,     3,   519,   520,     0,
     1526       2,   515,     3,     3,     0,     0,   563,   227,     0,     0,
     1527       0,   227,     0,     0,   703,   707,   709,   702,   755,   114,
     1528       0,     3,    54,     0,    54,    54,     3,    42,    44,    39,
     1529       0,     3,   109,     0,     2,   659,   660,     0,   298,     0,
     1530       0,     0,     3,   645,     0,     2,   631,   632,     2,   647,
     1531       2,   681,   682,     0,     0,    72,     0,     3,     3,     3,
     1532       3,   416,   415,   419,   754,     2,     2,   753,     0,     0,
     1533       0,     0,     3,   469,     3,     0,   248,   151,     3,   299,
     1534     298,     0,     0,     0,     0,     2,     0,   196,     0,   194,
     1535       0,     0,     0,     0,     0,     0,     0,   554,     0,   156,
     1536     153,   298,     0,     0,   271,   283,     3,     3,   553,   620,
     1537     374,   389,   402,   298,   270,   298,     0,   522,   499,   298,
     1538       0,     0,   498,   513,     0,     0,     0,   221,     0,   230,
     1539      68,     2,   705,   706,     0,   131,   128,     0,    51,     2,
     1540      45,    52,    53,     0,     0,     0,     0,    27,     0,   662,
     1541     298,   587,   731,   732,   733,     0,   684,   298,   298,   298,
     1542       3,     3,     0,   692,     0,     0,     0,     0,   298,   298,
     1543       3,   551,   475,   476,     0,   251,   299,     0,     0,     0,
     1544       0,   298,   197,   195,   192,     0,   198,     0,     0,     0,
     1545       0,   202,   205,   203,   199,     0,   200,   134,    40,   149,
     1546     147,   249,     0,     0,   423,   427,   426,     0,   516,     2,
     1547     517,     2,   518,   512,   298,   233,     0,   231,     0,   233,
     1548     298,    36,   129,    55,     0,    43,    33,     2,    49,     2,
     1549      47,    30,     3,   734,     3,     3,     3,     0,     0,   691,
     1550     693,   634,   648,   273,     2,   413,     3,   412,     0,   478,
     1551     134,     0,     0,   134,     3,     0,   134,   193,     0,     2,
     1552       2,   214,   204,     0,     0,     0,   145,     0,   581,   621,
     1553       2,     0,     0,     2,   234,     0,     0,   222,     0,     3,
     1554       3,     0,     0,     0,     0,     0,     0,   694,   695,   298,
     1555       0,   477,   157,     0,     0,     2,   170,   134,   159,     0,
     1556     187,     0,   134,     0,     2,   161,     0,     2,     0,     2,
     1557       2,     2,   201,    37,   298,   521,   523,   514,     0,     0,
     1558       0,     0,     0,     0,     3,     3,   663,   635,   649,   685,
     1559     417,   134,   163,   166,     0,   165,   169,     3,   172,   171,
     1560       0,   134,   189,   134,     3,     0,   298,     0,   298,     0,
     1561       2,     0,     2,   144,     2,   235,   236,     0,   232,   223,
     1562     708,    46,     0,     0,   158,     0,     0,   168,   238,   173,
     1563       2,   240,   188,     0,   191,   177,   206,     3,   215,   219,
     1564     208,     3,     0,   298,     0,   298,     0,     0,     0,    50,
     1565      48,   164,   167,   134,     0,   174,   298,   134,   134,     0,
     1566     178,     0,     0,   699,   216,   217,   218,     0,   207,     3,
     1567     209,     3,   298,   224,   237,   154,   175,   160,   134,   241,
     1568     190,   185,   183,   179,   162,   134,     0,   700,     0,     0,
     1569       0,     0,   155,   176,   186,   180,   184,   183,   181,     3,
     1570       3,     0,     0,   500,   182,   210,   212,     3,     3,   211,
     1571     213
    15691572};
    15701573
     
    15721575static const yytype_int16 yydefgoto[] =
    15731576{
    1574       -1,   802,   466,   303,    49,   135,   136,   304,   305,   306,
    1575      307,   308,   754,   755,  1115,  1116,  1117,  1227,   309,   380,
     1577      -1,   803,   466,   303,    49,   135,   136,   304,   305,   306,
     1578     307,   308,   755,   756,  1116,  1117,  1118,  1228,   309,   380,
    15761579     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
    1577      321,   322,   323,  1012,   516,   961,   545,   325,   962,   935,
    1578     1038,  1504,  1040,  1041,  1042,  1043,  1505,  1044,  1045,  1422,
    1579     1423,  1385,  1386,  1387,  1483,  1484,  1488,  1489,  1524,  1525,
    1580     1046,  1344,  1047,  1048,  1280,  1281,  1282,  1466,  1049,   147,
    1581      941,   942,   943,  1364,  1446,  1458,  1459,   467,   468,   862,
    1582      863,  1020,    53,    54,    55,    56,    57,   347,   159,    60,
     1580     321,   322,   323,  1013,   517,   962,   546,   325,   963,   936,
     1581    1039,  1505,  1041,  1042,  1043,  1044,  1506,  1045,  1046,  1423,
     1582    1424,  1386,  1387,  1388,  1484,  1485,  1489,  1490,  1525,  1526,
     1583    1047,  1345,  1048,  1049,  1281,  1282,  1283,  1467,  1050,   147,
     1584     942,   943,   944,  1365,  1447,  1459,  1460,   467,   468,   863,
     1585     864,  1021,    53,    54,    55,    56,    57,   347,   159,    60,
    15831586      61,    62,    63,    64,   349,    66,    67,   265,    69,    70,
    15841587     275,   351,   352,    73,    74,    75,   120,    77,   205,   354,
    1585      121,    80,   122,    82,    83,   453,    84,   452,   681,   682,
    1586      683,   895,  1067,   896,    85,    86,   456,   454,   689,   844,
    1587      845,   357,   358,   692,   693,   694,   359,   360,   361,   362,
    1588      464,   178,   137,   138,   520,   327,   171,   638,   639,   640,
    1589      641,   642,    87,   123,    89,   487,   488,   927,   489,   278,
    1590      493,   328,    90,   139,   140,    91,  1303,  1089,  1090,  1091,
    1591     1092,    92,    93,   710,    94,   274,    95,    96,   188,  1014,
    1592      672,   411,   127,    97,   499,   500,   501,   189,   269,   191,
     1588     121,    80,   122,    82,    83,   453,    84,   452,   682,   683,
     1589     684,   896,  1068,   897,    85,    86,   456,   454,   690,   845,
     1590     846,   357,   358,   693,   694,   695,   359,   360,   361,   362,
     1591     464,   178,   137,   138,   521,   327,   171,   639,   640,   641,
     1592     642,   643,    87,   123,    89,   488,   489,   928,   490,   278,
     1593     494,   328,    90,   139,   140,    91,  1304,  1090,  1091,  1092,
     1594    1093,    92,    93,   711,    94,   274,    95,    96,   188,  1015,
     1595     673,   411,   127,    97,   500,   501,   502,   189,   269,   191,
    15931596     192,   193,   270,   100,   101,   102,   103,   104,   105,   106,
    1594      196,   197,   198,   199,   200,   814,   600,   601,   602,   603,
    1595      201,   605,   606,   607,   569,   570,   571,   572,   744,   107,
    1596      609,   610,   611,   612,   613,   614,   955,   746,   747,   748,
    1597      590,   365,   366,   367,   368,   329,   165,   109,   110,   111,
    1598      370,   687,   717
     1597     196,   197,   198,   199,   200,   815,   601,   602,   603,   604,
     1598     201,   606,   607,   608,   570,   571,   572,   573,   745,   107,
     1599     610,   611,   612,   613,   614,   615,   956,   747,   748,   749,
     1600     591,   365,   366,   367,   368,   329,   165,   109,   110,   111,
     1601     370,   688,   718
    15991602};
    16001603
    16011604/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    16021605   STATE-NUM.  */
    1603 #define YYPACT_NINF -1267
     1606#define YYPACT_NINF -1263
    16041607static const yytype_int16 yypact[] =
    16051608{
    1606     5235,  8510, -1267,   -14, -1267, -1267, -1267, -1267, -1267, -1267,
    1607    -1267,   -27, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
    1608    -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,    84,    84,
    1609       84,  1541,   905,   123,  6677,   163, -1267, -1267, -1267, -1267,
    1610    -1267,   157, -1267, -1267, -1267,  1043,    81, -1267, -1267, -1267,
    1611    -1267,  4048, -1267, -1267, -1267, -1267,   225,   198, -1267,  1956,
    1612    -1267, -1267, -1267, -1267,   217,  1716,   371,    37,  6797, -1267,
    1613    -1267,  4048,   829, -1267, -1267,  1101,   380,  3172,   661,   839,
    1614     1101,   977, -1267, -1267,  1289,   340, -1267,  1101,  1140, -1267,
    1615      273, -1267,   439,   447, -1267, -1267, -1267, -1267,   337,   198,
    1616       84, -1267,    84, -1267, -1267, -1267, -1267,  7269,  1956, -1267,
    1617    -1267,  1956, -1267,   325, -1267,  7582, -1267, -1267,  2178,  8744,
    1618    -1267,   675,   675,   675, -1267, -1267, -1267,    84, -1267, -1267,
    1619    -1267,   360,   395,   436, -1267, -1267, -1267,   466, -1267, -1267,
    1620    -1267, -1267, -1267,   503,   515, -1267, -1267,   272,  8119,  1675,
    1621      307,   370,   377,   524,   565,   568,   580,  8828,  6307,   594,
    1622    -1267,  4677, -1267, -1267, -1267, -1267,   613, -1267,   271,  9583,
    1623     9583, -1267,   610,   339, -1267, -1267, -1267, -1267,   618,   379,
    1624      421,   468,    84,   603, -1267, -1267,  1716,  2591,   687, -1267,
    1625       90, -1267,    84,    84,   198, -1267, -1267,    91, -1267,    84,
    1626       84, -1267,  2973,   652,   657,   675,  6831, -1267, -1267, -1267,
    1627     4048, -1267, -1267,  1101, -1267, -1267, -1267,   198, -1267,  1956,
    1628      225, -1267,  7235, -1267,   675,   675,   675,   198, -1267,  1541,
    1629    -1267,  3826, -1267, -1267,   642,   675, -1267,   675, -1267,   157,
    1630     8119, -1267,   665, -1267,   905,   685,   675, -1267,  1541,   689,
    1631      710, -1267,  6677,   291, -1267, -1267, -1267,  8477, -1267, -1267,
    1632     4354, -1267,   687,     8,  9760,  8744,  2178,  2973, -1267,   101,
    1633    -1267, -1267,  7582,  1956,   740, 10515, -1267, -1267,   378, -1267,
    1634    10178,   730,   705,  9819,   773,  9760,  9878, -1267,   794, -1267,
    1635    -1267, -1267, -1267, -1267, -1267,  9937,  9937,  7885,    81, -1267,
    1636    -1267, -1267, -1267, -1267, -1267, -1267,   834, -1267,  1184,  2546,
    1637     8119,  9760, -1267,   525,   415,   844,   338,   853,   823,   831,
    1638      841,   886,    56, -1267, -1267, -1267,   518, -1267,   528, -1267,
    1639    -1267,  1675, -1267, -1267,   456,   900, -1267,   490,   900, -1267,
    1640    -1267,  7269, -1267,   940,   946,  8236, -1267, -1267,   536,  1525,
    1641     7667,  6831,  1101, -1267,  1101,   675,   675, -1267, -1267, -1267,
    1642    -1267, -1267, -1267,   675,  7269,  1956, -1267, -1267,  8828,  1786,
    1643    -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,  9524,
    1644     9760, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
    1645    -1267, -1267, -1267, -1267, -1267,  2178, -1267,   446,   945,   961,
    1646      968,   800,   973,   976,   981,  2591, -1267, -1267,   939,   225,
    1647      982, -1267, -1267,   987, -1267, -1267, -1267,  8477, -1267, -1267,
    1648    -1267, -1267, -1267,  2973, -1267,  8119,  8119, -1267,   675,  2178,
    1649    10547,  7742, -1267, -1267, -1267, -1267,  8477,     8, -1267, -1267,
    1650     1101,   198, -1267, -1267,  8477, -1267,  5404, -1267, -1267,   675,
    1651      675,   579,  8594,   994,   993,   983,   998,   675, -1267, -1267,
    1652    -1267, -1267,  9019, -1267,   616, 10212, -1267,   198,  1004, -1267,
    1653     2178, 10298,  9996, -1267, -1267, -1267, -1267,   843,  2973, -1267,
    1654     7742,   687,  5806, -1267, -1267, -1267,  1900,   626,   990,   905,
    1655    10515,  1647,  7582, -1267, 10515, -1267, -1267, -1267, -1267,   627,
    1656    -1267,  1013,   705,   154,  7885, -1267,  8860, -1267, -1267,  7885,
    1657    -1267,  8002,  7885, -1267, -1267,    81, -1267,   640,  1015,   658,
    1658     1021, -1267, -1267,  6061, -1267, -1267,   315, -1267, -1267,  9760,
    1659    -1267,   368,  9760, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
    1660    -1267, -1267, -1267, -1267, -1267,  9760, -1267, -1267,  9760,  9760,
    1661     9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,
    1662     9760,  9760,  9760,  9760,  9760,  9760,  3432,   518,  1212, -1267,
    1663    -1267,    84,    84, -1267, -1267,  8119, -1267, -1267,   987,   291,
    1664    -1267,   987, 10055, -1267, -1267,  8828,  6061,  1020, -1267,  8744,
    1665    -1267, -1267,   613, -1267,  1023,  1793,  1025,  1950,   136,   990,
    1666    -1267,    84,    84,   990,   407, -1267,    84,    84,   987, -1267,
    1667    -1267,    84,    84, -1267,   900,  8944,  1956, 10447,   356,   541,
    1668     8944, -1267,  4354, -1267,   990, -1267,  7269, -1267,   126,  7354,
    1669     7354,  1956,  9642,  1003, -1267,   789,  1008,  1010, -1267,  1026,
    1670     9583,   449, -1267,  1114,  1956,  7354,   291,  2178,   291,   687,
    1671      707,   900, -1267, -1267,   766,   900, -1267, -1267, -1267,   705,
    1672    -1267,   900,   198,  9019, -1267,   643,  1041,   647,  1045, -1267,
    1673      940,   198, -1267, -1267,  8477,   198,  1042,  8860,    81, -1267,
    1674     1307, -1267,   471,   481,   905, -1267,   905,  1047,  9760, -1267,
    1675      905, 10447, -1267, -1267,  1056, -1267, -1267, -1267,   291, -1267,
    1676    10373,   946, -1267,  7354,   694,  7667, -1267, -1267,   613,  1052,
    1677     1057,  1900,  2267, -1267, -1267, 10515,  9760, -1267, -1267,  1055,
    1678    -1267, -1267,  1048, -1267,  1055,  1063, 10178,  9760,  1046,  1051,
    1679      117,  1065,  1062,  1070,  1074, -1267,  1081,  1082,  6061, -1267,
    1680     9760, -1267,   658,  1520, -1267, -1267, -1267,    84,    84,  9701,
    1681     9760,  1077, -1267, -1267,   679, -1267,  9760, -1267, -1267,   821,
    1682    -1267, -1267, -1267, -1267,   525,   525,   415,   415,   844,   844,
    1683      844,   844,   338,   338,   853,   823,   831,   841,   886,  9760,
    1684      397,  9019,  1085,  1086,  1087,  1212, -1267, -1267, -1267, -1267,
    1685    -1267,  9019,   691, -1267,  7269, -1267,  6430,  8353, -1267, -1267,
    1686    -1267,  1793,  9019,   856,  1089,  1091,  1092,  1093,  1096,  1098,
    1687     1104, -1267,  3291,  1950, -1267, -1267, -1267, -1267, -1267, -1267,
    1688    -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
    1689    -1267,   987, -1267, -1267, -1267,   990, -1267, -1267, -1267, -1267,
    1690    -1267, -1267, -1267, -1267, -1267, -1267,  1105,  1106, -1267,   225,
    1691     1077,  9642, -1267, -1267, -1267,  9524,  1108, -1267, -1267, -1267,
    1692    -1267,   905,  5524,  1197, -1267, -1267, -1267, -1267,  1095,   225,
    1693    -1267, -1267,   987, -1267, -1267,   987,  1117,   987, -1267, -1267,
    1694    -1267, -1267, -1267, -1267,  6307, -1267,   198, -1267, -1267,   505,
    1695      507,  6307,  1549,  9760,  2098, -1267, -1267,  1099,    38,  1099,
    1696    -1267,   905, -1267,    84, -1267, -1267,  8627,   983, -1267, -1267,
    1697    -1267,   993,  1120,  1115, -1267, -1267,  1122,  1123, -1267,   694,
    1698     1698, -1267,   576, -1267,  2267,   990, -1267, -1267,  1126, 10515,
    1699     7582,  8119,  1129, -1267, -1267,  1125,  1135,  1118, -1267,  9760,
    1700     1141,   190,  1136, -1267,  1142,   291,  1142, -1267, -1267,  1142,
    1701    -1267,  1147,  1152,  1154,  1520, -1267, -1267, -1267,  9524, -1267,
    1702    -1267, -1267,  1163,  9760,   986, -1267,  9760, -1267,   986, -1267,
    1703    -1267,  9760, -1267,   894,   900, -1267, -1267, -1267, -1267, -1267,
    1704    -1267, -1267,   946,  8236, -1267, -1267,  6553,  1171, -1267,   898,
    1705      900, -1267,   920,   936,   900, -1267,   675,  7112, -1267, -1267,
    1706    -1267,  9019,  9019, -1267,  7742,  7742,  1172,  1167,  1168,  1175,
    1707    -1267,   670,   111,  1077, -1267,   986, -1267,  9583, -1267,  9760,
    1708      540, -1267,  5932,  1180,  1181,  9465,  1182,  1185,    -8,    40,
    1709       86,  9760,  1191,   198,  9760,  9760,  1177,   585,  1169, -1267,
    1710    -1267, -1267,  1187, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
    1711    -1267, -1267,   905,  1195,  9760, -1267,  9019,  9019,    84,  1201,
    1712    -1267,  8711, -1267, -1267,   862, -1267,  2098, -1267, -1267, -1267,
    1713    -1267,  1307, -1267, -1267,  1198, -1267, -1267, -1267, -1267,  1202,
    1714     1698, -1267, -1267,  1196, -1267,  1055, -1267, -1267,  2178,  1210,
    1715    -1267, -1267, -1267,   704,  1217, -1267,   117,  1214,  9760,  1200,
    1716      117,   117,  1224,   950,   900, -1267, -1267,  1026,  9760,  1230,
    1717     1163, -1267,   943, -1267, -1267,  1220, -1267,    78, -1267,  1231,
    1718     1220, -1267,  1234, -1267, -1267,   987,  1236,  6184,  1235,  1239,
    1719     1241, -1267, -1267,  1238, -1267, -1267,   987, -1267, -1267, -1267,
    1720    -1267,   987,  9760,  9760,   946,  1243, -1267, -1267, -1267, -1267,
    1721    -1267, -1267, -1267, -1267, -1267, -1267, -1267,  9760,  9760,  1244,
    1722     1248,  1220, -1267, -1267,   905, -1267, -1267, -1267,  7070,  7582,
    1723     9760,  9760,  1318,  9760, -1267,  1233, -1267,  1246, -1267,  1250,
    1724     9760,  1254,  9760,   938,  1255,    47,    84,  1805, -1267, -1267,
    1725     5524,  1256,   554, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
    1726    -1267, -1267,  9281, -1267,  7742,  1260, -1267, -1267,  7582,   555,
    1727      561, -1267,  1273,  1262,   705,  1283, -1267,   256, -1267, -1267,
    1728    -1267, -1267,   987,  1282, -1267, -1267,  1288,  1321, -1267, -1267,
    1729     1321,  1321,   986,  1292,  1699,  1866, -1267,  1295, -1267,  9019,
    1730    -1267, -1267, -1267, -1267,  1298, -1267,  9019,  9019,  9019, -1267,
    1731    -1267,  1300, -1267,  1301,  1310,  1311,   725,  7429,  7548, -1267,
    1732    -1267, -1267, -1267,  1305, -1267,  7817,   709,   755,  1317,   758,
    1733     5667, -1267, -1267, -1267,   582, -1267,   768,  1319,  1323,   198,
    1734     1369,   935, -1267, -1267,  9760, -1267,  9465,  9760, -1267, -1267,
    1735    -1267,  1320,  1326, -1267, -1267, -1267,  1324, -1267, -1267, -1267,
    1736    -1267, -1267, -1267,  7582,   705,  1330, -1267,  1313,   705,  9019,
    1737    -1267, -1267, -1267,   986, -1267, -1267, -1267, -1267, -1267, -1267,
    1738    -1267, -1267, -1267, -1267, -1267, -1267,  1337,  1340, -1267, -1267,
    1739    -1267, -1267, -1267, -1267, -1267,  1343, -1267,  1342, -1267,  9465,
    1740      276,  9760,  9465, -1267,  1346,  9760, -1267,   281,  1361,  1363,
    1741    -1267, -1267,  1355,  1356,  1339, -1267,   901, -1267, -1267, -1267,
    1742     1956,  2178,  1347, -1267,   401,  9760, -1267,   783, -1267,  1220,
    1743      986,   986,  1362,  1364,  1365,  1367, -1267, -1267,  7742,  1357,
    1744    -1267,  1438,  9760,  1352, -1267, -1267,  9375, -1267,   791, -1267,
    1745     1360,  9465,  1368, -1267, -1267,  1386, -1267,  1389, -1267,  1407,
    1746     1409, -1267,  1376,  7582, -1267, -1267, -1267,   705,   291,  1403,
    1747     1382,  1405,  1404,  1220,  1220, -1267, -1267, -1267, -1267, -1267,
    1748     9465,   240, -1267,   474, -1267, -1267,  6917, -1267, -1267,  1385,
    1749     9760, -1267,  9760,  6917,   198,  8860,   198,  8860,  1410, -1267,
    1750     1411, -1267, -1267,  1408, -1267, -1267,   802, -1267, -1267, -1267,
    1751    -1267,  1422,  1423, -1267,  9760,  9760, -1267, -1267,   979,    59,
    1752    -1267, -1267,  1390, -1267,   979, -1267, -1267,  2042,   291, -1267,
    1753    -1267,   198,  8860,   198,  8860,  1427,  1412,   291, -1267, -1267,
    1754    -1267, -1267,  9375,  1425,   979,  6995,  9760,  9285,  1426,   979,
    1755     1435,  2042,  2360, -1267, -1267, -1267,  1436, -1267, -1267, -1267,
    1756    -1267,  8119, -1267, -1267, -1267,  9148, -1267,  9375, -1267, -1267,
    1757     1416,  9058, -1267, -1267,  9285,   198,  2360,   198,  1441,  1445,
    1758      814, -1267,  9148, -1267, -1267, -1267,  9058, -1267, -1267, -1267,
    1759      198,   198, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267
     1609    6864,  4432, -1263,    10, -1263, -1263, -1263, -1263, -1263, -1263,
     1610   -1263,   -12, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,
     1611   -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,    67,    67,
     1612      67,   564,   950,    20,  6985,   166, -1263, -1263, -1263, -1263,
     1613   -1263,    71, -1263, -1263, -1263,  1431,   111, -1263, -1263, -1263,
     1614   -1263,  3253, -1263, -1263, -1263, -1263,    83,   193, -1263,  1119,
     1615   -1263, -1263, -1263, -1263,   213,  1691,   349,    98,  7106, -1263,
     1616   -1263,  3253,   817, -1263, -1263,   596,   492,  5210,  1011,  1044,
     1617     596,  1122, -1263, -1263,   838,   957, -1263,   596,  1203, -1263,
     1618     236, -1263,   406,   508, -1263, -1263, -1263, -1263,   429,   193,
     1619      67, -1263,    67, -1263, -1263, -1263, -1263,  4697,  1119, -1263,
     1620   -1263,  1119, -1263,   434, -1263,  7806, -1263, -1263,  2149,  8896,
     1621   -1263,   644,   644,   644, -1263, -1263, -1263,    67, -1263, -1263,
     1622   -1263,   436,   458,   468, -1263, -1263, -1263,   480, -1263, -1263,
     1623   -1263, -1263, -1263,   498,   503, -1263, -1263,    77,  8347,  2436,
     1624     255,   519,   522,   535,   547,   585,   603,  8929,  6488,   597,
     1625   -1263,  4574, -1263, -1263, -1263, -1263,   608, -1263,   -37,  5487,
     1626    5487, -1263,   539,   241, -1263, -1263, -1263, -1263,   624,   287,
     1627     313,   327,    67,   621, -1263, -1263,  1691,  2813,   734, -1263,
     1628     120, -1263,    67,    67,   193, -1263, -1263,   204, -1263,    67,
     1629      67, -1263,  2931,   664,   675,   644,  6274, -1263, -1263, -1263,
     1630    3253, -1263, -1263,   596, -1263, -1263, -1263,   193, -1263,  1119,
     1631      83, -1263,  7457, -1263,   644,   644,   644,   193, -1263,   564,
     1632   -1263,  3379, -1263, -1263,   671,   644, -1263,   644, -1263,    71,
     1633    8347, -1263,   715, -1263,   950,   724,   644, -1263,   564,   704,
     1634     714, -1263,  6985,   544, -1263, -1263, -1263,  8708, -1263, -1263,
     1635    8263, -1263,   734,   123,  9697,  8896,  2149,  2931, -1263,   205,
     1636   -1263, -1263,  7806,  1119,   738,  5343, -1263, -1263,   211, -1263,
     1637   10116,   739,   650,  9756,   757,  9697,  9815, -1263,   763, -1263,
     1638   -1263, -1263, -1263, -1263, -1263,  9874,  9874,  8111,   111, -1263,
     1639   -1263, -1263, -1263, -1263, -1263, -1263,   795, -1263,  1259,  2219,
     1640    8347,  9697, -1263,   496,   315,   375,   430,   719,   760,   770,
     1641     771,   807,   114, -1263, -1263, -1263,   814, -1263,   402, -1263,
     1642   -1263,  2436, -1263, -1263,   104,   792, -1263,   372,   792, -1263,
     1643   -1263,  4697, -1263,   802,   812,  8465, -1263, -1263,   721,  1811,
     1644    7892,  6274,   596, -1263,   596,   644,   644, -1263, -1263, -1263,
     1645   -1263, -1263, -1263,   644,  4697,  1119, -1263, -1263,  8929,  1749,
     1646   -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,  4858,
     1647    9697, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,
     1648   -1263, -1263, -1263, -1263, -1263,  2149, -1263,   677,   823,   827,
     1649     829,   862,   831,   834,   836,  2813, -1263, -1263,   842,    83,
     1650     841, -1263, -1263,   837, -1263, -1263, -1263,  8708, -1263, -1263,
     1651   -1263, -1263, -1263,  2931, -1263,  8347,  8347, -1263,   644,  2149,
     1652    6398,  7967, -1263, -1263, -1263, -1263,  8708,   123, -1263, -1263,
     1653     596,   193, -1263, -1263,  8708, -1263,  5038, -1263, -1263,   644,
     1654     644,   474,  8741,   848,   849,   824,   850,   644, -1263, -1263,
     1655   -1263, -1263,  9167, -1263,   507, 10150, -1263,   193,   853, -1263,
     1656    2149, 10237,  9933, -1263, -1263, -1263, -1263,   898,  2931, -1263,
     1657    7967,   734,  5424, -1263, -1263, -1263, -1263,  1676,   514,   844,
     1658     950,  5343,  1027,  7806, -1263,  5343, -1263, -1263, -1263, -1263,
     1659     545, -1263,   859,   650,   244,  8111, -1263,  9014, -1263, -1263,
     1660    8111, -1263,  8229,  8111, -1263, -1263,   111, -1263,   548,   867,
     1661     926,   872, -1263, -1263,  6240, -1263, -1263,   387, -1263, -1263,
     1662    9697, -1263,   467,  9697, -1263, -1263, -1263, -1263, -1263, -1263,
     1663   -1263, -1263, -1263, -1263, -1263, -1263,  9697, -1263, -1263,  9697,
     1664    9697,  9697,  9697,  9697,  9697,  9697,  9697,  9697,  9697,  9697,
     1665    9697,  9697,  9697,  9697,  9697,  9697,  9697,  4047,   814,  1636,
     1666   -1263, -1263,    67,    67, -1263, -1263,  8347, -1263, -1263,   837,
     1667     544, -1263,   837,  9992, -1263, -1263,  8929,  6240,   873, -1263,
     1668    8896, -1263, -1263,   608, -1263,   880,   787,   882,  2301,   259,
     1669     844, -1263,    67,    67,   844,   286, -1263,    67,    67,   837,
     1670   -1263, -1263,    67,    67, -1263,   792,  9047,  1119, 10388,   450,
     1671     493,  9047, -1263,  8263, -1263,   844, -1263,  4697, -1263,   -35,
     1672    7577,  7577,  1119,  5632,   869, -1263,   326,   874,   889, -1263,
     1673     881,  5487,   342, -1263,   977,  1119,  7577,   544,  2149,   544,
     1674     734,   382,   792, -1263, -1263,   405,   792, -1263, -1263, -1263,
     1675     650, -1263,   792,   193,  9167, -1263,   570,   918,   602,   921,
     1676   -1263,   802,   193, -1263, -1263,  8708,   193,   940,  9014,   111,
     1677   -1263,  1310, -1263,   353,   395,   950, -1263,   950,   941,  9697,
     1678   -1263,   950, 10388, -1263, -1263,   948, -1263, -1263, -1263,   544,
     1679   -1263, 10313,   812, -1263,  7577,   987,  7892, -1263, -1263,   608,
     1680     955,   960,  1676,  3085, -1263, -1263,  5343,  9697, -1263, -1263,
     1681     947, -1263, -1263,   956, -1263,   947,   967, 10116,  9697,   949,
     1682     954,   180,   972,   975,   984,   993, -1263,  1002,  1005,  6240,
     1683   -1263,  9697, -1263,   926,  1965, -1263, -1263, -1263,    67,    67,
     1684    9638,  9697,   992, -1263, -1263,   615, -1263,  9697, -1263, -1263,
     1685     711, -1263, -1263, -1263, -1263,   496,   496,   315,   315,   375,
     1686     375,   375,   375,   430,   430,   719,   760,   770,   771,   807,
     1687    9697,   330,  9167,  1006,  1007,  1008,  1636, -1263, -1263, -1263,
     1688   -1263, -1263,  9167,   620, -1263,  4697, -1263,  6612,  8583, -1263,
     1689   -1263, -1263,   787,  9167,   937,  1012,  1014,  1022,  1023,  1024,
     1690    1029,  1036, -1263,  3424,  2301, -1263, -1263, -1263, -1263, -1263,
     1691   -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,
     1692   -1263, -1263,   837, -1263, -1263, -1263,   844, -1263, -1263, -1263,
     1693   -1263, -1263, -1263, -1263, -1263, -1263, -1263,  1039,  1043, -1263,
     1694      83,   992,  5632, -1263, -1263, -1263,  4858,  1042, -1263, -1263,
     1695   -1263, -1263,   950,  5809,  1095, -1263, -1263, -1263, -1263,  1030,
     1696      83, -1263, -1263,   837, -1263, -1263,   837,  1048,   837, -1263,
     1697   -1263, -1263, -1263, -1263, -1263,  6488, -1263,   193, -1263, -1263,
     1698     407,   410,  6488,  2038,  9697,  2697, -1263, -1263,  1037,    53,
     1699    1037, -1263,   950, -1263,    67, -1263, -1263,  8781,   824, -1263,
     1700   -1263, -1263,   849,  1059,  1021, -1263, -1263,  1062,  1063, -1263,
     1701     987,  2296, -1263,   528, -1263,  3085,   844, -1263, -1263,  1071,
     1702    5343,  7806,  8347,  1073, -1263, -1263,  1074,  1084,  1066, -1263,
     1703    9697,  1088,   282,  1083, -1263,  1091,   544,  1091, -1263, -1263,
     1704    1091, -1263,  1097,  1105,  1115,  1965, -1263, -1263, -1263,  4858,
     1705   -1263, -1263, -1263,  1113,  9697,   605, -1263,  9697, -1263,   605,
     1706   -1263, -1263,  9697, -1263,   424,   792, -1263, -1263, -1263, -1263,
     1707   -1263, -1263, -1263,   812,  8465, -1263, -1263,  6736,  1120, -1263,
     1708     568,   792, -1263,   594,   631,   792, -1263,   644,  3969, -1263,
     1709   -1263, -1263,  9167,  9167, -1263,  7967,  7967,  1123,  1118,  1127,
     1710    1125, -1263,   558,   212,   992, -1263,   605, -1263,  5487, -1263,
     1711    9697,   420, -1263,  6116,  1129,  1135,  9579,  1136,  1137,   146,
     1712     206,   181,  9697,  1140,   193,  9697,  9697,  1106,   305,  1124,
     1713   -1263, -1263, -1263,  1143, -1263, -1263, -1263, -1263, -1263, -1263,
     1714   -1263, -1263, -1263,   950,  1141,  9697, -1263,  9167,  9167,    67,
     1715    1150, -1263,  8856, -1263, -1263,   722, -1263,  2697, -1263, -1263,
     1716   -1263, -1263,  1310, -1263, -1263,  1148, -1263, -1263, -1263, -1263,
     1717    1154,  2296, -1263, -1263,  1139, -1263,   947, -1263, -1263,  2149,
     1718    1158, -1263, -1263, -1263,   627,  1151, -1263,   180,  1138,  9697,
     1719    1146,   180,   180,  1165,   653,   792, -1263, -1263,   881,  9697,
     1720    1164,  1113, -1263,  1068, -1263, -1263,  1163, -1263,   219, -1263,
     1721    1168,  1163, -1263,  1171, -1263, -1263,   837,  1173,  6364,  1172,
     1722    1175,  1177, -1263, -1263,  1180, -1263, -1263,   837, -1263, -1263,
     1723   -1263, -1263,   837,  9697,  9697,   812,  1179, -1263, -1263, -1263,
     1724   -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,  9697,  9697,
     1725    1182,  1184,  1163, -1263, -1263,   950, -1263, -1263, -1263,  7382,
     1726    7806,  9697,  9697,  1240,  9697, -1263,  1160, -1263,  1170, -1263,
     1727    1174,  9697,  1178,  9697,  1032,  1185,    59,    67,  1380, -1263,
     1728   -1263,  5809,  1189,   442, -1263, -1263, -1263, -1263, -1263, -1263,
     1729   -1263, -1263, -1263,  9395, -1263,  7967,  1190, -1263, -1263,  7806,
     1730     454,   456, -1263,  1197,  1193,   650,  1210, -1263,   295, -1263,
     1731   -1263, -1263, -1263,   837,  1213, -1263, -1263,  1220,  1252, -1263,
     1732   -1263,  1252,  1252,   605,  1222,  1144,  1570, -1263,  1237, -1263,
     1733    9167, -1263, -1263, -1263, -1263,  1238, -1263,  9167,  9167,  9167,
     1734   -1263, -1263,  1239, -1263,  1241,  1242,  1245,   586,  7652,  7772,
     1735   -1263, -1263, -1263, -1263,  1244, -1263,  8042,   635,   640,  1249,
     1736     662,  5981, -1263, -1263, -1263,   460, -1263,   666,  1250,  1251,
     1737     193,  1306,   785, -1263, -1263,  9697, -1263,  9579,  9697, -1263,
     1738   -1263, -1263,  1255,  1257, -1263, -1263, -1263,  1262, -1263, -1263,
     1739   -1263, -1263, -1263, -1263,  7806,   650,  1270, -1263,  1254,   650,
     1740    9167, -1263, -1263, -1263,   605, -1263, -1263, -1263, -1263, -1263,
     1741   -1263, -1263, -1263, -1263, -1263, -1263, -1263,  1278,  1279, -1263,
     1742   -1263, -1263, -1263, -1263, -1263, -1263,  1282, -1263,  1284, -1263,
     1743    9579,    89,  9697,  9579, -1263,  1287,  9697, -1263,   136,  1302,
     1744    1311, -1263, -1263,  1297,  1299,  1280, -1263,   753, -1263, -1263,
     1745   -1263,  1119,  2149,  1300, -1263,   338,  9697, -1263,   667, -1263,
     1746    1163,   605,   605,  1314,  1315,  1320,  1328, -1263, -1263,  7967,
     1747    1304, -1263,  1376,  9697,  1309, -1263, -1263,  9489, -1263,   690,
     1748   -1263,  1313,  9579,  1321, -1263, -1263,  1331, -1263,  1333, -1263,
     1749    1351,  1361, -1263,  1337,  7806, -1263, -1263, -1263,   650,   544,
     1750    1362,  1339,  1365,  1364,  1163,  1163, -1263, -1263, -1263, -1263,
     1751   -1263,  9579,   234, -1263,   427, -1263, -1263,  7227, -1263, -1263,
     1752    1346,  9697, -1263,  9697,  7227,   193,  9014,   193,  9014,  1369,
     1753   -1263,  1370, -1263, -1263,  1367, -1263, -1263,   697, -1263, -1263,
     1754   -1263, -1263,  1371,  1373, -1263,  9697,  9697, -1263, -1263,   839,
     1755      85, -1263, -1263,  1358, -1263,   839, -1263, -1263,  2097,   544,
     1756   -1263, -1263,   193,  9014,   193,  9014,  1387,  1366,   544, -1263,
     1757   -1263, -1263, -1263,  9489,  1384,   839,  7306,  9697,  9399,  1388,
     1758     839,  1392,  2097,  3030, -1263, -1263, -1263,  1399, -1263, -1263,
     1759   -1263, -1263,  8347, -1263, -1263, -1263,  9261, -1263,  9489, -1263,
     1760   -1263,  1378,  9171, -1263, -1263,  9399,   193,  3030,   193,  1401,
     1761    1403,   712, -1263,  9261, -1263, -1263, -1263,  9171, -1263, -1263,
     1762   -1263,   193,   193, -1263, -1263, -1263, -1263, -1263, -1263, -1263,
     1763   -1263
    17601764};
    17611765
     
    17631767static const yytype_int16 yypgoto[] =
    17641768{
    1765    -1267,  4051,  2784, -1267,   133, -1267,  1353,   867,  -240, -1267,
    1766    -1267,   504,  -528,  -489,  -834, -1001, -1267,   -77,  4776,     0,
    1767    -1267,   793,   489,   531,   722,   534,   999,  1001,  1005,  1007,
    1768     1002, -1267,   711,  -584,  4023,  -739, -1267, -1267,   606,  -227,
    1769     -674,  -263, -1267,   335, -1267,   382,  -963, -1267, -1267,   119,
    1770    -1267,  -732, -1049,   228, -1267, -1267, -1267, -1267,    54, -1266,
    1771    -1267, -1267, -1267, -1267, -1267, -1267,   302, -1050,    23, -1267,
    1772     -171, -1267,   482,   277, -1267,   153, -1267,  -355, -1267, -1267,
    1773    -1267,   538,  -612, -1267, -1267,     9,  -990,   219,  2319, -1267,
    1774    -1267, -1267,  -124, -1267,   110,    36,  -188,  1213,  3869, -1267,
    1775    -1267,    12,    61,   970,  1623, -1267,  1495, -1267, -1267,    21,
    1776     1827, -1267,  2153,  1937, -1267, -1267, -1267,  -641, -1267,   911,
    1777      914,   521,   695,   -93, -1267, -1267, -1267,   906,   690,  -521,
    1778    -1267,  -507,  -417,  -420, -1267, -1267,  -914,  -941,  -147,   -54,
    1779     1019,    19, -1267,  2311,   381,  -366,  -185,  -122,   649,   745,
    1780    -1267,   964, -1267,  2435,  1823,  -463,   895, -1267, -1267,   693,
    1781    -1267,  -225, -1267,   103, -1267, -1267, -1267, -1263,   408, -1267,
    1782    -1267, -1267,  1139, -1267,    42, -1267, -1267,  -832,   -94, -1230,
    1783     -162,  2364, -1267,  3117, -1267,   908, -1267,  -103,   120,  -184,
    1784     -183,  -178,     7,   -40,   -39,   -36,  1505,     4,    32,    71,
    1785       92,  -173,  -172,  -170,  -168,  -306,  -510,  -503,  -496,  -559,
    1786     -313,  -498, -1267, -1267,  -514,  1064,  1072,  1076,  1925,  4399,
    1787     -524,  -566,  -556,  -543,  -548, -1267,  -508,  -723,  -722,  -717,
    1788     -582,  -166,  -229, -1267, -1267,   283,   102,     6, -1267,  3380,
    1789      108,  -611,  -462
     1769   -1263,  3947,  2776, -1263,    44, -1263,   887,   695,  -232, -1263,
     1770   -1263,   487,  -523,  -501,  -842,  -960, -1263,  -216,  4593,     0,
     1771   -1263,   122,   359,   368,   437,   403,   964,   965,   963,   966,
     1772     969, -1263,   998,  -607,  4667,  -955, -1263, -1263,   569,  -183,
     1773    -658,   414, -1263,  1406, -1263,   347, -1148, -1263, -1263,    84,
     1774   -1263,  -949, -1074,   191, -1263, -1263, -1263, -1263,    17, -1186,
     1775   -1263, -1263, -1263, -1263, -1263, -1263,   265, -1262,    33, -1263,
     1776    -866, -1263,   445,   246, -1263,   124, -1263,  -320, -1263, -1263,
     1777   -1263,   506,  -835, -1263, -1263,    19,  -980,    55,   606, -1263,
     1778   -1263, -1263,  -220, -1263,   129,  1096,  -190,  1478,  3486, -1263,
     1779   -1263,    96,   144,  1103,  1793, -1263,  1550, -1263, -1263,    27,
     1780    1989, -1263,  2286,  1081, -1263, -1263, -1263,  -632, -1263,   884,
     1781     886,   488,   668,  -575, -1263, -1263, -1263,   875,   659,  -511,
     1782   -1263,  -466,  -248,   801, -1263, -1263,  -959,  -944,  -218,   636,
     1783     989,    92, -1263,   209,   354,  -244,  -203,  -140,   611,   717,
     1784   -1263,   932, -1263,  2427,  1924,  -447,   860, -1263, -1263,   647,
     1785   -1263,  -235, -1263,   189, -1263, -1263, -1263, -1245,   370, -1263,
     1786   -1263, -1263,  1098, -1263,     2, -1263, -1263,  -849,  -115, -1223,
     1787    -150,  2775, -1263,  2462, -1263,   854, -1263,  -127,    40,  -178,
     1788    -174,  -173,     7,   -43,   -41,   -36,  1803,    12,    18,    21,
     1789    -101,  -168,  -162,  -160,  -144,  -317,  -520,  -513,  -497,  -545,
     1790    -300,  -486, -1263, -1263,  -547,  1009,  1026,  1028,  1598,  4212,
     1791    -563,  -557,  -544,  -532,  -458, -1263,  -514,  -722,  -720,  -718,
     1792    -585,  -194,  -291, -1263, -1263,   769,   138,   -88, -1263,  3371,
     1793     239,  -624,  -483
    17901794};
    17911795
     
    17931797   positive, shift that token.  If negative, reduce the rule which
    17941798   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1795 #define YYTABLE_NINF -529
     1799#define YYTABLE_NINF -530
    17961800static const yytype_int16 yytable[] =
    17971801{
    1798       51,   115,   398,   399,   759,   151,   152,    99,   400,   153,
    1799      116,   745,    71,   401,   402,   451,   403,   427,   404,   951,
    1800      952,    78,   734,    52,   268,   953,   409,   719,   856,   808,
    1801     1051,   724,  1167,   833,    51,   438,   604,   118,   815,   809,
    1802     1362,    99,   503,   599,   906,   149,    71,   382,   383,   154,
    1803      819,    51,   810,   936,   786,    78,   826,    52,   162,   666,
    1804      668,    72,   662,   706,  1152,   187,  1175,   203,   210,   124,
    1805      517,    51,   194,   816,   408,   217,   145,   155,   227,    33,
    1806      220,   671,   398,   399,   406,   804,   125,   160,   400,   675,
    1807     1150,  1151,   805,   401,   402,    72,   403,   807,   404,   806,
    1808      473,   475,   108,   108,   910,  -239,  -239,   115,   424,   848,
    1809       65,  1229,  1284,   261,  1177,   115,   156,   204,   267,   272,
    1810       98,   474,   846,   846,   865,    33,   723,   262,  1176,   213,
    1811      263,    33,    33,   469,  1120,   623,   108,   820,   846,   627,
    1812     1443,   823,    33,   259,    65,   736,   151,   152,   310,   149,
    1813      153,   160,  1424,   410,    98,   565,   162,   115,   345,   167,
    1814     1179,   210,   840,   342,   406,   150,   843,  1234,   372,   951,
    1815      952,    98,   900,   108,   146,   953,  1178,    33,  -239,   591,
    1816      713,  1161,   918,  1285,   326,   190,   187,   187,    98,   566,
    1817      154,    98,   177,   340,   162,  1235,   846,   157,   665,   667,
    1818      291,   804,   267,   253,   418,   410,   410,  1180,   805,   790,
    1819       51,  1157,   847,   847,   479,   806,   410,   162,   155,    58,
    1820      117,  1512,   210,   167,   660,  1424,   151,   152,   847,   441,
    1821      153,  1314,   939,  1317,  1319,   808,   144,  1158,   437,   474,
    1822      310,   177,   429,   879,   177,   809,   432,  1061,  1527,   817,
    1823     1050,   596,    51,    58,   999,   819,   330,   156,   810,    99,
    1824      272,   716,   728,  1152,    71,   272,   267,   267,   729,    98,
    1825      148,   976,   115,    78,   162,    52,   326,   517,    78,   407,
    1826     1167,    98,   517,   440,   604,   517,   847,   211,   730,  1000,
    1827      221,   804,   481,   469,   461,  1184,  1185,   310,   805,   498,
    1828     1074,   649,   657,   987,  1099,   806,   397,   190,   432,  1065,
    1829      310,   486,   469,    72,   707,   695,   172,  1152,   434,   886,
    1830      469,   706,  1382,  1383,  1100,   281,   568,  1382,  1383,   664,
    1831       98,   149,   445,   519,   164,   669,   169,   182,   372,   780,
    1832     1454,   115,    98,  1150,  1151,   345,   160,   584,   330,   597,
    1833      615,   458,   177,   808,   108,  1097,   795,  1181,  1051,   407,
    1834      170,   972,    65,   809,   620,   112,  1158,   470,   620,  1224,
    1835     1307,   977,    98,  1003,   202,   657,   810,   583,    43,    44,
    1836      434,   588,   988,  -294,   624,   282,   477,  1470,   628,   112,
    1837     1308,   376,   174,   248,  1384,   267,   816,   842,   164,  1393,
    1838      621,   833,    43,    44,   625,   187,   177,   377,   696,  1482,
    1839     1166,   213,   372,   177,   112,  1487,   141,   142,   167,   876,
    1840      253,   332,  1498,   267,  1500,   310,   310,    43,    44,   267,
    1841      752,   620,   555,   556,   254,  1507,  1167,  1152,    78,   251,
    1842     1514,   439,   112,  1167,  1138,  1140,  1106,  -524,    33,   591,
    1843      253,    98,   115,   593,   591,    43,    44,    78,   244,   386,
    1844      264,   326,   326,  1082,  1419,    78,  1085,   557,   558,   598,
    1845      267,    58,   836,   -12,   706,   387,   837,  1118,   267,  1369,
    1846      620,   177,    51,   757,   333,   372,   712,   869,   680,    99,
    1847      940,   334,   115,   433,    71,  1167,  1223,   658,   177,   389,
    1848      604,   118,   177,    78,   310,    52,   115,   998,  -448,   310,
    1849      491,   310,   310,   492,  1215,   390,   695,   740,   857,   743,
    1850      824,  1407,   596,   345,  1511,   190,   486,   470,   326,   416,
    1851      486,   971,   213,   330,   330,  1408,  1413,  1414,   551,   552,
    1852      519,   391,   519,    72,  1522,   519,   470,   326,   519,  -449,
    1853      469,  1526,   435,   867,   470,   433,  1000,   392,  1106,   253,
    1854      332,   410,   443,   900,   858,   980,   635,   568,   568,   576,
    1855      658,   410,   707,  1259,  1260,   310,   915,   897,  1050,   277,
    1856      521,  1147,  1148,   859,   108,   620,   345,  1149,   393,   615,
    1857      704,   901,    65,   164,  1455,   597,  1343,   597,   797,  1039,
    1858      330,   903,    98,   579,   394,   410,   598,   902,  1456,   696,
    1859       39,   326,   175,   176,    42,   620,   279,   904,   998,   330,
    1860      620,   793,   615,    43,    44,   901,   620,   903,   280,   620,
    1861      620,   567,   518,   410,   695,   835,  1195,  1196,   335,    47,
    1862       48,  1062,   574,  1063,   695,   620,   548,   267,   575,   371,
    1863      849,   832,   549,   550,  1428,   695,   588,   838,  1345,   287,
    1864     1164,   839,   841,   864,  1010,     2,   207,     4,     5,     6,
    1865        7,  1392,    43,    44,  1164,  1298,  1165,   115,   440,   336,
    1866      894,  1300,   337,   330,  1055,     8,     9,    10,    11,    12,
    1867     1290,  1299,   838,   676,   338,    78,  1081,  1301,   512,   575,
    1868      378,    58,   740,   620,   920,   615,  1093,   371,   398,   399,
    1869      706,   712,   712,   680,   400,   803,    33,   598,  1346,   401,
    1870      402,    78,   403,   834,   404,   707,   375,   696,   593,   384,
    1871      697,   388,    37,  1016,    38,   684,   698,   696,   345,   396,
    1872      714,   725,   743,   743,    36,   498,   715,   726,   696,   177,
    1873     1428,   486,   213,   408,   739,  1428,  1462,   880,  1463,  1356,
    1874      740,   882,  1172,   740,   177,   425,   213,   740,   951,   952,
    1875      426,   742,   899,   410,   953,  1428,   673,   177,   448,    47,
    1876       48,  1409,  1428,  -372,   470,   568,  -112,   521,   291,   521,
    1877     -112,   406,   521,   965,   620,   521,   983,    -3,  1421,   966,
    1878      898,   597,   699,  -401,  1068,   978,  1068,   919,  1142,   596,
    1879      470,   698,  1509,   597,  1460,    47,    48,   591,  1211,  1321,
    1880      870,  1460,   410,  1339,   575,   459,  1323,  1324,  1325,   740,
    1881      979,   803,   598,     2,   207,     4,     5,     6,     7,   518,
    1882     1335,  1332,  -295,   502,   518,  1333,   460,   518,   704,     8,
    1883        9,    10,    11,    12,   695,   695,   940,   213,   482,   177,
    1884      940,   940,   310,   112,   229,   141,   142,    50,   114,  1340,
    1885     1480,  1421,  1342,  1508,    71,   740,    43,    44,   740,   873,
    1886       33,   410,  1347,    78,   345,   731,   506,   732,   740,  1368,
    1887      733,   345,   894,   737,   894,  1162,   797,  1410,   114,   114,
    1888       37,    50,    38,  1407,   852,  1429,   115,   511,    36,   695,
    1889      695,   740,    50,   418,   653,   410,  1476,   524,    50,   920,
    1890      920,   803,  1477,    72,   712,  1213,    50,  1039,  1532,  1217,
    1891      115,   310,    50,   598,   575,    50,   553,   554,    50,  1086,
    1892      969,   966,   680,  1266,  1267,   561,  1269,   696,   696,   559,
    1893      560,   114,   114,  1274,   743,  1276,   479,   332,   410,  1494,
    1894      684,   707,   562,   657,   108,   486,  1088,   326,   897,   817,
    1895      332,   596,    65,   563,  1305,    50,   332,   410,    50,   112,
    1896     -296,   141,   142,   345,   564,    50,   407,     8,     9,    10,
    1897       11,    12,    43,    44,  1206,  1352,  1353,   878,  1277,  1278,
    1898     1279,   704,   696,   696,   620,   620,   885,  1123,  1106,   410,
    1899      887,  1134,  1064,   410,   898,   339,    50,   112,    33,   832,
    1900     1402,   966,   310,  1355,  1111,  1382,  1383,  1112,    50,  1113,
    1901       43,    44,   108,  1137,  1169,   596,  1230,  1231,   707,   330,
    1902      764,   765,   230,    78,   598,   231,    36,   440,   235,  1139,
    1903      237,   596,   659,    50,    50,  1294,   585,   246,  1228,   650,
    1904      112,   115,    -3,  1220,  1363,   410,   894,  1111,  1363,    50,
    1905     1112,   894,  1113,    43,    44,   651,  1381,    50,   508,  1389,
    1906      920,    58,   652,    72,   766,   767,    50,   654,   267,    50,
    1907      655,   834,   695,   772,   773,   656,   114,   680,   661,   695,
    1908      695,   695,   258,   546,   547,     2,   207,     4,     5,     6,
    1909        7,   114,   685,   686,  1388,   114,   690,    39,   688,    50,
    1910      114,    42,  -243,  1427,   108,   716,   727,   345,  1431,   741,
    1911       43,    44,   470,    50,    50,   749,   798,   -14,   546,   800,
    1912       50,   811,   -15,  -297,   854,   861,   855,    50,  1295,  1087,
    1913        8,     9,    10,    11,    12,   881,    45,  1453,   658,   883,
    1914      888,   931,   695,   899,    47,    48,   908,  1444,   272,   115,
    1915     -422,  -528,    37,   546,    38,   715,   923,   933,   220,   944,
    1916      937,    33,   945,   230,   946,   696,   898,   938,   947,   684,
    1917      310,   898,   696,   696,   696,   948,   949,   963,    50,   973,
    1918      974,   975,    71,   989,   620,   990,   991,   992,   115,    36,
    1919      993,    78,   994,    68,   119,    50,    50,  1086,   995,  -410,
    1920     -409,  1060,     8,     9,    10,    11,    12,  1018,  1052,   213,
    1921     1054,  1058,    50,   893,  1075,  1076,    50,   704,  1077,  1078,
    1922     1084,    58,  1521,  1094,  1088,   740,   636,    68,  1521,  1095,
    1923      496,    72,  1096,    33,  1098,   696,  1101,   620,   620,  1521,
    1924      958,  1103,    50,  1521,   161,   272,  1104,  1405,  1105,   525,
    1925      310,   108,    50,   526,   527,   528,  1520,   768,   769,   770,
    1926      771,    36,  1169,  1108,   222,  1132,  1153,  1154,  1155,  1156,
    1927       50,    78,   108,  1170,  1171,  1173,    50,   529,  1174,   530,
    1928       65,   531,   532,   115,  1182,  1188,    -3,   398,   399,  1193,
    1929      108,  1186,  1086,   400,   704,  1198,  1203,  1201,   401,   402,
    1930      260,   403,   230,   404,   235,   567,   440,   410,   491,  1207,
    1931     1214,    72,   114,    47,    48,  1212,  1216,    50,  1219,  1088,
    1932     1232,   761,   762,   763,   684,    50,  1225,  1236,  1238,    50,
    1933     1240,  1241,  1245,    50,   113,  1242,   114,  1243,   114,  1252,
    1934     1261,   267,   331,   112,  1262,   141,   239,  1268,  1183,  1271,
    1935      260,   350,   108,  1493,  1296,  1289,    43,    44,   620,  1404,
    1936      470,    39,  1272,   184,   185,    42,  1273,   211,   221,   406,
    1937     1275,  1283,  1302,   114,    43,    44,  1304,  1306,   114,   909,
    1938      405,  1310,   240,   115,  1311,   108,  1312,   241,  1315,    58,
    1939      230,  1320,  1086,   657,  1322,   423,  1328,  1329,   428,   430,
    1940      892,  1338,   410,   161,  1330,  1331,   115,  1087,    47,    48,
    1941     1341,  1279,  1348,   115,  1357,   115,  1349,   115,  1169,  1088,
    1942     1358,   893,  1359,  1365,   446,  1169,   114,    78,   449,  1366,
    1943      450,   151,   152,  1376,    78,   153,  1377,  -411,  1380,   457,
    1944     1391,  1395,    50,  1397,    50,    68,  1406,  1492,  1399,  1400,
    1945      471,  1467,   115,  1467,   115,  1401,  1415,  1333,  1416,  1417,
    1946      478,  1418,  1420,    50,   439,   115,  1425,    72,   430,    58,
    1947      970,  1492,  1492,   177,    72,    76,  1430,  1169,    50,   162,
    1948     1434,   310,   114,  1436,  1432,   108,    78,  1438,  1467,  1440,
    1949     1467,    50,  1442,   114,    50,   114,  1492,  1447,  1448,  1449,
    1950     1450,  1461,  1087,   372,  1471,  1473,  1486,  1475,   108,    76,
    1951        8,     9,    10,    11,    12,   108,   470,   326,  1478,  1479,
    1952     1501,  1187,   959,   470,  1506,  1513,    72,    50,  1502,  1515,
    1953     1517,   114,  1523,   114,   260,  1530,   163,   114,   589,  1531,
    1954      774,    33,  1011,   775,   617,   114,   223,   778,   776,  1110,
    1955      195,   777,  1288,   218,  1481,  1394,   228,   622,    50,    50,
    1956     1533,   622,  1351,  1218,   407,  1367,  1464,   108,   889,    36,
    1957     1192,   890,  1200,    50,  1069,   470,   911,  1073,   792,    39,
    1958     1017,   184,   185,    42,   909,   860,   463,  1107,   658,   330,
    1959      925,   477,    43,    44,  1350,   131,  1297,   132,   133,   134,
    1960     1083,   709,  1087,    39,     0,   184,   185,    42,    43,    44,
    1961      471,   782,     0,   742,   934,   410,    43,    44,   595,   783,
    1962      596,    47,    48,   784,   350,    58,    47,    48,     0,   471,
    1963      909,     0,    58,   353,   163,     0,     0,   471,     0,     0,
    1964        0,     0,   892,     0,   410,     0,   373,     0,    50,     0,
    1965       47,    48,     0,     0,     0,   691,     0,     0,   430,     0,
    1966       50,     0,  1121,     0,     0,     8,     9,    10,    11,    12,
    1967        0,   214,   163,   705,     0,    68,   496,     0,     0,     0,
    1968      233,     0,     0,   430,    58,     0,     0,   430,     8,     9,
    1969       10,    11,    12,     0,     0,   163,    33,     0,  1468,     0,
    1970     1468,   112,   636,   141,   142,     0,   447,   442,   114,     0,
    1971     1011,     0,     0,     0,    43,    44,   350,     0,     0,    33,
    1972        0,     0,   214,     0,    36,     0,     0,    76,     0,    39,
    1973        0,     0,    76,    42,     0,  1468,     0,  1468,     0,    50,
    1974      720,    50,    43,    44,     0,   721,     0,    36,   114,  1465,
    1975        0,  1469,     0,   112,     0,     0,   546,     0,     0,     0,
    1976     1111,   785,     0,  1112,   214,  1113,    43,    44,    45,     0,
    1977       39,    50,   184,   185,    42,     0,    47,    48,   622,   796,
    1978        0,     0,     0,    43,    44,     0,  1497,     0,  1499,   909,
    1979      813,   919,   114,   596,  1316,   508,     0,     0,   113,    47,
    1980       48,     0,     0,     0,     0,   636,     0,    79,   589,   186,
    1981        0,   114,     0,   589,     0,   114,   373,    47,    48,   622,
    1982        0,     0,   350,   350,     0,   214,   223,     0,     0,     0,
    1983     1528,     0,  1529,     0,     0,     0,     0,     0,   350,     0,
    1984       39,    79,   175,   176,    42,  1536,  1537,    39,   909,   909,
    1985        0,    42,     0,    43,    44,     0,   691,     0,     0,   753,
    1986       43,    44,   114,   214,   758,     0,     0,   471,   214,     0,
    1987      525,   216,     0,     0,   526,   527,   528,     0,   224,   375,
    1988        0,     0,     0,   497,     0,     0,   801,   243,   596,     0,
    1989      373,     0,    76,   471,    47,    48,   350,     0,   529,   114,
    1990      530,     0,   531,  1287,     0,   924,   353,     0,   430,     0,
    1991        0,    76,   463,    50,     0,     0,     0,     0,    50,    76,
    1992      112,     0,   216,     0,     0,     0,     0,  1111,     0,     0,
    1993     1112,   705,  1113,    43,    44,    50,   954,   353,     0,     0,
    1994        8,     9,    10,    11,    12,     0,     0,     0,     0,     0,
    1995        0,     0,     0,   214,    39,   353,     0,    76,    42,   114,
    1996        0,  1318,     0,     0,   216,   355,     0,    43,    44,     0,
    1997        0,    33,     0,     0,   691,     0,     0,     0,     0,   866,
    1998        0,   868,     0,     0,   691,   215,     0,   622,     0,     0,
    1999      986,     0,     0,   711,     0,   691,     0,     0,   353,    36,
    2000        0,    47,    48,     0,    39,   997,   184,   185,    42,     0,
    2001       39,   114,   175,   176,    42,     0,     0,    43,    44,     0,
    2002        0,     0,     0,    43,    44,   216,     0,     0,     0,     0,
    2003        0,   914,     0,   214,     0,     0,   215,     0,     0,     0,
    2004        0,     0,     0,   595,     0,   596,     0,     0,     0,   214,
    2005        0,    47,    48,     0,     0,    68,   909,     0,     0,    79,
    2006        0,   353,     0,   216,    79,     0,     0,     0,   216,     0,
    2007        0,     0,     0,   909,   214,     0,     0,   796,   215,   114,
    2008        0,   114,   114,     0,   705,     0,     0,  1066,     8,     9,
    2009       10,    11,    12,     0,     0,   412,    39,     0,   184,   185,
    2010       42,     0,   420,     0,   353,   353,     0,     0,     0,    43,
    2011       44,     0,     0,  1080,     0,     0,     0,     0,     0,    33,
    2012      353,     0,   430,   119,     0,     0,     0,     0,     0,     0,
    2013        0,     0,     0,    81,     0,  1491,     0,   410,   353,   215,
    2014        0,     0,     0,    47,    48,   909,   909,    36,     0,    76,
    2015        0,     0,    39,   216,   184,   185,    42,     0,   224,     0,
    2016      114,     0,     0,     0,     0,    43,    44,    81,     0,     0,
    2017        0,     0,     0,     0,   412,    76,   589,   215,   353,     0,
    2018        0,     0,   215,     0,     0,     0,     0,     0,     0,   428,
    2019        0,   892,   214,   410,   691,   691,     0,   350,   350,    47,
    2020       48,     0,     0,     0,   225,     0,     0,    50,    50,     0,
    2021        0,     0,     0,   353,     0,  1168,     0,   114,   114,     0,
    2022      214,     0,     0,     0,    79,   214,     0,     0,     0,     0,
    2023        0,   573,    39,   216,   184,   185,    42,     0,   355,   577,
    2024        0,     0,   580,    79,     0,    43,    44,     0,     0,   691,
    2025      691,    79,     0,     0,     0,   114,   353,     8,     9,    10,
    2026       11,    12,     0,     0,     0,     0,   353,   215,     0,   355,
    2027        0,   266,   223,     0,   216,     0,     0,   353,  1102,    47,
    2028       48,     0,     0,     0,     0,     0,     0,   355,    33,    79,
    2029        0,   356,     0,     0,   214,     0,     0,  1114,     0,    59,
    2030       59,  1114,   412,     0,     0,     0,   420,     0,   214,     0,
    2031        0,     0,     0,     0,    50,   114,    36,     0,     0,     0,
    2032      705,    39,     0,   143,   114,    42,     0,     0,     0,   497,
    2033      355,     0,     0,    59,    43,    44,     0,    76,    50,    50,
    2034        0,     0,     0,     0,     0,     0,     0,   215,  1114,     0,
    2035        8,     9,    10,    11,    12,     0,     0,     0,     0,   353,
    2036      711,     0,  1265,    50,     0,     0,   353,    59,    47,    48,
    2037       59,     0,   126,   129,   130,   242,   245,     0,     0,     0,
    2038        0,    33,   412,    68,     0,    81,     0,     0,   215,     0,
    2039       81,     0,   216,   355,     0,   691,     0,   705,     0,   214,
    2040        0,   119,     0,     0,     0,     0,     0,     0,     0,    36,
    2041        0,     0,     0,     0,    39,    88,   184,   185,    42,     0,
    2042      216,     0,     0,     0,     0,   216,     0,    43,    44,     0,
    2043        0,     0,   691,     0,     0,     0,   355,   355,     0,   691,
    2044      691,   691,     0,     0,   255,  1114,   256,     0,     0,    88,
    2045      350,   350,   355,  1491,     0,   410,     0,   348,     0,     0,
    2046        0,    47,    48,  1168,     0,     0,     0,     0,     0,     0,
    2047      355,     0,   573,   573,     0,     0,   353,   353,     0,   353,
    2048      353,    79,     0,     0,   225,     0,   226,     0,     0,     0,
    2049        0,     0,     0,     0,   216,     0,   119,    76,     0,     0,
    2050        0,     0,   691,     0,     0,     0,   215,    79,   216,     0,
     1802      51,   115,   151,   268,   152,   451,   746,    99,   398,   153,
     1803     760,   735,   399,   400,  1052,   427,   857,   438,   401,   261,
     1804     116,   952,   787,   953,   402,   954,   403,    78,  1051,   382,
     1805     383,   834,   600,    52,    51,   817,   145,   469,   409,   809,
     1806      98,    99,   404,  1168,   720,   149,  1151,  1152,   725,   605,
     1807     504,    51,   810,   816,   907,    58,   117,   154,   162,  1363,
     1808     406,    78,  1153,   155,   811,   187,   156,    52,   210,   342,
     1809     937,    51,   194,   624,    98,   217,   805,   628,   227,   474,
     1810    1185,  1186,   911,   806,   376,   150,   407,   424,   398,    58,
     1811     220,    98,   399,   400,   124,    33,    71,   663,   401,   807,
     1812     377,   717,   125,   177,   402,   190,   403,   115,    98,    33,
     1813     808,    98,   473,   475,   518,   115,   672,   821,   267,   272,
     1814     849,   824,   404,   211,   676,  1285,   221,  1121,   203,    65,
     1815      71,   281,  -239,  -239,   144,   866,  1383,  1384,   108,   108,
     1816     406,   820,   841,   151,    72,   152,   844,   827,   310,   149,
     1817     153,   592,   177,  1230,  1225,   177,   162,   115,   345,  1444,
     1818    1425,   210,    33,    65,   847,   847,   407,   901,   372,   410,
     1819     714,   952,   108,   953,  1162,   954,  1471,   146,    72,   204,
     1820     847,   667,   669,  1383,  1384,   148,   187,   187,  1167,    98,
     1821     408,   282,   805,   919,   162,   169,  1286,   469,   154,   806,
     1822     262,    98,   267,   263,   155,  -239,   661,   156,  1385,   108,
     1823      51,  1499,   213,  1501,   566,   807,   469,   162,   577,   170,
     1824     410,  1176,   210,   151,   469,   152,   397,   190,   157,   441,
     1825     153,  1214,   707,  1425,   253,  1218,   410,   474,   847,   977,
     1826     310,   143,   666,   668,   696,   809,    33,    33,   567,   724,
     1827      98,  1001,    51,   585,   461,  1394,  1180,  1062,   810,    99,
     1828     272,  1153,    98,   177,   291,   272,   267,   267,   737,  1000,
     1829     811,   729,   115,  1315,   162,  1318,  1320,   439,   658,    78,
     1830     650,  1178,   805,  1177,    78,    52,   708,  1066,  1075,   806,
     1831     167,  1168,    98,   242,   245,   796,   940,   310,   605,  1151,
     1832    1152,    33,  1513,  1181,   659,   807,   477,    58,   665,  1235,
     1833     310,   437,   172,  1158,   670,  1153,   988,   177,   418,   479,
     1834     410,   410,   518,  1069,   177,  1069,   569,   518,    33,  1528,
     1835     518,   149,   791,  1098,   182,  1455,   843,  1236,   372,  1159,
     1836    1512,   115,  1052,  1179,   492,   345,   820,   493,    71,   598,
     1837     616,   658,   202,  1004,   167,   887,  1051,   248,   817,   730,
     1838    1523,  1159,   386,   809,   621,   481,   440,  1527,   621,   253,
     1839     332,    98,   499,   818,  1182,   597,   810,   659,   387,   731,
     1840     287,    65,   848,   848,   781,  1483,   470,   330,   811,   599,
     1841     108,  1488,   177,    43,    44,   267,    72,  1100,   848,   834,
     1842     825,   112,   597,   141,   142,   187,   251,   509,   389,   177,
     1843    1308,  1508,   372,   177,    43,    44,  1515,  1101,   445,   513,
     1844    1420,   378,   592,   267,   390,   310,   310,   592,   877,   267,
     1845    1309,   621,   547,   548,   391,  1153,  1346,   458,  1429,   552,
     1846     553,  1107,   853,  1083,    78,   190,   696,  1168,   393,   434,
     1847     392,   741,   115,   455,  1168,   469,   848,   625,   859,  1408,
     1848     636,   629,   112,    78,   394,   972,  1119,   547,   554,   555,
     1849     267,    78,  1370,  1409,   902,    43,    44,   860,   267,   330,
     1850     621,   916,    51,  1086,  1224,   372,   580,   713,   410,    99,
     1851     903,   707,  1216,   115,   213,  -294,   871,   999,   410,   941,
     1852     870,   858,   547,   753,   981,   310,  1168,   115,  -525,    78,
     1853     310,   434,   310,   310,   605,    52,   904,   575,  1001,   874,
     1854     744,   410,    98,   576,   345,   556,   557,   599,   902,  1414,
     1855    1415,   904,   905,   868,  1429,  1139,  1141,    58,  1124,  1429,
     1856     410,  1165,   112,   253,  1063,   708,   470,  1064,  1456,   167,
     1857     -12,  1260,  1261,  1107,   898,    43,    44,  1166,   901,  1429,
     1858     558,   559,  1457,  1165,   696,   470,  1429,   837,   569,   569,
     1859     264,   838,  -448,   470,   696,  1299,   310,  1301,    71,  1291,
     1860     900,   741,  -449,   758,   594,   696,   621,   345,   638,   677,
     1861     616,  1300,  1461,  1302,   277,   576,   598,  1347,   598,  1461,
     1862       2,   207,     4,     5,     6,     7,    59,    59,   999,   705,
     1863     839,    65,   279,  1344,   840,   213,   621,   280,   549,   112,
     1864     108,   621,   698,   616,   550,   551,    72,   621,   699,   715,
     1865     621,   621,    43,    44,   333,   716,   804,   334,   599,   131,
     1866      59,   132,   133,   134,   707,   839,   621,  1011,   267,  1082,
     1867     335,  1509,    43,    44,     8,     9,    10,    11,    12,   384,
     1868     726,   177,   336,   740,   330,   330,   727,  1056,    37,   741,
     1869      38,   762,   763,   764,    59,  -112,   177,    59,   115,  -112,
     1870     112,   895,  1135,   798,   410,   881,    33,  1112,  1393,   177,
     1871    1113,   741,  1114,    43,    44,    50,   114,  1094,   708,   719,
     1872     337,   723,    78,  1333,   621,   921,   616,  1334,  1138,   836,
     1873     597,   371,   713,   713,    36,   398,  1017,   883,   338,   399,
     1874     400,   899,   375,   741,   850,   401,   114,   114,    78,    50,
     1875     966,   402,   330,   403,   291,   979,   967,   865,   388,   345,
     1876      50,   699,  1212,   744,   744,  1140,    50,   597,   576,   404,
     1877    1340,   330,   804,   599,    50,  1341,   741,  1150,   396,  1410,
     1878      50,   741,   440,    50,   348,  1357,    50,  1221,   406,   410,
     1879     952,   177,   953,  1463,   954,  1464,  1422,  1343,   425,   114,
     1880     114,  1348,  1411,   741,   696,   696,   569,   741,  1408,   426,
     1881     592,   253,   332,   410,   407,   621,    39,   984,   175,   176,
     1882      42,   408,   598,    50,   470,  1430,    50,  1143,   448,    43,
     1883      44,   741,  1477,    50,   598,   330,   560,   561,  1478,   499,
     1884     164,     2,   207,     4,     5,     6,     7,  1533,    59,  1510,
     1885     470,   970,   967,   576,  -372,   371,   213,   332,   410,   696,
     1886     696,   459,   804,  -401,    50,   854,  1353,  1354,  1481,  1422,
     1887     213,   460,   229,   503,   599,   835,    50,   482,    59,   732,
     1888     594,   733,    39,   310,   734,   941,    42,   738,   705,   941,
     1889     941,   507,   960,  1403,   967,    43,    44,   512,  1163,   525,
     1890     707,    50,    50,   562,   164,   345,  1383,  1384,   113,    37,
     1891      78,    38,   345,   895,   906,   895,   908,    50,  1231,  1232,
     1892     455,   802,   563,   597,   564,    50,   565,   115,   339,    47,
     1893      48,   765,   766,   112,    50,   141,   239,    50,    58,   586,
     1894     921,   921,   767,   768,   114,   713,    43,    44,   568,    -3,
     1895     410,   115,   310,  1065,   708,   899,    47,    48,   651,   114,
     1896     658,   213,   652,   114,   653,   898,   655,    50,   114,   656,
     1897    1087,   657,   240,   258,  1495,   744,   660,   241,   662,    71,
     1898     689,    50,    50,   773,   774,   599,   659,   686,    50,   691,
     1899     687,   900,  -243,   728,  1207,    50,   418,   654,   410,   433,
     1900     717,   798,   742,  1306,   345,  1295,  1088,   750,  1267,  1268,
     1901     799,  1270,    65,   769,   770,   771,   772,   801,  1275,   812,
     1902    1277,   108,   856,  1107,   -14,   621,   621,    72,   862,   -15,
     1903    1336,   708,   479,   332,   410,     2,   207,     4,     5,     6,
     1904       7,   705,   696,   310,   855,   112,    50,   141,   142,   696,
     1905     696,   696,   112,   882,   141,   142,   884,   348,    43,    44,
     1906     743,   433,   410,    50,    50,    43,    44,  -295,    47,    48,
     1907      78,   818,   332,   597,     8,     9,    10,    11,    12,   889,
     1908      50,   909,   115,  -422,    50,   638,   522,   895,   716,   108,
     1909     932,  1022,   895,  1364,   637,  -529,   244,  1364,    58,   164,
     1910     924,   921,   934,    37,   938,    38,    33,   945,    59,   267,
     1911      50,   939,   696,  1278,  1279,  1280,   946,   118,   697,   947,
     1912      50,   920,   112,   597,   141,   142,   547,   899,   948,    47,
     1913      48,  1071,   899,   964,    36,    43,    44,   949,    50,  1170,
     1914     950,   974,   975,   976,    50,  -296,  1053,   990,   345,   991,
     1915     348,   440,     8,     9,    10,    11,    12,   992,   993,   994,
     1916     463,   721,  1077,   112,   995,   509,   722,   160,    -3,   215,
     1917    1112,   996,   470,  1113,  -410,  1114,    43,    44,  -409,  1389,
     1918     114,   108,  1019,  1059,    33,    50,  1055,    72,   638,   272,
     1919     115,   330,   894,    50,  1076,   230,  1445,    50,   231,  1078,
     1920    1079,   235,    50,   237,  1229,   114,  1085,   114,  1095,   220,
     1921     246,   310,    36,   348,    39,   741,   175,   176,    42,  1096,
     1922     215,  1097,  1099,   259,  1102,   621,  -297,    43,    44,   115,
     1923     959,   160,  1104,     8,     9,    10,    11,    12,    78,   112,
     1924    1105,   685,   114,   835,   211,   221,  1112,   114,  1087,  1113,
     1925    1106,  1114,    43,    44,  1109,  1133,   348,   348,  1154,  1155,
     1926    1157,  1187,   215,  1171,   326,    33,    58,  1406,  1156,  1172,
     1927    1174,  1175,   348,   340,  1183,  1215,  1194,   705,   621,   621,
     1928    1317,  1189,  1022,    -3,  1088,  1199,   272,  1521,  1202,  1204,
     1929    1213,   310,   492,    36,   522,   114,   522,  1040,  1208,   522,
     1930    1220,  1226,   522,  1217,  1233,  1237,  1239,    71,  1241,  1242,
     1931    1269,    50,  1243,    50,  1244,  1246,  1253,  1272,    78,  1262,
     1932     697,  1263,   429,   215,   115,  1297,   432,  1273,   108,  1290,
     1933     348,  1274,    50,   213,   398,  1276,   230,  1303,   399,   400,
     1934      65,   439,  1284,  1087,   401,  1307,    58,    50,  1305,   108,
     1935     402,   114,   403,  1311,   705,    72,   326,  1312,  1313,  1316,
     1936      50,   215,   114,    50,   114,   526,   215,   108,   404,   527,
     1937     528,   529,   113,  1494,  1321,  1323,  1329,  1331,  1330,  1088,
     1938    1332,  1339,   267,  1342,  1349,  1350,   406,  1170,   432,  1280,
     1939    1358,   487,  1359,   530,  1265,   531,    50,   532,   533,   621,
     1940     114,  1360,   114,   497,  1366,    39,   114,   184,   185,    42,
     1941     658,  1367,   407,   520,   114,  1377,  1378,  -411,    43,    44,
     1942     470,  1381,  1392,  1396,   115,   177,   160,    50,    50,   108,
     1943     440,  1400,  1398,  1401,   754,    72,   659,  1402,   697,   759,
     1944    1407,  1421,    50,  1087,   893,  1334,   410,   115,   697,  1416,
     1945    1417,   215,    47,    48,   115,  1418,   115,   584,   115,   697,
     1946    1173,   589,   108,  1419,  1426,   894,  1435,   685,  1437,   151,
     1947    1431,   152,  1439,  1405,    78,   230,   153,   235,  1433,  1088,
     1948     622,    78,  1441,   174,   626,   880,   526,   463,  1493,    59,
     1949     527,   528,   529,   115,  1443,   115,  1449,  1448,    68,   119,
     1950    1450,  1451,    58,  1462,  1472,  1474,   115,  1476,  1479,    58,
     1951    1480,   348,  1493,  1493,   530,  1487,   531,    50,   532,  1288,
     1952     162,  1502,   310,  1503,  1507,   254,    39,  1516,  1514,    50,
     1953      42,   215,    68,    78,  1518,  1524,  1531,  1493,  1532,    43,
     1954      44,   326,   326,  1170,   372,  1188,   775,   777,   776,   161,
     1955    1170,   778,   477,  1111,   867,   779,   869,    59,  1289,  1395,
     1956    1482,    58,   108,   230,  1534,    45,  1352,  1219,   681,   222,
     1957      76,   637,   215,    47,    48,  1368,   470,   114,  1465,  1193,
     1958    1201,   118,   890,   470,   891,   108,   912,  1074,  1070,   793,
     1959    1108,    72,   108,  1018,   861,  1084,   926,   783,    72,  1298,
     1960     710,   935,  1170,   973,    76,   260,   915,   487,    50,   326,
     1961      50,   487,     0,   978,   784,     0,   785,   114,     0,     0,
     1962     416,   520,     0,   520,   989,  1040,   520,     0,   326,   520,
     1963       0,   348,   348,     0,     0,   470,     0,     0,     0,     0,
     1964      50,   223,     0,   435,   108,     0,     0,   331,     0,    59,
     1965      72,     0,     0,   443,     0,   260,   350,     0,   697,   697,
     1966       0,   114,     0,     0,     0,   112,     8,     9,    10,    11,
     1967      12,     0,  1112,     0,   637,  1113,     0,  1114,    43,    44,
     1968     114,     0,     0,     0,   114,   405,     0,     0,     0,     0,
     1969       0,   215,   326,     0,     0,     0,   685,     0,    33,     0,
     1970     423,     0,   794,   428,   430,     0,  1319,   910,   161,     0,
     1971       0,     0,     0,   697,   697,     0,     0,     0,     0,   215,
     1972       0,  1356,     0,   519,   215,     0,    36,     0,   353,   446,
     1973       0,   114,   833,   449,     0,   450,     0,   589,     0,     0,
     1974       0,     0,     0,   842,   457,     0,     0,     0,     0,     0,
     1975      68,     0,     0,     0,     0,   471,     0,     0,     0,     0,
     1976       0,   330,     0,     0,     0,   478,     0,     0,   114,     0,
     1977     568,    39,   410,   430,  1382,    42,     0,  1390,    47,    48,
     1978       0,     0,    50,     0,    43,    44,    39,    50,   184,   185,
     1979      42,     0,     0,   215,   681,    59,    59,     0,   971,    43,
     1980      44,   447,     0,     0,    50,     0,     0,   215,   412,     0,
     1981     712,     0,     0,     0,     0,   420,     0,    59,    47,    48,
     1982       0,  1428,    76,  1148,  1149,   186,  1432,    76,   114,     0,
     1983       0,     0,   487,    47,    48,    59,     0,     0,     0,   260,
     1984       0,     0,     0,   590,    39,     0,   175,   176,    42,   618,
     1985     497,   685,     0,  1103,     0,  1454,     0,    43,    44,  1296,
     1986       0,     0,   623,     0,     0,     0,   623,   674,     0,     0,
     1987    1012,     0,  1115,     0,   163,     0,  1115,     0,  1196,  1197,
     1988     114,   214,     0,   375,   348,   348,     0,   412,   195,     0,
     1989     233,   218,    59,   700,   228,     0,   697,    59,   215,     0,
     1990       0,     0,     0,   697,   697,   697,    39,     0,   184,   185,
     1991      42,   980,   910,     0,     0,   471,     0,     0,     0,    43,
     1992      44,   223,     0,  1115,     0,     0,     0,     0,     0,   350,
     1993      59,   519,   214,     0,   471,     0,   519,     0,     0,   519,
     1994    1522,     0,   471,     0,   574,   596,  1522,   597,   114,     0,
     1995     114,   114,   578,    47,    48,   581,     0,  1522,   910,     0,
     1996     692,  1522,     0,   430,     0,     0,   697,     0,     0,     0,
     1997       0,     0,   163,     0,   214,     0,     0,     0,   706,     0,
     1998      68,     0,     0,     0,   373,     0,     0,    76,     0,   430,
     1999    1122,     0,     0,   430,     0,     8,     9,    10,    11,    12,
     2000       0,   353,     0,     0,     0,   348,    76,     0,     0,    79,
     2001     163,     0,   216,     0,    76,   412,     0,     0,     0,   420,
     2002    1115,     0,   350,   681,     0,     0,     0,    33,   243,   114,
     2003      59,     0,   353,   163,     0,   214,     0,     0,  1012,     0,
     2004       0,     0,     0,    79,     0,   442,   487,  1089,   326,     0,
     2005     353,     0,    76,    59,     0,    36,     0,     0,     0,     0,
     2006      59,  1322,     0,   216,     0,     0,     0,   786,  1324,  1325,
     2007    1326,     0,     0,   214,     0,     0,    50,    50,   214,     0,
     2008     224,     0,     0,     0,   623,   797,   114,   114,   215,   879,
     2009       0,     0,     0,   498,   353,   412,   814,     0,   886,   743,
     2010     833,   410,   888,     0,     0,   216,     0,    47,    48,     0,
     2011       0,     0,    59,     0,   590,     0,     0,   910,     0,   590,
     2012       0,     0,     0,     0,   114,   623,     0,     0,   350,   350,
     2013       0,  1369,     0,    39,     0,   184,   185,    42,     0,     0,
     2014    1115,     0,  1115,  1115,   350,     0,    43,    44,     0,     0,
     2015       0,     0,     0,     0,   373,     0,     0,   353,     0,     0,
     2016       0,     0,   692,   214,     0,     0,   216,   355,     0,     0,
     2017       0,     0,   893,   471,   410,     0,   910,   910,   681,     0,
     2018      47,    48,     0,    50,   114,     0,   574,   574,     0,     0,
     2019       0,     0,    39,   114,   184,   185,    42,     0,     0,   471,
     2020     353,   353,   350,     0,   216,    43,    44,    50,    50,   216,
     2021       0,   925,     0,     0,   430,     0,   353,     0,     0,     0,
     2022       0,  1115,     0,     0,     0,  1469,     0,  1469,   373,     0,
     2023       0,  1492,    50,   410,   353,     0,     0,   706,     0,    47,
     2024      48,     0,   955,   214,    39,    76,   184,   185,    42,     0,
     2025       0,     0,     0,     0,     0,     0,     0,    43,    44,   214,
     2026       0,    79,  1469,     0,  1469,     0,    79,     0,     0,   872,
     2027     215,    76,     0,   875,   353,     0,     0,     0,  1115,  1115,
     2028     692,     0,     0,   266,   214,     0,     0,     0,     0,     0,
     2029     692,    47,    48,   623,   216,     0,   987,     0,     0,     0,
     2030       0,   692,     0,     0,     0,     0,    81,     0,     0,   353,
     2031       0,   998,     0,  1061,     0,     0,  1446,     0,     0,     0,
     2032       0,     0,     0,     0,     0,  1089,     8,     9,    10,    11,
     2033      12,     8,     9,    10,    11,    12,     0,     0,     0,     0,
     2034      81,   534,   535,   536,   537,   538,   539,   540,   541,   542,
     2035     543,   544,   353,     0,     0,     0,     0,     0,    33,     0,
     2036     224,    68,   353,    33,     0,     0,     0,   215,   223,     0,
     2037       0,     0,     0,   353,   216,   545,  1496,   225,     0,     0,
     2038       0,     0,     0,   797,   910,  1504,    36,     0,     0,     0,
     2039     706,    36,     0,  1067,     0,     0,    39,     0,   184,   185,
     2040      42,   910,     0,   214,   574,     0,     0,     0,     0,    43,
     2041      44,     0,     0,     0,     0,   216,     0,     0,     0,  1081,
     2042    1089,     0,     0,     0,     0,     0,    79,     0,   430,   119,
     2043     920,   214,   597,    76,     0,   596,   214,   597,    47,    48,
     2044     355,     0,     0,    47,    48,    79,     0,    88,     0,     0,
     2045       0,     0,     0,    79,     0,   353,     0,     0,     0,     0,
     2046    1184,     0,   353,     0,   356,     0,     8,     9,    10,    11,
     2047      12,   355,     0,   910,   910,     0,     0,     0,     0,     0,
     2048       0,    88,   590,     0,     0,     0,     0,     0,     0,   355,
     2049       0,    79,     0,     0,     0,   428,     0,     0,    33,     0,
     2050     692,   692,     0,   350,   350,   214,     0,     0,     0,     0,
     2051     128,   128,   128,     0,     0,     0,     0,   412,   226,   214,
     2052    1089,  1169,     0,     0,     0,     0,    36,     0,     0,     0,
     2053       0,    39,     0,   355,   216,    42,     0,     0,     0,     0,
     2054     498,     0,     0,     0,    43,    44,     0,     0,     0,     0,
     2055       0,     0,  1468,     0,  1468,   692,   692,     0,    81,     0,
     2056       0,     0,   216,    81,     0,     0,     0,   216,     0,     0,
     2057      45,     0,   353,   353,     0,   353,   353,     0,    47,    48,
     2058       0,     0,   128,     0,   128,     0,     0,     0,     0,  1468,
     2059       0,  1468,  1125,    76,     0,     0,   355,     0,     0,     0,
     2060       0,     0,     0,     0,     0,   363,     0,     0,  1136,   276,
     2061     214,     0,     0,     0,     0,     0,     0,     0,   326,     0,
     2062       0,     0,     0,     0,     0,     0,   706,   353,   353,     0,
     2063       0,     0,     0,     0,     0,     0,   216,     0,     0,   355,
    20512064     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2052        0,    59,     0,     0,     0,     0,   395,     0,     0,     0,
    2053        0,   353,   353,     0,   215,   455,   414,   415,     0,   215,
    2054        0,   419,     0,   421,   422,   355,     0,     0,     0,     0,
    2055       81,    59,     0,     0,     0,   871,     0,     0,     0,   874,
    2056        0,     0,     0,     0,   356,  1114,     0,  1114,  1114,    81,
    2057        0,   350,     0,   363,     0,     0,     0,    81,     0,     0,
    2058        0,     8,     9,    10,    11,    12,     0,     0,   355,   214,
    2059        0,     0,     0,     0,     0,   356,   119,     0,   355,   216,
    2060        0,     0,   353,     0,   224,     0,     0,     0,   215,   355,
    2061        0,     0,    33,   356,     0,    81,     0,     0,     0,  1168,
    2062        0,     0,   215,     0,     0,     0,  1168,   533,   534,   535,
    2063      536,   537,   538,   539,   540,   541,   542,   543,     0,     0,
    2064       36,     0,     0,     0,   223,    39,  1114,   184,   185,    42,
    2065        0,     0,     0,     0,     0,     0,   356,     0,    43,    44,
    2066        0,   544,     0,     0,     0,    76,     0,    88,     0,    79,
    2067      637,     0,    88,     0,     0,     0,     0,   353,  1168,   353,
    2068        0,     0,     0,     0,   186,  1516,     0,     0,     0,     0,
    2069      573,   355,    47,    48,     0,     0,     0,     0,   355,     0,
    2070        0,     0,     0,  1114,  1114,     0,     0,     0,     0,     0,
    2071        0,     0,     0,   215,   353,     0,     0,     0,     0,   356,
    2072        0,   353,   353,   353,     0,     0,     0,     0,     0,     0,
    2073      348,     0,   353,   353,     0,     0,     0,     0,     0,     0,
    2074        0,  1445,     0,     0,     0,    76,     0,     0,     0,     0,
     2065     216,     0,     0,     0,     0,   355,     0,   225,     0,     0,
     2066       0,     0,     0,     0,   128,     0,     0,     0,  1266,     0,
     2067       0,     0,   128,   355,   128,   128,     0,     0,     0,   128,
     2068       0,   128,   128,   412,    79,     0,     0,     0,     0,    68,
     2069       0,     0,     0,     0,     0,     0,     0,     0,   353,    88,
     2070       0,   692,     0,   706,    88,     0,  1351,   119,     0,     0,
     2071      79,     0,     0,   355,     0,     0,     0,     0,     0,     0,
     2072       0,     0,  1222,    81,     0,     0,     0,     8,     9,    10,
     2073      11,    12,     0,     0,     0,     0,     0,   356,   692,     0,
     2074     223,   216,    81,     0,     0,   692,   692,   692,   355,     0,
     2075      81,   128,     0,     0,     0,     0,   350,   350,     0,    33,
     2076       0,    76,     0,     0,     0,     0,     0,     0,   356,  1169,
     2077       0,     0,     0,   353,     0,   353,     0,     0,     0,     0,
     2078       0,     0,     0,     0,     0,     0,   356,    36,    81,     0,
     2079       0,   355,    39,     0,   184,   185,    42,     0,   226,     0,
     2080     214,   355,   119,     0,     0,    43,    44,   224,   692,     0,
     2081     353,     0,   355,     0,     0,     0,     0,   353,   353,   353,
     2082       0,     0,     0,   126,   129,   130,     0,     0,   353,   353,
     2083     356,   893,     0,   410,     0,     0,     0,     0,     0,    47,
     2084      48,    76,     0,     8,     9,    10,    11,    12,     0,     0,
     2085       0,   168,     0,   173,     0,     0,   179,   180,   181,     0,
     2086     183,  1466,     0,  1470,    88,     0,     0,     0,     0,     0,
     2087       0,     0,    79,     0,   234,    33,     0,   350,   363,     0,
     2088     353,     0,     0,    88,     0,     0,   249,   250,     0,     0,
     2089       0,    88,     0,   356,   355,   255,     0,   256,  1498,     0,
     2090    1500,   355,   119,    36,     0,     0,     0,     0,    39,   363,
     2091     184,   185,    42,     0,     0,     0,     0,     0,     0,     0,
     2092       0,    43,    44,     0,     0,  1169,     0,   363,     0,    88,
     2093       0,   216,  1169,     0,     0,     0,   356,   356,     0,     0,
     2094       0,     0,  1529,     0,  1530,     0,     0,   186,     0,   353,
     2095       0,     0,   356,     0,     0,    47,    48,  1537,  1538,     0,
     2096       0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
     2097     356,   363,     0,     0,     0,     0,     0,   395,     0,     0,
     2098       0,    81,   214,     0,  1169,     0,     0,   414,   415,     0,
     2099       0,  1517,   419,    33,   421,   422,     0,    76,     0,     0,
     2100       0,     0,     0,     0,    76,     0,     0,    81,     0,     0,
     2101     356,   355,   355,     0,   355,   355,     0,     0,     0,     0,
     2102       0,    36,     0,     0,     0,     0,    39,     0,   184,   185,
     2103      42,     0,    79,     0,   363,     0,     0,     0,     0,    43,
     2104      44,     0,     0,     0,     0,   356,     0,     0,     0,     0,
     2105       0,     0,     0,     0,   128,   128,    76,     0,     0,     0,
     2106       8,     9,    10,    11,    12,   266,   355,   355,     0,     0,
     2107       0,     0,     0,    47,    48,     0,     0,   363,   363,   214,
     2108       0,   128,     0,     0,   128,   128,     0,   128,   356,   128,
     2109     128,     0,    33,   363,   128,   128,     0,     0,   356,     0,
     2110       0,     0,     0,     0,   225,     0,     0,     0,     0,   356,
     2111       0,   363,     0,   216,     0,     8,     9,    10,    11,    12,
     2112      36,     0,    88,     0,     0,    39,     0,   184,   185,    42,
     2113       0,     0,     0,     0,     0,     0,     0,   355,    43,    44,
     2114     588,     0,   595,     0,     0,     0,     0,    33,    88,     0,
     2115       0,   363,     0,   619,   620,     0,     0,     0,     0,     0,
     2116       0,     0,     0,     0,  1492,     0,   410,     0,     0,    81,
     2117       0,     0,    47,    48,     0,    36,     0,     0,     0,   224,
     2118      39,     0,     0,     0,    42,     0,   363,     0,     0,     0,
     2119       0,   356,     0,    43,    44,     0,     0,     0,   356,     0,
     2120      79,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2121     216,     0,   355,     0,   355,     0,     0,     0,     0,   712,
     2122       0,     0,     0,     0,     0,     0,     0,    47,    48,   363,
     2123     128,   128,     0,     0,     0,     0,     0,     0,     0,   363,
     2124       0,     0,     0,     0,     0,   226,     0,     0,     0,   355,
     2125     363,     0,     0,     0,     0,     0,   355,   355,   355,     0,
     2126       0,     0,     0,     0,     0,     0,     0,   355,   355,     0,
    20752127       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2076        0,     0,   356,   356,     0,     0,   226,     0,     0,     0,
    2077        0,   214,     0,     0,     0,     0,     0,     0,   356,     0,
    2078      718,    59,   722,     0,   353,     0,     0,     0,     0,   216,
    2079        0,     0,     0,     0,     0,     0,   356,     0,     0,     0,
    2080        0,  1495,     0,   412,     0,     0,     0,    81,   355,   355,
    2081     1503,   355,   355,     0,     0,     0,     0,     0,     0,   168,
    2082        0,   173,   348,     0,   179,   180,   181,     0,   183,    79,
    2083        0,     0,    88,    81,     0,     0,   356,     0,     0,     0,
    2084        0,     0,   234,     0,     0,     0,   363,     0,     0,     0,
    2085        0,    88,     0,   353,   249,   250,     0,     0,     0,    88,
    2086        0,     0,     0,   355,   355,     0,     0,     0,   214,     0,
    2087        0,   356,     0,     0,     0,     0,     0,   363,  1124,     0,
    2088        0,     0,     0,     0,     0,   348,     0,     0,     0,     0,
    2089        0,     0,     0,     0,  1135,   363,     0,    88,     0,     0,
    2090        0,    76,     0,   215,     0,     0,     0,     0,    76,     0,
    2091        0,     0,     0,     0,   356,   787,   788,     0,     0,     0,
    2092        0,     0,     0,     0,   356,     0,   853,     0,   348,   348,
    2093      225,     0,     0,     0,   355,   356,     0,     0,   363,     0,
    2094        0,     0,   818,     0,   348,   821,   822,     0,   825,     0,
    2095      827,   828,     0,     0,     0,   829,   830,     0,     0,     0,
    2096       76,     0,     0,     8,     9,    10,    11,    12,     0,   412,
    2097        0,   216,     0,     0,     0,   905,   224,   907,     0,     0,
    2098        0,   455,     0,     0,     0,     0,     0,     0,     0,     0,
    2099        0,     0,     0,     0,    33,    81,     0,    79,     0,     0,
    2100        0,   363,   348,     0,     0,     0,     0,     0,  1221,   355,
    2101        0,   355,     0,     0,     0,     0,     0,   356,     0,     0,
    2102        0,     0,    36,     0,   356,     0,     0,    39,     0,   184,
    2103      185,    42,     0,     0,     0,     0,     0,     0,     0,     0,
    2104       43,    44,     0,     0,   363,   363,   355,     0,     0,     0,
    2105        0,     0,     0,   355,   355,   355,     0,     0,     0,     0,
    2106      363,     0,     0,     0,   355,   355,   266,     0,   216,     0,
    2107        0,     0,     0,     0,    47,    48,     0,    79,   363,     0,
    2108        0,     0,     0,     0,     0,   215,     0,     0,     0,    88,
    2109        0,   956,   957,     0,     0,     0,     0,     0,     0,     0,
    2110        0,     0,     0,     0,     0,     0,     0,     0,   587,     0,
    2111      594,     0,     0,     0,     0,    88,   355,     0,   363,     0,
    2112        0,   618,   619,     0,     0,   128,   128,   128,     0,     0,
    2113        0,     0,     0,     0,   356,   356,     0,   356,   356,     0,
    2114        0,     0,     0,     0,     0,     0,   637,     0,     0,     0,
    2115        0,     0,  1021,   363,     0,    81,     0,     0,     0,     0,
    2116        0,    59,     8,     9,    10,    11,    12,    13,    14,    15,
     2128      79,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2129      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2130      25,    26,    27,     0,     0,    28,    29,    30,   356,   356,
     2131      88,   356,   356,     0,     0,    33,     0,     0,     0,   355,
     2132       0,     0,     0,     0,     0,     0,     0,     0,     0,    81,
     2133       0,     0,   363,     0,     0,     0,     0,     0,     0,   363,
     2134       0,     0,     0,    36,     0,     0,     0,     0,    39,     0,
     2135      40,    41,    42,     0,     0,     0,     0,     0,     0,     0,
     2136       0,    43,    44,   356,   356,     0,     0,   788,   789,     0,
     2137       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2138       0,   128,     0,     0,     0,     0,   128,    45,   355,    46,
     2139       0,     0,     0,     0,   819,    47,    48,   822,   823,     0,
     2140     826,     0,   828,   829,     0,     0,     0,   830,   831,     8,
     2141       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2142      19,    20,    21,    22,    23,    24,    25,    26,    27,  -298,
     2143       0,     0,     0,     0,   356,     0,    79,     0,     0,     0,
     2144       0,    33,   166,    79,     0,     0,     0,     0,     0,   363,
     2145     363,   997,   363,   363,     8,     9,    10,    11,    12,   219,
     2146       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
     2147      88,     0,     0,     0,     0,     0,   225,     0,     0,     0,
     2148    -298,     0,     0,     0,   283,   284,    33,   285,     0,   913,
     2149       0,   914,     0,     0,     0,    79,     0,    81,   917,   918,
     2150       0,     0,     0,   923,   363,   363,   166,     0,     0,   356,
     2151     273,   356,     0,   286,    36,     0,   929,     0,     0,   287,
     2152       0,   933,     0,   288,     0,     0,   289,   290,   291,   292,
     2153     293,   294,    43,    44,     0,   295,   296,     0,     0,   166,
     2154       0,   128,     0,   957,   958,     0,   356,     0,   595,   369,
     2155       0,     0,   374,   356,   356,   356,     0,     0,   297,     0,
     2156     378,     0,     0,     0,   356,   356,   344,    48,   299,   300,
     2157     301,   302,     0,     0,   212,   363,     0,    81,     0,     0,
     2158       0,     0,     0,   232,     0,   236,     0,   238,     0,     0,
     2159       0,     0,     0,     0,   247,     0,     0,     0,     0,     0,
     2160       0,   166,     0,     0,     0,     0,     0,     0,     0,     0,
     2161       0,     0,     0,   219,     0,     0,   356,   226,     0,     0,
     2162       0,     0,     0,     0,     0,   212,     0,   236,   238,   247,
     2163       0,   166,     0,     0,     0,     0,     0,     0,    88,     0,
     2164       0,  1007,     0,  1008,  1009,  1010,     0,     0,     0,     0,
     2165     363,     0,   363,     0,     0,     0,   374,     0,     0,     0,
     2166       0,     0,  1054,   166,     0,     0,     0,   212,     0,   128,
     2167       0,     0,     0,     0,     0,     0,  1060,     0,     0,     0,
     2168       0,     0,     0,     0,     0,   356,     0,   363,   523,     0,
     2169       0,     0,     0,     0,   363,   363,   363,     0,     0,  1072,
     2170       0,   166,     0,     0,     0,   363,   363,     0,     0,     0,
     2171       0,     0,     0,     0,     0,  1080,     0,     0,    88,     0,
     2172       0,     0,     0,     0,     0,     0,     0,     0,   212,     0,
     2173     236,   238,   247,    81,     0,     0,   593,     0,     0,     0,
     2174      81,   617,     0,     0,     0,     0,     0,     0,     0,     0,
     2175       0,     0,     0,     0,     0,     0,     0,   363,     0,  1110,
     2176       0,     0,     0,     0,  1120,     0,   212,     0,     0,  1123,
     2177       0,   212,     0,     0,  1127,     0,     0,     0,     0,  1129,
     2178       0,  1130,  1131,     0,     0,  1134,   496,     0,     0,     0,
     2179       0,     0,    81,     0,  1146,     0,     0,     0,     0,     0,
     2180       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2181    1160,  1161,     0,     0,     0,     0,   166,   166,     0,     0,
     2182       0,     0,   369,     0,     0,     0,   363,     0,     0,     0,
     2183       0,     0,     0,     0,     0,     0,  1190,   212,     0,  1192,
     2184       0,     0,     0,   523,     0,     0,     0,     0,     0,     0,
     2185       0,     0,     0,     0,  1198,     0,   212,     0,     0,     0,
     2186       0,   236,   238,     0,     0,     0,     0,     0,     0,   247,
     2187       0,   709,     0,     0,    88,     0,     0,     0,     0,     0,
     2188       0,    88,  1206,     0,   166,     0,     0,     0,  1210,  1211,
     2189       0,     0,     0,     0,     0,     0,   523,     0,   523,     0,
     2190       0,   523,     0,   166,   523,     0,     0,  1227,     0,     0,
     2191       0,   212,  1234,     0,     0,   369,     0,  1238,     0,     0,
     2192       0,     0,     0,     0,     0,     0,     0,     0,  1245,   212,
     2193       0,     0,     0,    88,   212,     0,   212,     0,     0,     0,
     2194       0,  1252,     0,  1254,  1255,  1256,  1257,     0,     0,     0,
     2195       0,     0,   212,     0,     0,   212,   212,     0,  1264,     0,
     2196    1160,     0,     0,   212,   173,     0,     0,   166,     0,     0,
     2197       0,     0,     0,     0,     0,     0,     0,   212,   369,     0,
     2198       0,   800,  1287,     0,   212,     0,     0,     0,     0,     0,
     2199       0,     0,  1292,  1293,     0,     0,  1144,     0,     0,     8,
     2200       9,    10,    11,    12,     0,     0,     0,   593,     0,     0,
     2201       0,     0,   593,   158,     0,     0,     0,     0,     0,     0,
     2202       0,   369,   369,     0,     0,     0,     0,     0,     0,   283,
     2203     284,    33,   285,     0,     0,     0,     0,   369,     0,     0,
     2204       0,     0,     0,     0,     0,     0,  1327,  1328,     0,     0,
     2205       0,     0,     0,     0,     0,     0,  1338,     0,   286,    36,
     2206     252,     0,     0,     0,   287,     0,     0,     0,   288,   523,
     2207     257,   289,   290,   291,   292,   293,   294,    43,    44,     0,
     2208     295,   296,     0,     0,     0,     0,     0,     0,     0,     0,
     2209       0,     0,     0,     0,     0,   369,   212,   922,     0,     0,
     2210       0,     0,     0,   297,     0,   378,     0,   283,   284,     0,
     2211     285,  1145,    48,   299,   300,   301,   302,     0,  1373,     0,
     2212    1374,  1375,  1376,     0,   212,     0,     0,     0,     0,   212,
     2213     709,     0,  1380,     0,     0,     0,   286,     0,     0,   385,
     2214    1391,     0,   287,     0,     0,     0,   288,     0,     0,   289,
     2215     290,   291,   292,   293,   294,    43,    44,     0,   295,   296,
     2216       0,     0,   417,     0,     0,  1412,  1413,     0,     0,     0,
     2217       0,     0,     0,     0,     0,     0,   431,     0,     0,     0,
     2218       0,   297,     0,   378,     0,   436,     0,     0,   617,    47,
     2219      48,   299,   300,   301,   302,   444,     0,     0,   212,     0,
     2220       0,     0,   780,     0,     0,     0,     0,     0,     0,     0,
     2221    1452,  1453,   212,     0,     0,     0,     0,     0,     0,     0,
     2222     462,     0,     0,  1458,     0,   472,     0,     0,     0,     0,
     2223    1458,     0,     0,   496,     0,     0,     0,     0,   480,     0,
     2224       0,     0,     0,     0,   491,     0,   495,     0,     0,     0,
     2225       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2226       0,     0,     0,  1491,     0,   524,     0,  1497,     0,     0,
     2227       0,     0,     0,     0,     0,     0,   369,     0,     0,     0,
     2228       0,     0,     0,   709,     0,     0,     0,     0,     0,     0,
     2229       0,     0,   212,     0,     0,  1519,     0,  1520,   523,     0,
     2230       0,     0,     0,   212,     0,     0,   583,     0,     0,     0,
     2231     587,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2232     212,     0,     0,   166,     0,  1535,  1536,     0,     0,     0,
     2233       0,     0,     0,  1539,  1540,     0,     0,     0,   630,     0,
     2234       0,     0,   631,   632,     0,   633,     0,     0,     0,     0,
     2235       0,     0,   644,   645,     0,   646,   647,     0,   648,     0,
     2236     649,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2237       0,     0,     0,     0,     0,   593,     0,   583,     0,     0,
     2238       0,     0,     0,     0,     0,   664,     0,     0,     0,   341,
     2239     364,     0,     0,     0,     0,     0,   369,   369,     0,     0,
     2240       0,     0,     0,     0,     0,     0,     0,     0,     0,   675,
     2241       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2242       0,     0,   413,     0,     0,     0,     0,     0,     0,   413,
     2243       0,   212,     0,     0,     0,   701,     0,     0,     0,     0,
     2244       0,   704,     0,     0,     0,     0,   462,     0,     0,     0,
     2245       0,     0,     0,   523,     0,     0,     0,     0,     0,     0,
     2246       0,   212,     8,     9,    10,    11,    12,    13,    14,    15,
    21172247      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2118       26,    27,   215,   348,     0,   355,     0,     0,     0,   356,
    2119      356,     0,  1070,    33,     0,     0,   363,   128,     0,   128,
    2120        0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
    2121        0,     0,   226,     0,     0,     0,     0,   363,     0,     0,
    2122        0,    36,     0,     0,   276,     0,     0,     0,     0,    59,
    2123        0,     0,     0,    79,     0,     0,     0,     0,     0,     0,
    2124       79,     0,     0,     0,     0,     0,     0,  1071,     0,   637,
     2248      26,    27,     0,   739,    28,    29,    30,     0,     0,     0,
     2249       0,     0,     0,   212,    33,     0,     0,     0,   757,     0,
     2250       0,   413,     0,     0,   212,     0,     0,     0,     0,     0,
     2251       0,     0,     0,     0,     0,     0,     0,     0,     0,   709,
     2252       0,     0,    36,     0,     0,     0,     0,   112,     0,    40,
     2253      41,     0,     0,     0,     0,   782,     0,     0,     0,     0,
     2254      43,    44,     0,     0,   792,     0,     0,     0,     0,     0,
     2255       0,     0,     0,     0,     0,     0,     0,     0,   413,     0,
     2256     219,     0,     0,     0,   813,     0,   413,   579,    46,   413,
     2257     582,     0,     0,   212,    47,    48,     0,   364,     0,     0,
     2258       0,   609,     0,     0,     0,     0,     0,   212,     0,     0,
     2259       0,     0,     0,     0,     0,     0,   709,     0,     0,     0,
     2260     627,     0,   852,     0,     8,     9,    10,    11,    12,    13,
     2261      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2262      24,    25,    26,    27,     0,     0,    28,    29,    30,   413,
     2263       0,     0,     0,   413,     0,     0,    33,     0,   885,     0,
     2264       0,     0,     0,     0,     0,     0,   892,     0,     0,   369,
     2265     369,     0,     0,     0,     0,     0,     0,   219,     0,     0,
     2266       0,     0,     0,   364,    36,     0,     0,     0,     0,    39,
     2267       0,   208,    41,    42,     0,   212,     0,   252,     0,     0,
     2268       0,     0,    43,    44,     0,     0,     0,     0,   930,   931,
    21252269       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2126      356,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2127        0,     0,     0,     0,     0,     0,     0,    88,   996,   128,
    2128        0,     8,     9,    10,    11,    12,     0,   128,     0,   128,
    2129      128,     0,    79,     0,   128,     0,   128,   128,     0,   363,
    2130        0,     0,   225,   348,   348,     0,   363,     0,     0,     0,
    2131      283,   284,    33,   285,     0,     0,     0,     0,     0,     0,
    2132        0,    59,     0,    81,     0,     0,     0,     0,     0,     0,
    2133        0,     0,     0,     0,     0,   356,     0,   356,     0,   286,
    2134       36,     0,     0,  1021,     0,   287,     0,     0,     0,   288,
    2135        0,     0,   289,   290,   291,   292,   293,   294,    43,    44,
    2136        0,   295,   296,     0,     0,     0,   128,     0,     0,     0,
    2137        0,     0,   356,     0,     0,     0,     0,     0,     0,   356,
    2138      356,   356,     0,     0,   297,     0,   378,     0,     0,     0,
    2139      356,   356,   344,    48,   299,   300,   301,   302,     0,     0,
    2140        0,     0,  1197,    81,     0,     0,     0,     0,     0,     0,
    2141        0,   166,     0,     0,     0,     0,   363,   363,     0,   363,
    2142      363,     0,     0,     0,     0,     0,     0,     0,   219,     0,
    2143        0,     0,     0,     0,     0,     0,     0,    88,     0,     0,
    2144        0,     0,   356,     0,     0,     0,     0,     0,     0,     0,
    2145        0,   283,   284,     0,   285,  1264,   912,     0,   913,     0,
    2146        0,     0,     0,     0,     0,   916,   917,    59,    59,     0,
    2147      922,   363,   363,     0,     0,   166,     0,     0,     0,   273,
    2148      286,     0,     0,   928,     0,     0,   287,     0,   932,    59,
    2149      288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
    2150       44,     0,   295,   296,     0,     0,     0,    59,   166,     0,
    2151        0,   356,     0,     0,     0,   594,     0,     0,   369,     0,
    2152        0,   374,     0,     0,     0,   297,     0,   378,     0,     0,
    2153     1286,     0,     0,    47,    48,   299,   300,   301,   302,     0,
    2154        0,     0,   363,     0,     0,     0,   779,     0,     0,     0,
    2155        0,     0,     0,     0,     0,     0,   348,   348,     0,    81,
    2156        0,     0,     0,     0,    59,     0,    81,     0,     0,    59,
    2157      166,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2158        0,     0,   219,     0,   226,     0,     0,     0,     0,     0,
    2159        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2160      166,     0,    59,     0,     0,    88,     0,     0,  1006,     0,
    2161     1007,  1008,  1009,     0,     0,     0,     0,   363,    81,   363,
    2162        0,     0,     0,     0,     0,   374,     0,     0,     0,  1053,
    2163        0,     0,   166,     0,     0,     0,     0,     0,     0,     0,
    2164        0,     0,     0,  1059,     0,     0,     0,     0,     0,     0,
    2165        0,     0,     0,     0,   363,     0,     0,   522,     0,     0,
    2166        0,   363,   363,   363,     0,     0,     0,     0,   128,   128,
    2167      166,     0,   363,   363,     0,     0,     0,   348,     0,     0,
    2168        0,     0,  1079,     0,     0,    88,     0,     0,     0,     0,
    2169        0,     0,     0,     0,     0,   128,     0,     0,   128,   128,
    2170        0,   128,    59,   128,   128,   592,     0,     0,   128,   128,
    2171      616,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2172        0,     0,     0,     0,   363,    59,  1109,     0,     0,     0,
    2173        0,  1119,    59,     0,     0,     0,  1122,     0,     0,     0,
    2174        0,  1126,     0,     0,     0,     0,  1128,     0,  1129,  1130,
    2175        0,     0,  1133,     0,     0,     0,     0,     0,     0,     0,
    2176        0,  1145,     0,     0,     0,     0,     0,     0,     0,     0,
    2177        0,     0,     0,     0,     0,     0,     0,  1159,  1160,     0,
    2178        0,     0,     0,     0,    59,   166,   166,     0,     0,     0,
    2179        0,   369,     0,   363,     0,     0,     0,     0,     0,     0,
    2180        0,     0,     0,  1189,     0,     0,  1191,     0,     0,     0,
    2181        0,     0,   522,     0,     0,     0,     8,     9,    10,    11,
    2182       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2183       22,    23,    24,    25,    26,    27,  -298,     0,     0,     0,
    2184      708,    88,     0,     0,   128,   128,     0,    33,    88,  1205,
    2185        0,     0,   166,     0,     0,  1209,  1210,     0,     0,     0,
    2186        0,     0,     0,     0,   522,     0,   522,     0,     0,   522,
    2187        0,   166,   522,     0,  1226,    36,     0,     0,     0,  1233,
    2188        0,     0,     0,   369,  1237,     0,  -298,     0,     0,     0,
    2189        0,     0,     0,     0,     0,  1244,     0,     0,     0,     0,
    2190       88,     0,     0,     0,     0,     0,     0,     0,  1251,     0,
    2191     1253,  1254,  1255,  1256,     0,     0,     0,   212,     0,     0,
    2192        0,     0,     0,     0,     0,  1263,   232,  1159,   236,     0,
    2193      238,   173,     0,     0,     0,   166,     0,   247,     0,     0,
    2194        0,     0,     0,     0,     0,     0,   369,     0,     0,   799,
    2195        0,     0,     0,     0,     0,     0,     0,     0,     0,  1291,
    2196     1292,     0,     0,     0,     0,     0,     0,     0,   212,     0,
    2197      236,   238,   247,     0,     0,   592,     0,     0,     0,     0,
    2198      592,     0,     0,     0,     0,     0,     0,     0,     0,   369,
    2199      369,     0,     0,     0,     0,   128,     0,     0,     0,     0,
    2200      128,     0,     0,     0,     0,   369,     0,     0,     0,     0,
    2201      212,     0,     0,  1326,  1327,     0,     0,     0,     0,     0,
    2202        0,     0,     0,  1337,     0,     0,     0,     0,     0,     0,
    2203        0,     0,     0,     0,     0,     0,     0,   522,     8,     9,
    2204       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2205       20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
    2206       28,    29,    30,   369,     0,   921,     0,     0,     0,    33,
    2207        0,   212,     0,   236,   238,   247,     0,   158,     0,     0,
    2208        0,     0,     0,     0,     0,  1372,     0,  1373,  1374,  1375,
    2209        0,     0,     0,     0,     0,     0,     0,    36,   708,  1379,
    2210        0,     0,    39,     0,    40,    41,    42,  1390,     0,   212,
    2211        0,     0,     0,     0,   212,    43,    44,     0,     0,     0,
    2212        0,     0,     0,     0,   252,     0,     0,     0,     0,   495,
    2213        0,     0,  1411,  1412,   257,     0,     0,     0,     0,     0,
    2214        0,    45,     0,    46,     0,     0,     0,     0,     0,    47,
    2215       48,   324,     0,     0,     0,   128,   616,     0,     0,     0,
    2216        0,   346,     0,     0,     0,     0,     0,     0,     0,     0,
    2217        0,     0,   381,   381,     0,     0,     0,  1451,  1452,     0,
    2218      212,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2219     1457,     0,     0,     0,     0,     0,     0,  1457,     0,   212,
    2220        0,     0,     0,   385,   236,   238,     0,     0,     0,     0,
    2221        0,     0,   247,     0,     0,     0,     0,     0,     0,     0,
    2222        0,     0,     0,     0,     0,     0,   417,     0,     0,     0,
    2223     1490,     0,     0,     0,  1496,     0,     0,     0,     0,     0,
    2224      431,     0,     0,   324,   369,     0,     0,     0,     0,   436,
    2225        0,   708,     0,     0,   212,     0,     0,     0,     0,   444,
    2226        0,     0,  1518,     0,  1519,     0,   522,   476,     0,     0,
    2227        0,     0,   212,     0,     0,     0,     0,   212,     0,   212,
    2228        0,     0,     0,   128,   462,     0,     0,     0,     0,   472,
    2229        0,   166,  1534,  1535,     0,   212,     0,     0,   212,   212,
    2230     1538,  1539,   480,     0,     0,     0,   212,     0,   490,     0,
    2231      494,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2232      212,     0,     0,     0,     0,     0,     0,   212,     0,   523,
    2233        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2234        0,     0,     0,   592,     8,     9,    10,    11,    12,    13,
    2235       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2236       24,    25,    26,    27,   369,   369,    28,    29,    30,     0,
    2237      582,     0,     0,     0,   586,    33,     0,     0,     0,     0,
    2238        0,     0,   381,     0,     0,     0,     0,     0,     0,     0,
    2239        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2240        0,     0,   629,    36,     0,     0,   630,   631,     0,   632,
    2241      208,    41,     0,     0,     0,     0,   643,   644,     0,   645,
    2242      646,   522,   647,     0,   648,     0,     0,     0,     0,     0,
    2243        0,     0,     0,     0,     0,     0,     0,     0,   212,     0,
    2244        0,   582,     0,     0,     0,     0,     0,     0,     0,   663,
    2245        0,     0,     0,     0,     0,    47,    48,     0,     0,     0,
    2246        0,     0,     0,     0,     0,     0,   212,     0,     0,     0,
    2247        0,   212,     0,   674,     0,   702,     0,     0,     0,     0,
    2248        0,     0,     0,     0,     0,     0,     0,   708,     0,     0,
    2249        0,     0,     0,     0,     0,     0,     0,     0,     0,   700,
    2250        0,     0,     0,     0,     0,   703,     0,     0,     0,     0,
    2251      462,     0,     0,     0,   735,     0,     0,     0,     0,     0,
    2252        0,     0,     0,     0,     0,     0,   751,     0,   219,     0,
    2253        0,     0,   735,     0,     0,   735,   341,   364,     0,     0,
    2254      212,     0,     0,     0,     0,     0,   738,     0,   760,     0,
    2255        0,     0,     0,     0,   212,     0,     0,     0,     0,     0,
    2256        0,   756,     0,     0,   708,     0,     0,     0,     0,   413,
    2257        0,     0,     0,     0,     0,   495,   413,     0,   789,     0,
    2258        0,     0,     0,     0,     0,   346,     0,     0,     0,   751,
    2259        0,     0,     0,     0,     0,     0,     0,     0,   781,     0,
    2260        0,     0,     0,     0,     0,     0,     0,   791,     0,     0,
    2261        0,     0,     0,     0,     0,     0,     0,   369,   369,     0,
    2262        0,     0,     0,     0,     0,   219,     0,   812,     0,     0,
    2263        0,     0,     0,     0,   212,   850,     0,     0,     0,     0,
    2264        0,     0,     0,   381,     0,   212,     0,     0,   413,     0,
    2265        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2266        0,     0,   212,     0,     0,   851,     0,     8,     9,    10,
     2270       0,     0,     0,     0,     0,     0,     0,     0,    45,   413,
     2271     271,     0,   364,     0,     0,     0,    47,    48,     0,     0,
     2272     965,     0,     0,     0,     0,   969,     0,     8,     9,    10,
    22672273      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    22682274      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
    2269       29,    30,     0,     0,     0,     0,     0,     0,    33,     0,
    2270        0,   884,     0,     0,     0,   413,     0,     0,     0,   891,
    2271        0,     0,     0,   413,   578,     0,   413,   581,     0,   926,
    2272        0,     0,     0,     0,   364,     0,    36,     0,   608,     0,
    2273        0,    39,     0,   208,    41,    42,     0,     0,   369,     0,
    2274      252,   751,     0,   950,    43,    44,     0,   626,     0,     0,
    2275        0,   929,   930,   960,     0,     0,     0,     0,     0,   967,
     2275      29,    30,   413,     0,     0,     0,   364,     0,     0,    33,
    22762276       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2277       45,     0,   271,   212,     0,     0,   413,     0,    47,    48,
    2278      413,     0,     0,   964,     0,     0,     0,     0,   968,     0,
    2279        0,     0,     0,     0,     0,   522,     0,   522,     0,   984,
    2280      985,     0,     0,   212,     0,     0,     0,     0,     0,     0,
    2281      364,     0,     0,     0,     0,   346,     0,     0,     0,     0,
     2277     369,     0,   212,     0,     0,     0,     0,     0,     0,     0,
     2278       0,     0,     0,     0,     0,  1002,     0,    36,     0,     0,
     2279       0,     0,  1003,     0,    40,    41,     0,     0,     0,     0,
     2280     413,   413,     0,     0,     0,  1005,     0,  1006,     0,     0,
     2281       0,     0,     0,     0,     0,     0,     0,     0,   795,   364,
     2282    1016,     0,     0,     0,     0,     0,  1020,   523,   609,   523,
     2283     609,   609,     0,   258,     0,   324,     0,   609,  1057,    47,
     2284      48,  1058,     0,     0,     0,   346,     0,   832,   364,     0,
     2285       0,     0,     0,   364,     0,     0,   381,   381,     0,     0,
     2286       0,     0,   364,   364,   523,     0,   523,     0,     0,     0,
     2287       0,     0,     0,     0,     0,     0,     0,     0,   364,     0,
     2288       0,     0,     0,   413,   873,     0,     0,   413,   876,     0,
     2289       0,     0,     0,   166,   878,     0,   506,     0,   508,   511,
     2290       0,     0,     0,     0,     0,     0,     0,     0,   514,   515,
     2291       0,     0,     0,   413,     0,     0,     0,     0,   283,   284,
     2292       0,   285,     0,   508,   508,     0,     0,   324,     0,     0,
     2293       0,     0,     0,     0,     0,     0,   364,   609,     0,     0,
     2294       0,     0,     0,     0,     0,     0,     0,   286,     0,  1128,
     2295       0,   476,     0,   634,     0,   141,   142,   288,   508,     0,
     2296     289,   290,   291,   292,   293,   294,    43,    44,     0,   295,
     2297     296,   364,     0,     0,     0,   413,   413,     0,     0,     0,
    22822298       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2283        0,     0,   522,     0,   522,   212,     0,     0,     0,     0,
    2284        0,     0,     0,     0,     0,     0,   212,     0,  1001,     0,
    2285        0,     0,     0,     0,  1013,  1002,   413,     0,   381,   364,
    2286        0,   166,     0,     0,     0,     0,     0,     0,  1004,     0,
    2287     1005,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2288        0,     0,     0,  1015,     0,     0,     0,   346,     0,  1019,
    2289        0,     0,     0,     0,   346,     0,     0,     0,   413,     0,
    2290        0,  1056,   364,     0,  1057,     0,     0,     0,     0,     0,
    2291        0,     0,     0,     0,     0,   212,     0,     0,     0,     0,
    2292        0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
    2293        0,     0,     0,     0,   324,     0,     0,     0,     0,     0,
    2294        0,     0,     0,     0,     0,     0,   413,   413,     0,     0,
     2299       0,     0,   297,   508,   635,     0,   636,   379,     0,     0,
     2300      47,    48,   299,   300,   301,   302,     0,     0,     0,     0,
     2301    1191,     0,     0,     0,     0,     0,     0,     0,   413,     0,
     2302       0,     0,     0,   212,     0,     0,     0,     0,     0,     0,
     2303       0,     0,     0,     0,   609,     0,   609,     0,     0,     0,
     2304       0,     0,     0,     0,  1203,     0,   609,     0,     0,  1205,
     2305       0,     0,     0,     0,     0,     0,     0,  1209,     0,     0,
     2306       0,     0,     0,     0,     0,     0,   381,     0,     8,     9,
     2307      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2308      20,    21,    22,    23,    24,    25,    26,    27,  -299,     0,
     2309       0,  1240,     0,     0,     0,     0,     0,     0,     0,     0,
     2310      33,     0,  1247,     0,     0,  1248,     0,  1249,     0,     0,
     2311       0,     0,     0,     0,     0,     0,     0,   364,     0,     0,
     2312       0,     0,  1258,  1259,   364,   413,     0,   413,    36,     0,
     2313       0,   413,     0,     0,     0,     0,     0,     0,     0,  -299,
     2314       0,     0,  1271,     0,     0,     0,     0,     0,     0,     0,
     2315       0,     0,   609,   609,     0,     0,     0,     0,     0,   703,
     2316       0,     0,   508,   508,   508,   508,   508,   508,   508,   508,
     2317     508,   508,   508,   508,   508,   508,   508,   508,   508,   508,
     2318       0,     0,     0,     0,     0,     0,     0,   413,  1310,     0,
     2319       0,     0,     0,     0,     0,     0,  1314,     0,     0,   736,
     2320       0,     0,     0,     0,     0,     0,   413,  1126,     0,     0,
     2321       0,   752,     0,     0,     0,     0,   364,   736,     0,     0,
     2322     736,     0,   413,  1137,     0,   609,   609,  1142,     0,     0,
     2323       0,     0,     0,   761,     0,     0,     0,   364,   364,     0,
     2324       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2325      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     2326       0,     0,     0,   790,     0,     0,  1361,     0,  1362,     0,
     2327     346,     0,    33,     0,   752,     0,     0,     0,     0,     0,
     2328       0,     0,     0,     0,  1371,     0,  1372,     0,     0,     0,
     2329       0,     0,     0,     0,     0,     0,     0,   413,     0,   413,
     2330      36,  1379,   508,     0,   413,     0,     0,     0,     0,     0,
     2331       0,     0,     0,   609,     0,     0,  1397,  1399,     0,     0,
     2332     851,     0,     0,     0,     0,     0,     0,  1404,   381,     0,
     2333    1209,     0,     0,     0,     0,     0,   413,  1223,     0,     0,
    22952334       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2296        0,   381,     0,     0,   794,   364,   960,     0,     0,   735,
    2297        0,     0,     0,     0,   608,     0,   608,   608,     0,     0,
    2298        0,     0,     0,   608,     0,     0,     0,     0,     0,  1131,
    2299        0,     0,     0,   831,   364,     0,     0,     0,     0,   364,
    2300     1146,     0,     0,     0,     0,     0,     0,     0,   364,   364,
    2301        0,     0,  1127,     0,     0,     0,     0,   212,     0,     0,
    2302      381,     0,  1163,     0,   364,     0,     0,     0,     0,   413,
    2303      872,     0,     0,   413,   875,     0,     0,   960,   960,   505,
    2304      877,   507,   510,     0,     0,     0,     0,     0,     0,     0,
    2305        0,   513,   514,     0,     0,     0,     0,  1194,     0,   413,
    2306        0,     0,     0,     0,     0,     0,   507,   507,     0,     0,
    2307        0,     0,     0,  1190,     0,     0,     0,     0,     0,     0,
    2308        0,     0,   364,   608,     0,     0,     0,     0,     0,     0,
    2309        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2310        0,   507,     0,     0,     0,     0,     0,  1202,     0,     0,
    2311        0,   960,  1204,     0,   212,     0,     0,   364,     0,     0,
    2312     1208,   413,   413,     0,     0,     0,     0,     0,     0,     0,
    2313      850,     0,     0,     0,     0,     0,   507,     0,     0,     0,
    2314        0,     0,     0,     0,     0,  1249,  1250,     0,     0,     0,
    2315        0,     0,     0,     0,  1239,     0,     0,     0,     0,     0,
    2316        0,     0,     0,     0,   413,  1246,     0,     0,  1247,     0,
    2317     1248,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2318      608,     0,   608,     0,     0,  1257,  1258,     0,     0,     0,
    2319        0,     0,   608,     0,     0,     0,     0,     0,     0,     0,
    2320        0,     0,     0,     0,     0,  1270,     0,     0,     0,     0,
    2321        0,     0,     0,     0,     0,  -523,     0,     0,     1,     2,
    2322        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2323       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2324       23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
    2325       31,  1309,     0,    32,     0,     0,    33,    34,     0,  1313,
    2326        0,     0,     0,   364,     0,     0,     0,     0,     0,     0,
    2327      364,   413,     0,   413,     0,     0,     0,   413,     0,     0,
    2328        0,    35,     0,     0,    36,     0,    37,  1354,    38,    39,
    2329      735,    40,    41,    42,     0,     0,     0,     0,   608,   608,
    2330        0,     0,    43,    44,   507,   507,   507,   507,   507,   507,
    2331      507,   507,   507,   507,   507,   507,   507,   507,   507,   507,
    2332      507,   507,     0,     0,     0,     0,     0,     0,    45,  1360,
    2333       46,  1361,     0,   413,     0,     0,    47,    48,     0,     0,
    2334        0,     0,     0,     0,     0,     0,     0,  1370,     0,  1371,
    2335        0,     0,   413,  1125,     0,     0,     0,     0,     0,     0,
    2336        0,     0,   364,     0,  1378,   212,     0,     0,   413,  1136,
    2337        0,   608,   608,  1141,     0,     0,     0,     0,     0,  1396,
    2338     1398,     0,     0,   364,   364,     0,     0,     0,     0,     0,
    2339     1403,     0,     0,  1208,     8,     9,    10,    11,    12,    13,
    2340       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2341       24,    25,    26,    27,  -299,  1426,     0,     0,     0,     0,
    2342        0,     0,     0,     0,  1433,    33,     0,  1435,     0,  1437,
    2343     1439,  1441,     0,     0,     0,     0,     0,     0,     0,     0,
    2344        0,     0,     0,   413,   507,   413,     0,     0,     0,     0,
    2345      413,     0,     0,    36,     0,     0,     0,     0,     0,   608,
    2346        0,     0,     0,     0,  -299,     0,     0,     0,     0,     0,
    2347     1472,     0,  1474,     0,  1208,     0,     0,     0,     0,     0,
    2348        0,     0,   413,  1222,     0,     0,     0,     0,     0,     0,
    2349     1485,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2350        0,     0,     0,     0,   324,   507,   364,     1,     2,   207,
     2335       0,     0,  1427,     0,     0,     0,     0,     0,     0,     0,
     2336     364,  1434,     0,   508,  1436,     0,  1438,  1440,  1442,     0,
     2337       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2338      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2339      25,    26,    27,   508,     0,    28,    29,    30,   483,   484,
     2340     485,   486,     0,     0,   927,    33,     0,  1473,     0,  1475,
     2341       0,  1209,     0,     0,     0,     0,     0,     0,     0,     0,
     2342       0,     0,     0,     0,     0,     0,   752,  1486,   951,     0,
     2343       0,     0,     0,    36,     0,     0,     0,   364,   961,     0,
     2344      40,    41,     0,     0,   968,     0,     0,     1,     2,     3,
    23512345       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    23522346      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2353       24,    25,    26,    27,     0,   507,    28,    29,    30,    31,
    2354        0,     0,    32,   283,   284,    33,  1022,  1023,     0,  1024,
    2355        0,     0,  1025,  1026,  1027,  1028,  1029,  1030,  1031,  1032,
    2356        0,     0,     0,  1033,     0,     0,     0,  1034,  1035,     0,
    2357       35,     0,   286,    36,     0,    37,     0,    38,  1036,     0,
    2358       40,    41,   288,   364,     0,   289,   290,   291,   292,   293,
    2359      294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
     2347      24,    25,    26,    27,     0,     0,    28,    29,    30,    31,
     2348       0,     0,     0,    32,   985,   986,    33,    34,     0,     0,
     2349     364,   364,     0,     0,     0,     0,     0,     0,     0,     0,
     2350     346,     0,     0,     0,     0,     0,     0,   508,     0,     0,
     2351       0,    35,     0,     0,    36,     0,    37,     0,    38,    39,
     2352       0,    40,    41,    42,     0,     0,     0,     0,     0,     0,
     2353       0,     0,    43,    44,     0,     0,     0,     0,     0,  1014,
     2354       0,     0,     0,   381,     0,     0,     0,   283,   284,     0,
     2355     285,     0,     0,   508,     0,     0,     0,     0,    45,     0,
     2356      46,     0,     0,     0,  -528,     0,    47,    48,     0,     0,
     2357       0,     0,   346,     0,     0,     0,   286,     0,     0,   346,
     2358       0,     0,   287,     0,     0,   508,   288,     0,     0,   289,
     2359     290,   291,   292,   293,   294,    43,    44,   508,   295,   296,
    23602360       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2361        0,     0,     0,     0,     0,     0,     0,   297,     0,   298,
    2362        0,     0,   172,     0,     0,    47,    48,   299,   300,   301,
    2363      302,     0,     0,     0,     0,  1037,   364,   364,     0,     0,
    2364     -134,     0,     0,     0,     0,     0,     0,     0,     0,   507,
    2365        1,     2,   207,     4,     5,     6,     7,     8,     9,    10,
    2366       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2367       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
    2368       29,    30,    31,     0,     0,    32,   283,   284,    33,   285,
    2369        0,     0,     0,     0,     0,   507,     0,     0,     0,     0,
     2361       0,   364,     0,     0,     0,     0,     0,     0,     0,   324,
     2362       0,   297,     0,   378,     0,     0,   379,     0,     0,    47,
     2363      48,   299,   300,   301,   302,     0,   508,     0,     0,     0,
     2364       0,     0,     0,     0,     0,     0,   381,     0,     0,     0,
     2365       0,   961,     0,     0,   736,     0,     0,     0,     0,     0,
    23702366       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2371        0,     0,     0,     0,     0,   286,    36,     0,    37,     0,
    2372       38,   287,     0,    40,    41,   288,     0,   507,   289,   290,
    2373      291,   292,   293,   294,    43,    44,     0,   295,   296,   507,
     2367       0,     0,     0,     0,  1132,     0,     0,     0,     0,     0,
     2368       0,     0,     0,     0,     0,  1147,     0,     0,     0,     0,
     2369       0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
     2370     413,     0,     0,     0,     0,   381,     0,  1164,     0,     0,
     2371       0,     0,   508,     0,     0,     0,     0,     0,     0,     0,
     2372       0,   286,   961,   961,   413,   413,     0,   287,     0,     0,
     2373       0,   288,     0,     0,   289,   290,   291,   292,   293,   294,
     2374      43,    44,  1195,   295,   296,     0,     0,     0,     0,   413,
    23742375       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2375        0,     0,     0,     0,     0,     0,     0,   364,     0,     0,
    2376      297,     0,   298,     0,     0,     0,     0,     0,    47,    48,
    2377      299,   300,   301,   302,     0,     0,     0,     0,   507,     0,
    2378        0,     0,     0,  -134,     0,     0,     0,     0,     0,     1,
    2379        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    2380       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2381       22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
    2382       30,    31,     0,     0,    32,     0,     0,    33,    34,     0,
     2376       0,     0,     0,     0,     0,     0,   297,     0,   378,     0,
     2377       0,   508,   508,   751,    47,    48,   299,   300,   301,   302,
    23832378       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2384        0,     0,     0,     0,     0,     0,   413,     0,     0,     0,
    2385        0,     0,    35,     0,   507,    36,     0,    37,     0,    38,
    2386       39,     0,    40,    41,    42,     0,     0,     0,     0,     0,
    2387      413,   413,     0,    43,    44,     0,     0,     0,     0,     0,
     2379       0,     0,     0,     0,     0,     0,   961,     0,     0,     0,
    23882380       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2389        0,     0,     0,     0,     0,   413,     0,     0,     0,    45,
    2390        0,    46,     0,     0,     0,  -527,     0,    47,    48,     0,
    2391        0,     0,     0,   507,   507,     1,     2,   207,     4,     5,
    2392        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2393       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2394       26,    27,     0,     0,    28,    29,    30,    31,     0,     0,
     2381       0,     0,     0,     0,     0,   851,     0,     0,     0,     0,
     2382       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2383    1250,  1251,     1,     2,   207,     4,     5,     6,     7,     8,
     2384       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2385      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
     2386       0,    28,    29,    30,    31,     0,     0,     0,    32,   283,
     2387     284,    33,  1023,  1024,     0,  1025,     0,     0,  1026,  1027,
     2388    1028,  1029,  1030,  1031,  1032,  1033,     0,     0,     0,  1034,
     2389       0,     0,     0,  1035,  1036,     0,    35,     0,   286,    36,
     2390       0,    37,     0,    38,  1037,     0,    40,    41,   288,     0,
     2391       0,   289,   290,   291,   292,   293,   294,    43,    44,     0,
     2392     295,   296,     0,     0,     0,     0,     0,     0,     0,     0,
     2393       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2394       0,     0,     0,   297,     0,   298,     0,     0,   172,     0,
     2395       0,    47,    48,   299,   300,   301,   302,     0,     0,     0,
     2396       0,  1038,     0,     0,     0,     0,  -134,     0,     0,     0,
     2397       0,     0,  1355,     0,     0,   736,     0,     0,     0,   508,
     2398       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2399       0,     0,     0,     0,     0,     0,   508,     0,     0,     0,
     2400       0,     0,     0,     0,     1,     2,   207,     4,     5,     6,
     2401       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2402      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     2403      27,     0,     0,    28,    29,    30,    31,     0,     0,     0,
    23952404      32,   283,   284,    33,   285,     0,     0,     0,     0,     0,
    23962405       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2397        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2406       0,     0,     0,     0,     0,     0,     0,     0,   508,   508,
    23982407     286,    36,     0,    37,     0,    38,   287,     0,    40,    41,
    23992408     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
     
    24022411       0,     0,     0,     0,     0,   297,     0,   298,     0,     0,
    24032412       0,     0,     0,    47,    48,   299,   300,   301,   302,     0,
    2404        0,     0,     0,     0,     0,     2,   207,     4,     5,     6,
    2405        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2406       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    2407       27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
    2408      283,   284,    33,   285,     0,     0,     0,     0,     0,     0,
    2409        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2410        0,     0,     0,     0,     0,     0,     0,     0,     0,   286,
    2411       36,     0,    37,     0,    38,   287,     0,    40,    41,   288,
    2412        0,   507,   289,   290,   291,   292,   293,   294,    43,    44,
    2413        0,   295,   296,     0,     0,     0,     0,     0,   507,     0,
    2414        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2415        0,     0,     0,     0,   297,     0,   343,     0,     0,     0,
    2416        0,   750,   344,    48,   299,   300,   301,   302,     2,   207,
    2417        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2418       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2419       24,    25,    26,    27,     0,     0,    28,    29,    30,     0,
    2420        0,     0,     0,   283,   284,    33,   285,     0,     0,     0,
    2421      507,   507,     0,     0,     0,     0,     0,     0,     0,     0,
    2422        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2423        0,     0,   286,    36,     0,    37,     0,    38,   287,     0,
    2424       40,    41,   288,     0,     0,   289,   290,   291,   292,   293,
    2425      294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
    2426        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2427        0,     0,     0,     0,     0,     0,     0,   297,     0,   343,
    2428        0,     0,     0,     0,   750,    47,    48,   299,   300,   301,
    2429      302,     2,   207,     4,     5,     6,     7,     8,     9,    10,
    2430       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2431       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
    2432       29,    30,     0,     0,     0,     0,   283,   284,    33,   285,
    2433        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2413       0,     0,     0,     0,     0,     0,     0,     0,  -134,     1,
     2414       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
     2415      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2416      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
     2417      30,    31,     0,     0,     0,    32,   283,   284,    33,   285,
     2418       0,     0,     0,     0,     0,     0,     0,     0,     0,   324,
    24342419       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    24352420       0,     0,     0,     0,     0,   286,    36,     0,    37,     0,
     
    24382423       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    24392424       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2440      297,     0,   343,     0,     0,     0,     0,     0,   344,    48,
     2425     297,     0,   298,     0,     0,     0,     0,     0,    47,    48,
    24412426     299,   300,   301,   302,     2,   207,     4,     5,     6,     7,
    24422427       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    24432428      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    2444        0,     0,    28,    29,    30,     0,     0,     0,     0,   283,
    2445      284,    33,   285,     0,     0,     0,     0,     0,     0,     0,
     2429       0,     0,    28,    29,    30,     0,     0,     0,     0,     0,
     2430     283,   284,    33,   285,     8,     9,    10,    11,    12,    13,
     2431      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2432      24,    25,    26,    27,     0,     0,    28,    29,    30,   286,
     2433      36,     0,    37,     0,    38,   287,    33,    40,    41,   288,
     2434       0,     0,   289,   290,   291,   292,   293,   294,    43,    44,
     2435       0,   295,   296,     0,     0,     0,     0,     0,     0,     0,
     2436       0,     0,     0,     0,    36,     0,     0,     0,     0,     0,
     2437       0,    40,    41,     0,   297,     0,   343,     0,     0,     0,
     2438       0,   751,   344,    48,   299,   300,   301,   302,     2,   207,
     2439       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2440      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2441      24,    25,    26,    27,     0,     0,    28,    29,    30,     0,
     2442       0,     0,     0,     0,   283,   284,    33,   285,     8,     9,
     2443      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2444      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
     2445      28,    29,    30,   286,    36,     0,    37,     0,    38,   287,
     2446      33,    40,    41,   288,     0,     0,   289,   290,   291,   292,
     2447     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
     2448       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
     2449       0,     0,     0,     0,     0,   208,    41,     0,   297,     0,
     2450     343,     0,     0,     0,     0,   751,    47,    48,   299,   300,
     2451     301,   302,     2,   207,     4,     5,     6,     7,     8,     9,
     2452      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2453      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
     2454      28,    29,    30,     0,     0,     0,     0,     0,   283,   284,
     2455      33,   285,     0,     0,     0,     0,     0,     0,     0,     0,
    24462456       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2447        0,     0,     0,     0,     0,     0,     0,     0,   286,    36,
    2448        0,    37,     0,    38,   287,     0,   208,    41,   288,     0,
    2449        0,   289,   290,   291,   292,   293,   294,    43,    44,     0,
    2450      295,   296,     0,     0,     0,     0,     0,     0,     0,     0,
     2457       0,     0,     0,     0,     0,     0,     0,   286,    36,     0,
     2458      37,     0,    38,   287,     0,    40,    41,   288,     0,     0,
     2459     289,   290,   291,   292,   293,   294,    43,    44,     0,   295,
     2460     296,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    24512461       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2452        0,     0,     0,   297,     0,   981,     0,     0,     0,     0,
    2453        0,   982,    48,   299,   300,   301,   302,     2,   207,     4,
    2454        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2455       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2456       25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
     2462       0,     0,   297,     0,   343,     0,     0,     0,     0,     0,
     2463     344,    48,   299,   300,   301,   302,     2,   207,     4,     5,
     2464       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2465      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2466      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
    24572467       0,     0,   283,   284,    33,   285,     0,     0,     0,     0,
    24582468       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     
    24622472      43,    44,     0,   295,   296,     0,     0,     0,     0,     0,
    24632473       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2464        0,     0,     0,     0,     0,     0,   297,     0,   378,     0,
    2465        0,     0,     0,     0,    47,    48,   299,   300,   301,   302,
    2466        1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
    2467       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2468       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
    2469       29,    30,    31,     0,     0,    32,     0,     0,    33,    34,
     2474       0,     0,     0,     0,     0,     0,   297,     0,   982,     0,
     2475       0,     0,     0,     0,   983,    48,   299,   300,   301,   302,
     2476       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
     2477      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2478      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
     2479      30,     0,     0,     0,     0,     0,   283,   284,    33,   285,
    24702480       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    24712481       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2472        0,     0,     0,    35,     0,     0,    36,     0,    37,     0,
    2473       38,    39,     0,    40,    41,    42,     0,     0,     0,     0,
     2482       0,     0,     0,     0,     0,   286,    36,     0,    37,     0,
     2483      38,   287,     0,   208,    41,   288,     0,     0,   289,   290,
     2484     291,   292,   293,   294,    43,    44,     0,   295,   296,     0,
     2485       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2486       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2487     297,     0,   378,     0,     0,     0,     0,     0,    47,    48,
     2488     299,   300,   301,   302,  -524,     0,     0,     1,     2,     3,
     2489       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2490      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2491      24,    25,    26,    27,     0,     0,    28,    29,    30,    31,
     2492       0,     0,     0,    32,     0,     0,    33,    34,     0,     0,
     2493       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2494       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2495       0,    35,     0,     0,    36,     0,    37,     0,    38,    39,
     2496       0,    40,    41,    42,     0,     0,     0,     0,     0,     0,
     2497       0,     0,    43,    44,     0,     0,     0,     0,     0,     0,
     2498       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2499       0,     0,     0,     0,     0,     0,     0,     0,    45,     0,
     2500      46,     0,     0,     0,     0,     0,    47,    48,     1,     2,
     2501       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2502      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2503      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
     2504      31,     0,     0,     0,    32,     0,     0,    33,    34,     0,
     2505       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2506       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2507       0,     0,    35,     0,     0,    36,     0,    37,     0,    38,
     2508      39,     0,    40,    41,    42,     0,     0,     0,     0,     0,
     2509       0,     0,     0,    43,    44,     0,     0,     0,     0,     0,
     2510       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2511       0,     0,     0,     0,     0,     0,     0,     0,     0,    45,
     2512       0,    46,     0,     0,     0,     0,     0,    47,    48,   206,
     2513       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
     2514      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2515      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
     2516      30,     0,     0,     0,     0,     0,     0,     0,    33,     0,
     2517       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2518       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2519       0,     0,     0,     0,     0,     0,    36,     0,    37,     0,
     2520      38,    39,     0,   208,    41,    42,     0,     0,     0,     0,
    24742521       0,     0,     0,     0,    43,    44,     0,     0,     0,     0,
    24752522       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    24762523       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2477       45,     0,    46,     0,     0,     0,     0,     0,    47,    48,
    2478      206,     2,   207,     4,     5,     6,     7,     8,     9,    10,
    2479       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2480       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
    2481       29,    30,     0,     0,     0,     0,     0,     0,    33,     0,
    2482        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2483       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    2484       27,     0,     0,    28,    29,    30,    36,     0,    37,     0,
    2485       38,    39,    33,   208,    41,    42,     0,     0,     0,     0,
    2486        0,     0,     0,     0,    43,    44,     0,     0,     0,     0,
    2487        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2488       36,     0,     0,     0,     0,     0,     0,    40,    41,     0,
    24892524      45,     0,   209,     0,     0,     0,     0,     0,    47,    48,
    24902525       1,     2,   207,     4,     5,     6,     7,     8,     9,    10,
    24912526      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    24922527      21,    22,    23,    24,    25,    26,    27,  -298,     0,    28,
    2493       29,    30,    31,     0,     0,    32,     0,     0,    33,     0,
     2528      29,    30,    31,     0,     0,     0,    32,     0,     0,    33,
    24942529       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    24952530       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2496        0,     0,     0,     0,     0,     0,    36,     0,    37,     0,
    2497       38,     0,     0,    40,    41,     0,     0,  -298,     1,     2,
    2498      207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2499       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2500       23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
    2501       31,     0,    46,    32,     0,     0,    33,     0,    47,    48,
    2502        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2503        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2504        0,     0,     0,     0,    36,     0,    37,     0,    38,     0,
    2505        0,    40,    41,   206,     2,   207,     4,     5,     6,     7,
    2506        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2507       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    2508        0,     0,    28,    29,    30,     0,     0,     0,     0,     0,
    2509       46,    33,     0,     0,     0,     0,    47,    48,     0,  1143,
    2510        0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
    2511        0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
    2512        0,    37,     0,    38,     0,     0,   208,    41,     0,     0,
    2513        0,   283,   284,    33,   285,     0,     0,     0,     0,     0,
    2514        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2515        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2516      286,    36,     0,     0,     0,   209,   287,     0,     0,     0,
    2517      288,    47,    48,   289,   290,   291,   292,   293,   294,    43,
    2518       44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
    2519        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2520        0,     0,     0,     0,     0,   297,     0,   378,     0,     0,
    2521        0,     0,     0,  1144,    48,   299,   300,   301,   302,     2,
    2522      207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2523       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2524       23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
    2525        0,     0,     0,     0,     0,     0,    33,     0,     0,     8,
    2526        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2527       19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
    2528        0,    28,    29,    30,    36,     0,    37,     0,    38,    39,
    2529       33,   208,    41,    42,     0,     0,     0,     0,     0,     0,
    2530        0,     0,    43,    44,     0,     0,     0,     0,     0,     0,
    2531        0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
    2532        0,     0,     0,     0,     0,    40,    41,     0,    45,     0,
    2533      209,     0,     0,     0,     0,     0,    47,    48,     2,   207,
    2534        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2535       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2536       24,    25,    26,    27,   258,     0,    28,    29,    30,     0,
    2537       47,    48,     0,     0,     0,    33,     0,     0,     0,     0,
    2538        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2539        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2540        0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
    2541       40,    41,     0,     2,   207,     4,     5,     6,     7,     8,
    2542        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2543       19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
    2544        0,    28,    29,    30,     0,     0,     0,     0,  -407,   670,
    2545       33,     0,     0,     0,     0,    47,    48,     0,     0,     0,
    2546        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2547        0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
    2548       37,     0,    38,     0,     0,    40,    41,     0,     0,     0,
    2549        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2550        0,     0,     0,     0,     0,     0,     0,     0,     0,  1334,
    2551        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2552        0,     0,     0,     0,   670,     0,     0,     0,     0,     0,
    2553       47,    48,     2,   207,     4,     5,     6,     7,     8,     9,
    2554       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2555       20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
    2556       28,    29,    30,     0,     0,     0,     0,     0,     0,    33,
    2557        0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2558       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2559       26,    27,     0,     0,    28,    29,    30,    36,     0,    37,
    2560        0,    38,     0,    33,    40,    41,     0,     0,     0,     0,
    2561        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2562        0,     0,     0,     0,     0,     0,     0,     0,  1336,     0,
    2563        0,    36,     0,     0,     0,     0,     0,     0,    40,    41,
    2564        0,     0,     0,   670,     0,     0,     0,     0,     0,    47,
    2565       48,     2,   207,     4,     5,     6,     7,     8,     9,    10,
    2566       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2567       21,    22,    23,    24,    25,    26,    27,    46,     0,    28,
    2568       29,    30,     0,    47,    48,     0,     0,     0,    33,     0,
    2569        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2531       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
     2532       0,    38,     0,     0,    40,    41,     0,     0,  -298,     1,
     2533       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
     2534      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2535      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
     2536      30,    31,     0,    46,     0,    32,     0,     0,    33,    47,
     2537      48,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25702538       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25712539       0,     0,     0,     0,     0,     0,    36,     0,    37,     0,
    2572       38,     0,     0,   208,    41,     0,     2,   207,     4,     5,
     2540      38,     0,     0,    40,    41,   206,     2,   207,     4,     5,
    25732541       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    25742542      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    25752543      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
    2576        0,     0,   271,    33,     0,     0,     0,     0,    47,    48,
     2544       0,     0,    46,     0,    33,     0,     0,     0,    47,    48,
    25772545       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25782546       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2579        0,    36,     0,    37,     0,    38,     0,     0,    40,    41,
    2580        0,     2,   207,     4,     5,     6,     7,     8,     9,    10,
     2547       0,     0,    36,     0,    37,     0,    38,     0,     0,   208,
     2548      41,     2,   207,     4,     5,     6,     7,     8,     9,    10,
    25812549      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    25822550      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
    2583       29,    30,     0,     0,     0,     0,     0,   670,    33,     0,
    2584        0,     0,     0,    47,    48,     0,     0,     0,     0,     0,
     2551      29,    30,     0,     0,     0,     0,     0,     0,   209,    33,
     2552       0,     0,     0,     0,    47,    48,     0,     0,     0,     0,
    25852553       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2586        0,     0,     0,     0,     0,     0,    36,     0,    37,     0,
    2587       38,     0,     0,   208,    41,     8,     9,    10,    11,    12,
    2588       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2589       23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
    2590        0,     0,     0,     0,   283,   284,    33,   285,     0,     0,
    2591        0,     0,   209,     0,     0,     0,     0,     0,    47,    48,
     2554       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
     2555       0,    38,    39,     0,   208,    41,    42,     0,     0,     0,
     2556       0,     0,     0,     0,     0,    43,    44,     0,     0,     0,
    25922557       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2593        0,     0,     0,   286,    36,     0,     0,     0,     0,   287,
    2594        0,    40,    41,   288,     0,     0,   289,   290,   291,   292,
    2595      293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
    25962558       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2597        0,     0,     0,     0,     0,     0,     0,     0,   297,     0,
    2598      515,     0,     0,   172,     0,     0,    47,    48,   299,   300,
    2599      301,   302,     8,     9,    10,    11,    12,    13,    14,    15,
     2559       0,    45,     0,   209,     0,     0,     0,     0,     0,    47,
     2560      48,     2,   207,     4,     5,     6,     7,     8,     9,    10,
     2561      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2562      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
     2563      29,    30,     0,     0,     0,     0,     0,     0,     0,    33,
     2564       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2565       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2566       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
     2567       0,    38,     0,     0,    40,    41,     2,   207,     4,     5,
     2568       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    26002569      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    26012570      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
    2602        0,   283,   284,    33,   285,     0,     0,     0,     0,     0,
     2571       0,     0,  -407,   671,    33,     0,     0,     0,     0,    47,
     2572      48,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26032573       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2574       0,     0,    36,     0,    37,     0,    38,     0,     0,    40,
     2575      41,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2576       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2577       0,     0,     0,  1335,     0,     0,     0,     0,     0,     0,
     2578       0,     0,     0,     0,     0,     0,     0,     0,   671,     0,
     2579       0,     0,     0,     0,    47,    48,     2,   207,     4,     5,
     2580       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2581      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2582      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
     2583       0,     0,     0,     0,    33,     0,     8,     9,    10,    11,
     2584      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2585      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
     2586      30,     0,    36,     0,    37,     0,    38,     0,    33,    40,
     2587      41,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2588       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2589       0,     0,     0,  1337,     0,     0,    36,     0,     0,     0,
     2590       0,     0,     0,    40,    41,     0,     0,     0,   671,     0,
     2591       0,     0,     0,     0,    47,    48,     2,   207,     4,     5,
     2592       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2593      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2594      26,    27,    46,     0,    28,    29,    30,     0,    47,    48,
     2595       0,     0,     0,     0,    33,     0,     0,     0,     0,     0,
     2596       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2597       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2598       0,     0,    36,     0,    37,     0,    38,     0,     0,   208,
     2599      41,     2,   207,     4,     5,     6,     7,     8,     9,    10,
     2600      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2601      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
     2602      29,    30,     0,     0,     0,     0,     0,     0,   271,    33,
     2603       0,     0,     0,     0,    47,    48,     0,     0,     0,     0,
     2604       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2605       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
     2606       0,    38,     0,     0,    40,    41,     2,   207,     4,     5,
     2607       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2608      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2609      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
     2610       0,     0,     0,   671,    33,     0,     0,     0,     0,    47,
     2611      48,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2612       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2613       0,     0,    36,     0,    37,     0,    38,     0,     0,   208,
     2614      41,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2615      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     2616      27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
     2617       0,   283,   284,    33,   285,     0,     0,     0,   209,     0,
     2618       0,     0,     0,     0,    47,    48,     0,     0,     0,     0,
    26042619       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26052620     286,    36,     0,     0,     0,     0,   287,     0,    40,    41,
     
    26072622      44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
    26082623       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2609        0,     0,     0,     0,     0,   297,   -40,   298,     0,     0,
    2610        0,     0,     0,    47,    48,   299,   300,   301,   302,     8,
     2624       0,     0,     0,     0,     0,   297,     0,   516,     0,     0,
     2625     172,     0,     0,    47,    48,   299,   300,   301,   302,     8,
    26112626       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    26122627      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
    2613        0,    28,    29,    30,     0,     0,     0,     0,   283,   284,
    2614       33,   285,     0,     0,     0,     0,     0,     0,     0,     0,
     2628       0,    28,    29,    30,     0,     0,     0,     0,     0,   283,
     2629     284,    33,   285,     8,     9,    10,    11,    12,    13,    14,
     2630      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2631      25,    26,    27,     0,     0,    28,    29,    30,   286,    36,
     2632       0,     0,     0,     0,   287,    33,    40,    41,   288,     0,
     2633       0,   289,   290,   291,   292,   293,   294,    43,    44,     0,
     2634     295,   296,     0,     0,     0,     0,     0,     0,     0,     0,
     2635       0,     0,     0,    36,     0,     0,     0,     0,     0,     0,
     2636     208,    41,     0,   297,   -40,   298,     0,     0,     0,     0,
     2637       0,    47,    48,   299,   300,   301,   302,     8,     9,    10,
     2638      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2639      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
     2640      29,    30,     0,     0,     0,    47,    48,   283,   284,    33,
     2641     285,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26152642       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2616        0,     0,     0,     0,     0,     0,     0,   286,    36,     0,
    2617        0,     0,     0,   287,     0,    40,    41,   288,     0,     0,
    2618      289,   290,   291,   292,   293,   294,    43,    44,     0,   295,
    2619      296,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2643       0,     0,     0,     0,     0,     0,   286,    36,     0,     0,
     2644       0,     0,   287,     0,    40,    41,   288,     0,     0,   289,
     2645     290,   291,   292,   293,   294,    43,    44,     0,   295,   296,
    26202646       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2621        0,     0,   297,     0,   298,     0,     0,     0,     0,     0,
    2622       47,    48,   299,   300,   301,   302,     8,     9,    10,    11,
    2623       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2624       22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
    2625       30,     0,     0,     0,     0,   283,   284,    33,   285,     0,
     2647       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2648       0,   297,     0,   298,     0,     0,     0,     0,     0,    47,
     2649      48,   299,   300,   301,   302,     8,     9,    10,    11,    12,
     2650      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2651      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
     2652       0,     0,     0,     0,     0,   283,   284,    33,   285,     0,
    26262653       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26272654       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     
    26352662      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    26362663      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
    2637        0,     0,   283,   284,    33,   285,     0,     0,     0,     0,
     2664       0,     0,     0,   283,   284,    33,   285,     0,     0,     0,
    26382665       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26392666       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2640        0,   286,    36,     0,     0,     0,     0,   287,     0,    40,
    2641       41,   288,     0,     0,   289,   290,   291,   292,   293,   294,
    2642       43,    44,     0,   295,   296,     0,     0,     0,     0,     0,
     2667       0,     0,   286,    36,     0,     0,     0,     0,   287,     0,
     2668      40,    41,   288,     0,     0,   289,   290,   291,   292,   293,
     2669     294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
    26432670       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2644        0,     0,     0,     0,     0,     0,   297,     0,   378,     0,
    2645        0,     0,     0,     0,    47,    48,   299,   300,   301,   302,
    2646      465,     2,   207,     4,     5,     6,     7,     8,     9,    10,
    2647       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2648       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
    2649       29,    30,     0,     0,     0,     0,     0,     0,    33,     0,
    2650        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2651       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    2652        0,     0,    28,    29,    30,     0,    36,     0,    37,     0,
    2653       38,    33,     0,    40,    41,     0,     0,     0,     0,     0,
    2654        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2655        0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
    2656        0,     0,     0,     0,   112,     0,    40,    41,     0,     0,
    2657        0,     0,     0,     0,     0,    -3,     0,    43,    44,     0,
    2658        0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
    2659       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2660       24,    25,    26,    27,     0,    46,    28,    29,    30,     0,
    2661        0,    47,    48,     0,     0,    33,   677,     8,     9,    10,
    2662       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2663       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
    2664       29,    30,     0,    36,     0,     0,     0,     0,    33,   677,
    2665       40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
    2666        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2667        0,     0,     0,     0,     0,     0,    36,     0,     0,     0,
    2668        0,     0,     0,    40,    41,     0,     0,     0,     0,   678,
    2669        0,     0,     0,   679,     0,    47,    48,     0,     0,     0,
     2671       0,     0,     0,     0,     0,     0,     0,   297,     0,   378,
     2672       0,     0,     0,     0,     0,    47,    48,   299,   300,   301,
     2673     302,   465,     2,   207,     4,     5,     6,     7,     8,     9,
     2674      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2675      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
     2676      28,    29,    30,     0,     0,     0,     0,     0,     0,     0,
     2677      33,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2678      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     2679      27,     0,     0,    28,    29,    30,     0,     0,    36,     0,
     2680      37,     0,    38,    33,   678,    40,    41,     0,     0,     0,
    26702681       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    26712682      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    2672       27,     0,   678,    28,    29,    30,  1072,     0,    47,    48,
    2673        0,     0,    33,   677,     8,     9,    10,    11,    12,    13,
    2674       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2675       24,    25,    26,    27,     0,     0,    28,    29,    30,     0,
    2676       36,     0,     0,     0,     0,    33,     0,    40,    41,     0,
     2683      27,    36,     0,    28,    29,    30,     0,     0,    40,    41,
     2684       0,     0,     0,    33,   678,     0,     0,    -3,     0,     0,
    26772685       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26782686       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2679        0,     0,     0,    36,     0,     0,     0,     0,     0,     0,
    2680      208,    41,     0,     0,     0,     0,   678,     0,     0,     0,
    2681     1199,     0,    47,    48,     0,     0,     0,     0,     8,     9,
    2682       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2683       20,    21,    22,    23,    24,    25,    26,    27,     0,   271,
    2684       28,    29,    30,     0,     0,    47,    48,     0,     0,    33,
    2685        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2686       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    2687        0,     0,    28,    29,    30,     0,     0,    36,     0,     0,
    2688        0,    33,     0,     0,    40,    41,     0,     0,     0,     0,
     2687       0,    36,     0,     0,     0,     0,     0,   679,    40,    41,
     2688       0,   680,     0,    47,    48,     0,     8,     9,    10,    11,
     2689      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2690      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
     2691      30,     0,     0,     0,     0,     0,     0,   679,    33,   678,
     2692       0,  1073,     0,    47,    48,     0,     8,     9,    10,    11,
     2693      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2694      22,    23,    24,    25,    26,    27,    36,     0,    28,    29,
     2695      30,     0,     0,    40,    41,     0,     0,     0,    33,     8,
     2696       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2697      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
     2698       0,    28,    29,    30,     0,     0,    36,     0,     0,     0,
     2699       0,    33,   679,   208,    41,     0,  1200,     0,    47,    48,
    26892700       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26902701       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
    26912702       0,     0,     0,     0,     0,     0,    40,    41,     0,     0,
    2692        0,     0,     0,   339,     0,     0,     0,     0,     0,    47,
    2693       48,     0,     0,     0,     8,     9,    10,    11,    12,    13,
     2703       0,     0,   271,     0,     0,     0,     0,     0,    47,    48,
     2704       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
    26942705      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2695       24,    25,    26,    27,     0,   678,    28,    29,    30,     0,
    2696        0,    47,    48,     0,     0,    33,     0,     0,     0,     0,
     2706      24,    25,    26,    27,     0,   339,    28,    29,    30,     0,
     2707       0,    47,    48,     0,     0,     0,    33,     8,     9,    10,
     2708      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2709      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
     2710      29,    30,     0,     0,    36,     0,     0,     0,     0,    33,
     2711       0,    40,    41,     0,     0,     0,     0,     0,     0,     0,
     2712       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2713       0,     0,     0,     0,     0,     0,     0,    36,     0,     0,
     2714       0,     0,     0,     0,    40,    41,     0,     0,     0,     0,
     2715     679,     0,     0,     0,     0,     0,    47,    48,     0,     0,
    26972716       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26982717       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2699        0,     0,     0,    36,     0,     0,     0,     0,     0,     0,
    2700       40,    41,     0,     2,   207,     4,     5,     6,     7,     8,
    2701        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2702       19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
    2703        0,    28,    29,    30,     0,     0,     0,     0,     0,   670,
    2704       33,     0,     0,     0,     0,    47,    48,     0,     0,     0,
    2705        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2706        0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
    2707       37,     0,    38,     0,     0,    40,    41,   283,   284,     0,
    2708      285,  1023,     0,  1024,     0,     0,  1025,  1026,  1027,  1028,
    2709     1029,  1030,  1031,  1032,     0,     0,  1510,  1033,     0,     0,
    2710        0,  1034,  1035,     0,    35,     0,   286,     0,     0,     0,
    2711        0,     0,  1036,  -420,     0,     0,   288,     0,     0,   289,
    2712      290,   291,   292,   293,   294,    43,    44,     0,   295,   296,
    2713        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2714        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2715        0,   297,     0,   378,     0,     0,   172,     0,     0,    47,
    2716       48,   299,   300,   301,   302,     0,     0,   283,   284,  1037,
    2717      285,  1023,     0,  1024,  -134,     0,  1025,  1026,  1027,  1028,
    2718     1029,  1030,  1031,  1032,     0,     0,     0,  1033,     0,     0,
    2719        0,  1034,  1035,     0,    35,     0,   286,     0,     0,     0,
    2720        0,     0,  1036,     0,     0,     0,   288,     0,     0,   289,
    2721      290,   291,   292,   293,   294,    43,    44,     0,   295,   296,
    2722        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2723        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2724        0,   297,     0,   378,     0,     0,   172,     0,     0,    47,
    2725       48,   299,   300,   301,   302,     0,     0,     0,     0,  1037,
    2726        0,     0,     0,     0,  -134,     2,   207,     4,     5,     6,
    2727        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2728       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    2729       27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
    2730        0,     0,    33,     0,   283,   284,     0,   285,  1023,     0,
    2731     1024,  1382,  1383,  1025,  1026,  1027,  1028,  1029,  1030,  1031,
    2732     1032,     0,     0,  1510,  1033,     0,     0,     0,  1034,  1035,
    2733       36,    35,    37,   286,    38,     0,     0,    40,    41,  1036,
    2734        0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
    2735      293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
    2736        0,  1293,     0,     0,     0,     0,     0,     0,     0,     0,
    2737        0,     0,     0,     0,     0,     0,     0,     0,   297,     0,
    2738      378,     0,     0,   172,     0,     0,    47,    48,   299,   300,
    2739      301,   302,     0,     0,   283,   284,  1037,   285,  1023,     0,
    2740     1024,  1382,  1383,  1025,  1026,  1027,  1028,  1029,  1030,  1031,
    2741     1032,     0,     0,     0,  1033,     0,     0,     0,  1034,  1035,
    2742        0,    35,     0,   286,     0,     0,     0,     0,     0,  1036,
    2743        0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
    2744      293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
    2745        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2746        0,     0,     0,     0,     0,     0,     0,     0,   297,     0,
    2747      378,     0,     0,   172,     0,     0,    47,    48,   299,   300,
    2748      301,   302,     0,     0,   283,   284,  1037,   285,  1023,     0,
    2749     1024,     0,     0,  1025,  1026,  1027,  1028,  1029,  1030,  1031,
    2750     1032,     0,     0,     0,  1033,     0,     0,     0,  1034,  1035,
    2751        0,    35,     0,   286,     0,     0,     0,     0,     0,  1036,
    2752        0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
    2753      293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
    2754        0,     0,     0,   283,   284,     0,   285,     0,     0,     0,
    2755        0,     0,     0,     0,     0,     0,     0,     0,   297,     0,
    2756      378,     0,     0,   172,     0,     0,    47,    48,   299,   300,
    2757      301,   302,   286,     0,     0,     0,  1037,     0,   633,     0,
    2758      141,   142,   288,     0,     0,   289,   290,   291,   292,   293,
    2759      294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
    2760        0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
    2761        0,     0,     0,     0,     0,     0,     0,   297,     0,   634,
    2762        0,   635,   379,     0,     0,    47,    48,   299,   300,   301,
    2763      302,   286,     0,     0,     0,     0,     0,   287,     0,     0,
    2764        0,   288,     0,     0,   289,   290,   291,   292,   293,   294,
    2765       43,    44,     0,   295,   296,     0,     0,     0,     0,     0,
    2766        0,   283,   284,     0,   285,     0,     0,     0,     0,     0,
    2767        0,     0,     0,     0,     0,     0,   297,     0,   378,     0,
    2768        0,   379,     0,     0,    47,    48,   299,   300,   301,   302,
    2769      286,     0,     0,     0,     0,     0,   287,     0,     0,     0,
     2718       0,     0,     0,   671,     0,     0,     0,     0,     0,    47,
     2719      48,     2,   207,     4,     5,     6,     7,     8,     9,    10,
     2720      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2721      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
     2722      29,    30,     0,     0,     0,     0,     0,     0,     0,    33,
     2723       0,   283,   284,     0,   285,  1024,     0,  1025,     0,     0,
     2724    1026,  1027,  1028,  1029,  1030,  1031,  1032,  1033,     0,     0,
     2725    1511,  1034,     0,     0,     0,  1035,  1036,    36,    35,    37,
     2726     286,    38,     0,     0,    40,    41,  1037,     0,     0,     0,
    27702727     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
    27712728      44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
    2772      283,   284,     0,   285,     0,     0,     0,     0,     0,     0,
     2729       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2730       0,     0,  -420,     0,     0,   297,     0,   378,     0,     0,
     2731     172,     0,     0,    47,    48,   299,   300,   301,   302,     0,
     2732       0,   283,   284,  1038,   285,  1024,     0,  1025,  -134,     0,
     2733    1026,  1027,  1028,  1029,  1030,  1031,  1032,  1033,     0,     0,
     2734       0,  1034,     0,     0,     0,  1035,  1036,     0,    35,     0,
     2735     286,     0,     0,     0,     0,     0,  1037,     0,     0,     0,
     2736     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
     2737      44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
     2738       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    27732739       0,     0,     0,     0,     0,   297,     0,   378,     0,     0,
    2774        0,     0,   750,    47,    48,   299,   300,   301,   302,   286,
    2775        0,     0,     0,     0,     0,   287,     0,     0,     0,   288,
    2776        0,     0,   289,   290,   291,   292,   293,   294,    43,    44,
    2777        0,   295,   296,     0,     0,     0,     0,     0,     0,   283,
    2778      284,     0,   285,     0,     0,     0,     0,     0,     0,     0,
    2779        0,     0,     0,     0,   297,     0,   378,     0,     0,   958,
    2780        0,     0,    47,    48,   299,   300,   301,   302,   286,     0,
    2781        0,     0,     0,     0,   287,     0,     0,     0,   288,     0,
     2740     172,     0,     0,    47,    48,   299,   300,   301,   302,     0,
     2741       0,     0,     0,  1038,     0,     0,     0,     0,  -134,     2,
     2742     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2743      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2744      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
     2745       0,     0,     0,     0,     0,     0,     0,    33,     0,   283,
     2746     284,     0,   285,  1024,     0,  1025,  1383,  1384,  1026,  1027,
     2747    1028,  1029,  1030,  1031,  1032,  1033,     0,     0,  1511,  1034,
     2748       0,     0,     0,  1035,  1036,    36,    35,    37,   286,    38,
     2749       0,     0,    40,    41,  1037,     0,     0,     0,   288,     0,
     2750       0,   289,   290,   291,   292,   293,   294,    43,    44,     0,
     2751     295,   296,     0,     0,     0,     0,  1294,     0,     0,     0,
     2752       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2753       0,     0,     0,   297,     0,   378,     0,     0,   172,     0,
     2754       0,    47,    48,   299,   300,   301,   302,     0,     0,   283,
     2755     284,  1038,   285,  1024,     0,  1025,  1383,  1384,  1026,  1027,
     2756    1028,  1029,  1030,  1031,  1032,  1033,     0,     0,     0,  1034,
     2757       0,     0,     0,  1035,  1036,     0,    35,     0,   286,     0,
     2758       0,     0,     0,     0,  1037,     0,     0,     0,   288,     0,
     2759       0,   289,   290,   291,   292,   293,   294,    43,    44,     0,
     2760     295,   296,     0,     0,     0,     0,     0,     0,     0,     0,
     2761       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2762       0,     0,     0,   297,     0,   378,     0,     0,   172,     0,
     2763       0,    47,    48,   299,   300,   301,   302,     0,     0,   283,
     2764     284,  1038,   285,  1024,     0,  1025,     0,     0,  1026,  1027,
     2765    1028,  1029,  1030,  1031,  1032,  1033,     0,     0,     0,  1034,
     2766       0,     0,     0,  1035,  1036,     0,    35,     0,   286,     0,
     2767       0,     0,     0,     0,  1037,     0,     0,     0,   288,     0,
    27822768       0,   289,   290,   291,   292,   293,   294,    43,    44,     0,
    27832769     295,   296,     0,     0,     0,     0,     0,     0,   283,   284,
    27842770       0,   285,     0,     0,     0,     0,     0,     0,     0,     0,
    2785        0,     0,     0,   297,     0,   378,     0,     0,     0,     0,
     2771       0,     0,     0,   297,     0,   378,     0,     0,   172,     0,
    27862772       0,    47,    48,   299,   300,   301,   302,   286,     0,     0,
    2787        0,     0,     0,   287,     0,     0,     0,   288,     0,     0,
     2773       0,  1038,     0,   287,     0,     0,     0,   288,     0,     0,
    27882774     289,   290,   291,   292,   293,   294,    43,    44,     0,   295,
    27892775     296,     0,     0,     0,     0,     0,     0,   283,   284,     0,
    27902776     285,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2791        0,     0,   504,     0,   378,     0,     0,     0,     0,     0,
     2777       0,     0,   297,     0,   378,     0,     0,   959,     0,     0,
    27922778      47,    48,   299,   300,   301,   302,   286,     0,     0,     0,
    27932779       0,     0,   287,     0,     0,     0,   288,     0,     0,   289,
     
    27952781       0,     0,     0,     0,     0,     0,   283,   284,     0,   285,
    27962782       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2797        0,   509,     0,   378,     0,     0,     0,     0,     0,    47,
     2783       0,   297,     0,   378,     0,     0,     0,     0,     0,    47,
    27982784      48,   299,   300,   301,   302,   286,     0,     0,     0,     0,
    27992785       0,   287,     0,     0,     0,   288,     0,     0,   289,   290,
     
    28012787       0,     0,     0,     0,     0,   283,   284,     0,   285,     0,
    28022788       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2803      512,     0,   378,     0,     0,     0,     0,     0,    47,    48,
     2789     505,     0,   378,     0,     0,     0,     0,     0,    47,    48,
    28042790     299,   300,   301,   302,   286,     0,     0,     0,     0,     0,
    28052791     287,     0,     0,     0,   288,     0,     0,   289,   290,   291,
    28062792     292,   293,   294,    43,    44,     0,   295,   296,     0,     0,
    28072793       0,     0,     0,     0,   283,   284,     0,   285,     0,     0,
    2808        0,     0,     0,     0,     0,     0,     0,     0,     0,   297,
    2809        0,   378,     0,     0,     0,     0,     0,   701,    48,   299,
     2794       0,     0,     0,     0,     0,     0,     0,     0,     0,   510,
     2795       0,   378,     0,     0,     0,     0,     0,    47,    48,   299,
    28102796     300,   301,   302,   286,     0,     0,     0,     0,     0,   287,
    28112797       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
    28122798     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
     2799       0,     0,     0,   283,   284,     0,   285,     0,     0,     0,
     2800       0,     0,     0,     0,     0,     0,     0,     0,   513,     0,
     2801     378,     0,     0,     0,     0,     0,    47,    48,   299,   300,
     2802     301,   302,   286,     0,     0,     0,     0,     0,   287,     0,
     2803       0,     0,   288,     0,     0,   289,   290,   291,   292,   293,
     2804     294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
     2805       0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
     2806       0,     0,     0,     0,     0,     0,     0,   297,     0,   378,
     2807       0,     0,     0,     0,     0,   702,    48,   299,   300,   301,
     2808     302,   286,     0,     0,     0,     0,     0,   287,     0,     0,
     2809       0,   288,     0,     0,   289,   290,   291,   292,   293,   294,
     2810      43,    44,     0,   295,   296,     0,     0,     0,     0,     0,
    28132811       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2814        0,     0,     0,     0,     0,     0,     0,     0,   297,     0,
    2815      378,     0,     0,     0,     0,     0,   344,    48,   299,   300,
    2816      301,   302,     2,   207,     4,     5,     6,     7,     8,     9,
    2817       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2818       20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
    2819        0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
    2820        0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2821       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2822       26,    27,     0,     0,    28,    29,    30,    36,     0,    37,
    2823        0,    38,    39,    33,   175,   176,    42,     0,     0,     0,
    2824        0,     0,     0,     0,     0,    43,    44,     0,     0,     0,
     2812       0,     0,     0,     0,     0,     0,   297,     0,   378,     0,
     2813       0,     0,     0,     0,   344,    48,   299,   300,   301,   302,
     2814       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
     2815      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2816      22,    23,    24,    25,    26,    27,     0,     0,     0,     0,
     2817       0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
     2818       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2819      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     2820       0,     0,    28,    29,    30,     0,    36,     0,    37,     0,
     2821      38,    39,    33,   175,   176,    42,     0,     0,     0,     0,
     2822       0,     0,     0,     0,    43,    44,     0,     0,     0,     0,
    28252823       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2826        0,    36,     0,     0,     0,     0,   112,     0,    40,    41,
    2827        0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
    2828       44,   206,     2,   207,     4,     5,     6,     7,     8,     9,
    2829       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2830       20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
    2831       28,    29,    30,     0,     0,     0,     0,     0,     0,    33,
     2824      36,     0,     0,     0,     0,   112,     0,    40,    41,     0,
     2825       0,     0,     0,     0,     0,     0,     0,     0,    43,    44,
     2826     206,     2,   207,     4,     5,     6,     7,     8,     9,    10,
     2827      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2828      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
     2829      29,    30,     0,     0,     0,     0,     0,     0,     0,    33,
    28322830       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    28332831       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     
    28372835      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    28382836      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
    2839        0,     0,     0,     0,    33,     0,     0,     0,     0,     0,
     2837       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
    28402838       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    28412839       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2842        0,     0,    36,     0,    37,     0,    38,     0,     0,    40,
    2843       41,     2,   207,     4,     5,     6,     7,     8,     9,    10,
    2844       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2845       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
    2846       29,    30,     0,     0,     0,     0,     0,     0,    33,     0,
     2840       0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
     2841      40,    41,     2,   207,     4,     5,     6,     7,     8,     9,
     2842      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2843      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
     2844      28,    29,    30,     0,     0,     0,     0,     0,     0,     0,
     2845      33,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    28472846       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2848        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2849        0,     0,     0,     0,     0,     0,    36,     0,    37,     0,
    2850       38,     0,     0,   208,    41,     8,     9,    10,    11,    12,
    2851       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2852       23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
    2853      483,   484,   485,     0,     0,     0,    33,     8,     9,    10,
    2854       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2855       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
    2856       29,    30,     0,     0,    36,     0,     0,     0,    33,     0,
    2857        0,    40,    41,     0,     0,     0,     0,     0,     0,     0,
    2858        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2859        0,     0,     0,     0,     0,     0,    36,     0,     0,     0,
    2860        0,     0,     0,   208,    41
     2847       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
     2848      37,     0,    38,     0,     0,   208,    41
    28612849};
    28622850
    28632851#define yypact_value_is_default(yystate) \
    2864   ((yystate) == (-1267))
     2852  ((yystate) == (-1263))
    28652853
    28662854#define yytable_value_is_error(yytable_value) \
     
    28692857static const yytype_int16 yycheck[] =
    28702858{
    2871        0,     1,   186,   186,   532,    45,    45,     0,   186,    45,
    2872        1,   519,     0,   186,   186,   240,   186,   205,   186,   742,
    2873      742,     0,   511,     0,   118,   742,   188,   490,   639,   595,
    2874      862,   494,  1022,   615,    34,   220,   349,     1,   597,   595,
    2875     1303,    34,   282,   349,   685,    45,    34,   169,   170,    45,
    2876      598,    51,   595,   727,   568,    34,   604,    34,    51,   425,
    2877      426,     0,   417,   480,  1005,    65,    74,    30,    68,    83,
    2878      297,    71,    65,   597,    66,    68,    34,    45,    71,    41,
    2879       71,   436,   266,   266,   187,   595,   113,    51,   266,   444,
    2880     1004,  1005,   595,   266,   266,    34,   266,   595,   266,   595,
    2881      262,   263,     0,     1,   688,    46,    47,   107,   202,   630,
    2882        0,  1112,    65,   107,    74,   115,    45,    80,   118,   119,
    2883        0,   113,   629,   630,   645,    41,   492,   108,   136,    68,
    2884      111,    41,    41,   257,   968,   364,    34,   599,   645,   368,
    2885     1403,   603,    41,   107,    34,   511,   186,   186,   148,   149,
    2886      186,   115,  1382,   115,    34,    99,   149,   157,   158,    51,
    2887       74,   161,   624,   157,   267,    45,   628,    89,   161,   892,
    2888      892,    51,   680,    71,    11,   892,   136,    41,   119,   345,
    2889      486,  1015,   703,   136,   148,    65,   186,   187,    68,   133,
    2890      186,    71,    59,   157,   187,   117,   703,   116,   425,   426,
    2891       83,   711,   202,   113,   113,   115,   115,   121,   711,   575,
    2892      210,   100,   629,   630,   113,   711,   115,   210,   186,     0,
    2893        1,  1487,   222,   115,   409,  1455,   266,   266,   645,   222,
    2894      266,  1232,   115,  1234,  1235,   801,   113,   126,   219,   113,
    2895      240,   108,   206,   663,   111,   801,   210,   888,  1514,   113,
    2896      862,   115,   252,    34,   813,   803,   148,   186,   801,   252,
    2897      260,   135,   502,  1204,   252,   265,   266,   267,   114,   149,
    2898      113,   785,   272,   252,   267,   252,   240,   504,   257,   187,
    2899     1270,   161,   509,   222,   597,   512,   703,    68,   134,   813,
    2900       71,   801,   273,   417,   252,  1034,  1035,   297,   801,   280,
    2901      911,   395,   405,   801,   114,   801,   186,   187,   272,   893,
    2902      310,   275,   436,   252,   480,   462,   118,  1258,   210,   674,
    2903      444,   738,    46,    47,   134,    53,   326,    46,    47,   423,
    2904      210,   331,   229,   297,    51,   429,   111,   120,   331,   566,
    2905      100,   341,   222,  1257,  1258,   345,   310,   341,   240,   349,
    2906      350,   248,   219,   919,   252,   939,   585,  1031,  1190,   267,
    2907      135,   781,   252,   919,   364,    74,   126,   257,   368,  1108,
    2908      114,   791,   252,   835,     3,   478,   919,   341,    87,    88,
    2909      272,   345,   802,     3,   365,   113,   266,  1437,   369,    74,
    2910      134,   120,    57,   120,   118,   395,   920,   626,   115,   118,
    2911      364,   983,    87,    88,   368,   405,   273,   136,   462,  1458,
    2912     1022,   350,   405,   280,    74,  1464,    76,    77,   310,   659,
    2913      113,   114,  1472,   423,  1474,   425,   426,    87,    88,   429,
    2914      115,   431,    94,    95,    99,  1484,  1426,  1378,   417,     0,
    2915     1489,   222,    74,  1433,   992,   993,   954,     0,    41,   615,
    2916      113,   331,   452,   345,   620,    87,    88,   436,   118,   120,
    2917      135,   425,   426,   925,  1378,   444,   929,   129,   130,   349,
    2918      470,   252,   116,   113,   891,   136,   120,   966,   478,  1313,
    2919      480,   348,   482,   115,   114,   478,   486,   649,   452,   482,
    2920      730,   114,   492,   210,   482,  1485,  1107,   405,   365,   120,
    2921      813,   465,   369,   482,   504,   482,   506,   813,   113,   509,
    2922      132,   511,   512,   135,  1098,   136,   663,   120,   640,   519,
    2923      113,   120,   115,   523,  1487,   405,   490,   417,   492,   194,
    2924      494,   134,   471,   425,   426,   134,  1370,  1371,   123,   124,
    2925      504,   120,   506,   482,  1507,   509,   436,   511,   512,   113,
    2926      674,  1514,   217,   647,   444,   272,  1080,   136,  1066,   113,
    2927      114,   115,   227,  1071,   115,   794,   117,   567,   568,   113,
    2928      478,   115,   738,  1157,  1158,   575,   700,   680,  1190,   113,
    2929      297,  1001,  1002,   134,   482,   585,   586,  1004,   120,   589,
    2930      480,   120,   482,   310,   120,   595,  1270,   597,   586,   862,
    2931      492,   120,   482,   113,   136,   115,   486,   136,   134,   663,
    2932       74,   575,    76,    77,    78,   615,   113,   136,   924,   511,
    2933      620,   585,   622,    87,    88,   120,   626,   120,   113,   629,
    2934      630,   113,   297,   115,   781,   616,  1056,  1057,   114,   121,
    2935      122,   136,   114,   136,   791,   645,   121,   647,   120,   113,
    2936      631,   615,   127,   128,  1386,   802,   620,   116,  1270,    74,
    2937      120,   120,   626,   644,   849,     4,     5,     6,     7,     8,
    2938        9,  1345,    87,    88,   120,   120,   136,   677,   617,   114,
    2939      680,   120,   114,   575,   869,    10,    11,    12,    13,    14,
    2940      136,   136,   116,   114,   114,   674,   120,   136,   113,   120,
    2941      115,   482,   120,   703,   704,   705,   931,   113,   892,   892,
    2942     1127,   711,   712,   677,   892,   595,    41,   597,   136,   892,
    2943      892,   700,   892,   615,   892,   891,   113,   781,   620,   119,
    2944      114,   113,    71,   855,    73,   452,   120,   791,   738,   136,
    2945      114,   114,   742,   743,    69,   726,   120,   120,   802,   616,
    2946     1482,   715,   691,    66,   114,  1487,  1430,   114,  1432,  1287,
    2947      120,   114,  1025,   120,   631,   113,   705,   120,  1491,  1491,
    2948      113,   113,   680,   115,  1491,  1507,   441,   644,   136,   121,
    2949      122,  1365,  1514,   118,   674,   785,   116,   504,    83,   506,
    2950      120,   894,   509,   114,   794,   512,   796,   136,  1382,   120,
    2951      680,   801,   467,   118,   897,   114,   899,   113,   996,   115,
    2952      700,   120,  1486,   813,  1426,   121,   122,   983,   114,  1239,
    2953      113,  1433,   115,   114,   120,   136,  1246,  1247,  1248,   120,
    2954      794,   711,   712,     4,     5,     6,     7,     8,     9,   504,
    2955     1257,   116,     3,   113,   509,   120,   136,   512,   738,    10,
    2956       11,    12,    13,    14,  1001,  1002,  1096,   796,   118,   726,
    2957     1100,  1101,   862,    74,    35,    76,    77,     0,     1,   114,
    2958     1454,  1455,   114,  1485,   862,   120,    87,    88,   120,   113,
    2959       41,   115,   114,   862,   884,   504,   113,   506,   120,  1309,
    2960      509,   891,   892,   512,   894,  1017,   884,   114,    31,    32,
    2961       71,    34,    73,   120,   115,   114,   906,   113,    69,  1056,
    2962     1057,   120,    45,   113,   114,   115,   114,    83,    51,   919,
    2963      920,   801,   120,   862,   924,  1096,    59,  1190,   114,  1100,
    2964      930,   931,    65,   813,   120,    68,    92,    93,    71,   930,
    2965      119,   120,   906,  1170,  1171,   122,  1173,  1001,  1002,    96,
    2966       97,    84,    85,  1180,   954,  1182,   113,   114,   115,  1467,
    2967      677,  1127,   131,  1066,   862,   929,   930,   931,  1071,   113,
    2968      114,   115,   862,   132,  1214,   108,   114,   115,   111,    74,
    2969        3,    76,    77,   983,    98,   118,   894,    10,    11,    12,
    2970       13,    14,    87,    88,  1088,    60,    61,   662,    60,    61,
    2971       62,   891,  1056,  1057,  1004,  1005,   671,   113,  1516,   115,
    2972      675,   113,   892,   115,   894,   115,   149,    74,    41,   983,
    2973      119,   120,  1022,  1286,    81,    46,    47,    84,   161,    86,
    2974       87,    88,   930,   113,  1022,   115,  1113,  1114,  1204,   931,
    2975      551,   552,    72,  1022,   924,    75,    69,   986,    78,   113,
    2976       80,   115,   113,   186,   187,  1202,   116,    87,   115,   114,
    2977       74,  1061,   116,   113,  1304,   115,  1066,    81,  1308,   202,
    2978       84,  1071,    86,    87,    88,   114,  1339,   210,   285,  1342,
    2979     1080,   862,   114,  1022,   553,   554,   219,   114,  1088,   222,
    2980      114,   983,  1239,   559,   560,   114,   229,  1061,   116,  1246,
    2981     1247,  1248,   115,   310,   311,     4,     5,     6,     7,     8,
    2982        9,   244,   118,   120,  1341,   248,   118,    74,   135,   252,
    2983      253,    78,   118,  1386,  1022,   135,   113,  1127,  1391,   114,
    2984       87,    88,  1022,   266,   267,   114,   116,   134,   345,   116,
    2985      273,   116,   134,     3,   134,    31,   120,   280,  1202,   930,
    2986       10,    11,    12,    13,    14,   114,   113,  1420,  1066,   114,
    2987      118,   113,  1309,  1071,   121,   122,   119,  1407,  1168,  1169,
    2988      114,   119,    71,   380,    73,   120,   119,   114,  1169,   114,
    2989      134,    41,   120,   213,   114,  1239,  1066,   136,   114,   906,
    2990     1190,  1071,  1246,  1247,  1248,   114,   114,   120,   331,   114,
    2991      114,   114,  1190,   114,  1204,   114,   114,   114,  1208,    69,
    2992      114,  1190,   114,     0,     1,   348,   349,  1208,   114,   114,
    2993      114,   886,    10,    11,    12,    13,    14,   119,    31,  1168,
    2994      135,   114,   365,   134,   114,   120,   369,  1127,   116,   116,
    2995      114,  1022,  1505,   114,  1208,   120,   379,    34,  1511,   114,
    2996      280,  1190,   134,    41,   113,  1309,   120,  1257,  1258,  1522,
    2997      118,   114,   395,  1526,    51,  1265,   114,  1361,   114,    85,
    2998     1270,  1169,   405,    89,    90,    91,  1501,   555,   556,   557,
    2999      558,    69,  1270,   120,    71,   114,   114,   120,   120,   114,
    3000      423,  1270,  1190,   113,   113,   113,   429,   113,   113,   115,
    3001     1190,   117,   118,  1303,   113,   136,   119,  1491,  1491,   114,
    3002     1208,   134,  1303,  1491,  1204,   114,   114,   119,  1491,  1491,
    3003      107,  1491,   352,  1491,   354,   113,  1265,   115,   132,   119,
    3004      116,  1270,   465,   121,   122,   118,   136,   470,   114,  1303,
    3005      120,   548,   549,   550,  1061,   478,   116,   116,   114,   482,
    3006      114,   116,   114,   486,     1,   116,   489,   116,   491,   116,
    3007      116,  1361,   149,    74,   116,    76,    77,    49,  1033,   136,
    3008      157,   158,  1270,  1467,   114,   119,    87,    88,  1378,  1360,
    3009     1270,    74,   136,    76,    77,    78,   136,  1168,  1169,  1492,
    3010      136,   136,   119,   526,    87,    88,   134,   114,   531,   688,
    3011      187,   119,   113,  1403,   116,  1303,    85,   118,   116,  1190,
    3012      440,   116,  1403,  1516,   116,   202,   116,   116,   205,   206,
    3013      113,   116,   115,   210,   114,   114,  1426,  1208,   121,   122,
    3014      113,    62,   113,  1433,   114,  1435,   113,  1437,  1426,  1403,
    3015      114,   134,   118,   113,   231,  1433,   579,  1426,   235,   136,
    3016      237,  1491,  1491,   116,  1433,  1491,   116,   114,   116,   246,
    3017      114,   100,   595,   100,   597,   252,   119,  1467,   113,   113,
    3018      257,  1435,  1472,  1437,  1474,   136,   114,   120,   114,   114,
    3019      267,   114,    44,   616,  1265,  1485,   134,  1426,   275,  1270,
    3020      779,  1491,  1492,  1360,  1433,     0,   136,  1485,   631,  1492,
    3021      114,  1501,   635,   114,   136,  1403,  1485,   100,  1472,   100,
    3022     1474,   644,   136,   646,   647,   648,  1516,   114,   136,   114,
    3023      116,   136,  1303,  1516,   114,   114,   136,   119,  1426,    34,
    3024       10,    11,    12,    13,    14,  1433,  1426,  1501,   116,   116,
    3025      113,  1037,   749,  1433,   119,   119,  1485,   680,   136,   114,
    3026      114,   684,   136,   686,   341,   114,    51,   690,   345,   114,
    3027      561,    41,   851,   562,   351,   698,    71,   565,   563,   963,
    3028       65,   564,  1190,    68,  1455,  1347,    71,   364,   711,   712,
    3029     1526,   368,  1280,  1101,  1492,  1308,  1433,  1485,   677,    69,
    3030     1052,   677,  1071,   726,   899,  1485,   690,   907,   579,    74,
    3031      855,    76,    77,    78,   893,   641,   253,   958,  1516,  1501,
    3032      715,  1491,    87,    88,  1279,    74,  1208,    76,    77,    78,
    3033      927,   482,  1403,    74,    -1,    76,    77,    78,    87,    88,
    3034      417,   567,    -1,   113,   726,   115,    87,    88,   113,   567,
    3035      115,   121,   122,   567,   431,  1426,   121,   122,    -1,   436,
    3036      939,    -1,  1433,   158,   149,    -1,    -1,   444,    -1,    -1,
    3037       -1,    -1,   113,    -1,   115,    -1,   161,    -1,   801,    -1,
    3038      121,   122,    -1,    -1,    -1,   462,    -1,    -1,   465,    -1,
    3039      813,    -1,   971,    -1,    -1,    10,    11,    12,    13,    14,
    3040       -1,    68,   187,   480,    -1,   482,   726,    -1,    -1,    -1,
    3041       77,    -1,    -1,   490,  1485,    -1,    -1,   494,    10,    11,
    3042       12,    13,    14,    -1,    -1,   210,    41,    -1,  1435,    -1,
    3043     1437,    74,   855,    76,    77,    -1,   231,   222,   861,    -1,
    3044     1019,    -1,    -1,    -1,    87,    88,   523,    -1,    -1,    41,
    3045       -1,    -1,   119,    -1,    69,    -1,    -1,   252,    -1,    74,
    3046       -1,    -1,   257,    78,    -1,  1472,    -1,  1474,    -1,   892,
    3047      113,   894,    87,    88,    -1,   118,    -1,    69,   901,  1434,
    3048       -1,  1436,    -1,    74,    -1,    -1,   983,    -1,    -1,    -1,
    3049       81,   568,    -1,    84,   161,    86,    87,    88,   113,    -1,
    3050       74,   924,    76,    77,    78,    -1,   121,   122,   585,   586,
    3051       -1,    -1,    -1,    87,    88,    -1,  1471,    -1,  1473,  1098,
    3052      597,   113,   945,   115,   115,  1022,    -1,    -1,   465,   121,
    3053      122,    -1,    -1,    -1,    -1,   958,    -1,     0,   615,   113,
    3054       -1,   964,    -1,   620,    -1,   968,   331,   121,   122,   626,
    3055       -1,    -1,   629,   630,    -1,   222,   351,    -1,    -1,    -1,
    3056     1515,    -1,  1517,    -1,    -1,    -1,    -1,    -1,   645,    -1,
    3057       74,    34,    76,    77,    78,  1530,  1531,    74,  1157,  1158,
    3058       -1,    78,    -1,    87,    88,    -1,   663,    -1,    -1,   526,
    3059       87,    88,  1015,   260,   531,    -1,    -1,   674,   265,    -1,
    3060       85,    68,    -1,    -1,    89,    90,    91,    -1,    71,   113,
    3061       -1,    -1,    -1,   280,    -1,    -1,   113,    84,   115,    -1,
    3062      405,    -1,   417,   700,   121,   122,   703,    -1,   113,  1052,
    3063      115,    -1,   117,   118,    -1,   712,   431,    -1,   715,    -1,
    3064       -1,   436,   579,  1066,    -1,    -1,    -1,    -1,  1071,   444,
    3065       74,    -1,   119,    -1,    -1,    -1,    -1,    81,    -1,    -1,
    3066       84,   738,    86,    87,    88,  1088,   743,   462,    -1,    -1,
    3067       10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
    3068       -1,    -1,    -1,   350,    74,   480,    -1,   482,    78,  1112,
    3069       -1,   115,    -1,    -1,   161,   158,    -1,    87,    88,    -1,
    3070       -1,    41,    -1,    -1,   781,    -1,    -1,    -1,    -1,   646,
    3071       -1,   648,    -1,    -1,   791,    68,    -1,   794,    -1,    -1,
    3072      797,    -1,    -1,   113,    -1,   802,    -1,    -1,   523,    69,
    3073       -1,   121,   122,    -1,    74,   812,    76,    77,    78,    -1,
    3074       74,  1164,    76,    77,    78,    -1,    -1,    87,    88,    -1,
    3075       -1,    -1,    -1,    87,    88,   222,    -1,    -1,    -1,    -1,
    3076       -1,   698,    -1,   430,    -1,    -1,   119,    -1,    -1,    -1,
    3077       -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,   446,
    3078       -1,   121,   122,    -1,    -1,   862,  1365,    -1,    -1,   252,
    3079       -1,   586,    -1,   260,   257,    -1,    -1,    -1,   265,    -1,
    3080       -1,    -1,    -1,  1382,   471,    -1,    -1,   884,   161,  1232,
    3081       -1,  1234,  1235,    -1,   891,    -1,    -1,   894,    10,    11,
    3082       12,    13,    14,    -1,    -1,   190,    74,    -1,    76,    77,
    3083       78,    -1,   197,    -1,   629,   630,    -1,    -1,    -1,    87,
    3084       88,    -1,    -1,   920,    -1,    -1,    -1,    -1,    -1,    41,
    3085      645,    -1,   929,   930,    -1,    -1,    -1,    -1,    -1,    -1,
    3086       -1,    -1,    -1,     0,    -1,   113,    -1,   115,   663,   222,
    3087       -1,    -1,    -1,   121,   122,  1454,  1455,    69,    -1,   674,
    3088       -1,    -1,    74,   350,    76,    77,    78,    -1,   351,    -1,
    3089     1313,    -1,    -1,    -1,    -1,    87,    88,    34,    -1,    -1,
    3090       -1,    -1,    -1,    -1,   269,   700,   983,   260,   703,    -1,
    3091       -1,    -1,   265,    -1,    -1,    -1,    -1,    -1,    -1,   996,
    3092       -1,   113,   589,   115,  1001,  1002,    -1,  1004,  1005,   121,
    3093      122,    -1,    -1,    -1,    71,    -1,    -1,  1360,  1361,    -1,
    3094       -1,    -1,    -1,   738,    -1,  1022,    -1,  1370,  1371,    -1,
    3095      617,    -1,    -1,    -1,   417,   622,    -1,    -1,    -1,    -1,
    3096       -1,   326,    74,   430,    76,    77,    78,    -1,   431,   334,
    3097       -1,    -1,   337,   436,    -1,    87,    88,    -1,    -1,  1056,
    3098     1057,   444,    -1,    -1,    -1,  1408,   781,    10,    11,    12,
    3099       13,    14,    -1,    -1,    -1,    -1,   791,   350,    -1,   462,
    3100       -1,   113,   797,    -1,   471,    -1,    -1,   802,   945,   121,
    3101      122,    -1,    -1,    -1,    -1,    -1,    -1,   480,    41,   482,
    3102       -1,   158,    -1,    -1,   691,    -1,    -1,   964,    -1,     0,
    3103        1,   968,   397,    -1,    -1,    -1,   401,    -1,   705,    -1,
    3104       -1,    -1,    -1,    -1,  1467,  1468,    69,    -1,    -1,    -1,
    3105     1127,    74,    -1,    32,  1477,    78,    -1,    -1,    -1,   726,
    3106      523,    -1,    -1,    34,    87,    88,    -1,   862,  1491,  1492,
    3107       -1,    -1,    -1,    -1,    -1,    -1,    -1,   430,  1015,    -1,
    3108       10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,   884,
    3109      113,    -1,  1169,  1516,    -1,    -1,   891,    68,   121,   122,
    3110       71,    -1,    28,    29,    30,    84,    85,    -1,    -1,    -1,
    3111       -1,    41,   477,  1190,    -1,   252,    -1,    -1,   471,    -1,
    3112      257,    -1,   589,   586,    -1,  1202,    -1,  1204,    -1,   796,
    3113       -1,  1208,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
    3114       -1,    -1,    -1,    -1,    74,     0,    76,    77,    78,    -1,
    3115      617,    -1,    -1,    -1,    -1,   622,    -1,    87,    88,    -1,
    3116       -1,    -1,  1239,    -1,    -1,    -1,   629,   630,    -1,  1246,
    3117     1247,  1248,    -1,    -1,   100,  1112,   102,    -1,    -1,    34,
    3118     1257,  1258,   645,   113,    -1,   115,    -1,   158,    -1,    -1,
    3119       -1,   121,   122,  1270,    -1,    -1,    -1,    -1,    -1,    -1,
    3120      663,    -1,   567,   568,    -1,    -1,  1001,  1002,    -1,  1004,
    3121     1005,   674,    -1,    -1,   351,    -1,    71,    -1,    -1,    -1,
    3122       -1,    -1,    -1,    -1,   691,    -1,  1303,  1022,    -1,    -1,
    3123       -1,    -1,  1309,    -1,    -1,    -1,   589,   700,   705,    -1,
    3124      703,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3125       -1,   222,    -1,    -1,    -1,    -1,   182,    -1,    -1,    -1,
    3126       -1,  1056,  1057,    -1,   617,   244,   192,   193,    -1,   622,
    3127       -1,   197,    -1,   199,   200,   738,    -1,    -1,    -1,    -1,
    3128      417,   252,    -1,    -1,    -1,   650,    -1,    -1,    -1,   654,
    3129       -1,    -1,    -1,    -1,   431,  1232,    -1,  1234,  1235,   436,
    3130       -1,  1378,    -1,   158,    -1,    -1,    -1,   444,    -1,    -1,
    3131       -1,    10,    11,    12,    13,    14,    -1,    -1,   781,   986,
    3132       -1,    -1,    -1,    -1,    -1,   462,  1403,    -1,   791,   796,
    3133       -1,    -1,  1127,    -1,   797,    -1,    -1,    -1,   691,   802,
    3134       -1,    -1,    41,   480,    -1,   482,    -1,    -1,    -1,  1426,
    3135       -1,    -1,   705,    -1,    -1,    -1,  1433,   101,   102,   103,
    3136      104,   105,   106,   107,   108,   109,   110,   111,    -1,    -1,
    3137       69,    -1,    -1,    -1,  1169,    74,  1313,    76,    77,    78,
    3138       -1,    -1,    -1,    -1,    -1,    -1,   523,    -1,    87,    88,
    3139       -1,   135,    -1,    -1,    -1,  1190,    -1,   252,    -1,   862,
    3140      379,    -1,   257,    -1,    -1,    -1,    -1,  1202,  1485,  1204,
    3141       -1,    -1,    -1,    -1,   113,  1492,    -1,    -1,    -1,    -1,
    3142      785,   884,   121,   122,    -1,    -1,    -1,    -1,   891,    -1,
    3143       -1,    -1,    -1,  1370,  1371,    -1,    -1,    -1,    -1,    -1,
    3144       -1,    -1,    -1,   796,  1239,    -1,    -1,    -1,    -1,   586,
    3145       -1,  1246,  1247,  1248,    -1,    -1,    -1,    -1,    -1,    -1,
    3146      431,    -1,  1257,  1258,    -1,    -1,    -1,    -1,    -1,    -1,
    3147       -1,  1408,    -1,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
     2859       0,     1,    45,   118,    45,   240,   520,     0,   186,    45,
     2860     533,   512,   186,   186,   863,   205,   640,   220,   186,   107,
     2861       1,   743,   569,   743,   186,   743,   186,     0,   863,   169,
     2862     170,   616,   349,     0,    34,   598,    34,   257,   188,   596,
     2863       0,    34,   186,  1023,   491,    45,  1005,  1006,   495,   349,
     2864     282,    51,   596,   598,   686,     0,     1,    45,    51,  1304,
     2865     187,    34,  1006,    45,   596,    65,    45,    34,    68,   157,
     2866     728,    71,    65,   364,    34,    68,   596,   368,    71,   114,
     2867    1035,  1036,   689,   596,   121,    45,   187,   202,   266,    34,
     2868      71,    51,   266,   266,    84,    42,     0,   417,   266,   596,
     2869     137,   136,   114,    59,   266,    65,   266,   107,    68,    42,
     2870     596,    71,   262,   263,   297,   115,   436,   600,   118,   119,
     2871     631,   604,   266,    68,   444,    66,    71,   969,    30,     0,
     2872      34,    54,    47,    48,   114,   646,    47,    48,     0,     1,
     2873     267,   599,   625,   186,     0,   186,   629,   605,   148,   149,
     2874     186,   345,   108,  1113,  1109,   111,   149,   157,   158,  1404,
     2875    1383,   161,    42,    34,   630,   631,   267,   681,   161,   116,
     2876     487,   893,    34,   893,  1016,   893,  1438,    11,    34,    81,
     2877     646,   425,   426,    47,    48,   114,   186,   187,  1023,   149,
     2878      67,   114,   712,   704,   187,   112,   137,   417,   186,   712,
     2879     108,   161,   202,   111,   186,   120,   409,   186,   119,    71,
     2880     210,  1473,    68,  1475,   100,   712,   436,   210,   114,   136,
     2881     116,    75,   222,   266,   444,   266,   186,   187,   117,   222,
     2882     266,  1097,   480,  1456,   114,  1101,   116,   114,   704,   786,
     2883     240,    32,   425,   426,   462,   802,    42,    42,   134,   493,
     2884     210,   814,   252,   341,   252,   119,    75,   889,   802,   252,
     2885     260,  1205,   222,   219,    84,   265,   266,   267,   512,   814,
     2886     802,   503,   272,  1233,   267,  1235,  1236,   222,   405,   252,
     2887     395,    75,   802,   137,   257,   252,   480,   894,   912,   802,
     2888      51,  1271,   252,    84,    85,   586,   116,   297,   598,  1258,
     2889    1259,    42,  1488,   122,   405,   802,   266,   252,   423,    90,
     2890     310,   219,   119,   101,   429,  1259,   802,   273,   114,   114,
     2891     116,   116,   505,   898,   280,   900,   326,   510,    42,  1515,
     2892     513,   331,   576,   940,   121,   101,   627,   118,   331,   127,
     2893    1488,   341,  1191,   137,   133,   345,   804,   136,   252,   349,
     2894     350,   478,     3,   836,   115,   675,  1191,   121,   921,   115,
     2895    1508,   127,   121,   920,   364,   273,   222,  1515,   368,   114,
     2896     115,   331,   280,   114,  1032,   116,   920,   478,   137,   135,
     2897      75,   252,   630,   631,   567,  1459,   257,   148,   920,   349,
     2898     252,  1465,   348,    88,    89,   395,   252,   115,   646,   984,
     2899     114,    75,   116,    77,    78,   405,     0,   285,   121,   365,
     2900     115,  1485,   405,   369,    88,    89,  1490,   135,   229,   114,
     2901    1379,   116,   616,   423,   137,   425,   426,   621,   660,   429,
     2902     135,   431,   310,   311,   121,  1379,  1271,   248,  1387,   124,
     2903     125,   955,   116,   926,   417,   405,   664,  1427,   121,   210,
     2904     137,   121,   452,   244,  1434,   675,   704,   365,   116,   121,
     2905     118,   369,    75,   436,   137,   135,   967,   345,    93,    94,
     2906     470,   444,  1314,   135,   121,    88,    89,   135,   478,   240,
     2907     480,   701,   482,   930,  1108,   478,   114,   487,   116,   482,
     2908     137,   739,  1099,   493,   350,     3,   114,   814,   116,   731,
     2909     650,   641,   380,   116,   795,   505,  1486,   507,     0,   482,
     2910     510,   272,   512,   513,   814,   482,   121,   115,  1081,   114,
     2911     520,   116,   482,   121,   524,    95,    96,   487,   121,  1371,
     2912    1372,   121,   137,   648,  1483,   993,   994,   482,   114,  1488,
     2913     116,   121,    75,   114,   137,   739,   417,   137,   121,   310,
     2914     114,  1158,  1159,  1067,   681,    88,    89,   137,  1072,  1508,
     2915     130,   131,   135,   121,   782,   436,  1515,   117,   568,   569,
     2916     136,   121,   114,   444,   792,   121,   576,   121,   482,   137,
     2917     681,   121,   114,   116,   345,   803,   586,   587,   379,   115,
     2918     590,   137,  1427,   137,   114,   121,   596,   137,   598,  1434,
     2919       4,     5,     6,     7,     8,     9,     0,     1,   925,   480,
     2920     117,   482,   114,  1271,   121,   471,   616,   114,   122,    75,
     2921     482,   621,   115,   623,   128,   129,   482,   627,   121,   115,
     2922     630,   631,    88,    89,   115,   121,   596,   115,   598,    75,
     2923      34,    77,    78,    79,   892,   117,   646,   850,   648,   121,
     2924     115,  1486,    88,    89,    10,    11,    12,    13,    14,   120,
     2925     115,   617,   115,   115,   425,   426,   121,   870,    72,   121,
     2926      74,   549,   550,   551,    68,   117,   632,    71,   678,   121,
     2927      75,   681,   114,   587,   116,   115,    42,    82,  1346,   645,
     2928      85,   121,    87,    88,    89,     0,     1,   932,   892,   490,
     2929     115,   492,   675,   117,   704,   705,   706,   121,   114,   617,
     2930     116,   114,   712,   713,    70,   893,   856,   115,   115,   893,
     2931     893,   681,   114,   121,   632,   893,    31,    32,   701,    34,
     2932     115,   893,   493,   893,    84,   115,   121,   645,   114,   739,
     2933      45,   121,   115,   743,   744,   114,    51,   116,   121,   893,
     2934     115,   512,   712,   713,    59,   115,   121,  1005,   137,  1366,
     2935      65,   121,   618,    68,   158,  1288,    71,   114,   895,   116,
     2936    1492,   727,  1492,  1431,  1492,  1433,  1383,   115,   114,    84,
     2937      85,   115,   115,   121,  1002,  1003,   786,   121,   121,   114,
     2938     984,   114,   115,   116,   895,   795,    75,   797,    77,    78,
     2939      79,    67,   802,   108,   675,   115,   111,   997,   137,    88,
     2940      89,   121,   115,   118,   814,   576,    97,    98,   121,   727,
     2941      51,     4,     5,     6,     7,     8,     9,   115,   222,  1487,
     2942     701,   120,   121,   121,   119,   114,   692,   115,   116,  1057,
     2943    1058,   137,   802,   119,   149,   636,    61,    62,  1455,  1456,
     2944     706,   137,    35,   114,   814,   616,   161,   119,   252,   505,
     2945     621,   507,    75,   863,   510,  1097,    79,   513,   739,  1101,
     2946    1102,   114,   750,   120,   121,    88,    89,   114,  1018,    84,
     2947    1128,   186,   187,   123,   115,   885,    47,    48,     1,    72,
     2948     863,    74,   892,   893,   685,   895,   687,   202,  1114,  1115,
     2949     691,   114,   132,   116,   133,   210,    99,   907,   116,   122,
     2950     123,   552,   553,    75,   219,    77,    78,   222,   863,   117,
     2951     920,   921,   554,   555,   229,   925,    88,    89,   114,   117,
     2952     116,   931,   932,   893,  1128,   895,   122,   123,   115,   244,
     2953    1067,   797,   115,   248,   115,  1072,   115,   252,   253,   115,
     2954     931,   115,   114,   116,  1468,   955,   114,   119,   117,   863,
     2955     136,   266,   267,   560,   561,   925,  1067,   119,   273,   119,
     2956     121,  1072,   119,   114,  1089,   280,   114,   115,   116,   210,
     2957     136,   885,   115,  1215,   984,  1203,   931,   115,  1171,  1172,
     2958     117,  1174,   863,   556,   557,   558,   559,   117,  1181,   117,
     2959    1183,   863,   121,  1517,   135,  1005,  1006,   863,    31,   135,
     2960    1258,  1205,   114,   115,   116,     4,     5,     6,     7,     8,
     2961       9,   892,  1240,  1023,   135,    75,   331,    77,    78,  1247,
     2962    1248,  1249,    75,   115,    77,    78,   115,   431,    88,    89,
     2963     114,   272,   116,   348,   349,    88,    89,     3,   122,   123,
     2964    1023,   114,   115,   116,    10,    11,    12,    13,    14,   119,
     2965     365,   120,  1062,   115,   369,   856,   297,  1067,   121,   931,
     2966     114,   862,  1072,  1305,   379,   120,   119,  1309,  1023,   310,
     2967     120,  1081,   115,    72,   135,    74,    42,   115,   482,  1089,
     2968     395,   137,  1310,    61,    62,    63,   121,     1,   462,   115,
     2969     405,   114,    75,   116,    77,    78,   984,  1067,   115,   122,
     2970     123,   902,  1072,   121,    70,    88,    89,   115,   423,  1023,
     2971     115,   115,   115,   115,   429,     3,    31,   115,  1128,   115,
     2972     524,   987,    10,    11,    12,    13,    14,   115,   115,   115,
     2973     253,   114,   121,    75,   115,  1023,   119,    51,   137,    68,
     2974      82,   115,  1023,    85,   115,    87,    88,    89,   115,  1342,
     2975     465,  1023,   120,   115,    42,   470,   136,  1023,   959,  1169,
     2976    1170,   932,   135,   478,   115,    72,  1408,   482,    75,   117,
     2977     117,    78,   487,    80,   116,   490,   115,   492,   115,  1170,
     2978      87,  1191,    70,   587,    75,   121,    77,    78,    79,   115,
     2979     119,   135,   114,   107,   121,  1205,     3,    88,    89,  1209,
     2980     119,   115,   115,    10,    11,    12,    13,    14,  1191,    75,
     2981     115,   452,   527,   984,  1169,  1170,    82,   532,  1209,    85,
     2982     115,    87,    88,    89,   121,   115,   630,   631,   115,   121,
     2983     115,   135,   161,   114,   148,    42,  1191,  1362,   121,   114,
     2984     114,   114,   646,   157,   114,   117,   115,  1128,  1258,  1259,
     2985     116,   137,  1053,   120,  1209,   115,  1266,  1502,   120,   115,
     2986     119,  1271,   133,    70,   505,   580,   507,   863,   120,   510,
     2987     115,   117,   513,   137,   121,   117,   115,  1191,   115,   117,
     2988      50,   596,   117,   598,   117,   115,   117,   137,  1271,   117,
     2989     664,   117,   206,   222,  1304,   115,   210,   137,  1170,   120,
     2990     704,   137,   617,  1169,  1492,   137,   213,   120,  1492,  1492,
     2991    1191,  1266,   137,  1304,  1492,   115,  1271,   632,   135,  1191,
     2992    1492,   636,  1492,   120,  1205,  1191,   240,   117,    86,   117,
     2993     645,   260,   647,   648,   649,    86,   265,  1209,  1492,    90,
     2994      91,    92,   465,  1468,   117,   117,   117,   115,   117,  1304,
     2995     115,   117,  1362,   114,   114,   114,  1493,  1271,   272,    63,
     2996     115,   275,   115,   114,  1165,   116,   681,   118,   119,  1379,
     2997     685,   119,   687,   280,   114,    75,   691,    77,    78,    79,
     2998    1517,   137,  1493,   297,   699,   117,   117,   115,    88,    89,
     2999    1271,   117,   115,   101,  1404,  1361,   310,   712,   713,  1271,
     3000    1266,   114,   101,   114,   527,  1271,  1517,   137,   782,   532,
     3001     120,    45,   727,  1404,   114,   121,   116,  1427,   792,   115,
     3002     115,   350,   122,   123,  1434,   115,  1436,   341,  1438,   803,
     3003    1026,   345,  1304,   115,   135,   135,   115,   678,   115,  1492,
     3004     137,  1492,   101,  1361,  1427,   352,  1492,   354,   137,  1404,
     3005     364,  1434,   101,    57,   368,   664,    86,   580,  1468,   863,
     3006      90,    91,    92,  1473,   137,  1475,   137,   115,     0,     1,
     3007     115,   117,  1427,   137,   115,   115,  1486,   120,   117,  1434,
     3008     117,   885,  1492,  1493,   114,   137,   116,   802,   118,   119,
     3009    1493,   114,  1502,   137,   120,    99,    75,   115,   120,   814,
     3010      79,   430,    34,  1486,   115,   137,   115,  1517,   115,    88,
     3011      89,   425,   426,  1427,  1517,  1038,   562,   564,   563,    51,
     3012    1434,   565,  1492,   964,   647,   566,   649,   931,  1191,  1348,
     3013    1456,  1486,  1404,   440,  1527,   114,  1281,  1102,   452,    71,
     3014       0,   856,   471,   122,   123,  1309,  1427,   862,  1434,  1053,
     3015    1072,   465,   678,  1434,   678,  1427,   691,   908,   900,   580,
     3016     959,  1427,  1434,   856,   642,   928,   716,   568,  1434,  1209,
     3017     482,   727,  1486,   782,    34,   107,   699,   491,   893,   493,
     3018     895,   495,    -1,   792,   568,    -1,   568,   902,    -1,    -1,
     3019     194,   505,    -1,   507,   803,  1191,   510,    -1,   512,   513,
     3020      -1,  1005,  1006,    -1,    -1,  1486,    -1,    -1,    -1,    -1,
     3021     925,    71,    -1,   217,  1486,    -1,    -1,   149,    -1,  1023,
     3022    1486,    -1,    -1,   227,    -1,   157,   158,    -1,  1002,  1003,
     3023      -1,   946,    -1,    -1,    -1,    75,    10,    11,    12,    13,
     3024      14,    -1,    82,    -1,   959,    85,    -1,    87,    88,    89,
     3025     965,    -1,    -1,    -1,   969,   187,    -1,    -1,    -1,    -1,
     3026      -1,   590,   576,    -1,    -1,    -1,   907,    -1,    42,    -1,
     3027     202,    -1,   586,   205,   206,    -1,   116,   689,   210,    -1,
     3028      -1,    -1,    -1,  1057,  1058,    -1,    -1,    -1,    -1,   618,
     3029      -1,  1287,    -1,   297,   623,    -1,    70,    -1,   158,   231,
     3030      -1,  1016,   616,   235,    -1,   237,    -1,   621,    -1,    -1,
     3031      -1,    -1,    -1,   627,   246,    -1,    -1,    -1,    -1,    -1,
     3032     252,    -1,    -1,    -1,    -1,   257,    -1,    -1,    -1,    -1,
     3033      -1,  1502,    -1,    -1,    -1,   267,    -1,    -1,  1053,    -1,
     3034     114,    75,   116,   275,  1340,    79,    -1,  1343,   122,   123,
     3035      -1,    -1,  1067,    -1,    88,    89,    75,  1072,    77,    78,
     3036      79,    -1,    -1,   692,   678,  1169,  1170,    -1,   780,    88,
     3037      89,   231,    -1,    -1,  1089,    -1,    -1,   706,   190,    -1,
     3038     114,    -1,    -1,    -1,    -1,   197,    -1,  1191,   122,   123,
     3039      -1,  1387,   252,  1002,  1003,   114,  1392,   257,  1113,    -1,
     3040      -1,    -1,   716,   122,   123,  1209,    -1,    -1,    -1,   341,
     3041      -1,    -1,    -1,   345,    75,    -1,    77,    78,    79,   351,
     3042     727,  1062,    -1,   946,    -1,  1421,    -1,    88,    89,  1203,
     3043      -1,    -1,   364,    -1,    -1,    -1,   368,   441,    -1,    -1,
     3044     852,    -1,   965,    -1,    51,    -1,   969,    -1,  1057,  1058,
     3045    1165,    68,    -1,   114,  1258,  1259,    -1,   269,    65,    -1,
     3046      77,    68,  1266,   467,    71,    -1,  1240,  1271,   797,    -1,
     3047      -1,    -1,    -1,  1247,  1248,  1249,    75,    -1,    77,    78,
     3048      79,   795,   894,    -1,    -1,   417,    -1,    -1,    -1,    88,
     3049      89,   351,    -1,  1016,    -1,    -1,    -1,    -1,    -1,   431,
     3050    1304,   505,   119,    -1,   436,    -1,   510,    -1,    -1,   513,
     3051    1506,    -1,   444,    -1,   326,   114,  1512,   116,  1233,    -1,
     3052    1235,  1236,   334,   122,   123,   337,    -1,  1523,   940,    -1,
     3053     462,  1527,    -1,   465,    -1,    -1,  1310,    -1,    -1,    -1,
     3054      -1,    -1,   149,    -1,   161,    -1,    -1,    -1,   480,    -1,
     3055     482,    -1,    -1,    -1,   161,    -1,    -1,   417,    -1,   491,
     3056     972,    -1,    -1,   495,    -1,    10,    11,    12,    13,    14,
     3057      -1,   431,    -1,    -1,    -1,  1379,   436,    -1,    -1,     0,
     3058     187,    -1,    68,    -1,   444,   397,    -1,    -1,    -1,   401,
     3059    1113,    -1,   524,   907,    -1,    -1,    -1,    42,    84,  1314,
     3060    1404,    -1,   462,   210,    -1,   222,    -1,    -1,  1020,    -1,
     3061      -1,    -1,    -1,    34,    -1,   222,   930,   931,   932,    -1,
     3062     480,    -1,   482,  1427,    -1,    70,    -1,    -1,    -1,    -1,
     3063    1434,  1240,    -1,   119,    -1,    -1,    -1,   569,  1247,  1248,
     3064    1249,    -1,    -1,   260,    -1,    -1,  1361,  1362,   265,    -1,
     3065      71,    -1,    -1,    -1,   586,   587,  1371,  1372,   987,   663,
     3066      -1,    -1,    -1,   280,   524,   477,   598,    -1,   672,   114,
     3067     984,   116,   676,    -1,    -1,   161,    -1,   122,   123,    -1,
     3068      -1,    -1,  1486,    -1,   616,    -1,    -1,  1099,    -1,   621,
     3069      -1,    -1,    -1,    -1,  1409,   627,    -1,    -1,   630,   631,
     3070      -1,  1310,    -1,    75,    -1,    77,    78,    79,    -1,    -1,
     3071    1233,    -1,  1235,  1236,   646,    -1,    88,    89,    -1,    -1,
     3072      -1,    -1,    -1,    -1,   331,    -1,    -1,   587,    -1,    -1,
     3073      -1,    -1,   664,   350,    -1,    -1,   222,   158,    -1,    -1,
     3074      -1,    -1,   114,   675,   116,    -1,  1158,  1159,  1062,    -1,
     3075     122,   123,    -1,  1468,  1469,    -1,   568,   569,    -1,    -1,
     3076      -1,    -1,    75,  1478,    77,    78,    79,    -1,    -1,   701,
     3077     630,   631,   704,    -1,   260,    88,    89,  1492,  1493,   265,
     3078      -1,   713,    -1,    -1,   716,    -1,   646,    -1,    -1,    -1,
     3079      -1,  1314,    -1,    -1,    -1,  1436,    -1,  1438,   405,    -1,
     3080      -1,   114,  1517,   116,   664,    -1,    -1,   739,    -1,   122,
     3081     123,    -1,   744,   430,    75,   675,    77,    78,    79,    -1,
     3082      -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,   446,
     3083      -1,   252,  1473,    -1,  1475,    -1,   257,    -1,    -1,   651,
     3084    1169,   701,    -1,   655,   704,    -1,    -1,    -1,  1371,  1372,
     3085     782,    -1,    -1,   114,   471,    -1,    -1,    -1,    -1,    -1,
     3086     792,   122,   123,   795,   350,    -1,   798,    -1,    -1,    -1,
     3087      -1,   803,    -1,    -1,    -1,    -1,     0,    -1,    -1,   739,
     3088      -1,   813,    -1,   887,    -1,    -1,  1409,    -1,    -1,    -1,
     3089      -1,    -1,    -1,    -1,    -1,  1209,    10,    11,    12,    13,
     3090      14,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
     3091      34,   102,   103,   104,   105,   106,   107,   108,   109,   110,
     3092     111,   112,   782,    -1,    -1,    -1,    -1,    -1,    42,    -1,
     3093     351,   863,   792,    42,    -1,    -1,    -1,  1266,   798,    -1,
     3094      -1,    -1,    -1,   803,   430,   136,  1469,    71,    -1,    -1,
     3095      -1,    -1,    -1,   885,  1366,  1478,    70,    -1,    -1,    -1,
     3096     892,    70,    -1,   895,    -1,    -1,    75,    -1,    77,    78,
     3097      79,  1383,    -1,   590,   786,    -1,    -1,    -1,    -1,    88,
     3098      89,    -1,    -1,    -1,    -1,   471,    -1,    -1,    -1,   921,
     3099    1304,    -1,    -1,    -1,    -1,    -1,   417,    -1,   930,   931,
     3100     114,   618,   116,   863,    -1,   114,   623,   116,   122,   123,
     3101     431,    -1,    -1,   122,   123,   436,    -1,     0,    -1,    -1,
     3102      -1,    -1,    -1,   444,    -1,   885,    -1,    -1,    -1,    -1,
     3103    1034,    -1,   892,    -1,   158,    -1,    10,    11,    12,    13,
     3104      14,   462,    -1,  1455,  1456,    -1,    -1,    -1,    -1,    -1,
     3105      -1,    34,   984,    -1,    -1,    -1,    -1,    -1,    -1,   480,
     3106      -1,   482,    -1,    -1,    -1,   997,    -1,    -1,    42,    -1,
     3107    1002,  1003,    -1,  1005,  1006,   692,    -1,    -1,    -1,    -1,
     3108      28,    29,    30,    -1,    -1,    -1,    -1,   899,    71,   706,
     3109    1404,  1023,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,
     3110      -1,    75,    -1,   524,   590,    79,    -1,    -1,    -1,    -1,
     3111     727,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,    -1,
     3112      -1,    -1,  1436,    -1,  1438,  1057,  1058,    -1,   252,    -1,
     3113      -1,    -1,   618,   257,    -1,    -1,    -1,   623,    -1,    -1,
     3114     114,    -1,  1002,  1003,    -1,  1005,  1006,    -1,   122,   123,
     3115      -1,    -1,   100,    -1,   102,    -1,    -1,    -1,    -1,  1473,
     3116      -1,  1475,   974,  1023,    -1,    -1,   587,    -1,    -1,    -1,
     3117      -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,   990,   127,
     3118     797,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1502,    -1,
     3119      -1,    -1,    -1,    -1,    -1,    -1,  1128,  1057,  1058,    -1,
     3120      -1,    -1,    -1,    -1,    -1,    -1,   692,    -1,    -1,   630,
     3121     631,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3122     706,    -1,    -1,    -1,    -1,   646,    -1,   351,    -1,    -1,
     3123      -1,    -1,    -1,    -1,   182,    -1,    -1,    -1,  1170,    -1,
     3124      -1,    -1,   190,   664,   192,   193,    -1,    -1,    -1,   197,
     3125      -1,   199,   200,  1065,   675,    -1,    -1,    -1,    -1,  1191,
     3126      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1128,   252,
     3127      -1,  1203,    -1,  1205,   257,    -1,  1280,  1209,    -1,    -1,
     3128     701,    -1,    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,
     3129      -1,    -1,  1104,   417,    -1,    -1,    -1,    10,    11,    12,
     3130      13,    14,    -1,    -1,    -1,    -1,    -1,   431,  1240,    -1,
     3131    1170,   797,   436,    -1,    -1,  1247,  1248,  1249,   739,    -1,
     3132     444,   269,    -1,    -1,    -1,    -1,  1258,  1259,    -1,    42,
     3133      -1,  1191,    -1,    -1,    -1,    -1,    -1,    -1,   462,  1271,
     3134      -1,    -1,    -1,  1203,    -1,  1205,    -1,    -1,    -1,    -1,
     3135      -1,    -1,    -1,    -1,    -1,    -1,   480,    70,   482,    -1,
     3136      -1,   782,    75,    -1,    77,    78,    79,    -1,   351,    -1,
     3137     987,   792,  1304,    -1,    -1,    88,    89,   798,  1310,    -1,
     3138    1240,    -1,   803,    -1,    -1,    -1,    -1,  1247,  1248,  1249,
     3139      -1,    -1,    -1,    28,    29,    30,    -1,    -1,  1258,  1259,
     3140     524,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
     3141     123,  1271,    -1,    10,    11,    12,    13,    14,    -1,    -1,
     3142      -1,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
     3143      64,  1435,    -1,  1437,   417,    -1,    -1,    -1,    -1,    -1,
     3144      -1,    -1,   863,    -1,    78,    42,    -1,  1379,   431,    -1,
     3145    1310,    -1,    -1,   436,    -1,    -1,    90,    91,    -1,    -1,
     3146      -1,   444,    -1,   587,   885,   100,    -1,   102,  1472,    -1,
     3147    1474,   892,  1404,    70,    -1,    -1,    -1,    -1,    75,   462,
     3148      77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3149      -1,    88,    89,    -1,    -1,  1427,    -1,   480,    -1,   482,
     3150      -1,   987,  1434,    -1,    -1,    -1,   630,   631,    -1,    -1,
     3151      -1,    -1,  1516,    -1,  1518,    -1,    -1,   114,    -1,  1379,
     3152      -1,    -1,   646,    -1,    -1,   122,   123,  1531,  1532,    -1,
     3153      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
     3154     664,   524,    -1,    -1,    -1,    -1,    -1,   182,    -1,    -1,
     3155      -1,   675,  1169,    -1,  1486,    -1,    -1,   192,   193,    -1,
     3156      -1,  1493,   197,    42,   199,   200,    -1,  1427,    -1,    -1,
     3157      -1,    -1,    -1,    -1,  1434,    -1,    -1,   701,    -1,    -1,
     3158     704,  1002,  1003,    -1,  1005,  1006,    -1,    -1,    -1,    -1,
     3159      -1,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,
     3160      79,    -1,  1023,    -1,   587,    -1,    -1,    -1,    -1,    88,
     3161      89,    -1,    -1,    -1,    -1,   739,    -1,    -1,    -1,    -1,
     3162      -1,    -1,    -1,    -1,   572,   573,  1486,    -1,    -1,    -1,
     3163      10,    11,    12,    13,    14,   114,  1057,  1058,    -1,    -1,
     3164      -1,    -1,    -1,   122,   123,    -1,    -1,   630,   631,  1266,
     3165      -1,   599,    -1,    -1,   602,   603,    -1,   605,   782,   607,
     3166     608,    -1,    42,   646,   612,   613,    -1,    -1,   792,    -1,
     3167      -1,    -1,    -1,    -1,   798,    -1,    -1,    -1,    -1,   803,
     3168      -1,   664,    -1,  1169,    -1,    10,    11,    12,    13,    14,
     3169      70,    -1,   675,    -1,    -1,    75,    -1,    77,    78,    79,
     3170      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1128,    88,    89,
     3171     344,    -1,   346,    -1,    -1,    -1,    -1,    42,   701,    -1,
     3172      -1,   704,    -1,   357,   358,    -1,    -1,    -1,    -1,    -1,
     3173      -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,   863,
     3174      -1,    -1,   122,   123,    -1,    70,    -1,    -1,    -1,  1170,
     3175      75,    -1,    -1,    -1,    79,    -1,   739,    -1,    -1,    -1,
     3176      -1,   885,    -1,    88,    89,    -1,    -1,    -1,   892,    -1,
     3177    1191,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3178    1266,    -1,  1203,    -1,  1205,    -1,    -1,    -1,    -1,   114,
     3179      -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   782,
     3180     748,   749,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   792,
     3181      -1,    -1,    -1,    -1,    -1,   798,    -1,    -1,    -1,  1240,
     3182     803,    -1,    -1,    -1,    -1,    -1,  1247,  1248,  1249,    -1,
     3183      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1258,  1259,    -1,
    31483184      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3149       -1,    -1,   629,   630,    -1,    -1,   351,    -1,    -1,    -1,
    3150       -1,  1168,    -1,    -1,    -1,    -1,    -1,    -1,   645,    -1,
    3151      489,   482,   491,    -1,  1309,    -1,    -1,    -1,    -1,   986,
    3152       -1,    -1,    -1,    -1,    -1,    -1,   663,    -1,    -1,    -1,
    3153       -1,  1468,    -1,   898,    -1,    -1,    -1,   674,  1001,  1002,
    3154     1477,  1004,  1005,    -1,    -1,    -1,    -1,    -1,    -1,    55,
    3155       -1,    57,   523,    -1,    60,    61,    62,    -1,    64,  1022,
    3156       -1,    -1,   417,   700,    -1,    -1,   703,    -1,    -1,    -1,
    3157       -1,    -1,    78,    -1,    -1,    -1,   431,    -1,    -1,    -1,
    3158       -1,   436,    -1,  1378,    90,    91,    -1,    -1,    -1,   444,
    3159       -1,    -1,    -1,  1056,  1057,    -1,    -1,    -1,  1265,    -1,
    3160       -1,   738,    -1,    -1,    -1,    -1,    -1,   462,   973,    -1,
    3161       -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,    -1,    -1,
    3162       -1,    -1,    -1,    -1,   989,   480,    -1,   482,    -1,    -1,
    3163       -1,  1426,    -1,   986,    -1,    -1,    -1,    -1,  1433,    -1,
    3164       -1,    -1,    -1,    -1,   781,   571,   572,    -1,    -1,    -1,
    3165       -1,    -1,    -1,    -1,   791,    -1,   635,    -1,   629,   630,
    3166      797,    -1,    -1,    -1,  1127,   802,    -1,    -1,   523,    -1,
    3167       -1,    -1,   598,    -1,   645,   601,   602,    -1,   604,    -1,
    3168      606,   607,    -1,    -1,    -1,   611,   612,    -1,    -1,    -1,
    3169     1485,    -1,    -1,    10,    11,    12,    13,    14,    -1,  1064,
    3170       -1,  1168,    -1,    -1,    -1,   684,  1169,   686,    -1,    -1,
    3171       -1,   690,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3172       -1,    -1,    -1,    -1,    41,   862,    -1,  1190,    -1,    -1,
    3173       -1,   586,   703,    -1,    -1,    -1,    -1,    -1,  1103,  1202,
    3174       -1,  1204,    -1,    -1,    -1,    -1,    -1,   884,    -1,    -1,
    3175       -1,    -1,    69,    -1,   891,    -1,    -1,    74,    -1,    76,
    3176       77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3177       87,    88,    -1,    -1,   629,   630,  1239,    -1,    -1,    -1,
    3178       -1,    -1,    -1,  1246,  1247,  1248,    -1,    -1,    -1,    -1,
    3179      645,    -1,    -1,    -1,  1257,  1258,   113,    -1,  1265,    -1,
    3180       -1,    -1,    -1,    -1,   121,   122,    -1,  1270,   663,    -1,
    3181       -1,    -1,    -1,    -1,    -1,  1168,    -1,    -1,    -1,   674,
    3182       -1,   747,   748,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3183       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   344,    -1,
    3184      346,    -1,    -1,    -1,    -1,   700,  1309,    -1,   703,    -1,
    3185       -1,   357,   358,    -1,    -1,    28,    29,    30,    -1,    -1,
    3186       -1,    -1,    -1,    -1,  1001,  1002,    -1,  1004,  1005,    -1,
    3187       -1,    -1,    -1,    -1,    -1,    -1,   855,    -1,    -1,    -1,
    3188       -1,    -1,   861,   738,    -1,  1022,    -1,    -1,    -1,    -1,
    3189       -1,   862,    10,    11,    12,    13,    14,    15,    16,    17,
     3185    1271,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3186      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3187      27,    28,    29,    -1,    -1,    32,    33,    34,  1002,  1003,
     3188     863,  1005,  1006,    -1,    -1,    42,    -1,    -1,    -1,  1310,
     3189      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1023,
     3190      -1,    -1,   885,    -1,    -1,    -1,    -1,    -1,    -1,   892,
     3191      -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    75,    -1,
     3192      77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3193      -1,    88,    89,  1057,  1058,    -1,    -1,   572,   573,    -1,
     3194      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3195      -1,   899,    -1,    -1,    -1,    -1,   904,   114,  1379,   116,
     3196      -1,    -1,    -1,    -1,   599,   122,   123,   602,   603,    -1,
     3197     605,    -1,   607,   608,    -1,    -1,    -1,   612,   613,    10,
     3198      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3199      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
     3200      -1,    -1,    -1,    -1,  1128,    -1,  1427,    -1,    -1,    -1,
     3201      -1,    42,    51,  1434,    -1,    -1,    -1,    -1,    -1,  1002,
     3202    1003,     7,  1005,  1006,    10,    11,    12,    13,    14,    68,
     3203      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
     3204    1023,    -1,    -1,    -1,    -1,    -1,  1170,    -1,    -1,    -1,
     3205      81,    -1,    -1,    -1,    40,    41,    42,    43,    -1,   693,
     3206      -1,   695,    -1,    -1,    -1,  1486,    -1,  1191,   702,   703,
     3207      -1,    -1,    -1,   707,  1057,  1058,   115,    -1,    -1,  1203,
     3208     119,  1205,    -1,    69,    70,    -1,   720,    -1,    -1,    75,
     3209      -1,   725,    -1,    79,    -1,    -1,    82,    83,    84,    85,
     3210      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,   148,
     3211      -1,  1059,    -1,   748,   749,    -1,  1240,    -1,   752,   158,
     3212      -1,    -1,   161,  1247,  1248,  1249,    -1,    -1,   114,    -1,
     3213     116,    -1,    -1,    -1,  1258,  1259,   122,   123,   124,   125,
     3214     126,   127,    -1,    -1,    68,  1128,    -1,  1271,    -1,    -1,
     3215      -1,    -1,    -1,    77,    -1,    79,    -1,    81,    -1,    -1,
     3216      -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
     3217      -1,   210,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3218      -1,    -1,    -1,   222,    -1,    -1,  1310,  1170,    -1,    -1,
     3219      -1,    -1,    -1,    -1,    -1,   119,    -1,   121,   122,   123,
     3220      -1,   240,    -1,    -1,    -1,    -1,    -1,    -1,  1191,    -1,
     3221      -1,   845,    -1,   847,   848,   849,    -1,    -1,    -1,    -1,
     3222    1203,    -1,  1205,    -1,    -1,    -1,   265,    -1,    -1,    -1,
     3223      -1,    -1,   866,   272,    -1,    -1,    -1,   161,    -1,  1187,
     3224      -1,    -1,    -1,    -1,    -1,    -1,   880,    -1,    -1,    -1,
     3225      -1,    -1,    -1,    -1,    -1,  1379,    -1,  1240,   297,    -1,
     3226      -1,    -1,    -1,    -1,  1247,  1248,  1249,    -1,    -1,   904,
     3227      -1,   310,    -1,    -1,    -1,  1258,  1259,    -1,    -1,    -1,
     3228      -1,    -1,    -1,    -1,    -1,   919,    -1,    -1,  1271,    -1,
     3229      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   222,    -1,
     3230     224,   225,   226,  1427,    -1,    -1,   345,    -1,    -1,    -1,
     3231    1434,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3232      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1310,    -1,   963,
     3233      -1,    -1,    -1,    -1,   968,    -1,   260,    -1,    -1,   973,
     3234      -1,   265,    -1,    -1,   978,    -1,    -1,    -1,    -1,   983,
     3235      -1,   985,   986,    -1,    -1,   989,   280,    -1,    -1,    -1,
     3236      -1,    -1,  1486,    -1,   998,    -1,    -1,    -1,    -1,    -1,
     3237      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3238    1014,  1015,    -1,    -1,    -1,    -1,   425,   426,    -1,    -1,
     3239      -1,    -1,   431,    -1,    -1,    -1,  1379,    -1,    -1,    -1,
     3240      -1,    -1,    -1,    -1,    -1,    -1,  1040,   331,    -1,  1043,
     3241      -1,    -1,    -1,   452,    -1,    -1,    -1,    -1,    -1,    -1,
     3242      -1,    -1,    -1,    -1,  1059,    -1,   350,    -1,    -1,    -1,
     3243      -1,   355,   356,    -1,    -1,    -1,    -1,    -1,    -1,   363,
     3244      -1,   480,    -1,    -1,  1427,    -1,    -1,    -1,    -1,    -1,
     3245      -1,  1434,  1086,    -1,   493,    -1,    -1,    -1,  1092,  1093,
     3246      -1,    -1,    -1,    -1,    -1,    -1,   505,    -1,   507,    -1,
     3247      -1,   510,    -1,   512,   513,    -1,    -1,  1111,    -1,    -1,
     3248      -1,   405,  1116,    -1,    -1,   524,    -1,  1121,    -1,    -1,
     3249      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1132,   423,
     3250      -1,    -1,    -1,  1486,   428,    -1,   430,    -1,    -1,    -1,
     3251      -1,  1145,    -1,  1147,  1148,  1149,  1150,    -1,    -1,    -1,
     3252      -1,    -1,   446,    -1,    -1,   449,   450,    -1,  1162,    -1,
     3253    1164,    -1,    -1,   457,  1168,    -1,    -1,   576,    -1,    -1,
     3254      -1,    -1,    -1,    -1,    -1,    -1,    -1,   471,   587,    -1,
     3255      -1,   590,  1187,    -1,   478,    -1,    -1,    -1,    -1,    -1,
     3256      -1,    -1,  1196,  1197,    -1,    -1,     7,    -1,    -1,    10,
     3257      11,    12,    13,    14,    -1,    -1,    -1,   616,    -1,    -1,
     3258      -1,    -1,   621,    46,    -1,    -1,    -1,    -1,    -1,    -1,
     3259      -1,   630,   631,    -1,    -1,    -1,    -1,    -1,    -1,    40,
     3260      41,    42,    43,    -1,    -1,    -1,    -1,   646,    -1,    -1,
     3261      -1,    -1,    -1,    -1,    -1,    -1,  1250,  1251,    -1,    -1,
     3262      -1,    -1,    -1,    -1,    -1,    -1,  1260,    -1,    69,    70,
     3263      93,    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,   678,
     3264     103,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
     3265      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3266      -1,    -1,    -1,    -1,    -1,   704,   590,   706,    -1,    -1,
     3267      -1,    -1,    -1,   114,    -1,   116,    -1,    40,    41,    -1,
     3268      43,   122,   123,   124,   125,   126,   127,    -1,  1322,    -1,
     3269    1324,  1325,  1326,    -1,   618,    -1,    -1,    -1,    -1,   623,
     3270     739,    -1,  1336,    -1,    -1,    -1,    69,    -1,    -1,   172,
     3271    1344,    -1,    75,    -1,    -1,    -1,    79,    -1,    -1,    82,
     3272      83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
     3273      -1,    -1,   195,    -1,    -1,  1369,  1370,    -1,    -1,    -1,
     3274      -1,    -1,    -1,    -1,    -1,    -1,   209,    -1,    -1,    -1,
     3275      -1,   114,    -1,   116,    -1,   218,    -1,    -1,   797,   122,
     3276     123,   124,   125,   126,   127,   228,    -1,    -1,   692,    -1,
     3277      -1,    -1,   135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3278    1414,  1415,   706,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3279     253,    -1,    -1,  1427,    -1,   258,    -1,    -1,    -1,    -1,
     3280    1434,    -1,    -1,   727,    -1,    -1,    -1,    -1,   271,    -1,
     3281      -1,    -1,    -1,    -1,   277,    -1,   279,    -1,    -1,    -1,
     3282      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3283      -1,    -1,    -1,  1467,    -1,   298,    -1,  1471,    -1,    -1,
     3284      -1,    -1,    -1,    -1,    -1,    -1,   885,    -1,    -1,    -1,
     3285      -1,    -1,    -1,   892,    -1,    -1,    -1,    -1,    -1,    -1,
     3286      -1,    -1,   786,    -1,    -1,  1499,    -1,  1501,   907,    -1,
     3287      -1,    -1,    -1,   797,    -1,    -1,   339,    -1,    -1,    -1,
     3288     343,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3289     814,    -1,    -1,   932,    -1,  1529,  1530,    -1,    -1,    -1,
     3290      -1,    -1,    -1,  1537,  1538,    -1,    -1,    -1,   371,    -1,
     3291      -1,    -1,   375,   376,    -1,   378,    -1,    -1,    -1,    -1,
     3292      -1,    -1,   385,   386,    -1,   388,   389,    -1,   391,    -1,
     3293     393,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3294      -1,    -1,    -1,    -1,    -1,   984,    -1,   410,    -1,    -1,
     3295      -1,    -1,    -1,    -1,    -1,   418,    -1,    -1,    -1,   157,
     3296     158,    -1,    -1,    -1,    -1,    -1,  1005,  1006,    -1,    -1,
     3297      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   442,
     3298      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3299      -1,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,   197,
     3300      -1,   925,    -1,    -1,    -1,   468,    -1,    -1,    -1,    -1,
     3301      -1,   474,    -1,    -1,    -1,    -1,   479,    -1,    -1,    -1,
     3302      -1,    -1,    -1,  1062,    -1,    -1,    -1,    -1,    -1,    -1,
     3303      -1,   955,    10,    11,    12,    13,    14,    15,    16,    17,
    31903304      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3191       28,    29,  1265,   884,    -1,  1378,    -1,    -1,    -1,  1056,
    3192     1057,    -1,   901,    41,    -1,    -1,   781,   100,    -1,   102,
    3193       -1,    -1,    -1,    -1,    -1,    -1,   791,    -1,    -1,    -1,
    3194       -1,    -1,   797,    -1,    -1,    -1,    -1,   802,    -1,    -1,
    3195       -1,    69,    -1,    -1,   127,    -1,    -1,    -1,    -1,   930,
    3196       -1,    -1,    -1,  1426,    -1,    -1,    -1,    -1,    -1,    -1,
    3197     1433,    -1,    -1,    -1,    -1,    -1,    -1,   903,    -1,   958,
     3305      28,    29,    -1,   516,    32,    33,    34,    -1,    -1,    -1,
     3306      -1,    -1,    -1,   987,    42,    -1,    -1,    -1,   531,    -1,
     3307      -1,   269,    -1,    -1,   998,    -1,    -1,    -1,    -1,    -1,
     3308      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1128,
     3309      -1,    -1,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,
     3310      78,    -1,    -1,    -1,    -1,   568,    -1,    -1,    -1,    -1,
     3311      88,    89,    -1,    -1,   577,    -1,    -1,    -1,    -1,    -1,
     3312      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   326,    -1,
     3313    1169,    -1,    -1,    -1,   597,    -1,   334,   335,   116,   337,
     3314     338,    -1,    -1,  1067,   122,   123,    -1,   345,    -1,    -1,
     3315      -1,   349,    -1,    -1,    -1,    -1,    -1,  1081,    -1,    -1,
     3316      -1,    -1,    -1,    -1,    -1,    -1,  1205,    -1,    -1,    -1,
     3317     368,    -1,   635,    -1,    10,    11,    12,    13,    14,    15,
     3318      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3319      26,    27,    28,    29,    -1,    -1,    32,    33,    34,   397,
     3320      -1,    -1,    -1,   401,    -1,    -1,    42,    -1,   671,    -1,
     3321      -1,    -1,    -1,    -1,    -1,    -1,   679,    -1,    -1,  1258,
     3322    1259,    -1,    -1,    -1,    -1,    -1,    -1,  1266,    -1,    -1,
     3323      -1,    -1,    -1,   431,    70,    -1,    -1,    -1,    -1,    75,
     3324      -1,    77,    78,    79,    -1,  1169,    -1,   710,    -1,    -1,
     3325      -1,    -1,    88,    89,    -1,    -1,    -1,    -1,   721,   722,
    31983326      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3199     1127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3200       -1,    -1,    -1,    -1,    -1,    -1,    -1,   862,     7,   182,
    3201       -1,    10,    11,    12,    13,    14,    -1,   190,    -1,   192,
    3202      193,    -1,  1485,    -1,   197,    -1,   199,   200,    -1,   884,
    3203       -1,    -1,  1169,  1004,  1005,    -1,   891,    -1,    -1,    -1,
    3204       39,    40,    41,    42,    -1,    -1,    -1,    -1,    -1,    -1,
    3205       -1,  1022,    -1,  1190,    -1,    -1,    -1,    -1,    -1,    -1,
    3206       -1,    -1,    -1,    -1,    -1,  1202,    -1,  1204,    -1,    68,
    3207       69,    -1,    -1,  1052,    -1,    74,    -1,    -1,    -1,    78,
    3208       -1,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
    3209       -1,    90,    91,    -1,    -1,    -1,   269,    -1,    -1,    -1,
    3210       -1,    -1,  1239,    -1,    -1,    -1,    -1,    -1,    -1,  1246,
    3211     1247,  1248,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,
    3212     1257,  1258,   121,   122,   123,   124,   125,   126,    -1,    -1,
    3213       -1,    -1,  1058,  1270,    -1,    -1,    -1,    -1,    -1,    -1,
    3214       -1,    51,    -1,    -1,    -1,    -1,  1001,  1002,    -1,  1004,
    3215     1005,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
    3216       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1022,    -1,    -1,
    3217       -1,    -1,  1309,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3218       -1,    39,    40,    -1,    42,  1164,   692,    -1,   694,    -1,
    3219       -1,    -1,    -1,    -1,    -1,   701,   702,  1168,  1169,    -1,
    3220      706,  1056,  1057,    -1,    -1,   115,    -1,    -1,    -1,   119,
    3221       68,    -1,    -1,   719,    -1,    -1,    74,    -1,   724,  1190,
    3222       78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
    3223       88,    -1,    90,    91,    -1,    -1,    -1,  1208,   148,    -1,
    3224       -1,  1378,    -1,    -1,    -1,   751,    -1,    -1,   158,    -1,
    3225       -1,   161,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
    3226     1186,    -1,    -1,   121,   122,   123,   124,   125,   126,    -1,
    3227       -1,    -1,  1127,    -1,    -1,    -1,   134,    -1,    -1,    -1,
    3228       -1,    -1,    -1,    -1,    -1,    -1,  1257,  1258,    -1,  1426,
    3229       -1,    -1,    -1,    -1,  1265,    -1,  1433,    -1,    -1,  1270,
    3230      210,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3231       -1,    -1,   222,    -1,  1169,    -1,    -1,    -1,    -1,    -1,
     3327      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,   477,
     3328     116,    -1,   480,    -1,    -1,    -1,   122,   123,    -1,    -1,
     3329     753,    -1,    -1,    -1,    -1,   758,    -1,    10,    11,    12,
     3330      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3331      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
     3332      33,    34,   520,    -1,    -1,    -1,   524,    -1,    -1,    42,
    32323333      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3233      240,    -1,  1303,    -1,    -1,  1190,    -1,    -1,   844,    -1,
    3234      846,   847,   848,    -1,    -1,    -1,    -1,  1202,  1485,  1204,
    3235       -1,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,   865,
    3236       -1,    -1,   272,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3237       -1,    -1,    -1,   879,    -1,    -1,    -1,    -1,    -1,    -1,
    3238       -1,    -1,    -1,    -1,  1239,    -1,    -1,   297,    -1,    -1,
    3239       -1,  1246,  1247,  1248,    -1,    -1,    -1,    -1,   571,   572,
    3240      310,    -1,  1257,  1258,    -1,    -1,    -1,  1378,    -1,    -1,
    3241       -1,    -1,   918,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
    3242       -1,    -1,    -1,    -1,    -1,   598,    -1,    -1,   601,   602,
    3243       -1,   604,  1403,   606,   607,   345,    -1,    -1,   611,   612,
    3244      350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3245       -1,    -1,    -1,    -1,  1309,  1426,   962,    -1,    -1,    -1,
    3246       -1,   967,  1433,    -1,    -1,    -1,   972,    -1,    -1,    -1,
    3247       -1,   977,    -1,    -1,    -1,    -1,   982,    -1,   984,   985,
    3248       -1,    -1,   988,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3249       -1,   997,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3250       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1013,  1014,    -1,
    3251       -1,    -1,    -1,    -1,  1485,   425,   426,    -1,    -1,    -1,
    3252       -1,   431,    -1,  1378,    -1,    -1,    -1,    -1,    -1,    -1,
    3253       -1,    -1,    -1,  1039,    -1,    -1,  1042,    -1,    -1,    -1,
    3254       -1,    -1,   452,    -1,    -1,    -1,    10,    11,    12,    13,
     3334    1379,    -1,  1266,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3335      -1,    -1,    -1,    -1,    -1,   818,    -1,    70,    -1,    -1,
     3336      -1,    -1,   825,    -1,    77,    78,    -1,    -1,    -1,    -1,
     3337     568,   569,    -1,    -1,    -1,   838,    -1,   840,    -1,    -1,
     3338      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   586,   587,
     3339     853,    -1,    -1,    -1,    -1,    -1,   859,  1436,   596,  1438,
     3340     598,   599,    -1,   116,    -1,   148,    -1,   605,   871,   122,
     3341     123,   874,    -1,    -1,    -1,   158,    -1,   615,   616,    -1,
     3342      -1,    -1,    -1,   621,    -1,    -1,   169,   170,    -1,    -1,
     3343      -1,    -1,   630,   631,  1473,    -1,  1475,    -1,    -1,    -1,
     3344      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   646,    -1,
     3345      -1,    -1,    -1,   651,   652,    -1,    -1,   655,   656,    -1,
     3346      -1,    -1,    -1,  1502,   662,    -1,   283,    -1,   285,   286,
     3347      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   295,   296,
     3348      -1,    -1,    -1,   681,    -1,    -1,    -1,    -1,    40,    41,
     3349      -1,    43,    -1,   310,   311,    -1,    -1,   240,    -1,    -1,
     3350      -1,    -1,    -1,    -1,    -1,    -1,   704,   705,    -1,    -1,
     3351      -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,   982,
     3352      -1,   264,    -1,    75,    -1,    77,    78,    79,   345,    -1,
     3353      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
     3354      92,   739,    -1,    -1,    -1,   743,   744,    -1,    -1,    -1,
     3355      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3356      -1,    -1,   114,   380,   116,    -1,   118,   119,    -1,    -1,
     3357     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
     3358    1043,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   786,    -1,
     3359      -1,    -1,    -1,  1517,    -1,    -1,    -1,    -1,    -1,    -1,
     3360      -1,    -1,    -1,    -1,   802,    -1,   804,    -1,    -1,    -1,
     3361      -1,    -1,    -1,    -1,  1077,    -1,   814,    -1,    -1,  1082,
     3362      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1090,    -1,    -1,
     3363      -1,    -1,    -1,    -1,    -1,    -1,   379,    -1,    10,    11,
     3364      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3365      22,    23,    24,    25,    26,    27,    28,    29,    30,    -1,
     3366      -1,  1124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3367      42,    -1,  1135,    -1,    -1,  1138,    -1,  1140,    -1,    -1,
     3368      -1,    -1,    -1,    -1,    -1,    -1,    -1,   885,    -1,    -1,
     3369      -1,    -1,  1155,  1156,   892,   893,    -1,   895,    70,    -1,
     3370      -1,   899,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,
     3371      -1,    -1,  1175,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3372      -1,    -1,   920,   921,    -1,    -1,    -1,    -1,    -1,   472,
     3373      -1,    -1,   549,   550,   551,   552,   553,   554,   555,   556,
     3374     557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
     3375      -1,    -1,    -1,    -1,    -1,    -1,    -1,   955,  1221,    -1,
     3376      -1,    -1,    -1,    -1,    -1,    -1,  1229,    -1,    -1,   512,
     3377      -1,    -1,    -1,    -1,    -1,    -1,   974,   975,    -1,    -1,
     3378      -1,   524,    -1,    -1,    -1,    -1,   984,   530,    -1,    -1,
     3379     533,    -1,   990,   991,    -1,   993,   994,   995,    -1,    -1,
     3380      -1,    -1,    -1,   546,    -1,    -1,    -1,  1005,  1006,    -1,
     3381      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3382      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
     3383      -1,    -1,    -1,   576,    -1,    -1,  1299,    -1,  1301,    -1,
     3384     583,    -1,    42,    -1,   587,    -1,    -1,    -1,    -1,    -1,
     3385      -1,    -1,    -1,    -1,  1317,    -1,  1319,    -1,    -1,    -1,
     3386      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1065,    -1,  1067,
     3387      70,  1334,   689,    -1,  1072,    -1,    -1,    -1,    -1,    -1,
     3388      -1,    -1,    -1,  1081,    -1,    -1,  1349,  1350,    -1,    -1,
     3389     633,    -1,    -1,    -1,    -1,    -1,    -1,  1360,   641,    -1,
     3390    1363,    -1,    -1,    -1,    -1,    -1,  1104,  1105,    -1,    -1,
     3391      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3392      -1,    -1,  1385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3393    1128,  1394,    -1,   750,  1397,    -1,  1399,  1400,  1401,    -1,
     3394      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3395      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3396      27,    28,    29,   780,    -1,    32,    33,    34,    35,    36,
     3397      37,    38,    -1,    -1,   717,    42,    -1,  1440,    -1,  1442,
     3398      -1,  1444,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3399      -1,    -1,    -1,    -1,    -1,    -1,   739,  1460,   741,    -1,
     3400      -1,    -1,    -1,    70,    -1,    -1,    -1,  1205,   751,    -1,
     3401      77,    78,    -1,    -1,   757,    -1,    -1,     3,     4,     5,
     3402       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     3403      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3404      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    35,
     3405      -1,    -1,    -1,    39,   797,   798,    42,    43,    -1,    -1,
     3406    1258,  1259,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3407     813,    -1,    -1,    -1,    -1,    -1,    -1,   894,    -1,    -1,
     3408      -1,    67,    -1,    -1,    70,    -1,    72,    -1,    74,    75,
     3409      -1,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
     3410      -1,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,   852,
     3411      -1,    -1,    -1,   856,    -1,    -1,    -1,    40,    41,    -1,
     3412      43,    -1,    -1,   940,    -1,    -1,    -1,    -1,   114,    -1,
     3413     116,    -1,    -1,    -1,   120,    -1,   122,   123,    -1,    -1,
     3414      -1,    -1,   885,    -1,    -1,    -1,    69,    -1,    -1,   892,
     3415      -1,    -1,    75,    -1,    -1,   972,    79,    -1,    -1,    82,
     3416      83,    84,    85,    86,    87,    88,    89,   984,    91,    92,
     3417      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3418      -1,  1379,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   932,
     3419      -1,   114,    -1,   116,    -1,    -1,   119,    -1,    -1,   122,
     3420     123,   124,   125,   126,   127,    -1,  1023,    -1,    -1,    -1,
     3421      -1,    -1,    -1,    -1,    -1,    -1,   959,    -1,    -1,    -1,
     3422      -1,   964,    -1,    -1,   967,    -1,    -1,    -1,    -1,    -1,
     3423      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3424      -1,    -1,    -1,    -1,   987,    -1,    -1,    -1,    -1,    -1,
     3425      -1,    -1,    -1,    -1,    -1,   998,    -1,    -1,    -1,    -1,
     3426      -1,    -1,    40,    41,    -1,    43,    -1,    -1,    -1,    -1,
     3427    1468,    -1,    -1,    -1,    -1,  1018,    -1,  1020,    -1,    -1,
     3428      -1,    -1,  1099,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3429      -1,    69,  1035,  1036,  1492,  1493,    -1,    75,    -1,    -1,
     3430      -1,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
     3431      88,    89,  1055,    91,    92,    -1,    -1,    -1,    -1,  1517,
     3432      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3433      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
     3434      -1,  1158,  1159,   121,   122,   123,   124,   125,   126,   127,
     3435      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3436      -1,    -1,    -1,    -1,    -1,    -1,  1109,    -1,    -1,    -1,
     3437      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3438      -1,    -1,    -1,    -1,    -1,  1128,    -1,    -1,    -1,    -1,
     3439      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3440    1143,  1144,     3,     4,     5,     6,     7,     8,     9,    10,
     3441      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3442      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
     3443      -1,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
     3444      41,    42,    43,    44,    -1,    46,    -1,    -1,    49,    50,
     3445      51,    52,    53,    54,    55,    56,    -1,    -1,    -1,    60,
     3446      -1,    -1,    -1,    64,    65,    -1,    67,    -1,    69,    70,
     3447      -1,    72,    -1,    74,    75,    -1,    77,    78,    79,    -1,
     3448      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
     3449      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3450      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3451      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,
     3452      -1,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
     3453      -1,   132,    -1,    -1,    -1,    -1,   137,    -1,    -1,    -1,
     3454      -1,    -1,  1285,    -1,    -1,  1288,    -1,    -1,    -1,  1366,
     3455      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3456      -1,    -1,    -1,    -1,    -1,    -1,  1383,    -1,    -1,    -1,
     3457      -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
     3458       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3459      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
     3460      29,    -1,    -1,    32,    33,    34,    35,    -1,    -1,    -1,
     3461      39,    40,    41,    42,    43,    -1,    -1,    -1,    -1,    -1,
     3462      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3463      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1455,  1456,
     3464      69,    70,    -1,    72,    -1,    74,    75,    -1,    77,    78,
     3465      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
     3466      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
     3467      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3468      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
     3469      -1,    -1,    -1,   122,   123,   124,   125,   126,   127,    -1,
     3470      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   137,     3,
     3471       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    32553472      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3256       24,    25,    26,    27,    28,    29,    30,    -1,    -1,    -1,
    3257      480,  1426,    -1,    -1,   747,   748,    -1,    41,  1433,  1085,
    3258       -1,    -1,   492,    -1,    -1,  1091,  1092,    -1,    -1,    -1,
    3259       -1,    -1,    -1,    -1,   504,    -1,   506,    -1,    -1,   509,
    3260       -1,   511,   512,    -1,  1110,    69,    -1,    -1,    -1,  1115,
    3261       -1,    -1,    -1,   523,  1120,    -1,    80,    -1,    -1,    -1,
    3262       -1,    -1,    -1,    -1,    -1,  1131,    -1,    -1,    -1,    -1,
    3263     1485,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1144,    -1,
    3264     1146,  1147,  1148,  1149,    -1,    -1,    -1,    68,    -1,    -1,
    3265       -1,    -1,    -1,    -1,    -1,  1161,    77,  1163,    79,    -1,
    3266       81,  1167,    -1,    -1,    -1,   575,    -1,    88,    -1,    -1,
    3267       -1,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,   589,
    3268       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1195,
    3269     1196,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,
    3270      121,   122,   123,    -1,    -1,   615,    -1,    -1,    -1,    -1,
    3271      620,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   629,
    3272      630,    -1,    -1,    -1,    -1,   898,    -1,    -1,    -1,    -1,
    3273      903,    -1,    -1,    -1,    -1,   645,    -1,    -1,    -1,    -1,
    3274      161,    -1,    -1,  1249,  1250,    -1,    -1,    -1,    -1,    -1,
    3275       -1,    -1,    -1,  1259,    -1,    -1,    -1,    -1,    -1,    -1,
    3276       -1,    -1,    -1,    -1,    -1,    -1,    -1,   677,    10,    11,
     3473      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
     3474      34,    35,    -1,    -1,    -1,    39,    40,    41,    42,    43,
     3475      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1502,
     3476      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3477      -1,    -1,    -1,    -1,    -1,    69,    70,    -1,    72,    -1,
     3478      74,    75,    -1,    77,    78,    79,    -1,    -1,    82,    83,
     3479      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
     3480      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3481      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3482     114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
     3483     124,   125,   126,   127,     4,     5,     6,     7,     8,     9,
     3484      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3485      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
     3486      -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
     3487      40,    41,    42,    43,    10,    11,    12,    13,    14,    15,
     3488      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3489      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    69,
     3490      70,    -1,    72,    -1,    74,    75,    42,    77,    78,    79,
     3491      -1,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
     3492      -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3493      -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
     3494      -1,    77,    78,    -1,   114,    -1,   116,    -1,    -1,    -1,
     3495      -1,   121,   122,   123,   124,   125,   126,   127,     4,     5,
     3496       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     3497      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3498      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    -1,
     3499      -1,    -1,    -1,    -1,    40,    41,    42,    43,    10,    11,
    32773500      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    32783501      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
    3279       32,    33,    34,   703,    -1,   705,    -1,    -1,    -1,    41,
    3280       -1,   222,    -1,   224,   225,   226,    -1,    46,    -1,    -1,
    3281       -1,    -1,    -1,    -1,    -1,  1321,    -1,  1323,  1324,  1325,
    3282       -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,   738,  1335,
    3283       -1,    -1,    74,    -1,    76,    77,    78,  1343,    -1,   260,
    3284       -1,    -1,    -1,    -1,   265,    87,    88,    -1,    -1,    -1,
    3285       -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,   280,
    3286       -1,    -1,  1368,  1369,   103,    -1,    -1,    -1,    -1,    -1,
    3287       -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
    3288      122,   148,    -1,    -1,    -1,  1058,   796,    -1,    -1,    -1,
    3289       -1,   158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3290       -1,    -1,   169,   170,    -1,    -1,    -1,  1413,  1414,    -1,
    3291      331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3292     1426,    -1,    -1,    -1,    -1,    -1,    -1,  1433,    -1,   350,
    3293       -1,    -1,    -1,   172,   355,   356,    -1,    -1,    -1,    -1,
    3294       -1,    -1,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3295       -1,    -1,    -1,    -1,    -1,    -1,   195,    -1,    -1,    -1,
    3296     1466,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,    -1,
    3297      209,    -1,    -1,   240,   884,    -1,    -1,    -1,    -1,   218,
    3298       -1,   891,    -1,    -1,   405,    -1,    -1,    -1,    -1,   228,
    3299       -1,    -1,  1498,    -1,  1500,    -1,   906,   264,    -1,    -1,
    3300       -1,    -1,   423,    -1,    -1,    -1,    -1,   428,    -1,   430,
    3301       -1,    -1,    -1,  1186,   253,    -1,    -1,    -1,    -1,   258,
    3302       -1,   931,  1528,  1529,    -1,   446,    -1,    -1,   449,   450,
    3303     1536,  1537,   271,    -1,    -1,    -1,   457,    -1,   277,    -1,
    3304      279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3305      471,    -1,    -1,    -1,    -1,    -1,    -1,   478,    -1,   298,
     3502      32,    33,    34,    69,    70,    -1,    72,    -1,    74,    75,
     3503      42,    77,    78,    79,    -1,    -1,    82,    83,    84,    85,
     3504      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
     3505      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
     3506      -1,    -1,    -1,    -1,    -1,    77,    78,    -1,   114,    -1,
     3507     116,    -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,
     3508     126,   127,     4,     5,     6,     7,     8,     9,    10,    11,
     3509      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3510      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
     3511      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    40,    41,
     3512      42,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    33063513      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3307       -1,    -1,    -1,   983,    10,    11,    12,    13,    14,    15,
     3514      -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    -1,
     3515      72,    -1,    74,    75,    -1,    77,    78,    79,    -1,    -1,
     3516      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
     3517      92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3518      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3519      -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,
     3520     122,   123,   124,   125,   126,   127,     4,     5,     6,     7,
     3521       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3522      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3523      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
     3524      -1,    -1,    40,    41,    42,    43,    -1,    -1,    -1,    -1,
     3525      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3526      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3527      -1,    69,    70,    -1,    72,    -1,    74,    75,    -1,    77,
     3528      78,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
     3529      88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,
     3530      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3531      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
     3532      -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,   127,
     3533       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3534      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3535      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
     3536      34,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,    43,
     3537      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3538      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3539      -1,    -1,    -1,    -1,    -1,    69,    70,    -1,    72,    -1,
     3540      74,    75,    -1,    77,    78,    79,    -1,    -1,    82,    83,
     3541      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
     3542      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3543      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3544     114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
     3545     124,   125,   126,   127,     0,    -1,    -1,     3,     4,     5,
     3546       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    33083547      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3309       26,    27,    28,    29,  1004,  1005,    32,    33,    34,    -1,
    3310      339,    -1,    -1,    -1,   343,    41,    -1,    -1,    -1,    -1,
    3311       -1,    -1,   379,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3548      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    35,
     3549      -1,    -1,    -1,    39,    -1,    -1,    42,    43,    -1,    -1,
    33123550      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3313       -1,    -1,   371,    69,    -1,    -1,   375,   376,    -1,   378,
    3314       76,    77,    -1,    -1,    -1,    -1,   385,   386,    -1,   388,
    3315      389,  1061,   391,    -1,   393,    -1,    -1,    -1,    -1,    -1,
    3316       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   589,    -1,
    3317       -1,   410,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   418,
    3318       -1,    -1,    -1,    -1,    -1,   121,   122,    -1,    -1,    -1,
    3319       -1,    -1,    -1,    -1,    -1,    -1,   617,    -1,    -1,    -1,
    3320       -1,   622,    -1,   442,    -1,   472,    -1,    -1,    -1,    -1,
    3321       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1127,    -1,    -1,
    3322       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   468,
    3323       -1,    -1,    -1,    -1,    -1,   474,    -1,    -1,    -1,    -1,
    3324      479,    -1,    -1,    -1,   511,    -1,    -1,    -1,    -1,    -1,
    3325       -1,    -1,    -1,    -1,    -1,    -1,   523,    -1,  1168,    -1,
    3326       -1,    -1,   529,    -1,    -1,   532,   157,   158,    -1,    -1,
    3327      691,    -1,    -1,    -1,    -1,    -1,   515,    -1,   545,    -1,
    3328       -1,    -1,    -1,    -1,   705,    -1,    -1,    -1,    -1,    -1,
    3329       -1,   530,    -1,    -1,  1204,    -1,    -1,    -1,    -1,   190,
    3330       -1,    -1,    -1,    -1,    -1,   726,   197,    -1,   575,    -1,
    3331       -1,    -1,    -1,    -1,    -1,   582,    -1,    -1,    -1,   586,
    3332       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   567,    -1,
    3333       -1,    -1,    -1,    -1,    -1,    -1,    -1,   576,    -1,    -1,
    3334       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1257,  1258,    -1,
    3335       -1,    -1,    -1,    -1,    -1,  1265,    -1,   596,    -1,    -1,
    3336       -1,    -1,    -1,    -1,   785,   632,    -1,    -1,    -1,    -1,
    3337       -1,    -1,    -1,   640,    -1,   796,    -1,    -1,   269,    -1,
    33383551      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3339       -1,    -1,   813,    -1,    -1,   634,    -1,    10,    11,    12,
    3340       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3341       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
    3342       33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
    3343       -1,   670,    -1,    -1,    -1,   326,    -1,    -1,    -1,   678,
    3344       -1,    -1,    -1,   334,   335,    -1,   337,   338,    -1,   716,
    3345       -1,    -1,    -1,    -1,   345,    -1,    69,    -1,   349,    -1,
    3346       -1,    74,    -1,    76,    77,    78,    -1,    -1,  1378,    -1,
    3347      709,   738,    -1,   740,    87,    88,    -1,   368,    -1,    -1,
    3348       -1,   720,   721,   750,    -1,    -1,    -1,    -1,    -1,   756,
     3552      -1,    67,    -1,    -1,    70,    -1,    72,    -1,    74,    75,
     3553      -1,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
     3554      -1,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
    33493555      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3350      113,    -1,   115,   924,    -1,    -1,   397,    -1,   121,   122,
    3351      401,    -1,    -1,   752,    -1,    -1,    -1,    -1,   757,    -1,
    3352       -1,    -1,    -1,    -1,    -1,  1435,    -1,  1437,    -1,   796,
    3353      797,    -1,    -1,   954,    -1,    -1,    -1,    -1,    -1,    -1,
    3354      431,    -1,    -1,    -1,    -1,   812,    -1,    -1,    -1,    -1,
    3355       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3356       -1,    -1,  1472,    -1,  1474,   986,    -1,    -1,    -1,    -1,
    3357       -1,    -1,    -1,    -1,    -1,    -1,   997,    -1,   817,    -1,
    3358       -1,    -1,    -1,    -1,   851,   824,   477,    -1,   855,   480,
    3359       -1,  1501,    -1,    -1,    -1,    -1,    -1,    -1,   837,    -1,
    3360      839,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3361       -1,    -1,    -1,   852,    -1,    -1,    -1,   884,    -1,   858,
    3362       -1,    -1,    -1,    -1,   891,    -1,    -1,    -1,   519,    -1,
    3363       -1,   870,   523,    -1,   873,    -1,    -1,    -1,    -1,    -1,
    3364       -1,    -1,    -1,    -1,    -1,  1066,    -1,    -1,    -1,    -1,
    3365       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1080,
    3366       -1,    -1,    -1,    -1,   931,    -1,    -1,    -1,    -1,    -1,
    3367       -1,    -1,    -1,    -1,    -1,    -1,   567,   568,    -1,    -1,
    3368       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3369       -1,   958,    -1,    -1,   585,   586,   963,    -1,    -1,   966,
    3370       -1,    -1,    -1,    -1,   595,    -1,   597,   598,    -1,    -1,
    3371       -1,    -1,    -1,   604,    -1,    -1,    -1,    -1,    -1,   986,
    3372       -1,    -1,    -1,   614,   615,    -1,    -1,    -1,    -1,   620,
    3373      997,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   629,   630,
    3374       -1,    -1,   981,    -1,    -1,    -1,    -1,  1168,    -1,    -1,
    3375     1017,    -1,  1019,    -1,   645,    -1,    -1,    -1,    -1,   650,
    3376      651,    -1,    -1,   654,   655,    -1,    -1,  1034,  1035,   283,
    3377      661,   285,   286,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3378       -1,   295,   296,    -1,    -1,    -1,    -1,  1054,    -1,   680,
    3379       -1,    -1,    -1,    -1,    -1,    -1,   310,   311,    -1,    -1,
    3380       -1,    -1,    -1,  1042,    -1,    -1,    -1,    -1,    -1,    -1,
    3381       -1,    -1,   703,   704,    -1,    -1,    -1,    -1,    -1,    -1,
    3382       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3383       -1,   345,    -1,    -1,    -1,    -1,    -1,  1076,    -1,    -1,
    3384       -1,  1108,  1081,    -1,  1265,    -1,    -1,   738,    -1,    -1,
    3385     1089,   742,   743,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3386     1127,    -1,    -1,    -1,    -1,    -1,   380,    -1,    -1,    -1,
    3387       -1,    -1,    -1,    -1,    -1,  1142,  1143,    -1,    -1,    -1,
    3388       -1,    -1,    -1,    -1,  1123,    -1,    -1,    -1,    -1,    -1,
    3389       -1,    -1,    -1,    -1,   785,  1134,    -1,    -1,  1137,    -1,
    3390     1139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3391      801,    -1,   803,    -1,    -1,  1154,  1155,    -1,    -1,    -1,
    3392       -1,    -1,   813,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3393       -1,    -1,    -1,    -1,    -1,  1174,    -1,    -1,    -1,    -1,
    3394       -1,    -1,    -1,    -1,    -1,     0,    -1,    -1,     3,     4,
     3556      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
     3557     116,    -1,    -1,    -1,    -1,    -1,   122,   123,     3,     4,
    33953558       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    33963559      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    33973560      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
    3398       35,  1220,    -1,    38,    -1,    -1,    41,    42,    -1,  1228,
    3399       -1,    -1,    -1,   884,    -1,    -1,    -1,    -1,    -1,    -1,
    3400      891,   892,    -1,   894,    -1,    -1,    -1,   898,    -1,    -1,
    3401       -1,    66,    -1,    -1,    69,    -1,    71,  1284,    73,    74,
    3402     1287,    76,    77,    78,    -1,    -1,    -1,    -1,   919,   920,
    3403       -1,    -1,    87,    88,   548,   549,   550,   551,   552,   553,
    3404      554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
    3405      564,   565,    -1,    -1,    -1,    -1,    -1,    -1,   113,  1298,
    3406      115,  1300,    -1,   954,    -1,    -1,   121,   122,    -1,    -1,
    3407       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1316,    -1,  1318,
    3408       -1,    -1,   973,   974,    -1,    -1,    -1,    -1,    -1,    -1,
    3409       -1,    -1,   983,    -1,  1333,  1516,    -1,    -1,   989,   990,
    3410       -1,   992,   993,   994,    -1,    -1,    -1,    -1,    -1,  1348,
    3411     1349,    -1,    -1,  1004,  1005,    -1,    -1,    -1,    -1,    -1,
    3412     1359,    -1,    -1,  1362,    10,    11,    12,    13,    14,    15,
     3561      35,    -1,    -1,    -1,    39,    -1,    -1,    42,    43,    -1,
     3562      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3563      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3564      -1,    -1,    67,    -1,    -1,    70,    -1,    72,    -1,    74,
     3565      75,    -1,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,
     3566      -1,    -1,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,
     3567      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3568      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
     3569      -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,     3,
     3570       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3571      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3572      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
     3573      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,
     3574      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3575      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3576      -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,    -1,
     3577      74,    75,    -1,    77,    78,    79,    -1,    -1,    -1,    -1,
     3578      -1,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,    -1,
     3579      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3580      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3581     114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
     3582       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3583      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3584      23,    24,    25,    26,    27,    28,    29,    30,    -1,    32,
     3585      33,    34,    35,    -1,    -1,    -1,    39,    -1,    -1,    42,
     3586      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3587      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3588      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,
     3589      -1,    74,    -1,    -1,    77,    78,    -1,    -1,    81,     3,
     3590       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3591      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3592      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
     3593      34,    35,    -1,   116,    -1,    39,    -1,    -1,    42,   122,
     3594     123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3595      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3596      -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,    -1,
     3597      74,    -1,    -1,    77,    78,     3,     4,     5,     6,     7,
     3598       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3599      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3600      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
     3601      -1,    -1,   116,    -1,    42,    -1,    -1,    -1,   122,   123,
     3602      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3603      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3604      -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,    77,
     3605      78,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3606      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3607      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
     3608      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,   116,    42,
     3609      -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,
     3610      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3611      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,
     3612      -1,    74,    75,    -1,    77,    78,    79,    -1,    -1,    -1,
     3613      -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,
     3614      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3615      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3616      -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
     3617     123,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3618      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3619      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
     3620      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
     3621      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3622      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3623      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,
     3624      -1,    74,    -1,    -1,    77,    78,     4,     5,     6,     7,
     3625       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3626      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3627      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
     3628      -1,    -1,   115,   116,    42,    -1,    -1,    -1,    -1,   122,
     3629     123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3630      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3631      -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,    77,
     3632      78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3633      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3634      -1,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,
     3635      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,
     3636      -1,    -1,    -1,    -1,   122,   123,     4,     5,     6,     7,
     3637       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3638      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3639      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
     3640      -1,    -1,    -1,    -1,    42,    -1,    10,    11,    12,    13,
     3641      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3642      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
     3643      34,    -1,    70,    -1,    72,    -1,    74,    -1,    42,    77,
     3644      78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3645      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3646      -1,    -1,    -1,   101,    -1,    -1,    70,    -1,    -1,    -1,
     3647      -1,    -1,    -1,    77,    78,    -1,    -1,    -1,   116,    -1,
     3648      -1,    -1,    -1,    -1,   122,   123,     4,     5,     6,     7,
     3649       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3650      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3651      28,    29,   116,    -1,    32,    33,    34,    -1,   122,   123,
     3652      -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,
     3653      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3654      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3655      -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,    77,
     3656      78,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3657      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3658      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
     3659      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,   116,    42,
     3660      -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,
     3661      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3662      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,
     3663      -1,    74,    -1,    -1,    77,    78,     4,     5,     6,     7,
     3664       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3665      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3666      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
     3667      -1,    -1,    -1,   116,    42,    -1,    -1,    -1,    -1,   122,
     3668     123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3669      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3670      -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,    77,
     3671      78,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3672      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
     3673      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
     3674      -1,    40,    41,    42,    43,    -1,    -1,    -1,   116,    -1,
     3675      -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,
     3676      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3677      69,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,
     3678      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
     3679      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
     3680      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3681      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
     3682     119,    -1,    -1,   122,   123,   124,   125,   126,   127,    10,
     3683      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3684      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
     3685      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    40,
     3686      41,    42,    43,    10,    11,    12,    13,    14,    15,    16,
     3687      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3688      27,    28,    29,    -1,    -1,    32,    33,    34,    69,    70,
     3689      -1,    -1,    -1,    -1,    75,    42,    77,    78,    79,    -1,
     3690      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
     3691      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3692      -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
     3693      77,    78,    -1,   114,   115,   116,    -1,    -1,    -1,    -1,
     3694      -1,   122,   123,   124,   125,   126,   127,    10,    11,    12,
     3695      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3696      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
     3697      33,    34,    -1,    -1,    -1,   122,   123,    40,    41,    42,
     3698      43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3699      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3700      -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    -1,    -1,
     3701      -1,    -1,    75,    -1,    77,    78,    79,    -1,    -1,    82,
     3702      83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
     3703      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3704      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3705      -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
     3706     123,   124,   125,   126,   127,    10,    11,    12,    13,    14,
     3707      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3708      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
     3709      -1,    -1,    -1,    -1,    -1,    40,    41,    42,    43,    -1,
     3710      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3711      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3712      -1,    -1,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,
     3713      75,    -1,    77,    78,    79,    -1,    -1,    82,    83,    84,
     3714      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
     3715      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3716      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
     3717      -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
     3718     125,   126,   127,    10,    11,    12,    13,    14,    15,    16,
     3719      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3720      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
     3721      -1,    -1,    -1,    40,    41,    42,    43,    -1,    -1,    -1,
     3722      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3723      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3724      -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    75,    -1,
     3725      77,    78,    79,    -1,    -1,    82,    83,    84,    85,    86,
     3726      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
     3727      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3728      -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,
     3729      -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,
     3730     127,     3,     4,     5,     6,     7,     8,     9,    10,    11,
     3731      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3732      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
     3733      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3734      42,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3735      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
     3736      29,    -1,    -1,    32,    33,    34,    -1,    -1,    70,    -1,
     3737      72,    -1,    74,    42,    43,    77,    78,    -1,    -1,    -1,
     3738      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3739      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
     3740      29,    70,    -1,    32,    33,    34,    -1,    -1,    77,    78,
     3741      -1,    -1,    -1,    42,    43,    -1,    -1,   119,    -1,    -1,
     3742      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3743      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3744      -1,    70,    -1,    -1,    -1,    -1,    -1,   116,    77,    78,
     3745      -1,   120,    -1,   122,   123,    -1,    10,    11,    12,    13,
     3746      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3747      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
     3748      34,    -1,    -1,    -1,    -1,    -1,    -1,   116,    42,    43,
     3749      -1,   120,    -1,   122,   123,    -1,    10,    11,    12,    13,
     3750      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3751      24,    25,    26,    27,    28,    29,    70,    -1,    32,    33,
     3752      34,    -1,    -1,    77,    78,    -1,    -1,    -1,    42,    10,
     3753      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3754      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
     3755      -1,    32,    33,    34,    -1,    -1,    70,    -1,    -1,    -1,
     3756      -1,    42,   116,    77,    78,    -1,   120,    -1,   122,   123,
     3757      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3758      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
     3759      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,    -1,
     3760      -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
     3761      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
    34133762      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3414       26,    27,    28,    29,    30,  1384,    -1,    -1,    -1,    -1,
    3415       -1,    -1,    -1,    -1,  1393,    41,    -1,  1396,    -1,  1398,
    3416     1399,  1400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3417       -1,    -1,    -1,  1064,   688,  1066,    -1,    -1,    -1,    -1,
    3418     1071,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,  1080,
    3419       -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
    3420     1439,    -1,  1441,    -1,  1443,    -1,    -1,    -1,    -1,    -1,
    3421       -1,    -1,  1103,  1104,    -1,    -1,    -1,    -1,    -1,    -1,
    3422     1459,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3423       -1,    -1,    -1,    -1,  1501,   749,  1127,     3,     4,     5,
    3424        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3425       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3426       26,    27,    28,    29,    -1,   779,    32,    33,    34,    35,
    3427       -1,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
    3428       -1,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
    3429       -1,    -1,    -1,    59,    -1,    -1,    -1,    63,    64,    -1,
    3430       66,    -1,    68,    69,    -1,    71,    -1,    73,    74,    -1,
    3431       76,    77,    78,  1204,    -1,    81,    82,    83,    84,    85,
    3432       86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,
     3763      26,    27,    28,    29,    -1,   116,    32,    33,    34,    -1,
     3764      -1,   122,   123,    -1,    -1,    -1,    42,    10,    11,    12,
     3765      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3766      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
     3767      33,    34,    -1,    -1,    70,    -1,    -1,    -1,    -1,    42,
     3768      -1,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    34333769      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3434       -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,
    3435       -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,   125,
    3436      126,    -1,    -1,    -1,    -1,   131,  1257,  1258,    -1,    -1,
    3437      136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   893,
     3770      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
     3771      -1,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,    -1,
     3772     116,    -1,    -1,    -1,    -1,    -1,   122,   123,    -1,    -1,
     3773      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3774      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3775      -1,    -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
     3776     123,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3777      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3778      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
     3779      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
     3780      -1,    40,    41,    -1,    43,    44,    -1,    46,    -1,    -1,
     3781      49,    50,    51,    52,    53,    54,    55,    56,    -1,    -1,
     3782      59,    60,    -1,    -1,    -1,    64,    65,    70,    67,    72,
     3783      69,    74,    -1,    -1,    77,    78,    75,    -1,    -1,    -1,
     3784      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
     3785      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
     3786      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3787      -1,    -1,   115,    -1,    -1,   114,    -1,   116,    -1,    -1,
     3788     119,    -1,    -1,   122,   123,   124,   125,   126,   127,    -1,
     3789      -1,    40,    41,   132,    43,    44,    -1,    46,   137,    -1,
     3790      49,    50,    51,    52,    53,    54,    55,    56,    -1,    -1,
     3791      -1,    60,    -1,    -1,    -1,    64,    65,    -1,    67,    -1,
     3792      69,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,
     3793      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
     3794      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
     3795      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3796      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
     3797     119,    -1,    -1,   122,   123,   124,   125,   126,   127,    -1,
     3798      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,   137,     4,
     3799       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3800      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3801      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
     3802      -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,    40,
     3803      41,    -1,    43,    44,    -1,    46,    47,    48,    49,    50,
     3804      51,    52,    53,    54,    55,    56,    -1,    -1,    59,    60,
     3805      -1,    -1,    -1,    64,    65,    70,    67,    72,    69,    74,
     3806      -1,    -1,    77,    78,    75,    -1,    -1,    -1,    79,    -1,
     3807      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
     3808      91,    92,    -1,    -1,    -1,    -1,   101,    -1,    -1,    -1,
     3809      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3810      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,
     3811      -1,   122,   123,   124,   125,   126,   127,    -1,    -1,    40,
     3812      41,   132,    43,    44,    -1,    46,    47,    48,    49,    50,
     3813      51,    52,    53,    54,    55,    56,    -1,    -1,    -1,    60,
     3814      -1,    -1,    -1,    64,    65,    -1,    67,    -1,    69,    -1,
     3815      -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,    -1,
     3816      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
     3817      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3818      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3819      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,
     3820      -1,   122,   123,   124,   125,   126,   127,    -1,    -1,    40,
     3821      41,   132,    43,    44,    -1,    46,    -1,    -1,    49,    50,
     3822      51,    52,    53,    54,    55,    56,    -1,    -1,    -1,    60,
     3823      -1,    -1,    -1,    64,    65,    -1,    67,    -1,    69,    -1,
     3824      -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,    -1,
     3825      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
     3826      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,
     3827      -1,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3828      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,
     3829      -1,   122,   123,   124,   125,   126,   127,    69,    -1,    -1,
     3830      -1,   132,    -1,    75,    -1,    -1,    -1,    79,    -1,    -1,
     3831      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
     3832      92,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,    -1,
     3833      43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3834      -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,    -1,
     3835     122,   123,   124,   125,   126,   127,    69,    -1,    -1,    -1,
     3836      -1,    -1,    75,    -1,    -1,    -1,    79,    -1,    -1,    82,
     3837      83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
     3838      -1,    -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    43,
     3839      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3840      -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
     3841     123,   124,   125,   126,   127,    69,    -1,    -1,    -1,    -1,
     3842      -1,    75,    -1,    -1,    -1,    79,    -1,    -1,    82,    83,
     3843      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
     3844      -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    43,    -1,
     3845      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3846     114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
     3847     124,   125,   126,   127,    69,    -1,    -1,    -1,    -1,    -1,
     3848      75,    -1,    -1,    -1,    79,    -1,    -1,    82,    83,    84,
     3849      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
     3850      -1,    -1,    -1,    -1,    40,    41,    -1,    43,    -1,    -1,
     3851      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
     3852      -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
     3853     125,   126,   127,    69,    -1,    -1,    -1,    -1,    -1,    75,
     3854      -1,    -1,    -1,    79,    -1,    -1,    82,    83,    84,    85,
     3855      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
     3856      -1,    -1,    -1,    40,    41,    -1,    43,    -1,    -1,    -1,
     3857      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
     3858     116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
     3859     126,   127,    69,    -1,    -1,    -1,    -1,    -1,    75,    -1,
     3860      -1,    -1,    79,    -1,    -1,    82,    83,    84,    85,    86,
     3861      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
     3862      -1,    -1,    40,    41,    -1,    43,    -1,    -1,    -1,    -1,
     3863      -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,
     3864      -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,
     3865     127,    69,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,
     3866      -1,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
     3867      88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,
     3868      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3869      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
     3870      -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,   127,
     3871       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3872      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3873      24,    25,    26,    27,    28,    29,    -1,    -1,    -1,    -1,
     3874      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,
     3875      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3876      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
     3877      -1,    -1,    32,    33,    34,    -1,    70,    -1,    72,    -1,
     3878      74,    75,    42,    77,    78,    79,    -1,    -1,    -1,    -1,
     3879      -1,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,    -1,
     3880      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3881      70,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,    -1,
     3882      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,
    34383883       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    34393884      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    34403885      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
    3441       33,    34,    35,    -1,    -1,    38,    39,    40,    41,    42,
    3442       -1,    -1,    -1,    -1,    -1,   939,    -1,    -1,    -1,    -1,
    3443       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3444       -1,    -1,    -1,    -1,    -1,    68,    69,    -1,    71,    -1,
    3445       73,    74,    -1,    76,    77,    78,    -1,   971,    81,    82,
    3446       83,    84,    85,    86,    87,    88,    -1,    90,    91,   983,
    3447       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3448       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1378,    -1,    -1,
    3449      113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
    3450      123,   124,   125,   126,    -1,    -1,    -1,    -1,  1022,    -1,
    3451       -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,     3,
    3452        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3453       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3454       24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
    3455       34,    35,    -1,    -1,    38,    -1,    -1,    41,    42,    -1,
    3456       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3457       -1,    -1,    -1,    -1,    -1,    -1,  1467,    -1,    -1,    -1,
    3458       -1,    -1,    66,    -1,  1098,    69,    -1,    71,    -1,    73,
    3459       74,    -1,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,
    3460     1491,  1492,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
    3461       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3462       -1,    -1,    -1,    -1,    -1,  1516,    -1,    -1,    -1,   113,
    3463       -1,   115,    -1,    -1,    -1,   119,    -1,   121,   122,    -1,
    3464       -1,    -1,    -1,  1157,  1158,     3,     4,     5,     6,     7,
    3465        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3466       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3467       28,    29,    -1,    -1,    32,    33,    34,    35,    -1,    -1,
    3468       38,    39,    40,    41,    42,    -1,    -1,    -1,    -1,    -1,
     3886      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
    34693887      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    34703888      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3471       68,    69,    -1,    71,    -1,    73,    74,    -1,    76,    77,
    3472       78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
    3473       88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
    3474       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3475       -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
    3476       -1,    -1,    -1,   121,   122,   123,   124,   125,   126,    -1,
    3477       -1,    -1,    -1,    -1,    -1,     4,     5,     6,     7,     8,
    3478        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3479       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
    3480       29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
    3481       39,    40,    41,    42,    -1,    -1,    -1,    -1,    -1,    -1,
    3482       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3483       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,
    3484       69,    -1,    71,    -1,    73,    74,    -1,    76,    77,    78,
    3485       -1,  1365,    81,    82,    83,    84,    85,    86,    87,    88,
    3486       -1,    90,    91,    -1,    -1,    -1,    -1,    -1,  1382,    -1,
    3487       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3488       -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,
    3489       -1,   120,   121,   122,   123,   124,   125,   126,     4,     5,
    3490        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3491       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3492       26,    27,    28,    29,    -1,    -1,    32,    33,    34,    -1,
    3493       -1,    -1,    -1,    39,    40,    41,    42,    -1,    -1,    -1,
    3494     1454,  1455,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3495       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3496       -1,    -1,    68,    69,    -1,    71,    -1,    73,    74,    -1,
    3497       76,    77,    78,    -1,    -1,    81,    82,    83,    84,    85,
    3498       86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,
    3499       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3500       -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,
    3501       -1,    -1,    -1,    -1,   120,   121,   122,   123,   124,   125,
    3502      126,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3503       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3504       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
    3505       33,    34,    -1,    -1,    -1,    -1,    39,    40,    41,    42,
    3506       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3507       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3508       -1,    -1,    -1,    -1,    -1,    68,    69,    -1,    71,    -1,
    3509       73,    74,    -1,    76,    77,    78,    -1,    -1,    81,    82,
    3510       83,    84,    85,    86,    87,    88,    -1,    90,    91,    -1,
    3511       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3512       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3513      113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
    3514      123,   124,   125,   126,     4,     5,     6,     7,     8,     9,
    3515       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3516       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
    3517       -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
    3518       40,    41,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3519       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3520       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,
    3521       -1,    71,    -1,    73,    74,    -1,    76,    77,    78,    -1,
    3522       -1,    81,    82,    83,    84,    85,    86,    87,    88,    -1,
    3523       90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3524       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3525       -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,
    3526       -1,   121,   122,   123,   124,   125,   126,     4,     5,     6,
     3889      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,
     3890      -1,    74,    -1,    -1,    77,    78,     3,     4,     5,     6,
    35273891       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    35283892      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    35293893      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
    3530       -1,    -1,    39,    40,    41,    42,    -1,    -1,    -1,    -1,
     3894      -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,
    35313895      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    35323896      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3533       -1,    68,    69,    -1,    71,    -1,    73,    74,    -1,    76,
    3534       77,    78,    -1,    -1,    81,    82,    83,    84,    85,    86,
    3535       87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
    3536       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3537       -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,
    3538       -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,   126,
    3539        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3540       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3541       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
    3542       33,    34,    35,    -1,    -1,    38,    -1,    -1,    41,    42,
    3543       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3544       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3545       -1,    -1,    -1,    66,    -1,    -1,    69,    -1,    71,    -1,
    3546       73,    74,    -1,    76,    77,    78,    -1,    -1,    -1,    -1,
    3547       -1,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,
    3548       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3549       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3550      113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
    3551        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3552       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3553       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
    3554       33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
    3555       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3556       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
    3557       29,    -1,    -1,    32,    33,    34,    69,    -1,    71,    -1,
    3558       73,    74,    41,    76,    77,    78,    -1,    -1,    -1,    -1,
    3559       -1,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,
    3560       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3561       69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,
    3562      113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
    3563        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3564       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3565       23,    24,    25,    26,    27,    28,    29,    30,    -1,    32,
    3566       33,    34,    35,    -1,    -1,    38,    -1,    -1,    41,    -1,
    3567       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3568       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3569       -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,    -1,
    3570       73,    -1,    -1,    76,    77,    -1,    -1,    80,     3,     4,
    3571        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3572       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3573       25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
    3574       35,    -1,   115,    38,    -1,    -1,    41,    -1,   121,   122,
    3575       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3576       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3577       -1,    -1,    -1,    -1,    69,    -1,    71,    -1,    73,    -1,
    3578       -1,    76,    77,     3,     4,     5,     6,     7,     8,     9,
    3579       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3580       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
    3581       -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
    3582      115,    41,    -1,    -1,    -1,    -1,   121,   122,    -1,     7,
    3583       -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
    3584       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
    3585       -1,    71,    -1,    73,    -1,    -1,    76,    77,    -1,    -1,
    3586       -1,    39,    40,    41,    42,    -1,    -1,    -1,    -1,    -1,
    3587       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3588       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3589       68,    69,    -1,    -1,    -1,   115,    74,    -1,    -1,    -1,
    3590       78,   121,   122,    81,    82,    83,    84,    85,    86,    87,
    3591       88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
    3592       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3593       -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
    3594       -1,    -1,    -1,   121,   122,   123,   124,   125,   126,     4,
    3595        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3596       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3597       25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
    3598       -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    10,
    3599       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3600       21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
    3601       -1,    32,    33,    34,    69,    -1,    71,    -1,    73,    74,
    3602       41,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,
    3603       -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,
    3604       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
    3605       -1,    -1,    -1,    -1,    -1,    76,    77,    -1,   113,    -1,
    3606      115,    -1,    -1,    -1,    -1,    -1,   121,   122,     4,     5,
    3607        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3608       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3609       26,    27,    28,    29,   115,    -1,    32,    33,    34,    -1,
    3610      121,   122,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,
    3611       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3612       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3613       -1,    -1,    -1,    69,    -1,    71,    -1,    73,    -1,    -1,
    3614       76,    77,    -1,     4,     5,     6,     7,     8,     9,    10,
    3615       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3616       21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
    3617       -1,    32,    33,    34,    -1,    -1,    -1,    -1,   114,   115,
    3618       41,    -1,    -1,    -1,    -1,   121,   122,    -1,    -1,    -1,
    3619       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3620       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
    3621       71,    -1,    73,    -1,    -1,    76,    77,    -1,    -1,    -1,
    3622       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3623       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   100,
    3624       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3625       -1,    -1,    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,
    3626      121,   122,     4,     5,     6,     7,     8,     9,    10,    11,
     3897      -1,    -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,
     3898      77,    78,     4,     5,     6,     7,     8,     9,    10,    11,
    36273899      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    36283900      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
    3629       32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,
    3630       -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    3631       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3632       28,    29,    -1,    -1,    32,    33,    34,    69,    -1,    71,
    3633       -1,    73,    -1,    41,    76,    77,    -1,    -1,    -1,    -1,
     3901      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3902      42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    36343903      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3635       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   100,    -1,
    3636       -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,
    3637       -1,    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
    3638      122,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3639       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3640       23,    24,    25,    26,    27,    28,    29,   115,    -1,    32,
    3641       33,    34,    -1,   121,   122,    -1,    -1,    -1,    41,    -1,
    3642       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3643       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3644       -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,    -1,
    3645       73,    -1,    -1,    76,    77,    -1,     4,     5,     6,     7,
    3646        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3647       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3648       28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
    3649       -1,    -1,   115,    41,    -1,    -1,    -1,    -1,   121,   122,
    3650       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3651       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3652       -1,    69,    -1,    71,    -1,    73,    -1,    -1,    76,    77,
    3653       -1,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3654       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3655       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
    3656       33,    34,    -1,    -1,    -1,    -1,    -1,   115,    41,    -1,
    3657       -1,    -1,    -1,   121,   122,    -1,    -1,    -1,    -1,    -1,
    3658       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3659       -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,    -1,
    3660       73,    -1,    -1,    76,    77,    10,    11,    12,    13,    14,
    3661       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3662       25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
    3663       -1,    -1,    -1,    -1,    39,    40,    41,    42,    -1,    -1,
    3664       -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
    3665       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3666       -1,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,    74,
    3667       -1,    76,    77,    78,    -1,    -1,    81,    82,    83,    84,
    3668       85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
    3669       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3670       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
    3671      115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
    3672      125,   126,    10,    11,    12,    13,    14,    15,    16,    17,
    3673       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3674       28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
    3675       -1,    39,    40,    41,    42,    -1,    -1,    -1,    -1,    -1,
    3676       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3677       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3678       68,    69,    -1,    -1,    -1,    -1,    74,    -1,    76,    77,
    3679       78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
    3680       88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
    3681       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3682       -1,    -1,    -1,    -1,    -1,   113,   114,   115,    -1,    -1,
    3683       -1,    -1,    -1,   121,   122,   123,   124,   125,   126,    10,
    3684       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3685       21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
    3686       -1,    32,    33,    34,    -1,    -1,    -1,    -1,    39,    40,
    3687       41,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3688       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3689       -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    -1,
    3690       -1,    -1,    -1,    74,    -1,    76,    77,    78,    -1,    -1,
    3691       81,    82,    83,    84,    85,    86,    87,    88,    -1,    90,
    3692       91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3693       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3694       -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,
    3695      121,   122,   123,   124,   125,   126,    10,    11,    12,    13,
    3696       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3697       24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
    3698       34,    -1,    -1,    -1,    -1,    39,    40,    41,    42,    -1,
    3699       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3700       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3701       -1,    -1,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,
    3702       74,    -1,    76,    77,    78,    -1,    -1,    81,    82,    83,
    3703       84,    85,    86,    87,    88,    -1,    90,    91,    -1,    -1,
    3704       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3705       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,
    3706       -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,   123,
    3707      124,   125,   126,    10,    11,    12,    13,    14,    15,    16,
    3708       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3709       27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
    3710       -1,    -1,    39,    40,    41,    42,    -1,    -1,    -1,    -1,
    3711       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3712       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3713       -1,    68,    69,    -1,    -1,    -1,    -1,    74,    -1,    76,
    3714       77,    78,    -1,    -1,    81,    82,    83,    84,    85,    86,
    3715       87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
    3716       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3717       -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,
    3718       -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,   126,
    3719        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3720       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3721       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
    3722       33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
    3723       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3724       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
    3725       -1,    -1,    32,    33,    34,    -1,    69,    -1,    71,    -1,
    3726       73,    41,    -1,    76,    77,    -1,    -1,    -1,    -1,    -1,
    3727       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3728       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
    3729       -1,    -1,    -1,    -1,    74,    -1,    76,    77,    -1,    -1,
    3730       -1,    -1,    -1,    -1,    -1,   118,    -1,    87,    88,    -1,
    3731       -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
    3732       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3733       26,    27,    28,    29,    -1,   115,    32,    33,    34,    -1,
    3734       -1,   121,   122,    -1,    -1,    41,    42,    10,    11,    12,
    3735       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3736       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
    3737       33,    34,    -1,    69,    -1,    -1,    -1,    -1,    41,    42,
    3738       76,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3739       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3740       -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,
    3741       -1,    -1,    -1,    76,    77,    -1,    -1,    -1,    -1,   115,
    3742       -1,    -1,    -1,   119,    -1,   121,   122,    -1,    -1,    -1,
    3743       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3744       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
    3745       29,    -1,   115,    32,    33,    34,   119,    -1,   121,   122,
    3746       -1,    -1,    41,    42,    10,    11,    12,    13,    14,    15,
    3747       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3748       26,    27,    28,    29,    -1,    -1,    32,    33,    34,    -1,
    3749       69,    -1,    -1,    -1,    -1,    41,    -1,    76,    77,    -1,
    3750       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3751       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3752       -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,
    3753       76,    77,    -1,    -1,    -1,    -1,   115,    -1,    -1,    -1,
    3754      119,    -1,   121,   122,    -1,    -1,    -1,    -1,    10,    11,
    3755       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3756       22,    23,    24,    25,    26,    27,    28,    29,    -1,   115,
    3757       32,    33,    34,    -1,    -1,   121,   122,    -1,    -1,    41,
    3758       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3759       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
    3760       -1,    -1,    32,    33,    34,    -1,    -1,    69,    -1,    -1,
    3761       -1,    41,    -1,    -1,    76,    77,    -1,    -1,    -1,    -1,
    3762       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3763       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
    3764       -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,    -1,
    3765       -1,    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
    3766      122,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
    3767       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3768       26,    27,    28,    29,    -1,   115,    32,    33,    34,    -1,
    3769       -1,   121,   122,    -1,    -1,    41,    -1,    -1,    -1,    -1,
    3770       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3771       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3772       -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,
    3773       76,    77,    -1,     4,     5,     6,     7,     8,     9,    10,
    3774       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3775       21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
    3776       -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,   115,
    3777       41,    -1,    -1,    -1,    -1,   121,   122,    -1,    -1,    -1,
    3778       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3779       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
    3780       71,    -1,    73,    -1,    -1,    76,    77,    39,    40,    -1,
    3781       42,    43,    -1,    45,    -1,    -1,    48,    49,    50,    51,
    3782       52,    53,    54,    55,    -1,    -1,    58,    59,    -1,    -1,
    3783       -1,    63,    64,    -1,    66,    -1,    68,    -1,    -1,    -1,
    3784       -1,    -1,    74,   114,    -1,    -1,    78,    -1,    -1,    81,
    3785       82,    83,    84,    85,    86,    87,    88,    -1,    90,    91,
    3786       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3787       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3788       -1,   113,    -1,   115,    -1,    -1,   118,    -1,    -1,   121,
    3789      122,   123,   124,   125,   126,    -1,    -1,    39,    40,   131,
    3790       42,    43,    -1,    45,   136,    -1,    48,    49,    50,    51,
    3791       52,    53,    54,    55,    -1,    -1,    -1,    59,    -1,    -1,
    3792       -1,    63,    64,    -1,    66,    -1,    68,    -1,    -1,    -1,
    3793       -1,    -1,    74,    -1,    -1,    -1,    78,    -1,    -1,    81,
    3794       82,    83,    84,    85,    86,    87,    88,    -1,    90,    91,
    3795       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3796       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3797       -1,   113,    -1,   115,    -1,    -1,   118,    -1,    -1,   121,
    3798      122,   123,   124,   125,   126,    -1,    -1,    -1,    -1,   131,
    3799       -1,    -1,    -1,    -1,   136,     4,     5,     6,     7,     8,
    3800        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3801       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
    3802       29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
    3803       -1,    -1,    41,    -1,    39,    40,    -1,    42,    43,    -1,
    3804       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
    3805       55,    -1,    -1,    58,    59,    -1,    -1,    -1,    63,    64,
    3806       69,    66,    71,    68,    73,    -1,    -1,    76,    77,    74,
    3807       -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
    3808       85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
    3809       -1,   100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3810       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
    3811      115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
    3812      125,   126,    -1,    -1,    39,    40,   131,    42,    43,    -1,
    3813       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
    3814       55,    -1,    -1,    -1,    59,    -1,    -1,    -1,    63,    64,
    3815       -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    74,
    3816       -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
    3817       85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
    3818       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3819       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
    3820      115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
    3821      125,   126,    -1,    -1,    39,    40,   131,    42,    43,    -1,
    3822       45,    -1,    -1,    48,    49,    50,    51,    52,    53,    54,
    3823       55,    -1,    -1,    -1,    59,    -1,    -1,    -1,    63,    64,
    3824       -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    74,
    3825       -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
    3826       85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
    3827       -1,    -1,    -1,    39,    40,    -1,    42,    -1,    -1,    -1,
    3828       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
    3829      115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
    3830      125,   126,    68,    -1,    -1,    -1,   131,    -1,    74,    -1,
    3831       76,    77,    78,    -1,    -1,    81,    82,    83,    84,    85,
    3832       86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,
    3833       -1,    -1,    39,    40,    -1,    42,    -1,    -1,    -1,    -1,
    3834       -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,
    3835       -1,   117,   118,    -1,    -1,   121,   122,   123,   124,   125,
    3836      126,    68,    -1,    -1,    -1,    -1,    -1,    74,    -1,    -1,
    3837       -1,    78,    -1,    -1,    81,    82,    83,    84,    85,    86,
    3838       87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
    3839       -1,    39,    40,    -1,    42,    -1,    -1,    -1,    -1,    -1,
    3840       -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,
    3841       -1,   118,    -1,    -1,   121,   122,   123,   124,   125,   126,
    3842       68,    -1,    -1,    -1,    -1,    -1,    74,    -1,    -1,    -1,
    3843       78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
    3844       88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
    3845       39,    40,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,
    3846       -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
    3847       -1,    -1,   120,   121,   122,   123,   124,   125,   126,    68,
    3848       -1,    -1,    -1,    -1,    -1,    74,    -1,    -1,    -1,    78,
    3849       -1,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
    3850       -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    39,
    3851       40,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3852       -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,   118,
    3853       -1,    -1,   121,   122,   123,   124,   125,   126,    68,    -1,
    3854       -1,    -1,    -1,    -1,    74,    -1,    -1,    -1,    78,    -1,
    3855       -1,    81,    82,    83,    84,    85,    86,    87,    88,    -1,
    3856       90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    39,    40,
    3857       -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3858       -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,
    3859       -1,   121,   122,   123,   124,   125,   126,    68,    -1,    -1,
    3860       -1,    -1,    -1,    74,    -1,    -1,    -1,    78,    -1,    -1,
    3861       81,    82,    83,    84,    85,    86,    87,    88,    -1,    90,
    3862       91,    -1,    -1,    -1,    -1,    -1,    -1,    39,    40,    -1,
    3863       42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3864       -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,
    3865      121,   122,   123,   124,   125,   126,    68,    -1,    -1,    -1,
    3866       -1,    -1,    74,    -1,    -1,    -1,    78,    -1,    -1,    81,
    3867       82,    83,    84,    85,    86,    87,    88,    -1,    90,    91,
    3868       -1,    -1,    -1,    -1,    -1,    -1,    39,    40,    -1,    42,
    3869       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3870       -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
    3871      122,   123,   124,   125,   126,    68,    -1,    -1,    -1,    -1,
    3872       -1,    74,    -1,    -1,    -1,    78,    -1,    -1,    81,    82,
    3873       83,    84,    85,    86,    87,    88,    -1,    90,    91,    -1,
    3874       -1,    -1,    -1,    -1,    -1,    39,    40,    -1,    42,    -1,
    3875       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3876      113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
    3877      123,   124,   125,   126,    68,    -1,    -1,    -1,    -1,    -1,
    3878       74,    -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,
    3879       84,    85,    86,    87,    88,    -1,    90,    91,    -1,    -1,
    3880       -1,    -1,    -1,    -1,    39,    40,    -1,    42,    -1,    -1,
    3881       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,
    3882       -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,   123,
    3883      124,   125,   126,    68,    -1,    -1,    -1,    -1,    -1,    74,
    3884       -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
    3885       85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
    3886       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3887       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
    3888      115,    -1,    -1,    -1,    -1,    -1,   121,   122,   123,   124,
    3889      125,   126,     4,     5,     6,     7,     8,     9,    10,    11,
    3890       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3891       22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
    3892       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
    3893       -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    3894       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3895       28,    29,    -1,    -1,    32,    33,    34,    69,    -1,    71,
    3896       -1,    73,    74,    41,    76,    77,    78,    -1,    -1,    -1,
    3897       -1,    -1,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,
    3898       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3899       -1,    69,    -1,    -1,    -1,    -1,    74,    -1,    76,    77,
    3900       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
    3901       88,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    3902       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3903       22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
    3904       32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,
    3905       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3906       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3907       -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,
    3908       -1,    73,    -1,    -1,    76,    77,     3,     4,     5,     6,
    3909        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3910       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3911       27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
    3912       -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,
    3913       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3914       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3915       -1,    -1,    69,    -1,    71,    -1,    73,    -1,    -1,    76,
    3916       77,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3917       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3918       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
    3919       33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
    3920       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3921       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3922       -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,    -1,
    3923       73,    -1,    -1,    76,    77,    10,    11,    12,    13,    14,
    3924       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3925       25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
    3926       35,    36,    37,    -1,    -1,    -1,    41,    10,    11,    12,
    3927       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3928       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
    3929       33,    34,    -1,    -1,    69,    -1,    -1,    -1,    41,    -1,
    3930       -1,    76,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3931       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3932       -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,
    3933       -1,    -1,    -1,    76,    77
     3904      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
     3905      72,    -1,    74,    -1,    -1,    77,    78
    39343906};
    39353907
     
    39413913      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    39423914      22,    23,    24,    25,    26,    27,    28,    29,    32,    33,
    3943       34,    35,    38,    41,    42,    66,    69,    71,    73,    74,
    3944       76,    77,    78,    87,    88,   113,   115,   121,   122,   141,
    3945      144,   156,   205,   219,   220,   221,   222,   223,   224,   225,
    3946      226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
    3947      236,   238,   239,   240,   241,   242,   243,   244,   246,   247,
    3948      248,   249,   250,   251,   253,   261,   262,   289,   290,   291,
    3949      299,   302,   308,   309,   311,   313,   314,   320,   325,   329,
    3950      330,   331,   332,   333,   334,   335,   336,   356,   373,   374,
    3951      375,   376,    74,   143,   144,   156,   222,   224,   232,   234,
    3952      243,   247,   249,   290,    83,   113,   318,   319,   320,   318,
    3953      318,    74,    76,    77,    78,   142,   143,   279,   280,   300,
    3954      301,    76,    77,   280,   113,   311,    11,   206,   113,   156,
    3955      325,   330,   331,   332,   334,   335,   336,   116,   138,   225,
    3956      232,   234,   329,   333,   372,   373,   376,   377,   139,   111,
    3957      135,   283,   118,   139,   180,    76,    77,   141,   278,   139,
    3958      139,   139,   120,   139,    76,    77,   113,   156,   315,   324,
    3959      325,   326,   327,   328,   329,   333,   337,   338,   339,   340,
    3960      341,   347,     3,    30,    80,   245,     3,     5,    76,   115,
    3961      156,   224,   235,   239,   241,   250,   291,   329,   333,   376,
    3962      222,   224,   234,   243,   247,   249,   290,   329,   333,    35,
    3963      240,   240,   235,   241,   139,   240,   235,   240,   235,    77,
    3964      113,   118,   280,   291,   118,   280,   240,   235,   120,   139,
    3965      139,     0,   138,   113,   180,   318,   318,   138,   115,   232,
    3966      234,   374,   278,   278,   135,   234,   113,   156,   315,   325,
    3967      329,   115,   156,   376,   312,   237,   320,   113,   296,   113,
    3968      113,    53,   113,    39,    40,    42,    68,    74,    78,    81,
    3969       82,    83,    84,    85,    86,    90,    91,   113,   115,   123,
    3970      124,   125,   126,   140,   144,   145,   146,   147,   148,   155,
    3971      156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
    3972      166,   167,   168,   169,   171,   174,   232,   282,   298,   372,
    3973      377,   234,   114,   114,   114,   114,   114,   114,   114,   115,
    3974      232,   356,   374,   115,   121,   156,   171,   224,   225,   231,
    3975      234,   238,   239,   243,   246,   247,   249,   268,   269,   273,
    3976      274,   275,   276,   290,   356,   368,   369,   370,   371,   376,
    3977      377,   113,   329,   333,   376,   113,   120,   136,   115,   118,
    3978      156,   171,   284,   284,   119,   138,   120,   136,   113,   120,
    3979      136,   120,   136,   120,   136,   318,   136,   325,   326,   327,
    3980      328,   338,   339,   340,   341,   234,   324,   337,    66,   317,
    3981      115,   318,   355,   356,   318,   318,   180,   138,   113,   318,
    3982      355,   318,   318,   234,   315,   113,   113,   233,   234,   232,
    3983      234,   138,   232,   372,   377,   180,   138,   278,   283,   224,
    3984      239,   329,   333,   180,   138,   300,   234,   243,   136,   234,
    3985      234,   298,   254,   252,   264,   280,   263,   234,   300,   136,
    3986      136,   311,   138,   143,   277,     3,   139,   214,   215,   229,
    3987      231,   234,   138,   317,   113,   317,   171,   325,   234,   113,
    3988      138,   278,   118,    35,    36,    37,   232,   292,   293,   295,
    3989      138,   132,   135,   297,   138,   235,   240,   241,   278,   321,
    3990      322,   323,   113,   145,   113,   155,   113,   155,   158,   113,
    3991      155,   113,   113,   155,   155,   115,   171,   176,   180,   232,
    3992      281,   372,   376,   138,    83,    85,    89,    90,    91,   113,
    3993      115,   117,   118,   101,   102,   103,   104,   105,   106,   107,
    3994      108,   109,   110,   111,   135,   173,   158,   158,   121,   127,
    3995      128,   123,   124,    92,    93,    94,    95,   129,   130,    96,
    3996       97,   122,   131,   132,    98,    99,   133,   113,   156,   351,
    3997      352,   353,   354,   355,   114,   120,   113,   355,   356,   113,
    3998      355,   356,   138,   232,   374,   116,   138,   139,   232,   234,
    3999      367,   368,   376,   377,   139,   113,   115,   156,   325,   342,
    4000      343,   344,   345,   346,   347,   348,   349,   350,   356,   357,
    4001      358,   359,   360,   361,   362,   156,   376,   234,   139,   139,
    4002      156,   232,   234,   369,   278,   232,   356,   369,   278,   138,
    4003      138,   138,   138,    74,   115,   117,   144,   280,   284,   285,
    4004      286,   287,   288,   138,   138,   138,   138,   138,   138,   315,
    4005      114,   114,   114,   114,   114,   114,   114,   324,   337,   113,
    4006      283,   116,   214,   138,   315,   176,   282,   176,   282,   315,
    4007      115,   214,   317,   180,   138,   214,   114,    42,   115,   119,
    4008      232,   255,   256,   257,   372,   118,   120,   378,   135,   265,
    4009      118,   234,   270,   271,   272,   275,   276,   114,   120,   180,
    4010      138,   121,   171,   138,   231,   234,   269,   368,   376,   309,
    4011      310,   113,   156,   342,   114,   120,   135,   379,   280,   292,
    4012      113,   118,   280,   282,   292,   114,   120,   113,   145,   114,
    4013      134,   281,   281,   281,   150,   171,   282,   281,   138,   114,
    4014      120,   114,   113,   156,   355,   363,   364,   365,   366,   114,
    4015      120,   171,   115,   143,   149,   150,   138,   115,   143,   149,
    4016      171,   158,   158,   158,   159,   159,   160,   160,   161,   161,
    4017      161,   161,   162,   162,   163,   164,   165,   166,   167,   134,
    4018      176,   138,   352,   353,   354,   234,   351,   318,   318,   171,
    4019      282,   138,   277,   232,   356,   369,   234,   238,   116,   376,
    4020      116,   113,   138,   325,   343,   344,   345,   348,   358,   359,
    4021      360,   116,   138,   234,   342,   346,   357,   113,   318,   361,
    4022      379,   318,   318,   379,   113,   318,   361,   318,   318,   318,
    4023      318,   356,   232,   367,   377,   278,   116,   120,   116,   120,
    4024      379,   232,   369,   379,   266,   267,   268,   269,   266,   278,
    4025      171,   138,   115,   280,   134,   120,   378,   284,   115,   134,
    4026      288,    31,   216,   217,   278,   266,   143,   315,   143,   317,
    4027      113,   355,   356,   113,   355,   356,   145,   356,   180,   270,
    4028      114,   114,   114,   114,   138,   180,   214,   180,   118,   256,
    4029      257,   138,   113,   134,   156,   258,   260,   324,   325,   337,
    4030      363,   120,   136,   120,   136,   280,   254,   280,   119,   169,
    4031      170,   264,   139,   139,   143,   229,   139,   139,   266,   113,
    4032      156,   376,   139,   119,   234,   293,   171,   294,   139,   138,
    4033      138,   113,   139,   114,   322,   176,   177,   134,   136,   115,
    4034      145,   207,   208,   209,   114,   120,   114,   114,   114,   114,
    4035      171,   364,   365,   366,   234,   363,   318,   318,   118,   158,
    4036      171,   172,   175,   120,   138,   114,   120,   171,   138,   119,
    4037      169,   134,   270,   114,   114,   114,   351,   270,   114,   232,
    4038      369,   115,   121,   156,   171,   171,   234,   348,   270,   114,
    4039      114,   114,   114,   114,   114,   114,     7,   234,   342,   346,
    4040      357,   138,   138,   379,   138,   138,   139,   139,   139,   139,
    4041      283,   169,   170,   171,   316,   138,   284,   286,   119,   138,
    4042      218,   280,    42,    43,    45,    48,    49,    50,    51,    52,
    4043       53,    54,    55,    59,    63,    64,    74,   131,   177,   178,
    4044      179,   180,   181,   182,   184,   185,   197,   199,   200,   205,
    4045      219,   314,    31,   139,   135,   283,   138,   138,   114,   139,
    4046      180,   254,   136,   136,   325,   170,   234,   259,   260,   259,
    4047      280,   318,   119,   265,   378,   114,   120,   116,   116,   139,
    4048      234,   120,   379,   296,   114,   292,   222,   224,   232,   304,
    4049      305,   306,   307,   298,   114,   114,   134,   170,   113,   114,
    4050      134,   120,   143,   114,   114,   114,   363,   285,   120,   139,
    4051      175,    81,    84,    86,   143,   151,   152,   153,   150,   139,
    4052      151,   169,   139,   113,   355,   356,   139,   138,   139,   139,
    4053      139,   171,   114,   139,   113,   355,   356,   113,   361,   113,
    4054      361,   356,   233,     7,   121,   139,   171,   270,   270,   269,
    4055      273,   273,   274,   114,   120,   120,   114,   100,   126,   139,
    4056      139,   151,   284,   171,   120,   136,   219,   223,   234,   238,
    4057      113,   113,   178,   113,   113,    74,   136,    74,   136,    74,
    4058      121,   177,   113,   180,   172,   172,   134,   148,   136,   139,
    4059      138,   139,   218,   114,   171,   270,   270,   318,   114,   119,
    4060      258,   119,   138,   114,   138,   139,   315,   119,   138,   139,
    4061      139,   114,   118,   207,   116,   170,   136,   207,   209,   114,
    4062      113,   355,   356,   378,   172,   116,   139,   154,   115,   152,
    4063      154,   154,   120,   139,    89,   117,   116,   139,   114,   138,
    4064      114,   116,   116,   116,   139,   114,   138,   138,   138,   171,
    4065      171,   139,   116,   139,   139,   139,   139,   138,   138,   170,
    4066      170,   116,   116,   139,   280,   234,   176,   176,    49,   176,
    4067      138,   136,   136,   136,   176,   136,   176,    60,    61,    62,
    4068      201,   202,   203,   136,    65,   136,   318,   118,   182,   119,
    4069      136,   139,   139,   100,   275,   276,   114,   305,   120,   136,
    4070      120,   136,   119,   303,   134,   145,   114,   114,   134,   138,
    4071      119,   116,    85,   138,   152,   116,   115,   152,   115,   152,
    4072      116,   270,   116,   270,   270,   270,   139,   139,   116,   116,
    4073      114,   114,   116,   120,   100,   269,   100,   139,   116,   114,
    4074      114,   113,   114,   177,   198,   219,   136,   114,   113,   113,
    4075      180,   203,    60,    61,   171,   178,   149,   114,   114,   118,
    4076      138,   138,   304,   145,   210,   113,   136,   210,   270,   151,
    4077      138,   138,   139,   139,   139,   139,   116,   116,   138,   139,
    4078      116,   178,    46,    47,   118,   188,   189,   190,   176,   178,
    4079      139,   114,   177,   118,   190,   100,   138,   100,   138,   113,
    4080      113,   136,   119,   138,   278,   315,   119,   120,   134,   170,
    4081      114,   139,   139,   151,   151,   114,   114,   114,   114,   273,
    4082       44,   170,   186,   187,   316,   134,   138,   178,   188,   114,
    4083      136,   178,   136,   138,   114,   138,   114,   138,   100,   138,
    4084      100,   138,   136,   304,   145,   143,   211,   114,   136,   114,
    4085      116,   139,   139,   178,   100,   120,   134,   139,   212,   213,
    4086      219,   136,   177,   177,   212,   180,   204,   232,   372,   180,
    4087      204,   114,   138,   114,   138,   119,   114,   120,   116,   116,
    4088      170,   186,   189,   191,   192,   138,   136,   189,   193,   194,
    4089      139,   113,   156,   315,   363,   143,   139,   180,   204,   180,
    4090      204,   113,   136,   143,   178,   183,   119,   189,   219,   177,
    4091       58,   183,   196,   119,   189,   114,   234,   114,   139,   139,
    4092      298,   178,   183,   136,   195,   196,   183,   196,   180,   180,
    4093      114,   114,   114,   195,   139,   139,   180,   180,   139,   139
     3915      34,    35,    39,    42,    43,    67,    70,    72,    74,    75,
     3916      77,    78,    79,    88,    89,   114,   116,   122,   123,   142,
     3917     145,   157,   206,   220,   221,   222,   223,   224,   225,   226,
     3918     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
     3919     237,   239,   240,   241,   242,   243,   244,   245,   247,   248,
     3920     249,   250,   251,   252,   254,   262,   263,   290,   291,   292,
     3921     300,   303,   309,   310,   312,   314,   315,   321,   326,   330,
     3922     331,   332,   333,   334,   335,   336,   337,   357,   374,   375,
     3923     376,   377,    75,   144,   145,   157,   223,   225,   233,   235,
     3924     244,   248,   250,   291,    84,   114,   319,   320,   321,   319,
     3925     319,    75,    77,    78,    79,   143,   144,   280,   281,   301,
     3926     302,    77,    78,   281,   114,   312,    11,   207,   114,   157,
     3927     326,   331,   332,   333,   335,   336,   337,   117,   139,   226,
     3928     233,   235,   330,   334,   373,   374,   377,   378,   140,   112,
     3929     136,   284,   119,   140,   181,    77,    78,   142,   279,   140,
     3930     140,   140,   121,   140,    77,    78,   114,   157,   316,   325,
     3931     326,   327,   328,   329,   330,   334,   338,   339,   340,   341,
     3932     342,   348,     3,    30,    81,   246,     3,     5,    77,   116,
     3933     157,   225,   236,   240,   242,   251,   292,   330,   334,   377,
     3934     223,   225,   235,   244,   248,   250,   291,   330,   334,    35,
     3935     241,   241,   236,   242,   140,   241,   236,   241,   236,    78,
     3936     114,   119,   281,   292,   119,   281,   241,   236,   121,   140,
     3937     140,     0,   139,   114,   181,   319,   319,   139,   116,   233,
     3938     235,   375,   279,   279,   136,   235,   114,   157,   316,   326,
     3939     330,   116,   157,   377,   313,   238,   321,   114,   297,   114,
     3940     114,    54,   114,    40,    41,    43,    69,    75,    79,    82,
     3941      83,    84,    85,    86,    87,    91,    92,   114,   116,   124,
     3942     125,   126,   127,   141,   145,   146,   147,   148,   149,   156,
     3943     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
     3944     167,   168,   169,   170,   172,   175,   233,   283,   299,   373,
     3945     378,   235,   115,   115,   115,   115,   115,   115,   115,   116,
     3946     233,   357,   375,   116,   122,   157,   172,   225,   226,   232,
     3947     235,   239,   240,   244,   247,   248,   250,   269,   270,   274,
     3948     275,   276,   277,   291,   357,   369,   370,   371,   372,   377,
     3949     378,   114,   330,   334,   377,   114,   121,   137,   116,   119,
     3950     157,   172,   285,   285,   120,   139,   121,   137,   114,   121,
     3951     137,   121,   137,   121,   137,   319,   137,   326,   327,   328,
     3952     329,   339,   340,   341,   342,   235,   325,   338,    67,   318,
     3953     116,   319,   356,   357,   319,   319,   181,   139,   114,   319,
     3954     356,   319,   319,   235,   316,   114,   114,   234,   235,   233,
     3955     235,   139,   233,   373,   378,   181,   139,   279,   284,   225,
     3956     240,   330,   334,   181,   139,   301,   235,   244,   137,   235,
     3957     235,   299,   255,   253,   265,   281,   264,   235,   301,   137,
     3958     137,   312,   139,   144,   278,     3,   140,   215,   216,   230,
     3959     232,   235,   139,   318,   114,   318,   172,   326,   235,   114,
     3960     139,   279,   119,    35,    36,    37,    38,   233,   293,   294,
     3961     296,   139,   133,   136,   298,   139,   236,   241,   242,   279,
     3962     322,   323,   324,   114,   146,   114,   156,   114,   156,   159,
     3963     114,   156,   114,   114,   156,   156,   116,   172,   177,   181,
     3964     233,   282,   373,   377,   139,    84,    86,    90,    91,    92,
     3965     114,   116,   118,   119,   102,   103,   104,   105,   106,   107,
     3966     108,   109,   110,   111,   112,   136,   174,   159,   159,   122,
     3967     128,   129,   124,   125,    93,    94,    95,    96,   130,   131,
     3968      97,    98,   123,   132,   133,    99,   100,   134,   114,   157,
     3969     352,   353,   354,   355,   356,   115,   121,   114,   356,   357,
     3970     114,   356,   357,   139,   233,   375,   117,   139,   140,   233,
     3971     235,   368,   369,   377,   378,   140,   114,   116,   157,   326,
     3972     343,   344,   345,   346,   347,   348,   349,   350,   351,   357,
     3973     358,   359,   360,   361,   362,   363,   157,   377,   235,   140,
     3974     140,   157,   233,   235,   370,   279,   233,   357,   370,   279,
     3975     139,   139,   139,   139,    75,   116,   118,   145,   281,   285,
     3976     286,   287,   288,   289,   139,   139,   139,   139,   139,   139,
     3977     316,   115,   115,   115,   115,   115,   115,   115,   325,   338,
     3978     114,   284,   117,   215,   139,   316,   177,   283,   177,   283,
     3979     316,   116,   215,   318,   181,   139,   215,   115,    43,   116,
     3980     120,   233,   256,   257,   258,   373,   119,   121,   379,   136,
     3981     266,   119,   235,   271,   272,   273,   276,   277,   115,   121,
     3982     181,   139,   122,   172,   139,   232,   235,   270,   369,   377,
     3983     310,   311,   114,   157,   343,   115,   121,   136,   380,   281,
     3984     293,   114,   119,   281,   283,   293,   115,   121,   114,   146,
     3985     115,   135,   282,   282,   282,   151,   172,   283,   282,   139,
     3986     115,   121,   115,   114,   157,   356,   364,   365,   366,   367,
     3987     115,   121,   172,   116,   144,   150,   151,   139,   116,   144,
     3988     150,   172,   159,   159,   159,   160,   160,   161,   161,   162,
     3989     162,   162,   162,   163,   163,   164,   165,   166,   167,   168,
     3990     135,   177,   139,   353,   354,   355,   235,   352,   319,   319,
     3991     172,   283,   139,   278,   233,   357,   370,   235,   239,   117,
     3992     377,   117,   114,   139,   326,   344,   345,   346,   349,   359,
     3993     360,   361,   117,   139,   235,   343,   347,   358,   114,   319,
     3994     362,   380,   319,   319,   380,   114,   319,   362,   319,   319,
     3995     319,   319,   357,   233,   368,   378,   279,   117,   121,   117,
     3996     121,   380,   233,   370,   380,   267,   268,   269,   270,   267,
     3997     279,   172,   139,   116,   281,   135,   121,   379,   285,   116,
     3998     135,   289,    31,   217,   218,   279,   267,   144,   316,   144,
     3999     318,   114,   356,   357,   114,   356,   357,   146,   357,   181,
     4000     271,   115,   115,   115,   115,   139,   181,   215,   181,   119,
     4001     257,   258,   139,   114,   135,   157,   259,   261,   325,   326,
     4002     338,   364,   121,   137,   121,   137,   281,   255,   281,   120,
     4003     170,   171,   265,   140,   140,   144,   230,   140,   140,   267,
     4004     114,   157,   377,   140,   120,   235,   294,   172,   295,   140,
     4005     139,   139,   114,   140,   115,   323,   177,   178,   135,   137,
     4006     116,   146,   208,   209,   210,   115,   121,   115,   115,   115,
     4007     115,   172,   365,   366,   367,   235,   364,   319,   319,   119,
     4008     159,   172,   173,   176,   121,   139,   115,   121,   172,   139,
     4009     120,   170,   135,   271,   115,   115,   115,   352,   271,   115,
     4010     233,   370,   116,   122,   157,   172,   172,   235,   349,   271,
     4011     115,   115,   115,   115,   115,   115,   115,     7,   235,   343,
     4012     347,   358,   139,   139,   380,   139,   139,   140,   140,   140,
     4013     140,   284,   170,   171,   172,   317,   139,   285,   287,   120,
     4014     139,   219,   281,    43,    44,    46,    49,    50,    51,    52,
     4015      53,    54,    55,    56,    60,    64,    65,    75,   132,   178,
     4016     179,   180,   181,   182,   183,   185,   186,   198,   200,   201,
     4017     206,   220,   315,    31,   140,   136,   284,   139,   139,   115,
     4018     140,   181,   255,   137,   137,   326,   171,   235,   260,   261,
     4019     260,   281,   319,   120,   266,   379,   115,   121,   117,   117,
     4020     140,   235,   121,   380,   297,   115,   293,   223,   225,   233,
     4021     305,   306,   307,   308,   299,   115,   115,   135,   171,   114,
     4022     115,   135,   121,   144,   115,   115,   115,   364,   286,   121,
     4023     140,   176,    82,    85,    87,   144,   152,   153,   154,   151,
     4024     140,   152,   170,   140,   114,   356,   357,   140,   139,   140,
     4025     140,   140,   172,   115,   140,   114,   356,   357,   114,   362,
     4026     114,   362,   357,   234,     7,   122,   140,   172,   271,   271,
     4027     270,   274,   274,   275,   115,   121,   121,   115,   101,   127,
     4028     140,   140,   152,   285,   172,   121,   137,   220,   224,   235,
     4029     239,   114,   114,   179,   114,   114,    75,   137,    75,   137,
     4030      75,   122,   178,   114,   181,   173,   173,   135,   149,   137,
     4031     140,   139,   140,   219,   115,   172,   271,   271,   319,   115,
     4032     120,   259,   120,   139,   115,   139,   140,   316,   120,   139,
     4033     140,   140,   115,   119,   208,   117,   171,   137,   208,   210,
     4034     115,   114,   356,   357,   379,   173,   117,   140,   155,   116,
     4035     153,   155,   155,   121,   140,    90,   118,   117,   140,   115,
     4036     139,   115,   117,   117,   117,   140,   115,   139,   139,   139,
     4037     172,   172,   140,   117,   140,   140,   140,   140,   139,   139,
     4038     171,   171,   117,   117,   140,   281,   235,   177,   177,    50,
     4039     177,   139,   137,   137,   137,   177,   137,   177,    61,    62,
     4040      63,   202,   203,   204,   137,    66,   137,   319,   119,   183,
     4041     120,   137,   140,   140,   101,   276,   277,   115,   306,   121,
     4042     137,   121,   137,   120,   304,   135,   146,   115,   115,   135,
     4043     139,   120,   117,    86,   139,   153,   117,   116,   153,   116,
     4044     153,   117,   271,   117,   271,   271,   271,   140,   140,   117,
     4045     117,   115,   115,   117,   121,   101,   270,   101,   140,   117,
     4046     115,   115,   114,   115,   178,   199,   220,   137,   115,   114,
     4047     114,   181,   204,    61,    62,   172,   179,   150,   115,   115,
     4048     119,   139,   139,   305,   146,   211,   114,   137,   211,   271,
     4049     152,   139,   139,   140,   140,   140,   140,   117,   117,   139,
     4050     140,   117,   179,    47,    48,   119,   189,   190,   191,   177,
     4051     179,   140,   115,   178,   119,   191,   101,   139,   101,   139,
     4052     114,   114,   137,   120,   139,   279,   316,   120,   121,   135,
     4053     171,   115,   140,   140,   152,   152,   115,   115,   115,   115,
     4054     274,    45,   171,   187,   188,   317,   135,   139,   179,   189,
     4055     115,   137,   179,   137,   139,   115,   139,   115,   139,   101,
     4056     139,   101,   139,   137,   305,   146,   144,   212,   115,   137,
     4057     115,   117,   140,   140,   179,   101,   121,   135,   140,   213,
     4058     214,   220,   137,   178,   178,   213,   181,   205,   233,   373,
     4059     181,   205,   115,   139,   115,   139,   120,   115,   121,   117,
     4060     117,   171,   187,   190,   192,   193,   139,   137,   190,   194,
     4061     195,   140,   114,   157,   316,   364,   144,   140,   181,   205,
     4062     181,   205,   114,   137,   144,   179,   184,   120,   190,   220,
     4063     178,    59,   184,   197,   120,   190,   115,   235,   115,   140,
     4064     140,   299,   179,   184,   137,   196,   197,   184,   197,   181,
     4065     181,   115,   115,   115,   196,   140,   140,   181,   181,   140,
     4066     140
    40944067};
    40954068
     
    75647537/* Line 1806 of yacc.c  */
    75657538#line 1895 "parser.yy"
     7539    { (yyval.tclass) = DeclarationNode::Dtype; }
     7540    break;
     7541
     7542  case 494:
     7543
     7544/* Line 1806 of yacc.c  */
     7545#line 1897 "parser.yy"
    75667546    { (yyval.tclass) = DeclarationNode::Ftype; }
    75677547    break;
    75687548
    7569   case 494:
    7570 
    7571 /* Line 1806 of yacc.c  */
    7572 #line 1897 "parser.yy"
    7573     { (yyval.tclass) = DeclarationNode::Dtype; }
    7574     break;
    7575 
    75767549  case 495:
    75777550
    75787551/* Line 1806 of yacc.c  */
    7579 #line 1902 "parser.yy"
     7552#line 1899 "parser.yy"
     7553    { (yyval.tclass) = DeclarationNode::Ttype; }
     7554    break;
     7555
     7556  case 496:
     7557
     7558/* Line 1806 of yacc.c  */
     7559#line 1904 "parser.yy"
    75807560    { (yyval.decl) = nullptr; }
    75817561    break;
    75827562
    7583   case 496:
    7584 
    7585 /* Line 1806 of yacc.c  */
    7586 #line 1904 "parser.yy"
     7563  case 497:
     7564
     7565/* Line 1806 of yacc.c  */
     7566#line 1906 "parser.yy"
    75877567    { (yyval.decl) = (yyvsp[(1) - (2)].decl) ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    75887568    break;
    75897569
    7590   case 497:
    7591 
    7592 /* Line 1806 of yacc.c  */
    7593 #line 1909 "parser.yy"
     7570  case 498:
     7571
     7572/* Line 1806 of yacc.c  */
     7573#line 1911 "parser.yy"
    75947574    {
    75957575                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     
    75987578    break;
    75997579
    7600   case 498:
    7601 
    7602 /* Line 1806 of yacc.c  */
    7603 #line 1914 "parser.yy"
     7580  case 499:
     7581
     7582/* Line 1806 of yacc.c  */
     7583#line 1916 "parser.yy"
    76047584    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    76057585    break;
    76067586
    7607   case 499:
    7608 
    7609 /* Line 1806 of yacc.c  */
    7610 #line 1916 "parser.yy"
     7587  case 500:
     7588
     7589/* Line 1806 of yacc.c  */
     7590#line 1918 "parser.yy"
    76117591    { (yyval.decl) = nullptr; }
    76127592    break;
    76137593
    7614   case 500:
    7615 
    7616 /* Line 1806 of yacc.c  */
    7617 #line 1921 "parser.yy"
     7594  case 501:
     7595
     7596/* Line 1806 of yacc.c  */
     7597#line 1923 "parser.yy"
    76187598    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
    76197599    break;
    76207600
    7621   case 502:
    7622 
    7623 /* Line 1806 of yacc.c  */
    7624 #line 1924 "parser.yy"
     7601  case 503:
     7602
     7603/* Line 1806 of yacc.c  */
     7604#line 1926 "parser.yy"
    76257605    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
    76267606    break;
    76277607
    7628   case 503:
    7629 
    7630 /* Line 1806 of yacc.c  */
    7631 #line 1926 "parser.yy"
     7608  case 504:
     7609
     7610/* Line 1806 of yacc.c  */
     7611#line 1928 "parser.yy"
    76327612    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
    76337613    break;
    76347614
    7635   case 504:
    7636 
    7637 /* Line 1806 of yacc.c  */
    7638 #line 1931 "parser.yy"
     7615  case 505:
     7616
     7617/* Line 1806 of yacc.c  */
     7618#line 1933 "parser.yy"
    76397619    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    76407620    break;
    76417621
    7642   case 505:
    7643 
    7644 /* Line 1806 of yacc.c  */
    7645 #line 1933 "parser.yy"
     7622  case 506:
     7623
     7624/* Line 1806 of yacc.c  */
     7625#line 1935 "parser.yy"
    76467626    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    76477627    break;
    76487628
    7649   case 506:
    7650 
    7651 /* Line 1806 of yacc.c  */
    7652 #line 1935 "parser.yy"
     7629  case 507:
     7630
     7631/* Line 1806 of yacc.c  */
     7632#line 1937 "parser.yy"
    76537633    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    76547634    break;
    76557635
    7656   case 507:
    7657 
    7658 /* Line 1806 of yacc.c  */
    7659 #line 1940 "parser.yy"
     7636  case 508:
     7637
     7638/* Line 1806 of yacc.c  */
     7639#line 1942 "parser.yy"
    76607640    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    76617641    break;
    76627642
    7663   case 508:
    7664 
    7665 /* Line 1806 of yacc.c  */
    7666 #line 1942 "parser.yy"
     7643  case 509:
     7644
     7645/* Line 1806 of yacc.c  */
     7646#line 1944 "parser.yy"
    76677647    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    76687648    break;
    76697649
    7670   case 509:
    7671 
    7672 /* Line 1806 of yacc.c  */
    7673 #line 1947 "parser.yy"
     7650  case 510:
     7651
     7652/* Line 1806 of yacc.c  */
     7653#line 1949 "parser.yy"
    76747654    {
    76757655                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    76787658    break;
    76797659
    7680   case 510:
    7681 
    7682 /* Line 1806 of yacc.c  */
    7683 #line 1952 "parser.yy"
     7660  case 511:
     7661
     7662/* Line 1806 of yacc.c  */
     7663#line 1954 "parser.yy"
    76847664    {
    76857665                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    76887668    break;
    76897669
    7690   case 511:
    7691 
    7692 /* Line 1806 of yacc.c  */
    7693 #line 1960 "parser.yy"
     7670  case 512:
     7671
     7672/* Line 1806 of yacc.c  */
     7673#line 1962 "parser.yy"
    76947674    {
    76957675                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    76987678    break;
    76997679
    7700   case 512:
    7701 
    7702 /* Line 1806 of yacc.c  */
    7703 #line 1965 "parser.yy"
     7680  case 513:
     7681
     7682/* Line 1806 of yacc.c  */
     7683#line 1967 "parser.yy"
    77047684    {
    77057685                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     
    77087688    break;
    77097689
    7710   case 513:
    7711 
    7712 /* Line 1806 of yacc.c  */
    7713 #line 1970 "parser.yy"
     7690  case 514:
     7691
     7692/* Line 1806 of yacc.c  */
     7693#line 1972 "parser.yy"
    77147694    {
    77157695                        typedefTable.leaveTrait();
     
    77197699    break;
    77207700
    7721   case 515:
    7722 
    7723 /* Line 1806 of yacc.c  */
    7724 #line 1980 "parser.yy"
     7701  case 516:
     7702
     7703/* Line 1806 of yacc.c  */
     7704#line 1982 "parser.yy"
    77257705    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    77267706    break;
    77277707
    7728   case 518:
    7729 
    7730 /* Line 1806 of yacc.c  */
    7731 #line 1990 "parser.yy"
     7708  case 519:
     7709
     7710/* Line 1806 of yacc.c  */
     7711#line 1992 "parser.yy"
    77327712    {
    77337713                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77367716    break;
    77377717
    7738   case 519:
    7739 
    7740 /* Line 1806 of yacc.c  */
    7741 #line 1995 "parser.yy"
     7718  case 520:
     7719
     7720/* Line 1806 of yacc.c  */
     7721#line 1997 "parser.yy"
    77427722    {
    77437723                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77467726    break;
    77477727
    7748   case 520:
    7749 
    7750 /* Line 1806 of yacc.c  */
    7751 #line 2000 "parser.yy"
     7728  case 521:
     7729
     7730/* Line 1806 of yacc.c  */
     7731#line 2002 "parser.yy"
    77527732    {
    77537733                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    77567736    break;
    77577737
    7758   case 521:
    7759 
    7760 /* Line 1806 of yacc.c  */
    7761 #line 2008 "parser.yy"
     7738  case 522:
     7739
     7740/* Line 1806 of yacc.c  */
     7741#line 2010 "parser.yy"
    77627742    {
    77637743                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77667746    break;
    77677747
    7768   case 522:
    7769 
    7770 /* Line 1806 of yacc.c  */
    7771 #line 2013 "parser.yy"
     7748  case 523:
     7749
     7750/* Line 1806 of yacc.c  */
     7751#line 2015 "parser.yy"
    77727752    {
    77737753                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77767756    break;
    77777757
    7778   case 523:
    7779 
    7780 /* Line 1806 of yacc.c  */
    7781 #line 2023 "parser.yy"
     7758  case 524:
     7759
     7760/* Line 1806 of yacc.c  */
     7761#line 2025 "parser.yy"
    77827762    {}
    77837763    break;
    77847764
    7785   case 524:
    7786 
    7787 /* Line 1806 of yacc.c  */
    7788 #line 2025 "parser.yy"
     7765  case 525:
     7766
     7767/* Line 1806 of yacc.c  */
     7768#line 2027 "parser.yy"
    77897769    { parseTree = parseTree ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);       }
    77907770    break;
    77917771
    7792   case 526:
    7793 
    7794 /* Line 1806 of yacc.c  */
    7795 #line 2031 "parser.yy"
     7772  case 527:
     7773
     7774/* Line 1806 of yacc.c  */
     7775#line 2033 "parser.yy"
    77967776    { (yyval.decl) = (yyvsp[(1) - (3)].decl) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    77977777    break;
    77987778
    7799   case 527:
    7800 
    7801 /* Line 1806 of yacc.c  */
    7802 #line 2036 "parser.yy"
     7779  case 528:
     7780
     7781/* Line 1806 of yacc.c  */
     7782#line 2038 "parser.yy"
    78037783    { (yyval.decl) = nullptr; }
    78047784    break;
    78057785
    7806   case 531:
    7807 
    7808 /* Line 1806 of yacc.c  */
    7809 #line 2044 "parser.yy"
     7786  case 532:
     7787
     7788/* Line 1806 of yacc.c  */
     7789#line 2046 "parser.yy"
    78107790    {}
    78117791    break;
    78127792
    7813   case 532:
    7814 
    7815 /* Line 1806 of yacc.c  */
    7816 #line 2046 "parser.yy"
     7793  case 533:
     7794
     7795/* Line 1806 of yacc.c  */
     7796#line 2048 "parser.yy"
    78177797    {
    78187798                        linkageStack.push( linkage );                           // handle nested extern "C"/"Cforall"
     
    78217801    break;
    78227802
    7823   case 533:
    7824 
    7825 /* Line 1806 of yacc.c  */
    7826 #line 2051 "parser.yy"
     7803  case 534:
     7804
     7805/* Line 1806 of yacc.c  */
     7806#line 2053 "parser.yy"
    78277807    {
    78287808                        linkage = linkageStack.top();
     
    78327812    break;
    78337813
    7834   case 534:
    7835 
    7836 /* Line 1806 of yacc.c  */
    7837 #line 2057 "parser.yy"
     7814  case 535:
     7815
     7816/* Line 1806 of yacc.c  */
     7817#line 2059 "parser.yy"
    78387818    {   // mark all fields in list
    78397819                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
     
    78437823    break;
    78447824
    7845   case 536:
    7846 
    7847 /* Line 1806 of yacc.c  */
    7848 #line 2072 "parser.yy"
     7825  case 537:
     7826
     7827/* Line 1806 of yacc.c  */
     7828#line 2074 "parser.yy"
    78497829    {
    78507830                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78547834    break;
    78557835
    7856   case 537:
    7857 
    7858 /* Line 1806 of yacc.c  */
    7859 #line 2078 "parser.yy"
     7836  case 538:
     7837
     7838/* Line 1806 of yacc.c  */
     7839#line 2080 "parser.yy"
    78607840    {
    78617841                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78657845    break;
    78667846
    7867   case 538:
    7868 
    7869 /* Line 1806 of yacc.c  */
    7870 #line 2087 "parser.yy"
     7847  case 539:
     7848
     7849/* Line 1806 of yacc.c  */
     7850#line 2089 "parser.yy"
    78717851    {
    78727852                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78767856    break;
    78777857
    7878   case 539:
    7879 
    7880 /* Line 1806 of yacc.c  */
    7881 #line 2093 "parser.yy"
     7858  case 540:
     7859
     7860/* Line 1806 of yacc.c  */
     7861#line 2095 "parser.yy"
    78827862    {
    78837863                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78877867    break;
    78887868
    7889   case 540:
    7890 
    7891 /* Line 1806 of yacc.c  */
    7892 #line 2099 "parser.yy"
     7869  case 541:
     7870
     7871/* Line 1806 of yacc.c  */
     7872#line 2101 "parser.yy"
    78937873    {
    78947874                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78987878    break;
    78997879
    7900   case 541:
    7901 
    7902 /* Line 1806 of yacc.c  */
    7903 #line 2105 "parser.yy"
     7880  case 542:
     7881
     7882/* Line 1806 of yacc.c  */
     7883#line 2107 "parser.yy"
    79047884    {
    79057885                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79097889    break;
    79107890
    7911   case 542:
    7912 
    7913 /* Line 1806 of yacc.c  */
    7914 #line 2111 "parser.yy"
     7891  case 543:
     7892
     7893/* Line 1806 of yacc.c  */
     7894#line 2113 "parser.yy"
    79157895    {
    79167896                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79207900    break;
    79217901
    7922   case 543:
    7923 
    7924 /* Line 1806 of yacc.c  */
    7925 #line 2119 "parser.yy"
     7902  case 544:
     7903
     7904/* Line 1806 of yacc.c  */
     7905#line 2121 "parser.yy"
    79267906    {
    79277907                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79317911    break;
    79327912
    7933   case 544:
    7934 
    7935 /* Line 1806 of yacc.c  */
    7936 #line 2125 "parser.yy"
     7913  case 545:
     7914
     7915/* Line 1806 of yacc.c  */
     7916#line 2127 "parser.yy"
    79377917    {
    79387918                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79427922    break;
    79437923
    7944   case 545:
    7945 
    7946 /* Line 1806 of yacc.c  */
    7947 #line 2133 "parser.yy"
     7924  case 546:
     7925
     7926/* Line 1806 of yacc.c  */
     7927#line 2135 "parser.yy"
    79487928    {
    79497929                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79537933    break;
    79547934
    7955   case 546:
    7956 
    7957 /* Line 1806 of yacc.c  */
    7958 #line 2139 "parser.yy"
     7935  case 547:
     7936
     7937/* Line 1806 of yacc.c  */
     7938#line 2141 "parser.yy"
    79597939    {
    79607940                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79647944    break;
    79657945
    7966   case 550:
    7967 
    7968 /* Line 1806 of yacc.c  */
    7969 #line 2154 "parser.yy"
     7946  case 551:
     7947
     7948/* Line 1806 of yacc.c  */
     7949#line 2156 "parser.yy"
    79707950    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    79717951    break;
    79727952
    7973   case 551:
    7974 
    7975 /* Line 1806 of yacc.c  */
    7976 #line 2159 "parser.yy"
     7953  case 552:
     7954
     7955/* Line 1806 of yacc.c  */
     7956#line 2161 "parser.yy"
    79777957    { (yyval.constant) = nullptr; }
    79787958    break;
    79797959
    7980   case 552:
    7981 
    7982 /* Line 1806 of yacc.c  */
    7983 #line 2161 "parser.yy"
     7960  case 553:
     7961
     7962/* Line 1806 of yacc.c  */
     7963#line 2163 "parser.yy"
    79847964    { (yyval.constant) = (yyvsp[(3) - (5)].constant); }
    79857965    break;
    79867966
    7987   case 553:
    7988 
    7989 /* Line 1806 of yacc.c  */
    7990 #line 2166 "parser.yy"
     7967  case 554:
     7968
     7969/* Line 1806 of yacc.c  */
     7970#line 2168 "parser.yy"
    79917971    { (yyval.decl) = nullptr; }
    79927972    break;
    79937973
    7994   case 556:
    7995 
    7996 /* Line 1806 of yacc.c  */
    7997 #line 2173 "parser.yy"
     7974  case 557:
     7975
     7976/* Line 1806 of yacc.c  */
     7977#line 2175 "parser.yy"
    79987978    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    79997979    break;
    80007980
    8001   case 557:
    8002 
    8003 /* Line 1806 of yacc.c  */
    8004 #line 2179 "parser.yy"
     7981  case 558:
     7982
     7983/* Line 1806 of yacc.c  */
     7984#line 2181 "parser.yy"
    80057985    { (yyval.decl) = nullptr; }
    80067986    break;
    80077987
    8008   case 562:
    8009 
    8010 /* Line 1806 of yacc.c  */
    8011 #line 2190 "parser.yy"
     7988  case 563:
     7989
     7990/* Line 1806 of yacc.c  */
     7991#line 2192 "parser.yy"
    80127992    { delete (yyvsp[(3) - (4)].en); }
    80137993    break;
    80147994
    8015   case 563:
    8016 
    8017 /* Line 1806 of yacc.c  */
    8018 #line 2194 "parser.yy"
     7995  case 564:
     7996
     7997/* Line 1806 of yacc.c  */
     7998#line 2196 "parser.yy"
    80197999    { delete (yyvsp[(1) - (1)].tok); }
    80208000    break;
    80218001
    8022   case 564:
    8023 
    8024 /* Line 1806 of yacc.c  */
    8025 #line 2195 "parser.yy"
    8026     { delete (yyvsp[(1) - (1)].decl); }
    8027     break;
    8028 
    80298002  case 565:
    8030 
    8031 /* Line 1806 of yacc.c  */
    8032 #line 2196 "parser.yy"
    8033     { delete (yyvsp[(1) - (1)].decl); }
    8034     break;
    8035 
    8036   case 566:
    80378003
    80388004/* Line 1806 of yacc.c  */
     
    80418007    break;
    80428008
     8009  case 566:
     8010
     8011/* Line 1806 of yacc.c  */
     8012#line 2198 "parser.yy"
     8013    { delete (yyvsp[(1) - (1)].decl); }
     8014    break;
     8015
    80438016  case 567:
    80448017
    80458018/* Line 1806 of yacc.c  */
    8046 #line 2232 "parser.yy"
    8047     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8048     break;
    8049 
    8050   case 569:
    8051 
    8052 /* Line 1806 of yacc.c  */
    8053 #line 2235 "parser.yy"
     8019#line 2199 "parser.yy"
     8020    { delete (yyvsp[(1) - (1)].decl); }
     8021    break;
     8022
     8023  case 568:
     8024
     8025/* Line 1806 of yacc.c  */
     8026#line 2234 "parser.yy"
    80548027    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80558028    break;
     
    80658038
    80668039/* Line 1806 of yacc.c  */
    8067 #line 2242 "parser.yy"
     8040#line 2239 "parser.yy"
     8041    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8042    break;
     8043
     8044  case 572:
     8045
     8046/* Line 1806 of yacc.c  */
     8047#line 2244 "parser.yy"
    80688048    {
    80698049                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    80728052    break;
    80738053
    8074   case 572:
    8075 
    8076 /* Line 1806 of yacc.c  */
    8077 #line 2247 "parser.yy"
     8054  case 573:
     8055
     8056/* Line 1806 of yacc.c  */
     8057#line 2249 "parser.yy"
    80788058    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80798059    break;
    80808060
    8081   case 573:
    8082 
    8083 /* Line 1806 of yacc.c  */
    8084 #line 2252 "parser.yy"
     8061  case 574:
     8062
     8063/* Line 1806 of yacc.c  */
     8064#line 2254 "parser.yy"
    80858065    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    80868066    break;
    80878067
    8088   case 574:
    8089 
    8090 /* Line 1806 of yacc.c  */
    8091 #line 2254 "parser.yy"
     8068  case 575:
     8069
     8070/* Line 1806 of yacc.c  */
     8071#line 2256 "parser.yy"
    80928072    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    80938073    break;
    80948074
    8095   case 575:
    8096 
    8097 /* Line 1806 of yacc.c  */
    8098 #line 2256 "parser.yy"
     8075  case 576:
     8076
     8077/* Line 1806 of yacc.c  */
     8078#line 2258 "parser.yy"
    80998079    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81008080    break;
    81018081
    8102   case 576:
    8103 
    8104 /* Line 1806 of yacc.c  */
    8105 #line 2261 "parser.yy"
     8082  case 577:
     8083
     8084/* Line 1806 of yacc.c  */
     8085#line 2263 "parser.yy"
    81068086    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8107     break;
    8108 
    8109   case 577:
    8110 
    8111 /* Line 1806 of yacc.c  */
    8112 #line 2263 "parser.yy"
    8113     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81148087    break;
    81158088
     
    81258098/* Line 1806 of yacc.c  */
    81268099#line 2267 "parser.yy"
     8100    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8101    break;
     8102
     8103  case 580:
     8104
     8105/* Line 1806 of yacc.c  */
     8106#line 2269 "parser.yy"
    81278107    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81288108    break;
    81298109
    8130   case 580:
    8131 
    8132 /* Line 1806 of yacc.c  */
    8133 #line 2272 "parser.yy"
     8110  case 581:
     8111
     8112/* Line 1806 of yacc.c  */
     8113#line 2274 "parser.yy"
    81348114    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81358115    break;
    81368116
    8137   case 581:
    8138 
    8139 /* Line 1806 of yacc.c  */
    8140 #line 2274 "parser.yy"
     8117  case 582:
     8118
     8119/* Line 1806 of yacc.c  */
     8120#line 2276 "parser.yy"
    81418121    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81428122    break;
    81438123
    8144   case 582:
    8145 
    8146 /* Line 1806 of yacc.c  */
    8147 #line 2283 "parser.yy"
     8124  case 583:
     8125
     8126/* Line 1806 of yacc.c  */
     8127#line 2285 "parser.yy"
    81488128    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81498129    break;
    81508130
    8151   case 584:
    8152 
    8153 /* Line 1806 of yacc.c  */
    8154 #line 2286 "parser.yy"
     8131  case 585:
     8132
     8133/* Line 1806 of yacc.c  */
     8134#line 2288 "parser.yy"
    81558135    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81568136    break;
    81578137
    8158   case 585:
    8159 
    8160 /* Line 1806 of yacc.c  */
    8161 #line 2291 "parser.yy"
     8138  case 586:
     8139
     8140/* Line 1806 of yacc.c  */
     8141#line 2293 "parser.yy"
    81628142    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    81638143    break;
    81648144
    8165   case 586:
    8166 
    8167 /* Line 1806 of yacc.c  */
    8168 #line 2293 "parser.yy"
     8145  case 587:
     8146
     8147/* Line 1806 of yacc.c  */
     8148#line 2295 "parser.yy"
    81698149    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81708150    break;
    81718151
    8172   case 587:
    8173 
    8174 /* Line 1806 of yacc.c  */
    8175 #line 2295 "parser.yy"
     8152  case 588:
     8153
     8154/* Line 1806 of yacc.c  */
     8155#line 2297 "parser.yy"
    81768156    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81778157    break;
    81788158
    8179   case 588:
    8180 
    8181 /* Line 1806 of yacc.c  */
    8182 #line 2300 "parser.yy"
     8159  case 589:
     8160
     8161/* Line 1806 of yacc.c  */
     8162#line 2302 "parser.yy"
    81838163    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81848164    break;
    81858165
    8186   case 589:
    8187 
    8188 /* Line 1806 of yacc.c  */
    8189 #line 2302 "parser.yy"
     8166  case 590:
     8167
     8168/* Line 1806 of yacc.c  */
     8169#line 2304 "parser.yy"
    81908170    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81918171    break;
    81928172
    8193   case 590:
    8194 
    8195 /* Line 1806 of yacc.c  */
    8196 #line 2304 "parser.yy"
     8173  case 591:
     8174
     8175/* Line 1806 of yacc.c  */
     8176#line 2306 "parser.yy"
    81978177    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8198     break;
    8199 
    8200   case 591:
    8201 
    8202 /* Line 1806 of yacc.c  */
    8203 #line 2309 "parser.yy"
    8204     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82058178    break;
    82068179
     
    82168189/* Line 1806 of yacc.c  */
    82178190#line 2313 "parser.yy"
     8191    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8192    break;
     8193
     8194  case 594:
     8195
     8196/* Line 1806 of yacc.c  */
     8197#line 2315 "parser.yy"
    82188198    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82198199    break;
    82208200
    8221   case 597:
    8222 
    8223 /* Line 1806 of yacc.c  */
    8224 #line 2328 "parser.yy"
     8201  case 598:
     8202
     8203/* Line 1806 of yacc.c  */
     8204#line 2330 "parser.yy"
    82258205    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    82268206    break;
    82278207
    8228   case 598:
    8229 
    8230 /* Line 1806 of yacc.c  */
    8231 #line 2330 "parser.yy"
     8208  case 599:
     8209
     8210/* Line 1806 of yacc.c  */
     8211#line 2332 "parser.yy"
    82328212    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    82338213    break;
    82348214
    8235   case 599:
    8236 
    8237 /* Line 1806 of yacc.c  */
    8238 #line 2332 "parser.yy"
     8215  case 600:
     8216
     8217/* Line 1806 of yacc.c  */
     8218#line 2334 "parser.yy"
    82398219    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82408220    break;
    82418221
    8242   case 600:
    8243 
    8244 /* Line 1806 of yacc.c  */
    8245 #line 2337 "parser.yy"
     8222  case 601:
     8223
     8224/* Line 1806 of yacc.c  */
     8225#line 2339 "parser.yy"
    82468226    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    82478227    break;
    82488228
    8249   case 601:
    8250 
    8251 /* Line 1806 of yacc.c  */
    8252 #line 2339 "parser.yy"
     8229  case 602:
     8230
     8231/* Line 1806 of yacc.c  */
     8232#line 2341 "parser.yy"
    82538233    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82548234    break;
    82558235
    8256   case 602:
    8257 
    8258 /* Line 1806 of yacc.c  */
    8259 #line 2341 "parser.yy"
     8236  case 603:
     8237
     8238/* Line 1806 of yacc.c  */
     8239#line 2343 "parser.yy"
    82608240    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8261     break;
    8262 
    8263   case 603:
    8264 
    8265 /* Line 1806 of yacc.c  */
    8266 #line 2346 "parser.yy"
    8267     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82688241    break;
    82698242
     
    82798252/* Line 1806 of yacc.c  */
    82808253#line 2350 "parser.yy"
     8254    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8255    break;
     8256
     8257  case 606:
     8258
     8259/* Line 1806 of yacc.c  */
     8260#line 2352 "parser.yy"
    82818261    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82828262    break;
    82838263
    8284   case 606:
    8285 
    8286 /* Line 1806 of yacc.c  */
    8287 #line 2365 "parser.yy"
    8288     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8289     break;
    8290 
    8291   case 608:
    8292 
    8293 /* Line 1806 of yacc.c  */
    8294 #line 2368 "parser.yy"
     8264  case 607:
     8265
     8266/* Line 1806 of yacc.c  */
     8267#line 2367 "parser.yy"
    82958268    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82968269    break;
     
    83038276    break;
    83048277
    8305   case 611:
    8306 
    8307 /* Line 1806 of yacc.c  */
    8308 #line 2376 "parser.yy"
     8278  case 610:
     8279
     8280/* Line 1806 of yacc.c  */
     8281#line 2372 "parser.yy"
     8282    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8283    break;
     8284
     8285  case 612:
     8286
     8287/* Line 1806 of yacc.c  */
     8288#line 2378 "parser.yy"
    83098289    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83108290    break;
    83118291
    8312   case 612:
    8313 
    8314 /* Line 1806 of yacc.c  */
    8315 #line 2381 "parser.yy"
     8292  case 613:
     8293
     8294/* Line 1806 of yacc.c  */
     8295#line 2383 "parser.yy"
    83168296    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83178297    break;
    83188298
    8319   case 613:
    8320 
    8321 /* Line 1806 of yacc.c  */
    8322 #line 2383 "parser.yy"
     8299  case 614:
     8300
     8301/* Line 1806 of yacc.c  */
     8302#line 2385 "parser.yy"
    83238303    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83248304    break;
    83258305
    8326   case 614:
    8327 
    8328 /* Line 1806 of yacc.c  */
    8329 #line 2385 "parser.yy"
     8306  case 615:
     8307
     8308/* Line 1806 of yacc.c  */
     8309#line 2387 "parser.yy"
    83308310    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83318311    break;
    83328312
    8333   case 615:
    8334 
    8335 /* Line 1806 of yacc.c  */
    8336 #line 2390 "parser.yy"
     8313  case 616:
     8314
     8315/* Line 1806 of yacc.c  */
     8316#line 2392 "parser.yy"
    83378317    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8338     break;
    8339 
    8340   case 616:
    8341 
    8342 /* Line 1806 of yacc.c  */
    8343 #line 2392 "parser.yy"
    8344     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83458318    break;
    83468319
     
    83568329/* Line 1806 of yacc.c  */
    83578330#line 2396 "parser.yy"
     8331    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8332    break;
     8333
     8334  case 619:
     8335
     8336/* Line 1806 of yacc.c  */
     8337#line 2398 "parser.yy"
    83588338    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83598339    break;
    83608340
    8361   case 619:
    8362 
    8363 /* Line 1806 of yacc.c  */
    8364 #line 2401 "parser.yy"
     8341  case 620:
     8342
     8343/* Line 1806 of yacc.c  */
     8344#line 2403 "parser.yy"
    83658345    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83668346    break;
    83678347
    8368   case 620:
    8369 
    8370 /* Line 1806 of yacc.c  */
    8371 #line 2403 "parser.yy"
     8348  case 621:
     8349
     8350/* Line 1806 of yacc.c  */
     8351#line 2405 "parser.yy"
    83728352    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83738353    break;
    83748354
    8375   case 621:
    8376 
    8377 /* Line 1806 of yacc.c  */
    8378 #line 2405 "parser.yy"
     8355  case 622:
     8356
     8357/* Line 1806 of yacc.c  */
     8358#line 2407 "parser.yy"
    83798359    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83808360    break;
    83818361
    8382   case 622:
    8383 
    8384 /* Line 1806 of yacc.c  */
    8385 #line 2415 "parser.yy"
    8386     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8387     break;
    8388 
    8389   case 624:
    8390 
    8391 /* Line 1806 of yacc.c  */
    8392 #line 2418 "parser.yy"
     8362  case 623:
     8363
     8364/* Line 1806 of yacc.c  */
     8365#line 2417 "parser.yy"
    83938366    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83948367    break;
     
    84048377
    84058378/* Line 1806 of yacc.c  */
    8406 #line 2425 "parser.yy"
     8379#line 2422 "parser.yy"
     8380    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8381    break;
     8382
     8383  case 627:
     8384
     8385/* Line 1806 of yacc.c  */
     8386#line 2427 "parser.yy"
    84078387    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    84088388    break;
    84098389
    8410   case 627:
    8411 
    8412 /* Line 1806 of yacc.c  */
    8413 #line 2427 "parser.yy"
     8390  case 628:
     8391
     8392/* Line 1806 of yacc.c  */
     8393#line 2429 "parser.yy"
    84148394    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84158395    break;
    84168396
    8417   case 628:
    8418 
    8419 /* Line 1806 of yacc.c  */
    8420 #line 2429 "parser.yy"
     8397  case 629:
     8398
     8399/* Line 1806 of yacc.c  */
     8400#line 2431 "parser.yy"
    84218401    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84228402    break;
    84238403
    8424   case 629:
    8425 
    8426 /* Line 1806 of yacc.c  */
    8427 #line 2434 "parser.yy"
     8404  case 630:
     8405
     8406/* Line 1806 of yacc.c  */
     8407#line 2436 "parser.yy"
    84288408    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8429     break;
    8430 
    8431   case 630:
    8432 
    8433 /* Line 1806 of yacc.c  */
    8434 #line 2436 "parser.yy"
    8435     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84368409    break;
    84378410
     
    84478420/* Line 1806 of yacc.c  */
    84488421#line 2440 "parser.yy"
     8422    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8423    break;
     8424
     8425  case 633:
     8426
     8427/* Line 1806 of yacc.c  */
     8428#line 2442 "parser.yy"
    84498429    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84508430    break;
    84518431
    8452   case 633:
    8453 
    8454 /* Line 1806 of yacc.c  */
    8455 #line 2445 "parser.yy"
     8432  case 634:
     8433
     8434/* Line 1806 of yacc.c  */
     8435#line 2447 "parser.yy"
    84568436    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    84578437    break;
    84588438
    8459   case 634:
    8460 
    8461 /* Line 1806 of yacc.c  */
    8462 #line 2447 "parser.yy"
     8439  case 635:
     8440
     8441/* Line 1806 of yacc.c  */
     8442#line 2449 "parser.yy"
    84638443    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    84648444    break;
    84658445
    8466   case 635:
    8467 
    8468 /* Line 1806 of yacc.c  */
    8469 #line 2449 "parser.yy"
     8446  case 636:
     8447
     8448/* Line 1806 of yacc.c  */
     8449#line 2451 "parser.yy"
    84708450    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84718451    break;
    84728452
    8473   case 636:
    8474 
    8475 /* Line 1806 of yacc.c  */
    8476 #line 2480 "parser.yy"
    8477     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8478     break;
    8479 
    8480   case 638:
    8481 
    8482 /* Line 1806 of yacc.c  */
    8483 #line 2483 "parser.yy"
     8453  case 637:
     8454
     8455/* Line 1806 of yacc.c  */
     8456#line 2482 "parser.yy"
    84848457    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84858458    break;
     
    84958468
    84968469/* Line 1806 of yacc.c  */
    8497 #line 2490 "parser.yy"
     8470#line 2487 "parser.yy"
     8471    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8472    break;
     8473
     8474  case 641:
     8475
     8476/* Line 1806 of yacc.c  */
     8477#line 2492 "parser.yy"
    84988478    {
    84998479                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    85028482    break;
    85038483
    8504   case 641:
    8505 
    8506 /* Line 1806 of yacc.c  */
    8507 #line 2495 "parser.yy"
     8484  case 642:
     8485
     8486/* Line 1806 of yacc.c  */
     8487#line 2497 "parser.yy"
    85088488    {
    85098489                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    85128492    break;
    85138493
    8514   case 642:
    8515 
    8516 /* Line 1806 of yacc.c  */
    8517 #line 2503 "parser.yy"
     8494  case 643:
     8495
     8496/* Line 1806 of yacc.c  */
     8497#line 2505 "parser.yy"
    85188498    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85198499    break;
    85208500
    8521   case 643:
    8522 
    8523 /* Line 1806 of yacc.c  */
    8524 #line 2505 "parser.yy"
     8501  case 644:
     8502
     8503/* Line 1806 of yacc.c  */
     8504#line 2507 "parser.yy"
    85258505    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85268506    break;
    85278507
    8528   case 644:
    8529 
    8530 /* Line 1806 of yacc.c  */
    8531 #line 2507 "parser.yy"
     8508  case 645:
     8509
     8510/* Line 1806 of yacc.c  */
     8511#line 2509 "parser.yy"
    85328512    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85338513    break;
    85348514
    8535   case 645:
    8536 
    8537 /* Line 1806 of yacc.c  */
    8538 #line 2512 "parser.yy"
     8515  case 646:
     8516
     8517/* Line 1806 of yacc.c  */
     8518#line 2514 "parser.yy"
    85398519    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    85408520    break;
    85418521
    8542   case 646:
    8543 
    8544 /* Line 1806 of yacc.c  */
    8545 #line 2514 "parser.yy"
     8522  case 647:
     8523
     8524/* Line 1806 of yacc.c  */
     8525#line 2516 "parser.yy"
    85468526    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85478527    break;
    85488528
    8549   case 647:
    8550 
    8551 /* Line 1806 of yacc.c  */
    8552 #line 2519 "parser.yy"
     8529  case 648:
     8530
     8531/* Line 1806 of yacc.c  */
     8532#line 2521 "parser.yy"
    85538533    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    85548534    break;
    85558535
    8556   case 648:
    8557 
    8558 /* Line 1806 of yacc.c  */
    8559 #line 2521 "parser.yy"
     8536  case 649:
     8537
     8538/* Line 1806 of yacc.c  */
     8539#line 2523 "parser.yy"
    85608540    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8561     break;
    8562 
    8563   case 650:
    8564 
    8565 /* Line 1806 of yacc.c  */
    8566 #line 2536 "parser.yy"
    8567     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85688541    break;
    85698542
     
    85788551
    85798552/* Line 1806 of yacc.c  */
    8580 #line 2543 "parser.yy"
     8553#line 2540 "parser.yy"
     8554    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8555    break;
     8556
     8557  case 653:
     8558
     8559/* Line 1806 of yacc.c  */
     8560#line 2545 "parser.yy"
    85818561    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    85828562    break;
    85838563
    8584   case 653:
    8585 
    8586 /* Line 1806 of yacc.c  */
    8587 #line 2545 "parser.yy"
     8564  case 654:
     8565
     8566/* Line 1806 of yacc.c  */
     8567#line 2547 "parser.yy"
    85888568    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    85898569    break;
    85908570
    8591   case 654:
    8592 
    8593 /* Line 1806 of yacc.c  */
    8594 #line 2547 "parser.yy"
     8571  case 655:
     8572
     8573/* Line 1806 of yacc.c  */
     8574#line 2549 "parser.yy"
    85958575    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85968576    break;
    85978577
    8598   case 655:
    8599 
    8600 /* Line 1806 of yacc.c  */
    8601 #line 2549 "parser.yy"
     8578  case 656:
     8579
     8580/* Line 1806 of yacc.c  */
     8581#line 2551 "parser.yy"
    86028582    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    86038583    break;
    86048584
    8605   case 656:
    8606 
    8607 /* Line 1806 of yacc.c  */
    8608 #line 2551 "parser.yy"
     8585  case 657:
     8586
     8587/* Line 1806 of yacc.c  */
     8588#line 2553 "parser.yy"
    86098589    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8610     break;
    8611 
    8612   case 658:
    8613 
    8614 /* Line 1806 of yacc.c  */
    8615 #line 2557 "parser.yy"
    8616     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86178590    break;
    86188591
     
    86288601/* Line 1806 of yacc.c  */
    86298602#line 2561 "parser.yy"
     8603    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8604    break;
     8605
     8606  case 661:
     8607
     8608/* Line 1806 of yacc.c  */
     8609#line 2563 "parser.yy"
    86308610    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86318611    break;
    86328612
    8633   case 661:
    8634 
    8635 /* Line 1806 of yacc.c  */
    8636 #line 2566 "parser.yy"
     8613  case 662:
     8614
     8615/* Line 1806 of yacc.c  */
     8616#line 2568 "parser.yy"
    86378617    { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
    86388618    break;
    86398619
    8640   case 662:
    8641 
    8642 /* Line 1806 of yacc.c  */
    8643 #line 2568 "parser.yy"
     8620  case 663:
     8621
     8622/* Line 1806 of yacc.c  */
     8623#line 2570 "parser.yy"
    86448624    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    86458625    break;
    86468626
    8647   case 663:
    8648 
    8649 /* Line 1806 of yacc.c  */
    8650 #line 2570 "parser.yy"
     8627  case 664:
     8628
     8629/* Line 1806 of yacc.c  */
     8630#line 2572 "parser.yy"
    86518631    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86528632    break;
    86538633
    8654   case 664:
    8655 
    8656 /* Line 1806 of yacc.c  */
    8657 #line 2576 "parser.yy"
     8634  case 665:
     8635
     8636/* Line 1806 of yacc.c  */
     8637#line 2578 "parser.yy"
    86588638    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    86598639    break;
    86608640
    8661   case 665:
    8662 
    8663 /* Line 1806 of yacc.c  */
    8664 #line 2578 "parser.yy"
     8641  case 666:
     8642
     8643/* Line 1806 of yacc.c  */
     8644#line 2580 "parser.yy"
    86658645    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    86668646    break;
    86678647
    8668   case 667:
    8669 
    8670 /* Line 1806 of yacc.c  */
    8671 #line 2584 "parser.yy"
     8648  case 668:
     8649
     8650/* Line 1806 of yacc.c  */
     8651#line 2586 "parser.yy"
    86728652    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    86738653    break;
    86748654
    8675   case 668:
    8676 
    8677 /* Line 1806 of yacc.c  */
    8678 #line 2586 "parser.yy"
     8655  case 669:
     8656
     8657/* Line 1806 of yacc.c  */
     8658#line 2588 "parser.yy"
    86798659    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    86808660    break;
    86818661
    8682   case 669:
    8683 
    8684 /* Line 1806 of yacc.c  */
    8685 #line 2588 "parser.yy"
     8662  case 670:
     8663
     8664/* Line 1806 of yacc.c  */
     8665#line 2590 "parser.yy"
    86868666    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    86878667    break;
    86888668
    8689   case 670:
    8690 
    8691 /* Line 1806 of yacc.c  */
    8692 #line 2590 "parser.yy"
     8669  case 671:
     8670
     8671/* Line 1806 of yacc.c  */
     8672#line 2592 "parser.yy"
    86938673    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    8694     break;
    8695 
    8696   case 672:
    8697 
    8698 /* Line 1806 of yacc.c  */
    8699 #line 2605 "parser.yy"
    8700     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87018674    break;
    87028675
     
    87118684
    87128685/* Line 1806 of yacc.c  */
    8713 #line 2612 "parser.yy"
     8686#line 2609 "parser.yy"
     8687    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8688    break;
     8689
     8690  case 675:
     8691
     8692/* Line 1806 of yacc.c  */
     8693#line 2614 "parser.yy"
    87148694    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    87158695    break;
    87168696
    8717   case 675:
    8718 
    8719 /* Line 1806 of yacc.c  */
    8720 #line 2614 "parser.yy"
     8697  case 676:
     8698
     8699/* Line 1806 of yacc.c  */
     8700#line 2616 "parser.yy"
    87218701    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    87228702    break;
    87238703
    8724   case 676:
    8725 
    8726 /* Line 1806 of yacc.c  */
    8727 #line 2616 "parser.yy"
     8704  case 677:
     8705
     8706/* Line 1806 of yacc.c  */
     8707#line 2618 "parser.yy"
    87288708    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    87298709    break;
    87308710
    8731   case 677:
    8732 
    8733 /* Line 1806 of yacc.c  */
    8734 #line 2618 "parser.yy"
     8711  case 678:
     8712
     8713/* Line 1806 of yacc.c  */
     8714#line 2620 "parser.yy"
    87358715    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    87368716    break;
    87378717
    8738   case 678:
    8739 
    8740 /* Line 1806 of yacc.c  */
    8741 #line 2620 "parser.yy"
     8718  case 679:
     8719
     8720/* Line 1806 of yacc.c  */
     8721#line 2622 "parser.yy"
    87428722    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8743     break;
    8744 
    8745   case 680:
    8746 
    8747 /* Line 1806 of yacc.c  */
    8748 #line 2626 "parser.yy"
    8749     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87508723    break;
    87518724
     
    87618734/* Line 1806 of yacc.c  */
    87628735#line 2630 "parser.yy"
     8736    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8737    break;
     8738
     8739  case 683:
     8740
     8741/* Line 1806 of yacc.c  */
     8742#line 2632 "parser.yy"
    87638743    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87648744    break;
    87658745
    8766   case 683:
    8767 
    8768 /* Line 1806 of yacc.c  */
    8769 #line 2635 "parser.yy"
     8746  case 684:
     8747
     8748/* Line 1806 of yacc.c  */
     8749#line 2637 "parser.yy"
    87708750    { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
    87718751    break;
    87728752
    8773   case 684:
    8774 
    8775 /* Line 1806 of yacc.c  */
    8776 #line 2637 "parser.yy"
     8753  case 685:
     8754
     8755/* Line 1806 of yacc.c  */
     8756#line 2639 "parser.yy"
    87778757    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87788758    break;
    87798759
    8780   case 685:
    8781 
    8782 /* Line 1806 of yacc.c  */
    8783 #line 2639 "parser.yy"
     8760  case 686:
     8761
     8762/* Line 1806 of yacc.c  */
     8763#line 2641 "parser.yy"
    87848764    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87858765    break;
    87868766
    8787   case 687:
    8788 
    8789 /* Line 1806 of yacc.c  */
    8790 #line 2646 "parser.yy"
     8767  case 688:
     8768
     8769/* Line 1806 of yacc.c  */
     8770#line 2648 "parser.yy"
    87918771    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    87928772    break;
    87938773
    8794   case 689:
    8795 
    8796 /* Line 1806 of yacc.c  */
    8797 #line 2657 "parser.yy"
     8774  case 690:
     8775
     8776/* Line 1806 of yacc.c  */
     8777#line 2659 "parser.yy"
    87988778    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    87998779    break;
    88008780
    8801   case 690:
    8802 
    8803 /* Line 1806 of yacc.c  */
    8804 #line 2660 "parser.yy"
     8781  case 691:
     8782
     8783/* Line 1806 of yacc.c  */
     8784#line 2662 "parser.yy"
    88058785    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    88068786    break;
    88078787
    8808   case 691:
    8809 
    8810 /* Line 1806 of yacc.c  */
    8811 #line 2662 "parser.yy"
     8788  case 692:
     8789
     8790/* Line 1806 of yacc.c  */
     8791#line 2664 "parser.yy"
    88128792    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    88138793    break;
    88148794
    8815   case 692:
    8816 
    8817 /* Line 1806 of yacc.c  */
    8818 #line 2665 "parser.yy"
     8795  case 693:
     8796
     8797/* Line 1806 of yacc.c  */
     8798#line 2667 "parser.yy"
    88198799    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    88208800    break;
    88218801
    8822   case 693:
    8823 
    8824 /* Line 1806 of yacc.c  */
    8825 #line 2667 "parser.yy"
     8802  case 694:
     8803
     8804/* Line 1806 of yacc.c  */
     8805#line 2669 "parser.yy"
    88268806    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    88278807    break;
    88288808
    8829   case 694:
    8830 
    8831 /* Line 1806 of yacc.c  */
    8832 #line 2669 "parser.yy"
     8809  case 695:
     8810
     8811/* Line 1806 of yacc.c  */
     8812#line 2671 "parser.yy"
    88338813    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    8834     break;
    8835 
    8836   case 696:
    8837 
    8838 /* Line 1806 of yacc.c  */
    8839 #line 2683 "parser.yy"
    8840     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    88418814    break;
    88428815
     
    88518824
    88528825/* Line 1806 of yacc.c  */
    8853 #line 2690 "parser.yy"
     8826#line 2687 "parser.yy"
     8827    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8828    break;
     8829
     8830  case 699:
     8831
     8832/* Line 1806 of yacc.c  */
     8833#line 2692 "parser.yy"
    88548834    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    88558835    break;
    88568836
    8857   case 699:
    8858 
    8859 /* Line 1806 of yacc.c  */
    8860 #line 2692 "parser.yy"
     8837  case 700:
     8838
     8839/* Line 1806 of yacc.c  */
     8840#line 2694 "parser.yy"
    88618841    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    88628842    break;
    88638843
    8864   case 700:
    8865 
    8866 /* Line 1806 of yacc.c  */
    8867 #line 2694 "parser.yy"
     8844  case 701:
     8845
     8846/* Line 1806 of yacc.c  */
     8847#line 2696 "parser.yy"
    88688848    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    88698849    break;
    88708850
    8871   case 701:
    8872 
    8873 /* Line 1806 of yacc.c  */
    8874 #line 2696 "parser.yy"
     8851  case 702:
     8852
     8853/* Line 1806 of yacc.c  */
     8854#line 2698 "parser.yy"
    88758855    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    88768856    break;
    88778857
    8878   case 702:
    8879 
    8880 /* Line 1806 of yacc.c  */
    8881 #line 2698 "parser.yy"
     8858  case 703:
     8859
     8860/* Line 1806 of yacc.c  */
     8861#line 2700 "parser.yy"
    88828862    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8883     break;
    8884 
    8885   case 704:
    8886 
    8887 /* Line 1806 of yacc.c  */
    8888 #line 2704 "parser.yy"
    8889     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88908863    break;
    88918864
     
    89018874/* Line 1806 of yacc.c  */
    89028875#line 2708 "parser.yy"
     8876    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8877    break;
     8878
     8879  case 707:
     8880
     8881/* Line 1806 of yacc.c  */
     8882#line 2710 "parser.yy"
    89038883    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89048884    break;
    89058885
    8906   case 707:
    8907 
    8908 /* Line 1806 of yacc.c  */
    8909 #line 2713 "parser.yy"
     8886  case 708:
     8887
     8888/* Line 1806 of yacc.c  */
     8889#line 2715 "parser.yy"
    89108890    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    89118891    break;
    89128892
    8913   case 708:
    8914 
    8915 /* Line 1806 of yacc.c  */
    8916 #line 2715 "parser.yy"
     8893  case 709:
     8894
     8895/* Line 1806 of yacc.c  */
     8896#line 2717 "parser.yy"
    89178897    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89188898    break;
    89198899
    8920   case 711:
    8921 
    8922 /* Line 1806 of yacc.c  */
    8923 #line 2725 "parser.yy"
     8900  case 712:
     8901
     8902/* Line 1806 of yacc.c  */
     8903#line 2727 "parser.yy"
    89248904    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    89258905    break;
    89268906
    8927   case 714:
    8928 
    8929 /* Line 1806 of yacc.c  */
    8930 #line 2735 "parser.yy"
     8907  case 715:
     8908
     8909/* Line 1806 of yacc.c  */
     8910#line 2737 "parser.yy"
    89318911    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89328912    break;
    89338913
    8934   case 715:
    8935 
    8936 /* Line 1806 of yacc.c  */
    8937 #line 2737 "parser.yy"
     8914  case 716:
     8915
     8916/* Line 1806 of yacc.c  */
     8917#line 2739 "parser.yy"
    89388918    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89398919    break;
    89408920
    8941   case 716:
    8942 
    8943 /* Line 1806 of yacc.c  */
    8944 #line 2739 "parser.yy"
     8921  case 717:
     8922
     8923/* Line 1806 of yacc.c  */
     8924#line 2741 "parser.yy"
    89458925    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89468926    break;
    89478927
    8948   case 717:
    8949 
    8950 /* Line 1806 of yacc.c  */
    8951 #line 2741 "parser.yy"
     8928  case 718:
     8929
     8930/* Line 1806 of yacc.c  */
     8931#line 2743 "parser.yy"
    89528932    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89538933    break;
    89548934
    8955   case 718:
    8956 
    8957 /* Line 1806 of yacc.c  */
    8958 #line 2743 "parser.yy"
     8935  case 719:
     8936
     8937/* Line 1806 of yacc.c  */
     8938#line 2745 "parser.yy"
    89598939    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89608940    break;
    89618941
    8962   case 719:
    8963 
    8964 /* Line 1806 of yacc.c  */
    8965 #line 2745 "parser.yy"
     8942  case 720:
     8943
     8944/* Line 1806 of yacc.c  */
     8945#line 2747 "parser.yy"
    89668946    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89678947    break;
    89688948
    8969   case 720:
    8970 
    8971 /* Line 1806 of yacc.c  */
    8972 #line 2752 "parser.yy"
     8949  case 721:
     8950
     8951/* Line 1806 of yacc.c  */
     8952#line 2754 "parser.yy"
    89738953    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89748954    break;
    89758955
    8976   case 721:
    8977 
    8978 /* Line 1806 of yacc.c  */
    8979 #line 2754 "parser.yy"
     8956  case 722:
     8957
     8958/* Line 1806 of yacc.c  */
     8959#line 2756 "parser.yy"
    89808960    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89818961    break;
    89828962
    8983   case 722:
    8984 
    8985 /* Line 1806 of yacc.c  */
    8986 #line 2756 "parser.yy"
     8963  case 723:
     8964
     8965/* Line 1806 of yacc.c  */
     8966#line 2758 "parser.yy"
    89878967    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89888968    break;
    89898969
    8990   case 723:
    8991 
    8992 /* Line 1806 of yacc.c  */
    8993 #line 2758 "parser.yy"
     8970  case 724:
     8971
     8972/* Line 1806 of yacc.c  */
     8973#line 2760 "parser.yy"
    89948974    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    89958975    break;
    89968976
    8997   case 724:
    8998 
    8999 /* Line 1806 of yacc.c  */
    9000 #line 2760 "parser.yy"
     8977  case 725:
     8978
     8979/* Line 1806 of yacc.c  */
     8980#line 2762 "parser.yy"
    90018981    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90028982    break;
    90038983
    9004   case 725:
    9005 
    9006 /* Line 1806 of yacc.c  */
    9007 #line 2763 "parser.yy"
     8984  case 726:
     8985
     8986/* Line 1806 of yacc.c  */
     8987#line 2765 "parser.yy"
    90088988    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90098989    break;
    90108990
    9011   case 726:
    9012 
    9013 /* Line 1806 of yacc.c  */
    9014 #line 2765 "parser.yy"
     8991  case 727:
     8992
     8993/* Line 1806 of yacc.c  */
     8994#line 2767 "parser.yy"
    90158995    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90168996    break;
    90178997
    9018   case 727:
    9019 
    9020 /* Line 1806 of yacc.c  */
    9021 #line 2767 "parser.yy"
     8998  case 728:
     8999
     9000/* Line 1806 of yacc.c  */
     9001#line 2769 "parser.yy"
    90229002    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90239003    break;
    90249004
    9025   case 728:
    9026 
    9027 /* Line 1806 of yacc.c  */
    9028 #line 2769 "parser.yy"
     9005  case 729:
     9006
     9007/* Line 1806 of yacc.c  */
     9008#line 2771 "parser.yy"
    90299009    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    90309010    break;
    90319011
    9032   case 729:
    9033 
    9034 /* Line 1806 of yacc.c  */
    9035 #line 2771 "parser.yy"
     9012  case 730:
     9013
     9014/* Line 1806 of yacc.c  */
     9015#line 2773 "parser.yy"
    90369016    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90379017    break;
    90389018
    9039   case 730:
    9040 
    9041 /* Line 1806 of yacc.c  */
    9042 #line 2776 "parser.yy"
     9019  case 731:
     9020
     9021/* Line 1806 of yacc.c  */
     9022#line 2778 "parser.yy"
    90439023    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    90449024    break;
    90459025
    9046   case 731:
    9047 
    9048 /* Line 1806 of yacc.c  */
    9049 #line 2778 "parser.yy"
     9026  case 732:
     9027
     9028/* Line 1806 of yacc.c  */
     9029#line 2780 "parser.yy"
    90509030    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    90519031    break;
    90529032
    9053   case 732:
    9054 
    9055 /* Line 1806 of yacc.c  */
    9056 #line 2783 "parser.yy"
     9033  case 733:
     9034
     9035/* Line 1806 of yacc.c  */
     9036#line 2785 "parser.yy"
    90579037    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    90589038    break;
    90599039
    9060   case 733:
    9061 
    9062 /* Line 1806 of yacc.c  */
    9063 #line 2785 "parser.yy"
     9040  case 734:
     9041
     9042/* Line 1806 of yacc.c  */
     9043#line 2787 "parser.yy"
    90649044    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    90659045    break;
    90669046
    9067   case 735:
    9068 
    9069 /* Line 1806 of yacc.c  */
    9070 #line 2812 "parser.yy"
     9047  case 736:
     9048
     9049/* Line 1806 of yacc.c  */
     9050#line 2814 "parser.yy"
    90719051    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    90729052    break;
    90739053
    9074   case 739:
    9075 
    9076 /* Line 1806 of yacc.c  */
    9077 #line 2823 "parser.yy"
     9054  case 740:
     9055
     9056/* Line 1806 of yacc.c  */
     9057#line 2825 "parser.yy"
    90789058    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90799059    break;
    90809060
    9081   case 740:
    9082 
    9083 /* Line 1806 of yacc.c  */
    9084 #line 2825 "parser.yy"
     9061  case 741:
     9062
     9063/* Line 1806 of yacc.c  */
     9064#line 2827 "parser.yy"
    90859065    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90869066    break;
    90879067
    9088   case 741:
    9089 
    9090 /* Line 1806 of yacc.c  */
    9091 #line 2827 "parser.yy"
     9068  case 742:
     9069
     9070/* Line 1806 of yacc.c  */
     9071#line 2829 "parser.yy"
    90929072    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90939073    break;
    90949074
    9095   case 742:
    9096 
    9097 /* Line 1806 of yacc.c  */
    9098 #line 2829 "parser.yy"
     9075  case 743:
     9076
     9077/* Line 1806 of yacc.c  */
     9078#line 2831 "parser.yy"
    90999079    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91009080    break;
    91019081
    9102   case 743:
    9103 
    9104 /* Line 1806 of yacc.c  */
    9105 #line 2831 "parser.yy"
     9082  case 744:
     9083
     9084/* Line 1806 of yacc.c  */
     9085#line 2833 "parser.yy"
    91069086    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91079087    break;
    91089088
    9109   case 744:
    9110 
    9111 /* Line 1806 of yacc.c  */
    9112 #line 2833 "parser.yy"
     9089  case 745:
     9090
     9091/* Line 1806 of yacc.c  */
     9092#line 2835 "parser.yy"
    91139093    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91149094    break;
    91159095
    9116   case 745:
    9117 
    9118 /* Line 1806 of yacc.c  */
    9119 #line 2840 "parser.yy"
     9096  case 746:
     9097
     9098/* Line 1806 of yacc.c  */
     9099#line 2842 "parser.yy"
    91209100    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
    91219101    break;
    91229102
    9123   case 746:
    9124 
    9125 /* Line 1806 of yacc.c  */
    9126 #line 2842 "parser.yy"
     9103  case 747:
     9104
     9105/* Line 1806 of yacc.c  */
     9106#line 2844 "parser.yy"
    91279107    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
    91289108    break;
    91299109
    9130   case 747:
    9131 
    9132 /* Line 1806 of yacc.c  */
    9133 #line 2844 "parser.yy"
     9110  case 748:
     9111
     9112/* Line 1806 of yacc.c  */
     9113#line 2846 "parser.yy"
    91349114    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91359115    break;
    91369116
    9137   case 748:
    9138 
    9139 /* Line 1806 of yacc.c  */
    9140 #line 2846 "parser.yy"
     9117  case 749:
     9118
     9119/* Line 1806 of yacc.c  */
     9120#line 2848 "parser.yy"
    91419121    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
    91429122    break;
    91439123
    9144   case 749:
    9145 
    9146 /* Line 1806 of yacc.c  */
    9147 #line 2848 "parser.yy"
     9124  case 750:
     9125
     9126/* Line 1806 of yacc.c  */
     9127#line 2850 "parser.yy"
    91489128    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
    91499129    break;
    91509130
    9151   case 750:
    9152 
    9153 /* Line 1806 of yacc.c  */
    9154 #line 2850 "parser.yy"
     9131  case 751:
     9132
     9133/* Line 1806 of yacc.c  */
     9134#line 2852 "parser.yy"
    91559135    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91569136    break;
    91579137
    9158   case 751:
    9159 
    9160 /* Line 1806 of yacc.c  */
    9161 #line 2855 "parser.yy"
     9138  case 752:
     9139
     9140/* Line 1806 of yacc.c  */
     9141#line 2857 "parser.yy"
    91629142    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    9163     break;
    9164 
    9165   case 752:
    9166 
    9167 /* Line 1806 of yacc.c  */
    9168 #line 2862 "parser.yy"
    9169     { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
    91709143    break;
    91719144
     
    91779150    break;
    91789151
    9179   case 756:
    9180 
    9181 /* Line 1806 of yacc.c  */
    9182 #line 2888 "parser.yy"
     9152  case 754:
     9153
     9154/* Line 1806 of yacc.c  */
     9155#line 2866 "parser.yy"
     9156    { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     9157    break;
     9158
     9159  case 757:
     9160
     9161/* Line 1806 of yacc.c  */
     9162#line 2890 "parser.yy"
    91839163    { (yyval.en) = nullptr; }
    91849164    break;
    91859165
    9186   case 757:
    9187 
    9188 /* Line 1806 of yacc.c  */
    9189 #line 2890 "parser.yy"
     9166  case 758:
     9167
     9168/* Line 1806 of yacc.c  */
     9169#line 2892 "parser.yy"
    91909170    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    91919171    break;
     
    91949174
    91959175/* Line 1806 of yacc.c  */
    9196 #line 9197 "Parser/parser.cc"
     9176#line 9177 "Parser/parser.cc"
    91979177      default: break;
    91989178    }
     
    94259405
    94269406/* Line 2067 of yacc.c  */
    9427 #line 2893 "parser.yy"
     9407#line 2895 "parser.yy"
    94289408
    94299409// ----end of grammar----
  • src/Parser/parser.h

    rbb82c03 r2162c2c  
    7373     FTYPE = 291,
    7474     DTYPE = 292,
    75      TRAIT = 293,
    76      SIZEOF = 294,
    77      OFFSETOF = 295,
    78      ATTRIBUTE = 296,
    79      EXTENSION = 297,
    80      IF = 298,
    81      ELSE = 299,
    82      SWITCH = 300,
    83      CASE = 301,
    84      DEFAULT = 302,
    85      DO = 303,
    86      WHILE = 304,
    87      FOR = 305,
    88      BREAK = 306,
    89      CONTINUE = 307,
    90      GOTO = 308,
    91      RETURN = 309,
    92      CHOOSE = 310,
    93      DISABLE = 311,
    94      ENABLE = 312,
    95      FALLTHRU = 313,
    96      TRY = 314,
    97      CATCH = 315,
    98      CATCHRESUME = 316,
    99      FINALLY = 317,
    100      THROW = 318,
    101      THROWRESUME = 319,
    102      AT = 320,
    103      ASM = 321,
    104      ALIGNAS = 322,
    105      ALIGNOF = 323,
    106      ATOMIC = 324,
    107      GENERIC = 325,
    108      NORETURN = 326,
    109      STATICASSERT = 327,
    110      THREADLOCAL = 328,
    111      IDENTIFIER = 329,
    112      QUOTED_IDENTIFIER = 330,
    113      TYPEDEFname = 331,
    114      TYPEGENname = 332,
    115      ATTR_IDENTIFIER = 333,
    116      ATTR_TYPEDEFname = 334,
    117      ATTR_TYPEGENname = 335,
    118      INTEGERconstant = 336,
    119      CHARACTERconstant = 337,
    120      STRINGliteral = 338,
    121      REALDECIMALconstant = 339,
    122      REALFRACTIONconstant = 340,
    123      FLOATINGconstant = 341,
    124      ZERO = 342,
    125      ONE = 343,
    126      ARROW = 344,
    127      ICR = 345,
    128      DECR = 346,
    129      LS = 347,
    130      RS = 348,
    131      LE = 349,
    132      GE = 350,
    133      EQ = 351,
    134      NE = 352,
    135      ANDAND = 353,
    136      OROR = 354,
    137      ELLIPSIS = 355,
    138      MULTassign = 356,
    139      DIVassign = 357,
    140      MODassign = 358,
    141      PLUSassign = 359,
    142      MINUSassign = 360,
    143      LSassign = 361,
    144      RSassign = 362,
    145      ANDassign = 363,
    146      ERassign = 364,
    147      ORassign = 365,
    148      ATassign = 366,
    149      THEN = 367
     75     TTYPE = 293,
     76     TRAIT = 294,
     77     SIZEOF = 295,
     78     OFFSETOF = 296,
     79     ATTRIBUTE = 297,
     80     EXTENSION = 298,
     81     IF = 299,
     82     ELSE = 300,
     83     SWITCH = 301,
     84     CASE = 302,
     85     DEFAULT = 303,
     86     DO = 304,
     87     WHILE = 305,
     88     FOR = 306,
     89     BREAK = 307,
     90     CONTINUE = 308,
     91     GOTO = 309,
     92     RETURN = 310,
     93     CHOOSE = 311,
     94     DISABLE = 312,
     95     ENABLE = 313,
     96     FALLTHRU = 314,
     97     TRY = 315,
     98     CATCH = 316,
     99     CATCHRESUME = 317,
     100     FINALLY = 318,
     101     THROW = 319,
     102     THROWRESUME = 320,
     103     AT = 321,
     104     ASM = 322,
     105     ALIGNAS = 323,
     106     ALIGNOF = 324,
     107     ATOMIC = 325,
     108     GENERIC = 326,
     109     NORETURN = 327,
     110     STATICASSERT = 328,
     111     THREADLOCAL = 329,
     112     IDENTIFIER = 330,
     113     QUOTED_IDENTIFIER = 331,
     114     TYPEDEFname = 332,
     115     TYPEGENname = 333,
     116     ATTR_IDENTIFIER = 334,
     117     ATTR_TYPEDEFname = 335,
     118     ATTR_TYPEGENname = 336,
     119     INTEGERconstant = 337,
     120     CHARACTERconstant = 338,
     121     STRINGliteral = 339,
     122     REALDECIMALconstant = 340,
     123     REALFRACTIONconstant = 341,
     124     FLOATINGconstant = 342,
     125     ZERO = 343,
     126     ONE = 344,
     127     ARROW = 345,
     128     ICR = 346,
     129     DECR = 347,
     130     LS = 348,
     131     RS = 349,
     132     LE = 350,
     133     GE = 351,
     134     EQ = 352,
     135     NE = 353,
     136     ANDAND = 354,
     137     OROR = 355,
     138     ELLIPSIS = 356,
     139     MULTassign = 357,
     140     DIVassign = 358,
     141     MODassign = 359,
     142     PLUSassign = 360,
     143     MINUSassign = 361,
     144     LSassign = 362,
     145     RSassign = 363,
     146     ANDassign = 364,
     147     ERassign = 365,
     148     ORassign = 366,
     149     ATassign = 367,
     150     THEN = 368
    150151   };
    151152#endif
     
    186187#define FTYPE 291
    187188#define DTYPE 292
    188 #define TRAIT 293
    189 #define SIZEOF 294
    190 #define OFFSETOF 295
    191 #define ATTRIBUTE 296
    192 #define EXTENSION 297
    193 #define IF 298
    194 #define ELSE 299
    195 #define SWITCH 300
    196 #define CASE 301
    197 #define DEFAULT 302
    198 #define DO 303
    199 #define WHILE 304
    200 #define FOR 305
    201 #define BREAK 306
    202 #define CONTINUE 307
    203 #define GOTO 308
    204 #define RETURN 309
    205 #define CHOOSE 310
    206 #define DISABLE 311
    207 #define ENABLE 312
    208 #define FALLTHRU 313
    209 #define TRY 314
    210 #define CATCH 315
    211 #define CATCHRESUME 316
    212 #define FINALLY 317
    213 #define THROW 318
    214 #define THROWRESUME 319
    215 #define AT 320
    216 #define ASM 321
    217 #define ALIGNAS 322
    218 #define ALIGNOF 323
    219 #define ATOMIC 324
    220 #define GENERIC 325
    221 #define NORETURN 326
    222 #define STATICASSERT 327
    223 #define THREADLOCAL 328
    224 #define IDENTIFIER 329
    225 #define QUOTED_IDENTIFIER 330
    226 #define TYPEDEFname 331
    227 #define TYPEGENname 332
    228 #define ATTR_IDENTIFIER 333
    229 #define ATTR_TYPEDEFname 334
    230 #define ATTR_TYPEGENname 335
    231 #define INTEGERconstant 336
    232 #define CHARACTERconstant 337
    233 #define STRINGliteral 338
    234 #define REALDECIMALconstant 339
    235 #define REALFRACTIONconstant 340
    236 #define FLOATINGconstant 341
    237 #define ZERO 342
    238 #define ONE 343
    239 #define ARROW 344
    240 #define ICR 345
    241 #define DECR 346
    242 #define LS 347
    243 #define RS 348
    244 #define LE 349
    245 #define GE 350
    246 #define EQ 351
    247 #define NE 352
    248 #define ANDAND 353
    249 #define OROR 354
    250 #define ELLIPSIS 355
    251 #define MULTassign 356
    252 #define DIVassign 357
    253 #define MODassign 358
    254 #define PLUSassign 359
    255 #define MINUSassign 360
    256 #define LSassign 361
    257 #define RSassign 362
    258 #define ANDassign 363
    259 #define ERassign 364
    260 #define ORassign 365
    261 #define ATassign 366
    262 #define THEN 367
     189#define TTYPE 293
     190#define TRAIT 294
     191#define SIZEOF 295
     192#define OFFSETOF 296
     193#define ATTRIBUTE 297
     194#define EXTENSION 298
     195#define IF 299
     196#define ELSE 300
     197#define SWITCH 301
     198#define CASE 302
     199#define DEFAULT 303
     200#define DO 304
     201#define WHILE 305
     202#define FOR 306
     203#define BREAK 307
     204#define CONTINUE 308
     205#define GOTO 309
     206#define RETURN 310
     207#define CHOOSE 311
     208#define DISABLE 312
     209#define ENABLE 313
     210#define FALLTHRU 314
     211#define TRY 315
     212#define CATCH 316
     213#define CATCHRESUME 317
     214#define FINALLY 318
     215#define THROW 319
     216#define THROWRESUME 320
     217#define AT 321
     218#define ASM 322
     219#define ALIGNAS 323
     220#define ALIGNOF 324
     221#define ATOMIC 325
     222#define GENERIC 326
     223#define NORETURN 327
     224#define STATICASSERT 328
     225#define THREADLOCAL 329
     226#define IDENTIFIER 330
     227#define QUOTED_IDENTIFIER 331
     228#define TYPEDEFname 332
     229#define TYPEGENname 333
     230#define ATTR_IDENTIFIER 334
     231#define ATTR_TYPEDEFname 335
     232#define ATTR_TYPEGENname 336
     233#define INTEGERconstant 337
     234#define CHARACTERconstant 338
     235#define STRINGliteral 339
     236#define REALDECIMALconstant 340
     237#define REALFRACTIONconstant 341
     238#define FLOATINGconstant 342
     239#define ZERO 343
     240#define ONE 344
     241#define ARROW 345
     242#define ICR 346
     243#define DECR 347
     244#define LS 348
     245#define RS 349
     246#define LE 350
     247#define GE 351
     248#define EQ 352
     249#define NE 353
     250#define ANDAND 354
     251#define OROR 355
     252#define ELLIPSIS 356
     253#define MULTassign 357
     254#define DIVassign 358
     255#define MODassign 359
     256#define PLUSassign 360
     257#define MINUSassign 361
     258#define LSassign 362
     259#define RSassign 363
     260#define ANDassign 364
     261#define ERassign 365
     262#define ORassign 366
     263#define ATassign 367
     264#define THEN 368
    263265
    264266
     
    290292
    291293/* Line 2068 of yacc.c  */
    292 #line 293 "Parser/parser.h"
     294#line 295 "Parser/parser.h"
    293295} YYSTYPE;
    294296# define YYSTYPE_IS_TRIVIAL 1
  • src/Parser/parser.yy

    rbb82c03 r2162c2c  
    8383%token TYPEOF LABEL                                                                             // GCC
    8484%token ENUM STRUCT UNION
    85 %token OTYPE FTYPE DTYPE TRAIT                                                  // CFA
     85%token OTYPE FTYPE DTYPE TTYPE TRAIT                                                    // CFA
    8686%token SIZEOF OFFSETOF
    8787%token ATTRIBUTE EXTENSION                                                              // GCC
     
    18931893                { $$ = DeclarationNode::Otype; }
    18941894        | DTYPE
     1895                { $$ = DeclarationNode::Dtype; }
     1896        | FTYPE
    18951897                { $$ = DeclarationNode::Ftype; }
    1896         | FTYPE
    1897                 { $$ = DeclarationNode::Dtype; }
     1898        | TTYPE
     1899                { $$ = DeclarationNode::Ttype; }
    18981900        ;
    18991901
  • src/ResolvExpr/AdjustExprType.cc

    rbb82c03 r2162c2c  
    2222        class AdjustExprType : public Mutator {
    2323                typedef Mutator Parent;
     24                using Parent::mutate;
    2425          public:
    2526                AdjustExprType( const TypeEnvironment &env, const SymTab::Indexer &indexer );
  • src/ResolvExpr/AlternativeFinder.cc

    rbb82c03 r2162c2c  
    267267                std::list< Expression* >& actuals = appExpr->get_args();
    268268
    269                 std::list< Type * > formalTypes;
    270                 std::list< Type * >::iterator formalType = formalTypes.end();
    271 
    272269                for ( std::list< Expression* >::iterator actualExpr = actuals.begin(); actualExpr != actuals.end(); ++actualExpr ) {
    273 
     270                        Type * actualType = (*actualExpr)->get_result();
    274271                        PRINT(
    275272                                std::cerr << "actual expression:" << std::endl;
    276273                                (*actualExpr)->print( std::cerr, 8 );
    277274                                std::cerr << "--- results are" << std::endl;
    278                                 (*actualExpr)->get_result()->print( std::cerr, 8 );
    279                         )
    280                         std::list< DeclarationWithType* >::iterator startFormal = formal;
     275                                actualType->print( std::cerr, 8 );
     276                        )
    281277                        Cost actualCost;
    282                         std::list< Type * > flatActualTypes;
    283                         flatten( (*actualExpr)->get_result(), back_inserter( flatActualTypes ) );
    284                         for ( std::list< Type* >::iterator actualType = flatActualTypes.begin(); actualType != flatActualTypes.end(); ++actualType ) {
    285 
    286 
    287                                 // tuple handling code
    288                                 if ( formalType == formalTypes.end() ) {
    289                                         // the type of the formal parameter may be a tuple type. To make this easier to work with,
    290                                         // flatten the tuple type and traverse the resulting list of types, incrementing the formal
    291                                         // iterator once its types have been extracted. Once a particular formal parameter's type has
    292                                         // been exhausted load the next formal parameter's type.
    293                                         if ( formal == formals.end() ) {
    294                                                 if ( function->get_isVarArgs() ) {
    295                                                         convCost += Cost( 1, 0, 0 );
    296                                                         break;
    297                                                 } else {
    298                                                         return Cost::infinity;
    299                                                 }
    300                                         }
    301                                         formalTypes.clear();
    302                                         flatten( (*formal)->get_type(), back_inserter( formalTypes ) );
    303                                         formalType = formalTypes.begin();
    304                                         ++formal;
     278                        if ( formal == formals.end() ) {
     279                                if ( function->get_isVarArgs() ) {
     280                                        convCost += Cost( 1, 0, 0 );
     281                                        continue;
     282                                } else {
     283                                        return Cost::infinity;
    305284                                }
    306 
    307                                 PRINT(
    308                                         std::cerr << std::endl << "converting ";
    309                                         (*actualType)->print( std::cerr, 8 );
    310                                         std::cerr << std::endl << " to ";
    311                                         (*formalType)->print( std::cerr, 8 );
    312                                 )
    313                                 Cost newCost = conversionCost( *actualType, *formalType, indexer, alt.env );
    314                                 PRINT(
    315                                         std::cerr << std::endl << "cost is" << newCost << std::endl;
    316                                 )
    317 
    318                                 if ( newCost == Cost::infinity ) {
    319                                         return newCost;
    320                                 }
    321                                 convCost += newCost;
    322                                 actualCost += newCost;
    323 
    324                                 convCost += Cost( 0, polyCost( *formalType, alt.env, indexer ) + polyCost( *actualType, alt.env, indexer ), 0 );
    325 
    326                                 formalType++;
    327                         }
     285                        }
     286                        Type * formalType = (*formal)->get_type();
     287                        PRINT(
     288                                std::cerr << std::endl << "converting ";
     289                                actualType->print( std::cerr, 8 );
     290                                std::cerr << std::endl << " to ";
     291                                formalType->print( std::cerr, 8 );
     292                        )
     293                        Cost newCost = conversionCost( actualType, formalType, indexer, alt.env );
     294                        PRINT(
     295                                std::cerr << std::endl << "cost is" << newCost << std::endl;
     296                        )
     297
     298                        if ( newCost == Cost::infinity ) {
     299                                return newCost;
     300                        }
     301                        convCost += newCost;
     302                        actualCost += newCost;
    328303                        if ( actualCost != Cost( 0, 0, 0 ) ) {
    329                                 std::list< DeclarationWithType* >::iterator startFormalPlusOne = startFormal;
    330                                 startFormalPlusOne++;
    331                                 if ( formal == startFormalPlusOne ) {
    332                                         // not a tuple type
    333                                         Type *newType = (*startFormal)->get_type()->clone();
    334                                         alt.env.apply( newType );
    335                                         *actualExpr = new CastExpr( *actualExpr, newType );
    336                                 } else {
    337                                         TupleType *newType = new TupleType( Type::Qualifiers() );
    338                                         for ( std::list< DeclarationWithType* >::iterator i = startFormal; i != formal; ++i ) {
    339                                                 newType->get_types().push_back( (*i)->get_type()->clone() );
    340                                         }
    341                                         alt.env.apply( newType );
    342                                         *actualExpr = new CastExpr( *actualExpr, newType );
    343                                 }
    344                         }
    345 
     304                                Type *newType = formalType->clone();
     305                                alt.env.apply( newType );
     306                                *actualExpr = new CastExpr( *actualExpr, newType );
     307                        }
     308                        convCost += Cost( 0, polyCost( formalType, alt.env, indexer ) + polyCost( actualType, alt.env, indexer ), 0 );
     309                        ++formal; // can't be in for-loop update because of the continue
    346310                }
    347311                if ( formal != formals.end() ) {
     
    364328                        }
    365329                        convCost += newCost;
    366 
    367330                        convCost += Cost( 0, polyCost( assert->second.formalType, alt.env, indexer ) + polyCost( assert->second.actualType, alt.env, indexer ), 0 );
    368331                }
     
    376339                        unifiableVars[ (*tyvar)->get_name() ] = TypeDecl::Data{ *tyvar };
    377340                        for ( std::list< DeclarationWithType* >::iterator assert = (*tyvar)->get_assertions().begin(); assert != (*tyvar)->get_assertions().end(); ++assert ) {
    378                                 needAssertions[ *assert ] = true;
     341                                needAssertions[ *assert ].isUsed = true;
    379342                        }
    380343///     needAssertions.insert( needAssertions.end(), (*tyvar)->get_assertions().begin(), (*tyvar)->get_assertions().end() );
     
    388351                if ( TupleType * tupleType = dynamic_cast< TupleType * >( formalType ) ) {
    389352                        // formalType is a TupleType - group actuals into a TupleExpr whose type unifies with the TupleType
    390                         TupleExpr * tupleExpr = new TupleExpr();
     353                        std::list< Expression * > exprs;
    391354                        for ( Type * type : *tupleType ) {
    392                                 if ( ! instantiateArgument( type, defaultValue, actualIt, actualEnd, openVars, resultEnv, resultNeed, resultHave, indexer, cost, back_inserter( tupleExpr->get_exprs() ) ) ) {
    393                                         delete tupleExpr;
     355                                if ( ! instantiateArgument( type, defaultValue, actualIt, actualEnd, openVars, resultEnv, resultNeed, resultHave, indexer, cost, back_inserter( exprs ) ) ) {
     356                                        deleteAll( exprs );
    394357                                        return false;
    395358                                }
    396359                        }
    397                         tupleExpr->set_result( Tuples::makeTupleType( tupleExpr->get_exprs() ) );
    398                         *out++ = tupleExpr;
     360                        *out++ = new TupleExpr( exprs );
     361                } else if ( TypeInstType * ttype = Tuples::isTtype( formalType ) ) {
     362                        // xxx - mixing default arguments with variadic??
     363                        std::list< Expression * > exprs;
     364                        for ( ; actualIt != actualEnd; ++actualIt ) {
     365                                exprs.push_back( actualIt->expr->clone() );
     366                                cost += actualIt->cost;
     367                        }
     368                        Expression * arg = nullptr;
     369                        if ( exprs.size() == 1 && Tuples::isTtype( exprs.front()->get_result() ) ) {
     370                                // the case where a ttype value is passed directly is special, e.g. for argument forwarding purposes
     371                                // xxx - what if passing multiple arguments, last of which is ttype?
     372                                // xxx - what would happen if unify was changed so that unifying tuple types flattened both before unifying lists? then pass in TupleType(ttype) below.
     373                                arg = exprs.front();
     374                        } else {
     375                                arg = new TupleExpr( exprs );
     376                        }
     377                        assert( arg && arg->get_result() );
     378                        if ( ! unify( ttype, arg->get_result(), resultEnv, resultNeed, resultHave, openVars, indexer ) ) {
     379                                return false;
     380                        }
     381                        *out++ = arg;
    399382                } else if ( actualIt != actualEnd ) {
    400383                        // both actualType and formalType are atomic (non-tuple) types - if they unify
     
    483466        void addToIndexer( AssertionSet &assertSet, SymTab::Indexer &indexer ) {
    484467                for ( AssertionSet::iterator i = assertSet.begin(); i != assertSet.end(); ++i ) {
    485                         if ( i->second == true ) {
     468                        if ( i->second.isUsed ) {
    486469                                i->first->accept( indexer );
    487470                        }
     
    494477                if ( begin == end ) {
    495478                        if ( newNeed.empty() ) {
     479                                PRINT(
     480                                        std::cerr << "all assertions satisfied, output alternative: ";
     481                                        newAlt.print( std::cerr );
     482                                        std::cerr << std::endl;
     483                                );
    496484                                *out++ = newAlt;
    497485                                return;
     
    510498
    511499                ForwardIterator cur = begin++;
    512                 if ( ! cur->second ) {
     500                if ( ! cur->second.isUsed ) {
    513501                        inferRecursive( begin, end, newAlt, openVars, decls, newNeed, /*needParents,*/ level, indexer, out );
    514502                        return; // xxx - should this continue? previously this wasn't here, and it looks like it should be
     
    554542                                assert( (*candidate)->get_uniqueId() );
    555543                                DeclarationWithType *candDecl = static_cast< DeclarationWithType* >( Declaration::declFromId( (*candidate)->get_uniqueId() ) );
     544
     545                                // everything with an empty idChain was pulled in by the current assertion.
     546                                // add current assertion's idChain + current assertion's ID so that the correct inferParameters can be found.
     547                                for ( auto & a : newerNeed ) {
     548                                        if ( a.second.idChain.empty() ) {
     549                                                a.second.idChain = cur->second.idChain;
     550                                                a.second.idChain.push_back( curDecl->get_uniqueId() );
     551                                        }
     552                                }
     553
    556554                                //AssertionParentSet newNeedParents( needParents );
    557555                                // skip repeatingly-self-recursive assertion satisfaction
     
    569567                                )
    570568                                ApplicationExpr *appExpr = static_cast< ApplicationExpr* >( newerAlt.expr );
     569                                // follow the current assertion's ID chain to find the correct set of inferred parameters to add the candidate to (i.e. the set of inferred parameters belonging to the entity which requested the assertion parameter).
     570                                InferredParams * inferParameters = &appExpr->get_inferParams();
     571                                for ( UniqueId id : cur->second.idChain ) {
     572                                        inferParameters = (*inferParameters)[ id ].inferParams.get();
     573                                }
    571574                                // XXX: this is a memory leak, but adjType can't be deleted because it might contain assertions
    572                                 appExpr->get_inferParams()[ curDecl->get_uniqueId() ] = ParamEntry( (*candidate)->get_uniqueId(), adjType->clone(), curDecl->get_type()->clone(), varExpr );
     575                                (*inferParameters)[ curDecl->get_uniqueId() ] = ParamEntry( (*candidate)->get_uniqueId(), adjType->clone(), curDecl->get_type()->clone(), varExpr );
    573576                                inferRecursive( begin, end, newerAlt, newOpenVars, newDecls, newerNeed, /*newNeedParents,*/ level, indexer, out );
    574577                        } else {
     
    609612                makeUnifiableVars( funcType, openVars, resultNeed );
    610613                AltList instantiatedActuals; // filled by instantiate function
    611                 if ( targetType && ! targetType->isVoid() ) {
     614                if ( targetType && ! targetType->isVoid() && ! funcType->get_returnVals().empty() ) {
    612615                        // attempt to narrow based on expected target type
    613616                        Type * returnType = funcType->get_returnVals().front()->get_type();
     
    10751078        }
    10761079
    1077         void AlternativeFinder::visit( TupleExpr *tupleExpr ) {
     1080        void AlternativeFinder::visit( UntypedTupleExpr *tupleExpr ) {
    10781081                std::list< AlternativeFinder > subExprAlternatives;
    10791082                findSubExprs( tupleExpr->get_exprs().begin(), tupleExpr->get_exprs().end(), back_inserter( subExprAlternatives ) );
     
    10811084                combos( subExprAlternatives.begin(), subExprAlternatives.end(), back_inserter( possibilities ) );
    10821085                for ( std::list< AltList >::const_iterator i = possibilities.begin(); i != possibilities.end(); ++i ) {
    1083                         TupleExpr *newExpr = new TupleExpr;
    1084                         makeExprList( *i, newExpr->get_exprs() );
    1085                         newExpr->set_result( Tuples::makeTupleType( newExpr->get_exprs() ) );
     1086                        std::list< Expression * > exprs;
     1087                        makeExprList( *i, exprs );
    10861088
    10871089                        TypeEnvironment compositeEnv;
    10881090                        simpleCombineEnvironments( i->begin(), i->end(), compositeEnv );
    1089                         alternatives.push_back( Alternative( newExpr, compositeEnv, sumCost( *i ) ) );
     1091                        alternatives.push_back( Alternative( new TupleExpr( exprs ) , compositeEnv, sumCost( *i ) ) );
    10901092                } // for
     1093        }
     1094
     1095        void AlternativeFinder::visit( TupleExpr *tupleExpr ) {
     1096                alternatives.push_back( Alternative( tupleExpr->clone(), env, Cost::zero ) );
    10911097        }
    10921098
  • src/ResolvExpr/AlternativeFinder.h

    rbb82c03 r2162c2c  
    6464                virtual void visit( ConditionalExpr *conditionalExpr );
    6565                virtual void visit( CommaExpr *commaExpr );
    66                 virtual void visit( TupleExpr *tupleExpr );
    6766                virtual void visit( ImplicitCopyCtorExpr * impCpCtorExpr );
    6867                virtual void visit( ConstructorExpr * ctorExpr );
     68                virtual void visit( UntypedTupleExpr *tupleExpr );
     69                virtual void visit( TupleExpr *tupleExpr );
    6970                virtual void visit( TupleIndexExpr *tupleExpr );
    7071                virtual void visit( TupleAssignExpr *tupleExpr );
  • src/ResolvExpr/FindOpenVars.cc

    rbb82c03 r2162c2c  
    5050                                openVars[ (*i)->get_name() ] = TypeDecl::Data{ (*i) };
    5151                                for ( std::list< DeclarationWithType* >::const_iterator assert = (*i)->get_assertions().begin(); assert != (*i)->get_assertions().end(); ++assert ) {
    52                                         needAssertions[ *assert ] = false;
     52                                        needAssertions[ *assert ].isUsed = false;
    5353                                }
    5454///       cloneAll( (*i)->get_assertions(), needAssertions );
     
    5959                                closedVars[ (*i)->get_name() ] = TypeDecl::Data{ (*i) };
    6060                                for ( std::list< DeclarationWithType* >::const_iterator assert = (*i)->get_assertions().begin(); assert != (*i)->get_assertions().end(); ++assert ) {
    61                                         haveAssertions[ *assert ] = false;
     61                                        haveAssertions[ *assert ].isUsed = false;
    6262                                }
    6363///       cloneAll( (*i)->get_assertions(), haveAssertions );
  • src/ResolvExpr/TypeEnvironment.cc

    rbb82c03 r2162c2c  
    7575                for ( AssertionSet::const_iterator i = assertions.begin(); i != assertions.end(); ++i ) {
    7676                        i->first->print( os, indent );
    77                         if ( i->second ) {
     77                        if ( i->second.isUsed ) {
    7878                                os << "(used)";
    7979                        } else {
  • src/ResolvExpr/TypeEnvironment.h

    rbb82c03 r2162c2c  
    3131                bool operator()( DeclarationWithType * d1, DeclarationWithType * d2 ) const;
    3232        };
    33         typedef std::map< DeclarationWithType*, bool, AssertCompare > AssertionSet;
     33        struct AssertionSetValue {
     34                bool isUsed;
     35                // chain of Unique IDs of the assertion declarations. The first ID in the chain is the ID of an assertion on the current type,
     36                // with each successive ID being the ID of an assertion pulled in by the previous ID. The last ID in the chain is
     37                // the ID of the assertion that pulled in the current assertion.
     38                std::list< UniqueId > idChain;
     39        };
     40        typedef std::map< DeclarationWithType*, AssertionSetValue, AssertCompare > AssertionSet;
    3441        typedef std::map< std::string, TypeDecl::Data > OpenVarSet;
    3542
  • src/ResolvExpr/Unify.cc

    rbb82c03 r2162c2c  
    2626#include "SymTab/Indexer.h"
    2727#include "Common/utility.h"
    28 
     28#include "Tuples/Tuples.h"
    2929
    3030// #define DEBUG
     
    157157                        // if the type variable is specified to be a complete type then the incoming
    158158                        // type must also be complete
     159                        // xxx - should this also check that type is not a tuple type and that it's not a ttype?
    159160                        return ! isFtype( type, indexer ) && (! data.isComplete || isComplete( type ));
    160161                  case TypeDecl::Ftype:
    161162                        return isFtype( type, indexer );
     163                        case TypeDecl::Ttype:
     164                        // ttype unifies with any tuple type
     165                        return dynamic_cast< TupleType * >( type );
    162166                } // switch
    163                 assert( false );
    164167                return false;
    165168        }
     
    431434                if ( i != assertions.end() ) {
    432435///     std::cerr << "found it!" << std::endl;
    433                         i->second = true;
     436                        i->second.isUsed = true;
    434437                } // if
    435438        }
     
    485488        }
    486489
     490        template< typename Iterator >
     491        std::unique_ptr<Type> combineTypes( Iterator begin, Iterator end ) {
     492                std::list< Type * > types;
     493                for ( ; begin != end; ++begin ) {
     494                        // it's guaranteed that a ttype variable will be bound to a flat tuple, so ensure that this results in a flat tuple
     495                        flatten( (*begin)->get_type(), back_inserter( types ) );
     496                }
     497                return std::unique_ptr<Type>( new TupleType( Type::Qualifiers(), types ) );
     498        }
     499
    487500        template< typename Iterator1, typename Iterator2 >
    488501        bool unifyDeclList( Iterator1 list1Begin, Iterator1 list1End, Iterator2 list2Begin, Iterator2 list2End, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, const SymTab::Indexer &indexer ) {
    489502                for ( ; list1Begin != list1End && list2Begin != list2End; ++list1Begin, ++list2Begin ) {
    490                         // Type * commonType;
    491                         // if ( ! unifyInexact( (*list1Begin)->get_type(), (*list2Begin)->get_type(), env, needAssertions, haveAssertions, openVars, WidenMode( true, true ), indexer, commonType ) ) {
    492                         if ( ! unifyExact( (*list1Begin)->get_type(), (*list2Begin)->get_type(), env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer ) ) {
     503                        Type * t1 = (*list1Begin)->get_type();
     504                        Type * t2 = (*list2Begin)->get_type();
     505                        bool isTtype1 = Tuples::isTtype( t1 );
     506                        bool isTtype2 = Tuples::isTtype( t2 );
     507                        // xxx - assumes ttype must be last parameter
     508                        // xxx - there may be a nice way to refactor this, but be careful because the argument positioning might matter in some cases.
     509                        if ( isTtype1 && ! isTtype2 ) {
     510                                // combine all of the things in list2, then unify
     511                                return unifyExact( t1, combineTypes( list2Begin, list2End ).get(), env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer );
     512                        } else if ( isTtype2 && ! isTtype1 ) {
     513                                // combine all of the things in list1, then unify
     514                                return unifyExact( combineTypes( list1Begin, list1End ).get(), t2, env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer );
     515                        } else if ( ! unifyExact( t1, t2, env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer ) ) {
    493516                                return false;
    494517                        } // if
    495518                } // for
    496                 if ( list1Begin != list1End || list2Begin != list2End ) {
    497                         return false;
     519                // may get to the end of one argument list before the end of the other. This is only okay when the other is a ttype
     520                if ( list1Begin != list1End ) {
     521                        // try unifying empty tuple type with ttype
     522                        Type * t1 = (*list1Begin)->get_type();
     523                        if ( Tuples::isTtype( t1 ) ) {
     524                                return unifyExact( t1, combineTypes( list2Begin, list2End ).get(), env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer );
     525                        } else return false;
     526                } else if ( list2Begin != list2End ) {
     527                        // try unifying empty tuple type with ttype
     528                        Type * t2 = (*list2Begin)->get_type();
     529                        if ( Tuples::isTtype( t2 ) ) {
     530                                return unifyExact( combineTypes( list1Begin, list1End ).get(), t2, env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer );
     531                        } else return false;
    498532                } else {
    499533                        return true;
    500534                } // if
     535        }
     536
     537        /// Finds ttypes and replaces them with their expansion, if known.
     538        /// This needs to be done so that satisfying ttype assertions is easier.
     539        /// If this isn't done then argument lists can have wildly different
     540        /// size and structure, when they should be compatible.
     541        struct TtypeExpander : public Mutator {
     542                TypeEnvironment & env;
     543                TtypeExpander( TypeEnvironment & env ) : env( env ) {}
     544                Type * mutate( TypeInstType * typeInst ) {
     545                        EqvClass eqvClass;
     546                        if ( env.lookup( typeInst->get_name(), eqvClass ) ) {
     547                                if ( eqvClass.data.kind == TypeDecl::Ttype ) {
     548                                        // expand ttype parameter into its actual type
     549                                        if ( eqvClass.type ) {
     550                                                delete typeInst;
     551                                                return eqvClass.type->clone();
     552                                        }
     553                                }
     554                        }
     555                        return typeInst;
     556                }
     557        };
     558
     559        /// flattens a list of declarations, so that each tuple type has a single declaration.
     560        /// makes use of TtypeExpander to ensure ttypes are flat as well.
     561        void flattenList( std::list< DeclarationWithType * > src, std::list< DeclarationWithType * > & dst, TypeEnvironment & env ) {
     562                dst.clear();
     563                for ( DeclarationWithType * dcl : src ) {
     564                        TtypeExpander expander( env );
     565                        dcl->acceptMutator( expander );
     566                        std::list< Type * > types;
     567                        flatten( dcl->get_type(), back_inserter( types ) );
     568                        for ( Type * t : types ) {
     569                                dst.push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::C, nullptr, t, nullptr ) );
     570                        }
     571                        delete dcl;
     572                }
    501573        }
    502574
     
    504576                FunctionType *otherFunction = dynamic_cast< FunctionType* >( type2 );
    505577                if ( otherFunction && functionType->get_isVarArgs() == otherFunction->get_isVarArgs() ) {
    506                         if ( functionType->get_parameters().size() == otherFunction->get_parameters().size() && functionType->get_returnVals().size() == otherFunction->get_returnVals().size() ) {
    507                                 if ( unifyDeclList( functionType->get_parameters().begin(), functionType->get_parameters().end(), otherFunction->get_parameters().begin(), otherFunction->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
    508                                         if ( unifyDeclList( functionType->get_returnVals().begin(), functionType->get_returnVals().end(), otherFunction->get_returnVals().begin(), otherFunction->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
    509 
     578                        // flatten the parameter lists for both functions so that tuple structure
     579                        // doesn't affect unification. Must be a clone so that the types don't change.
     580                        std::unique_ptr<FunctionType> flatFunc( functionType->clone() );
     581                        std::unique_ptr<FunctionType> flatOther( otherFunction->clone() );
     582                        flattenList( flatFunc->get_parameters(), flatFunc->get_parameters(), env );
     583                        flattenList( flatOther->get_parameters(), flatOther->get_parameters(), env );
     584
     585                        // sizes don't have to match if ttypes are involved; need to be more precise wrt where the ttype is to prevent errors
     586                        if ( (flatFunc->get_parameters().size() == flatOther->get_parameters().size() && flatFunc->get_returnVals().size() == flatOther->get_returnVals().size()) || flatFunc->isTtype() || flatOther->isTtype() ) {
     587                                if ( unifyDeclList( flatFunc->get_parameters().begin(), flatFunc->get_parameters().end(), flatOther->get_parameters().begin(), flatOther->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
     588                                        if ( unifyDeclList( flatFunc->get_returnVals().begin(), flatFunc->get_returnVals().end(), flatOther->get_returnVals().begin(), flatOther->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
     589
     590                                                // the original types must be used in mark assertions, since pointer comparisons are used
    510591                                                markAssertions( haveAssertions, needAssertions, functionType );
    511592                                                markAssertions( haveAssertions, needAssertions, otherFunction );
  • src/ResolvExpr/typeops.h

    rbb82c03 r2162c2c  
    164164                        }
    165165                } else {
    166                         *out++ = type;
     166                        *out++ = type->clone();
    167167                }
    168168        }
  • src/SymTab/Indexer.cc

    rbb82c03 r2162c2c  
    453453        }
    454454
    455         void Indexer::visit( TupleExpr *tupleExpr ) {
    456                 acceptNewScope( tupleExpr->get_result(), *this );
    457                 acceptAll( tupleExpr->get_exprs(), *this );
    458         }
    459 
    460         void Indexer::visit( TupleAssignExpr *tupleExpr ) {
    461                 acceptNewScope( tupleExpr->get_result(), *this );
    462                 maybeAccept( tupleExpr->get_stmtExpr(), *this );
    463         }
    464 
    465455        void Indexer::visit( TypeExpr *typeExpr ) {
    466456                acceptNewScope( typeExpr->get_result(), *this );
     
    474464        }
    475465
     466        void Indexer::visit( ImplicitCopyCtorExpr *impCpCtorExpr ) {
     467                acceptNewScope( impCpCtorExpr->get_result(), *this );
     468                maybeAccept( impCpCtorExpr->get_callExpr(), *this );
     469                acceptAll( impCpCtorExpr->get_tempDecls(), *this );
     470                acceptAll( impCpCtorExpr->get_returnDecls(), *this );
     471                acceptAll( impCpCtorExpr->get_dtors(), *this );
     472        }
     473
     474        void Indexer::visit( ConstructorExpr * ctorExpr ) {
     475                acceptNewScope( ctorExpr->get_result(), *this );
     476                maybeAccept( ctorExpr->get_callExpr(), *this );
     477        }
     478
     479        void Indexer::visit( CompoundLiteralExpr *compLitExpr ) {
     480                acceptNewScope( compLitExpr->get_result(), *this );
     481                maybeAccept( compLitExpr->get_type(), *this );
     482                maybeAccept( compLitExpr->get_initializer(), *this );
     483        }
     484
    476485        void Indexer::visit( UntypedValofExpr *valofExpr ) {
    477486                acceptNewScope( valofExpr->get_result(), *this );
    478487                maybeAccept( valofExpr->get_body(), *this );
     488        }
     489
     490        void Indexer::visit( RangeExpr *rangeExpr ) {
     491                maybeAccept( rangeExpr->get_low(), *this );
     492                maybeAccept( rangeExpr->get_high(), *this );
     493        }
     494
     495        void Indexer::visit( UntypedTupleExpr *tupleExpr ) {
     496                acceptNewScope( tupleExpr->get_result(), *this );
     497                acceptAll( tupleExpr->get_exprs(), *this );
     498        }
     499
     500        void Indexer::visit( TupleExpr *tupleExpr ) {
     501                acceptNewScope( tupleExpr->get_result(), *this );
     502                acceptAll( tupleExpr->get_exprs(), *this );
     503        }
     504
     505        void Indexer::visit( TupleIndexExpr *tupleExpr ) {
     506                acceptNewScope( tupleExpr->get_result(), *this );
     507                maybeAccept( tupleExpr->get_tuple(), *this );
     508        }
     509
     510        void Indexer::visit( MemberTupleExpr *tupleExpr ) {
     511                acceptNewScope( tupleExpr->get_result(), *this );
     512                maybeAccept( tupleExpr->get_member(), *this );
     513                maybeAccept( tupleExpr->get_aggregate(), *this );
     514        }
     515
     516        void Indexer::visit( TupleAssignExpr *tupleExpr ) {
     517                acceptNewScope( tupleExpr->get_result(), *this );
     518                maybeAccept( tupleExpr->get_stmtExpr(), *this );
     519        }
     520
     521        void Indexer::visit( StmtExpr *stmtExpr ) {
     522                acceptNewScope( stmtExpr->get_result(), *this );
     523                maybeAccept( stmtExpr->get_statements(), *this );
     524                acceptAll( stmtExpr->get_returnDecls(), *this );
     525                acceptAll( stmtExpr->get_dtors(), *this );
     526        }
     527
     528        void Indexer::visit( UniqueExpr *uniqueExpr ) {
     529                acceptNewScope( uniqueExpr->get_result(), *this );
     530                maybeAccept( uniqueExpr->get_expr(), *this );
    479531        }
    480532
  • src/SymTab/Indexer.h

    rbb82c03 r2162c2c  
    6666                virtual void visit( TypeExpr *typeExpr );
    6767                virtual void visit( AsmExpr *asmExpr );
     68                virtual void visit( ImplicitCopyCtorExpr *impCpCtorExpr );
     69                virtual void visit( ConstructorExpr * ctorExpr );
     70                virtual void visit( CompoundLiteralExpr *compLitExpr );
    6871                virtual void visit( UntypedValofExpr *valofExpr );
     72                virtual void visit( RangeExpr *rangeExpr );
     73                virtual void visit( UntypedTupleExpr *tupleExpr );
    6974                virtual void visit( TupleExpr *tupleExpr );
     75                virtual void visit( TupleIndexExpr *tupleExpr );
     76                virtual void visit( MemberTupleExpr *tupleExpr );
    7077                virtual void visit( TupleAssignExpr *tupleExpr );
     78                virtual void visit( StmtExpr * stmtExpr );
     79                virtual void visit( UniqueExpr * uniqueExpr );
    7180
    7281                virtual void visit( TraitInstType *contextInst );
  • src/SymTab/Mangler.cc

    rbb82c03 r2162c2c  
    214214                                mangleName << "f";
    215215                                break;
     216                                case TypeDecl::Ttype:
     217                                mangleName << "tVARGS";
     218                                break;
     219                                default:
     220                                assert( false );
    216221                        } // switch
    217222                        mangleName << numStream.str();
     
    256261                if ( ! type->get_forall().empty() ) {
    257262                        std::list< std::string > assertionNames;
    258                         int tcount = 0, dcount = 0, fcount = 0;
     263                        int tcount = 0, dcount = 0, fcount = 0, vcount = 0;
    259264                        mangleName << "A";
    260265                        for ( Type::ForallList::iterator i = type->get_forall().begin(); i != type->get_forall().end(); ++i ) {
     
    269274                                        fcount++;
    270275                                        break;
     276                                  case TypeDecl::Ttype:
     277                                        vcount++;
     278                                        break;
     279                                  default:
     280                                        assert( false );
    271281                                } // switch
    272282                                varNums[ (*i )->get_name() ] = std::pair< int, int >( nextVarNum++, (int )(*i )->get_kind() );
     
    280290                                } // for
    281291                        } // for
    282                         mangleName << tcount << "_" << dcount << "_" << fcount << "_";
     292                        mangleName << tcount << "_" << dcount << "_" << fcount << "_" << vcount << "_";
    283293                        std::copy( assertionNames.begin(), assertionNames.end(), std::ostream_iterator< std::string >( mangleName, "" ) );
    284294                        mangleName << "_";
  • src/SynTree/ApplicationExpr.cc

    rbb82c03 r2162c2c  
    2424
    2525ParamEntry::ParamEntry( const ParamEntry &other ) :
    26                 decl( other.decl ), actualType( maybeClone( other.actualType ) ), formalType( maybeClone( other.formalType ) ), expr( maybeClone( other.expr ) ) {
     26                decl( other.decl ), actualType( maybeClone( other.actualType ) ), formalType( maybeClone( other.formalType ) ), expr( maybeClone( other.expr ) ), inferParams( new InferredParams( *other.inferParams ) ) {
    2727}
    2828
     
    3434        formalType = maybeClone( other.formalType );
    3535        expr = maybeClone( other.expr );
     36        *inferParams = *other.inferParams;
    3637        return *this;
    3738}
     
    6263}
    6364
     65void printInferParams( const InferredParams & inferParams, std::ostream &os, int indent, int level ) {
     66        if ( ! inferParams.empty() ) {
     67                os << std::string(indent, ' ') << "with inferred parameters " << level << ":" << std::endl;
     68                for ( InferredParams::const_iterator i = inferParams.begin(); i != inferParams.end(); ++i ) {
     69                        os << std::string(indent+2, ' ');
     70                        Declaration::declFromId( i->second.decl )->printShort( os, indent+2 );
     71                        os << std::endl;
     72                        printInferParams( *i->second.inferParams, os, indent+2, level+1 );
     73                } // for
     74        } // if
     75}
     76
    6477void ApplicationExpr::print( std::ostream &os, int indent ) const {
    6578        os << "Application of" << std::endl << std::string(indent+2, ' ');
     
    6982                printAll( args, os, indent+2 );
    7083        } // if
    71         if ( ! inferParams.empty() ) {
    72                 os << std::string(indent, ' ') << "with inferred parameters:" << std::endl;
    73                 for ( InferredParams::const_iterator i = inferParams.begin(); i != inferParams.end(); ++i ) {
    74                         os << std::string(indent+2, ' ');
    75                         Declaration::declFromId( i->second.decl )->printShort( os, indent+2 );
    76                         os << std::endl;
    77                 } // for
    78         } // if
     84        printInferParams( inferParams, os, indent+2, 0 );
    7985        Expression::print( os, indent );
    8086}
  • src/SynTree/Declaration.cc

    rbb82c03 r2162c2c  
    5757
    5858std::ostream & operator<<( std::ostream & out, const Declaration * decl ) {
    59         decl->print( out );
     59        if ( decl ){
     60                decl->print( out );
     61        } else {
     62                out << "nullptr";
     63        }
    6064        return out;
    6165}
  • src/SynTree/Declaration.h

    rbb82c03 r2162c2c  
    179179        typedef NamedTypeDecl Parent;
    180180  public:
    181         enum Kind { Any, Dtype, Ftype };
     181        enum Kind { Any, Dtype, Ftype, Ttype };
    182182        /// Data extracted from a type decl
    183183        struct Data {
  • src/SynTree/Expression.cc

    rbb82c03 r2162c2c  
    672672
    673673std::ostream & operator<<( std::ostream & out, const Expression * expr ) {
    674         expr->print( out );
     674        if ( expr ) {
     675                expr->print( out );
     676        } else {
     677                out << "nullptr";
     678        }
    675679        return out;
    676680}
  • src/SynTree/Expression.h

    rbb82c03 r2162c2c  
    5454};
    5555
     56struct ParamEntry;
     57typedef std::map< UniqueId, ParamEntry > InferredParams;
     58
    5659/// ParamEntry contains the i.d. of a declaration and a type that is derived from that declaration,
    5760/// but subject to decay-to-pointer and type parameter renaming
    5861struct ParamEntry {
    59         ParamEntry(): decl( 0 ), actualType( 0 ), formalType( 0 ), expr( 0 ) {}
    60         ParamEntry( UniqueId decl, Type *actualType, Type *formalType, Expression* expr ): decl( decl ), actualType( actualType ), formalType( formalType ), expr( expr ) {}
     62        ParamEntry(): decl( 0 ), actualType( 0 ), formalType( 0 ), expr( 0 ), inferParams( new InferredParams ) {}
     63        ParamEntry( UniqueId decl, Type *actualType, Type *formalType, Expression* expr ): decl( decl ), actualType( actualType ), formalType( formalType ), expr( expr ), inferParams( new InferredParams ) {}
    6164        ParamEntry( const ParamEntry &other );
    6265        ~ParamEntry();
     
    6770        Type *formalType;
    6871        Expression* expr;
    69 };
    70 
    71 typedef std::map< UniqueId, ParamEntry > InferredParams;
     72        std::unique_ptr< InferredParams > inferParams;
     73};
    7274
    7375/// ApplicationExpr represents the application of a function to a set of parameters.  This is the result of running an
     
    634636};
    635637
     638/// UntypedTupleExpr represents a tuple expression ( [a, b, c] ) before resolution
     639class UntypedTupleExpr : public Expression {
     640  public:
     641        UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr );
     642        UntypedTupleExpr( const UntypedTupleExpr &other );
     643        virtual ~UntypedTupleExpr();
     644
     645        std::list<Expression*>& get_exprs() { return exprs; }
     646
     647        virtual UntypedTupleExpr *clone() const { return new UntypedTupleExpr( *this ); }
     648        virtual void accept( Visitor &v ) { v.visit( this ); }
     649        virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     650        virtual void print( std::ostream &os, int indent = 0 ) const;
     651  private:
     652        std::list<Expression*> exprs;
     653};
     654
    636655/// TupleExpr represents a tuple expression ( [a, b, c] )
    637656class TupleExpr : public Expression {
    638657  public:
    639         TupleExpr( const std::list< Expression * > & exprs = std::list< Expression * >(), Expression *_aname = nullptr );
     658        TupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr );
    640659        TupleExpr( const TupleExpr &other );
    641660        virtual ~TupleExpr();
    642661
    643         void set_exprs( std::list<Expression*> newValue ) { exprs = newValue; }
    644662        std::list<Expression*>& get_exprs() { return exprs; }
    645663
  • src/SynTree/FunctionType.cc

    rbb82c03 r2162c2c  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // FunctionType.cc -- 
     7// FunctionType.cc --
    88//
    99// Author           : Richard C. Bilson
     
    1919#include "Declaration.h"
    2020#include "Common/utility.h"
     21#include "Tuples/Tuples.h"
    2122
    2223FunctionType::FunctionType( const Type::Qualifiers &tq, bool isVarArgs ) : Type( tq ), isVarArgs( isVarArgs ) {
     
    3132        deleteAll( returnVals );
    3233        deleteAll( parameters );
     34}
     35
     36namespace {
     37        bool containsTtype( const std::list<DeclarationWithType * > & l ) {
     38                if ( ! l.empty() ) {
     39                        return Tuples::isTtype( l.back()->get_type() );
     40                }
     41                return false;
     42        }
     43}
     44
     45bool FunctionType::isTtype() const {
     46        return containsTtype( returnVals ) || containsTtype( parameters );
    3347}
    3448
  • src/SynTree/Mutator.cc

    rbb82c03 r2162c2c  
    2323#include "Constant.h"
    2424#include "Common/utility.h"
     25#include "TypeSubstitution.h"
    2526
    2627Mutator::Mutator() {}
     
    178179
    179180Expression *Mutator::mutate( ApplicationExpr *applicationExpr ) {
     181        applicationExpr->set_env( maybeMutate( applicationExpr->get_env(), *this ) );
    180182        applicationExpr->set_result( maybeMutate( applicationExpr->get_result(), *this ) );
    181183        applicationExpr->set_function( maybeMutate( applicationExpr->get_function(), *this ) );
     
    185187
    186188Expression *Mutator::mutate( UntypedExpr *untypedExpr ) {
     189        untypedExpr->set_env( maybeMutate( untypedExpr->get_env(), *this ) );
    187190        untypedExpr->set_result( maybeMutate( untypedExpr->get_result(), *this ) );
    188191        mutateAll( untypedExpr->get_args(), *this );
     
    191194
    192195Expression *Mutator::mutate( NameExpr *nameExpr ) {
     196        nameExpr->set_env( maybeMutate( nameExpr->get_env(), *this ) );
    193197        nameExpr->set_result( maybeMutate( nameExpr->get_result(), *this ) );
    194198        return nameExpr;
     
    196200
    197201Expression *Mutator::mutate( AddressExpr *addressExpr ) {
     202        addressExpr->set_env( maybeMutate( addressExpr->get_env(), *this ) );
    198203        addressExpr->set_result( maybeMutate( addressExpr->get_result(), *this ) );
    199204        addressExpr->set_arg( maybeMutate( addressExpr->get_arg(), *this ) );
     
    202207
    203208Expression *Mutator::mutate( LabelAddressExpr *labelAddressExpr ) {
     209        labelAddressExpr->set_env( maybeMutate( labelAddressExpr->get_env(), *this ) );
    204210        labelAddressExpr->set_result( maybeMutate( labelAddressExpr->get_result(), *this ) );
    205211        labelAddressExpr->set_arg( maybeMutate( labelAddressExpr->get_arg(), *this ) );
     
    208214
    209215Expression *Mutator::mutate( CastExpr *castExpr ) {
     216        castExpr->set_env( maybeMutate( castExpr->get_env(), *this ) );
    210217        castExpr->set_result( maybeMutate( castExpr->get_result(), *this ) );
    211218        castExpr->set_arg( maybeMutate( castExpr->get_arg(), *this ) );
     
    214221
    215222Expression *Mutator::mutate( UntypedMemberExpr *memberExpr ) {
     223        memberExpr->set_env( maybeMutate( memberExpr->get_env(), *this ) );
    216224        memberExpr->set_result( maybeMutate( memberExpr->get_result(), *this ) );
    217225        memberExpr->set_aggregate( maybeMutate( memberExpr->get_aggregate(), *this ) );
     
    221229
    222230Expression *Mutator::mutate( MemberExpr *memberExpr ) {
     231        memberExpr->set_env( maybeMutate( memberExpr->get_env(), *this ) );
    223232        memberExpr->set_result( maybeMutate( memberExpr->get_result(), *this ) );
    224233        memberExpr->set_aggregate( maybeMutate( memberExpr->get_aggregate(), *this ) );
     
    227236
    228237Expression *Mutator::mutate( VariableExpr *variableExpr ) {
     238        variableExpr->set_env( maybeMutate( variableExpr->get_env(), *this ) );
    229239        variableExpr->set_result( maybeMutate( variableExpr->get_result(), *this ) );
    230240        return variableExpr;
     
    232242
    233243Expression *Mutator::mutate( ConstantExpr *constantExpr ) {
     244        constantExpr->set_env( maybeMutate( constantExpr->get_env(), *this ) );
    234245        constantExpr->set_result( maybeMutate( constantExpr->get_result(), *this ) );
    235246//  maybeMutate( constantExpr->get_constant(), *this )
     
    238249
    239250Expression *Mutator::mutate( SizeofExpr *sizeofExpr ) {
     251        sizeofExpr->set_env( maybeMutate( sizeofExpr->get_env(), *this ) );
    240252        sizeofExpr->set_result( maybeMutate( sizeofExpr->get_result(), *this ) );
    241253        if ( sizeofExpr->get_isType() ) {
     
    248260
    249261Expression *Mutator::mutate( AlignofExpr *alignofExpr ) {
     262        alignofExpr->set_env( maybeMutate( alignofExpr->get_env(), *this ) );
    250263        alignofExpr->set_result( maybeMutate( alignofExpr->get_result(), *this ) );
    251264        if ( alignofExpr->get_isType() ) {
     
    258271
    259272Expression *Mutator::mutate( UntypedOffsetofExpr *offsetofExpr ) {
     273        offsetofExpr->set_env( maybeMutate( offsetofExpr->get_env(), *this ) );
    260274        offsetofExpr->set_result( maybeMutate( offsetofExpr->get_result(), *this ) );
    261275        offsetofExpr->set_type( maybeMutate( offsetofExpr->get_type(), *this ) );
     
    264278
    265279Expression *Mutator::mutate( OffsetofExpr *offsetofExpr ) {
     280        offsetofExpr->set_env( maybeMutate( offsetofExpr->get_env(), *this ) );
    266281        offsetofExpr->set_result( maybeMutate( offsetofExpr->get_result(), *this ) );
    267282        offsetofExpr->set_type( maybeMutate( offsetofExpr->get_type(), *this ) );
     
    271286
    272287Expression *Mutator::mutate( OffsetPackExpr *offsetPackExpr ) {
     288        offsetPackExpr->set_env( maybeMutate( offsetPackExpr->get_env(), *this ) );
    273289        offsetPackExpr->set_result( maybeMutate( offsetPackExpr->get_result(), *this ) );
    274290        offsetPackExpr->set_type( maybeMutate( offsetPackExpr->get_type(), *this ) );
     
    277293
    278294Expression *Mutator::mutate( AttrExpr *attrExpr ) {
     295        attrExpr->set_env( maybeMutate( attrExpr->get_env(), *this ) );
    279296        attrExpr->set_result( maybeMutate( attrExpr->get_result(), *this ) );
    280297        if ( attrExpr->get_isType() ) {
     
    287304
    288305Expression *Mutator::mutate( LogicalExpr *logicalExpr ) {
     306        logicalExpr->set_env( maybeMutate( logicalExpr->get_env(), *this ) );
    289307        logicalExpr->set_result( maybeMutate( logicalExpr->get_result(), *this ) );
    290308        logicalExpr->set_arg1( maybeMutate( logicalExpr->get_arg1(), *this ) );
     
    294312
    295313Expression *Mutator::mutate( ConditionalExpr *conditionalExpr ) {
     314        conditionalExpr->set_env( maybeMutate( conditionalExpr->get_env(), *this ) );
    296315        conditionalExpr->set_result( maybeMutate( conditionalExpr->get_result(), *this ) );
    297316        conditionalExpr->set_arg1( maybeMutate( conditionalExpr->get_arg1(), *this ) );
     
    302321
    303322Expression *Mutator::mutate( CommaExpr *commaExpr ) {
     323        commaExpr->set_env( maybeMutate( commaExpr->get_env(), *this ) );
    304324        commaExpr->set_result( maybeMutate( commaExpr->get_result(), *this ) );
    305325        commaExpr->set_arg1( maybeMutate( commaExpr->get_arg1(), *this ) );
     
    309329
    310330Expression *Mutator::mutate( TypeExpr *typeExpr ) {
     331        typeExpr->set_env( maybeMutate( typeExpr->get_env(), *this ) );
    311332        typeExpr->set_result( maybeMutate( typeExpr->get_result(), *this ) );
    312333        typeExpr->set_type( maybeMutate( typeExpr->get_type(), *this ) );
     
    315336
    316337Expression *Mutator::mutate( AsmExpr *asmExpr ) {
     338        asmExpr->set_env( maybeMutate( asmExpr->get_env(), *this ) );
    317339        asmExpr->set_inout( maybeMutate( asmExpr->get_inout(), *this ) );
    318340        asmExpr->set_constraint( maybeMutate( asmExpr->get_constraint(), *this ) );
     
    322344
    323345Expression* Mutator::mutate( ImplicitCopyCtorExpr *impCpCtorExpr ) {
     346        impCpCtorExpr->set_env( maybeMutate( impCpCtorExpr->get_env(), *this ) );
     347        impCpCtorExpr->set_result( maybeMutate( impCpCtorExpr->get_result(), *this ) );
    324348        impCpCtorExpr->set_callExpr( maybeMutate( impCpCtorExpr->get_callExpr(), *this ) );
    325349        mutateAll( impCpCtorExpr->get_tempDecls(), *this );
     
    330354
    331355Expression* Mutator::mutate( ConstructorExpr *ctorExpr ) {
     356        ctorExpr->set_env( maybeMutate( ctorExpr->get_env(), *this ) );
    332357        ctorExpr->set_result( maybeMutate( ctorExpr->get_result(), *this ) );
    333358        ctorExpr->set_callExpr( maybeMutate( ctorExpr->get_callExpr(), *this ) );
     
    336361
    337362Expression *Mutator::mutate( CompoundLiteralExpr *compLitExpr ) {
     363        compLitExpr->set_env( maybeMutate( compLitExpr->get_env(), *this ) );
    338364        compLitExpr->set_result( maybeMutate( compLitExpr->get_result(), *this ) );
    339365        compLitExpr->set_type( maybeMutate( compLitExpr->get_type(), *this ) );
     
    343369
    344370Expression *Mutator::mutate( UntypedValofExpr *valofExpr ) {
     371        valofExpr->set_env( maybeMutate( valofExpr->get_env(), *this ) );
    345372        valofExpr->set_result( maybeMutate( valofExpr->get_result(), *this ) );
    346373        return valofExpr;
     
    348375
    349376Expression *Mutator::mutate( RangeExpr *rangeExpr ) {
     377        rangeExpr->set_env( maybeMutate( rangeExpr->get_env(), *this ) );
    350378        rangeExpr->set_low( maybeMutate( rangeExpr->get_low(), *this ) );
    351379        rangeExpr->set_high( maybeMutate( rangeExpr->get_high(), *this ) );
     
    353381}
    354382
    355 Expression *Mutator::mutate( TupleExpr *tupleExpr ) {
     383Expression *Mutator::mutate( UntypedTupleExpr *tupleExpr ) {
     384        tupleExpr->set_env( maybeMutate( tupleExpr->get_env(), *this ) );
    356385        tupleExpr->set_result( maybeMutate( tupleExpr->get_result(), *this ) );
    357386        mutateAll( tupleExpr->get_exprs(), *this );
     
    359388}
    360389
     390Expression *Mutator::mutate( TupleExpr *tupleExpr ) {
     391        tupleExpr->set_env( maybeMutate( tupleExpr->get_env(), *this ) );
     392        tupleExpr->set_result( maybeMutate( tupleExpr->get_result(), *this ) );
     393        mutateAll( tupleExpr->get_exprs(), *this );
     394        return tupleExpr;
     395}
     396
    361397Expression *Mutator::mutate( TupleIndexExpr *tupleExpr ) {
     398        tupleExpr->set_env( maybeMutate( tupleExpr->get_env(), *this ) );
    362399        tupleExpr->set_result( maybeMutate( tupleExpr->get_result(), *this ) );
    363400        tupleExpr->set_tuple( maybeMutate( tupleExpr->get_tuple(), *this ) );
     
    366403
    367404Expression *Mutator::mutate( MemberTupleExpr *tupleExpr ) {
     405        tupleExpr->set_env( maybeMutate( tupleExpr->get_env(), *this ) );
    368406        tupleExpr->set_result( maybeMutate( tupleExpr->get_result(), *this ) );
    369407        tupleExpr->set_member( maybeMutate( tupleExpr->get_member(), *this ) );
     
    373411
    374412Expression *Mutator::mutate( TupleAssignExpr *assignExpr ) {
     413        assignExpr->set_env( maybeMutate( assignExpr->get_env(), *this ) );
    375414        assignExpr->set_result( maybeMutate( assignExpr->get_result(), *this ) );
    376415        assignExpr->set_stmtExpr( maybeMutate( assignExpr->get_stmtExpr(), *this ) );
     
    379418
    380419Expression *Mutator::mutate( StmtExpr *stmtExpr ) {
     420        stmtExpr->set_env( maybeMutate( stmtExpr->get_env(), *this ) );
    381421        stmtExpr->set_result( maybeMutate( stmtExpr->get_result(), *this ) );
    382422        stmtExpr->set_statements( maybeMutate( stmtExpr->get_statements(), *this ) );
     
    387427
    388428Expression *Mutator::mutate( UniqueExpr *uniqueExpr ) {
     429        uniqueExpr->set_env( maybeMutate( uniqueExpr->get_env(), *this ) );
    389430        uniqueExpr->set_result( maybeMutate( uniqueExpr->get_result(), *this ) );
    390431        uniqueExpr->set_expr( maybeMutate( uniqueExpr->get_expr(), *this ) );
  • src/SynTree/Mutator.h

    rbb82c03 r2162c2c  
    7878        virtual Expression* mutate( UntypedValofExpr *valofExpr );
    7979        virtual Expression* mutate( RangeExpr *rangeExpr );
     80        virtual Expression* mutate( UntypedTupleExpr *tupleExpr );
    8081        virtual Expression* mutate( TupleExpr *tupleExpr );
    8182        virtual Expression* mutate( TupleIndexExpr *tupleExpr );
  • src/SynTree/Statement.cc

    rbb82c03 r2162c2c  
    388388
    389389std::ostream & operator<<( std::ostream & out, const Statement * statement ) {
    390         statement->print( out );
     390        if ( statement ) {
     391                statement->print( out );
     392        } else {
     393                out << "nullptr";
     394        }
    391395        return out;
    392396}
  • src/SynTree/SynTree.h

    rbb82c03 r2162c2c  
    8383class UntypedValofExpr;
    8484class RangeExpr;
     85class UntypedTupleExpr;
    8586class TupleExpr;
    8687class TupleIndexExpr;
  • src/SynTree/TupleExpr.cc

    rbb82c03 r2162c2c  
    2121#include "VarExprReplacer.h"
    2222
     23UntypedTupleExpr::UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname ) : Expression( _aname ), exprs( exprs ) {
     24}
     25
     26UntypedTupleExpr::UntypedTupleExpr( const UntypedTupleExpr &other ) : Expression( other ) {
     27        cloneAll( other.exprs, exprs );
     28}
     29
     30UntypedTupleExpr::~UntypedTupleExpr() {
     31        deleteAll( exprs );
     32}
     33
     34void UntypedTupleExpr::print( std::ostream &os, int indent ) const {
     35        os << "Untyped Tuple:" << std::endl;
     36        printAll( exprs, os, indent+2 );
     37        Expression::print( os, indent );
     38}
     39
    2340TupleExpr::TupleExpr( const std::list< Expression * > & exprs, Expression *_aname ) : Expression( _aname ), exprs( exprs ) {
    24         if ( ! exprs.empty() ) {
    25                 if ( std::all_of( exprs.begin(), exprs.end(), [](Expression * expr) { return expr->get_result(); } ) ) {
    26                         set_result( Tuples::makeTupleType( exprs ) );
    27                 }
    28         }
     41        set_result( Tuples::makeTupleType( exprs ) );
    2942}
    3043
     
    4558TupleIndexExpr::TupleIndexExpr( Expression * tuple, unsigned int index ) : tuple( tuple ), index( index )  {
    4659        TupleType * type = safe_dynamic_cast< TupleType * >( tuple->get_result() );
    47         assert( type->size() > index );
     60        assertf( type->size() > index, "TupleIndexExpr index out of bounds: tuple size %d, requested index %d in expr %s", type->size(), index, toString( tuple ).c_str() );
    4861        set_result( (*std::next( type->get_types().begin(), index ))->clone() );
    4962        get_result()->set_isLvalue( type->get_isLvalue() );
  • src/SynTree/Type.cc

    rbb82c03 r2162c2c  
    8585
    8686std::ostream & operator<<( std::ostream & out, const Type * type ) {
    87         type->print( out );
     87        if ( type ) {
     88                type->print( out );
     89        } else {
     90                out << "nullptr";
     91        }
    8892        return out;
    8993}
  • src/SynTree/Type.h

    rbb82c03 r2162c2c  
    204204        std::list<DeclarationWithType*> & get_returnVals() { return returnVals; }
    205205        std::list<DeclarationWithType*> & get_parameters() { return parameters; }
    206         bool get_isVarArgs() { return isVarArgs; }
     206        bool get_isVarArgs() const { return isVarArgs; }
    207207        void set_isVarArgs( bool newValue ) { isVarArgs = newValue; }
     208
     209        bool isTtype() const;
    208210
    209211        virtual FunctionType *clone() const { return new FunctionType( *this ); }
  • src/SynTree/TypeDecl.cc

    rbb82c03 r2162c2c  
    1818#include "Common/utility.h"
    1919
    20 TypeDecl::TypeDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *type, Kind kind ) : Parent( name, sc, type ), kind( kind ), sized( kind == Any ) {
     20TypeDecl::TypeDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *type, Kind kind ) : Parent( name, sc, type ), kind( kind ), sized( kind == Any || kind == Ttype ) {
    2121}
    2222
     
    2525
    2626std::string TypeDecl::typeString() const {
    27         static const char *kindNames[] = { "type", "incomplete type", "function type" };
     27        static const char *kindNames[] = { "type", "incomplete type", "function type", "tuple type" };
    2828        return kindNames[ kind ];
    2929}
  • src/SynTree/TypeSubstitution.cc

    rbb82c03 r2162c2c  
    231231}
    232232
     233TypeSubstitution * TypeSubstitution::acceptMutator( Mutator & mutator ) {
     234        for ( auto & p : typeEnv ) {
     235                p.second = maybeMutate( p.second, mutator );
     236        }
     237        for ( auto & p : varEnv ) {
     238                p.second = maybeMutate( p.second, mutator );
     239        }
     240        return this;
     241}
     242
    233243void TypeSubstitution::print( std::ostream &os, int indent ) const {
    234244        os << std::string( indent, ' ' ) << "Types:" << std::endl;
  • src/SynTree/TypeSubstitution.h

    rbb82c03 r2162c2c  
    5353
    5454        void normalize();
     55
     56        TypeSubstitution * acceptMutator( Mutator & mutator );
    5557
    5658        void print( std::ostream &os, int indent = 0 ) const;
  • src/SynTree/Visitor.cc

    rbb82c03 r2162c2c  
    273273
    274274void Visitor::visit( ImplicitCopyCtorExpr *impCpCtorExpr ) {
     275        maybeAccept( impCpCtorExpr->get_result(), *this );
    275276        maybeAccept( impCpCtorExpr->get_callExpr(), *this );
    276277        acceptAll( impCpCtorExpr->get_tempDecls(), *this );
     
    298299        maybeAccept( rangeExpr->get_low(), *this );
    299300        maybeAccept( rangeExpr->get_high(), *this );
     301}
     302
     303void Visitor::visit( UntypedTupleExpr *tupleExpr ) {
     304        maybeAccept( tupleExpr->get_result(), *this );
     305        acceptAll( tupleExpr->get_exprs(), *this );
    300306}
    301307
  • src/SynTree/Visitor.h

    rbb82c03 r2162c2c  
    7878        virtual void visit( UntypedValofExpr *valofExpr );
    7979        virtual void visit( RangeExpr *rangeExpr );
     80        virtual void visit( UntypedTupleExpr *tupleExpr );
    8081        virtual void visit( TupleExpr *tupleExpr );
    8182        virtual void visit( TupleIndexExpr *tupleExpr );
  • src/Tuples/Explode.h

    rbb82c03 r2162c2c  
    3333        /// helper function used by explode
    3434        template< typename OutputIterator >
    35         void explodeUnique( Expression * expr, const ResolvExpr::Alternative & alt, const SymTab::Indexer & indexer, OutputIterator out ) {
     35        void explodeUnique( Expression * expr, const ResolvExpr::Alternative & alt, const SymTab::Indexer & indexer, OutputIterator out, bool isTupleAssign ) {
     36                if ( isTupleAssign ) {
     37                        // tuple assignment needs AddressExprs to be recursively exploded to easily get at all of the components
     38                        if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( expr ) ) {
     39                                ResolvExpr::AltList alts;
     40                                explodeUnique( addrExpr->get_arg(), alt, indexer, back_inserter( alts ), isTupleAssign );
     41                                for ( ResolvExpr::Alternative & alt : alts ) {
     42                                        // distribute '&' over all components
     43                                        alt.expr = distributeAddr( alt.expr );
     44                                        *out++ = alt;
     45                                }
     46                                // in tuple assignment, still need to handle the other cases, but only if not already handled here (don't want to output too many alternatives)
     47                                return;
     48                        }
     49                }
    3650                Type * res = expr->get_result();
    37                 if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( expr ) ) {
    38                         ResolvExpr::AltList alts;
    39                         explodeUnique( addrExpr->get_arg(), alt, indexer, back_inserter( alts ) );
    40                         for ( ResolvExpr::Alternative & alt : alts ) {
    41                                 // distribute '&' over all components
    42                                 alt.expr = distributeAddr( alt.expr );
    43                                 *out++ = alt;
    44                         }
    45                 } else if ( TupleType * tupleType = dynamic_cast< TupleType * > ( res ) ) {
     51                if ( TupleType * tupleType = dynamic_cast< TupleType * > ( res ) ) {
    4652                        if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * >( expr ) ) {
    4753                                // can open tuple expr and dump its exploded components
    4854                                for ( Expression * expr : tupleExpr->get_exprs() ) {
    49                                         explodeUnique( expr, alt, indexer, out );
     55                                        explodeUnique( expr, alt, indexer, out, isTupleAssign );
    5056                                }
    5157                        } else {
     
    5864                                for ( unsigned int i = 0; i < tupleType->size(); i++ ) {
    5965                                        TupleIndexExpr * idx = new TupleIndexExpr( arg->clone(), i );
    60                                         explodeUnique( idx, alt, indexer, out );
     66                                        explodeUnique( idx, alt, indexer, out, isTupleAssign );
    6167                                        delete idx;
    6268                                }
     
    7177        /// expands a tuple-valued alternative into multiple alternatives, each with a non-tuple-type
    7278        template< typename OutputIterator >
    73         void explode( const ResolvExpr::Alternative &alt, const SymTab::Indexer & indexer, OutputIterator out ) {
    74                 explodeUnique( alt.expr, alt, indexer, out );
     79        void explode( const ResolvExpr::Alternative &alt, const SymTab::Indexer & indexer, OutputIterator out, bool isTupleAssign = false ) {
     80                explodeUnique( alt.expr, alt, indexer, out, isTupleAssign );
    7581        }
    7682
    7783        // explode list of alternatives
    7884        template< typename AltIterator, typename OutputIterator >
    79         void explode( AltIterator altBegin, AltIterator altEnd, const SymTab::Indexer & indexer, OutputIterator out ) {
     85        void explode( AltIterator altBegin, AltIterator altEnd, const SymTab::Indexer & indexer, OutputIterator out, bool isTupleAssign = false ) {
    8086                for ( ; altBegin != altEnd; ++altBegin ) {
    81                         explode( *altBegin, indexer, out );
     87                        explode( *altBegin, indexer, out, isTupleAssign );
    8288                }
    8389        }
    8490
    8591        template< typename OutputIterator >
    86         void explode( const ResolvExpr::AltList & alts, const SymTab::Indexer & indexer, OutputIterator out ) {
    87                 explode( alts.begin(), alts.end(), indexer, out );
     92        void explode( const ResolvExpr::AltList & alts, const SymTab::Indexer & indexer, OutputIterator out, bool isTupleAssign = false ) {
     93                explode( alts.begin(), alts.end(), indexer, out, isTupleAssign );
    8894        }
    8995} // namespace Tuples
  • src/Tuples/TupleAssignment.cc

    rbb82c03 r2162c2c  
    7373        };
    7474
    75         /// true if expr is an expression of tuple type, i.e. a tuple expression, tuple variable, or MRV (multiple-return-value) function
     75        /// true if expr is an expression of tuple type
    7676        bool isTuple( Expression *expr ) {
    7777                if ( ! expr ) return false;
    7878                assert( expr->has_result() );
    79                 return dynamic_cast<TupleExpr *>(expr) || expr->get_result()->size() > 1;
     79                return dynamic_cast< TupleType * >( expr->get_result() );
    8080        }
    8181
     
    142142                matcher->match( new_assigns );
    143143
    144                 if ( new_assigns.empty() ) return;
     144                if ( ! matcher->lhs.empty() || ! matcher->rhs.empty() ) {
     145                        // if both lhs and rhs are empty then this is the empty tuple case, wherein it's okay for new_assigns to be empty.
     146                        // if not the empty tuple case, return early so that no new alternatives are generated.
     147                        if ( new_assigns.empty() ) return;
     148                }
    145149                ResolvExpr::AltList current;
    146150                // now resolve new assignments
     
    186190
    187191                // explode the lhs so that each field of the tuple-valued-expr is assigned.
    188                 explode( lhsAlt, spotter.currentFinder.get_indexer(), back_inserter(lhs) );
     192                explode( lhsAlt, spotter.currentFinder.get_indexer(), back_inserter(lhs), true );
    189193
    190194                // and finally, re-add the cast to each lhs expr, so that qualified tuple fields can be constructed
     
    211215        TupleAssignSpotter::MultipleAssignMatcher::MultipleAssignMatcher( TupleAssignSpotter &spotter, const ResolvExpr::AltList & alts ) : Matcher( spotter, alts ) {
    212216                // explode the rhs so that each field of the tuple-valued-expr is assigned.
    213                 explode( std::next(alts.begin(), 1), alts.end(), spotter.currentFinder.get_indexer(), back_inserter(rhs) );
     217                explode( std::next(alts.begin(), 1), alts.end(), spotter.currentFinder.get_indexer(), back_inserter(rhs), true );
    214218        }
    215219
     
    248252                static UniqueName lhsNamer( "__massassign_L" );
    249253                static UniqueName rhsNamer( "__massassign_R" );
    250                 assert ( ! lhs.empty() && rhs.size() <= 1);
     254                // empty tuple case falls into this matcher, hence the second part of the assert
     255                assert( (! lhs.empty() && rhs.size() <= 1) || (lhs.empty() && rhs.empty()) );
    251256
    252257                ObjectDecl * rtmp = rhs.size() == 1 ? newObject( rhsNamer, rhs.front().expr ) : nullptr;
    253258                for ( ResolvExpr::Alternative & lhsAlt : lhs ) {
     259                        // create a temporary object for each value in the lhs and create a call involving the rhs
    254260                        ObjectDecl * ltmp = newObject( lhsNamer, lhsAlt.expr );
    255261                        out.push_back( createFunc( spotter.fname, ltmp, rtmp ) );
     
    263269                static UniqueName rhsNamer( "__multassign_R" );
    264270
    265                 // xxx - need more complicated matching?
    266271                if ( lhs.size() == rhs.size() ) {
     272                        // produce a new temporary object for each value in the lhs and rhs and pairwise create the calls
    267273                        std::list< ObjectDecl * > ltmp;
    268274                        std::list< ObjectDecl * > rtmp;
  • src/Tuples/TupleExpansion.cc

    rbb82c03 r2162c2c  
    144144
    145145        Expression * MemberTupleExpander::mutate( UntypedMemberExpr * memberExpr ) {
    146                 if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * > ( memberExpr->get_member() ) ) {
     146                if ( UntypedTupleExpr * tupleExpr = dynamic_cast< UntypedTupleExpr * > ( memberExpr->get_member() ) ) {
    147147                        Expression * aggr = memberExpr->get_aggregate()->clone()->acceptMutator( *this );
    148148                        // aggregate expressions which might be impure must be wrapped in unique expressions
     
    225225                                decl->get_parameters().push_back( tyParam );
    226226                        }
     227                        if ( tupleType->size() == 0 ) {
     228                                // empty structs are not standard C. Add a dummy field to empty tuples to silence warnings when a compound literal Tuple0 is created.
     229                                decl->get_members().push_back( new ObjectDecl( "dummy", DeclarationNode::NoStorageClass, LinkageSpec::C, nullptr, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nullptr ) );
     230                        }
    227231                        typeMap[mangleName] = decl;
    228232                        addDeclaration( decl );
     
    315319                        qualifiers &= type->get_qualifiers();
    316320                } // for
     321                if ( exprs.empty() ) qualifiers = Type::Qualifiers();
    317322                return tupleType;
     323        }
     324
     325        TypeInstType * isTtype( Type * type ) {
     326                if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( type ) ) {
     327                        if ( inst->get_baseType()->get_kind() == TypeDecl::Ttype ) {
     328                                return inst;
     329                        }
     330                }
     331                return nullptr;
    318332        }
    319333
  • src/Tuples/Tuples.h

    rbb82c03 r2162c2c  
    4242        Type * makeTupleType( const std::list< Expression * > & exprs );
    4343
     44        /// returns a TypeInstType if `type` is a ttype, nullptr otherwise
     45        TypeInstType * isTtype( Type * type );
     46
    4447        /// returns true if the expression may contain side-effects.
    4548        bool maybeImpure( Expression * expr );
  • src/libcfa/math.c

    rbb82c03 r2162c2c  
    1 // 
     1//
    22// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
    33//
    44// The contents of this file are covered under the licence agreement in the
    55// file "LICENCE" distributed with Cforall.
    6 // 
    7 // math.c -- 
    8 // 
     6//
     7// math.c --
     8//
    99// Author           : Peter A. Buhr
    1010// Created On       : Tue Apr 19 22:23:08 2016
     
    1212// Last Modified On : Sun Apr 24 08:52:31 2016
    1313// Update Count     : 75
    14 // 
     14//
    1515
    1616#include "math"
     
    3434long double remainder( long double x, long double y ) { return remainderl( x, y ); }
    3535
    36 // [ int, float ] remquo( float x, float y ) { int quo; x = remquof( x, y, &quo ); return [ quo, x ]; }
     36[ int, float ] remquo( float x, float y ) { int quo; x = remquof( x, y, &quo ); return [ quo, x ]; }
    3737float remquo( float x, float y, int *quo ) { return remquof( x, y, quo ); }
    38 // [ int, double ] remquo( double x, double y ) { int quo; x = remquo( x, y, &quo ); return [ quo, x ]; }
    39 // [ int, long double ] remquo( long double x, long double y ) { int quo; x = remquol( x, y, &quo ); return [ quo, x ]; }
     38[ int, double ] remquo( double x, double y ) { int quo; x = remquo( x, y, &quo ); return [ quo, x ]; }
     39[ int, long double ] remquo( long double x, long double y ) { int quo; x = remquol( x, y, &quo ); return [ quo, x ]; }
    4040long double remquo( long double x, long double y, int *quo ) { return remquol( x, y, quo ); }
    4141
    42 // [ int, float ] div( float x, float y ) { int quo; x = remquof( x, y, &quo ); return [ quo, x ]; }
     42[ int, float ] div( float x, float y ) { int quo; x = remquof( x, y, &quo ); return [ quo, x ]; }
    4343float div( float x, float y, int *quo ) { return remquof( x, y, quo ); }
    44 // [ int, double ] div( double x, double y ) { int quo; x = remquo( x, y, &quo ); return [ quo, x ]; }
    45 // [ int, long double ] div( long double x, long double y ) { int quo; x = remquol( x, y, &quo ); return [ quo, x ]; }
     44[ int, double ] div( double x, double y ) { int quo; x = remquo( x, y, &quo ); return [ quo, x ]; }
     45[ int, long double ] div( long double x, long double y ) { int quo; x = remquol( x, y, &quo ); return [ quo, x ]; }
    4646long double div( long double x, long double y, int *quo ) { return remquol( x, y, quo ); }
    4747
     
    278278long double ldexp( long double x, int exp2 ) { return ldexpl( x, exp2 ); }
    279279
    280 // [ float, float ] modf( float x ) { float i; x = modff( x, &i ); return [ i, x ]; }
     280[ float, float ] modf( float x ) { float i; x = modff( x, &i ); return [ i, x ]; }
    281281float modf( float x, float *i ) { return modff( x, i ); }
    282 // [ double, double ] modf( double x ) { double i; x = modf( x, &i ); return [ i, x ]; }
    283 // [ long double, long double ] modf( long double x ) { long double i; x = modfl( x, &i ); return [ i, x ]; }
     282[ double, double ] modf( double x ) { double i; x = modf( x, &i ); return [ i, x ]; }
     283[ long double, long double ] modf( long double x ) { long double i; x = modfl( x, &i ); return [ i, x ]; }
    284284long double modf( long double x, long double *i ) { return modfl( x, i ); }
    285285
  • src/libcfa/stdlib

    rbb82c03 r2162c2c  
    4747void free( void * ptr );
    4848} // extern "C"
     49
     50forall( otype T, ttype Params | { void ?{}(T *, Params); } ) T * new( Params p );
     51forall( dtype T | { void ^?{}(T *); } ) void delete( T * ptr );
     52
    4953
    5054//---------------------------------------
  • src/libcfa/stdlib.c

    rbb82c03 r2162c2c  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // algorithm.c -- 
     7// algorithm.c --
    88//
    99// Author           : Peter A. Buhr
     
    7878} // posix_memalign
    7979
     80forall( otype T, ttype Params | { void ?{}(T *, Params); } )
     81T * new( Params p ) {
     82        return ((T*)malloc()){ p };
     83}
     84
     85forall( dtype T | { void ^?{}(T *); } )
     86void delete( T * ptr ) {
     87  if ( ptr ) {
     88    ^ptr{};
     89    free( ptr );
     90  }
     91}
     92
    8093//---------------------------------------
    8194
     
    141154        if ( sscanf( ptr, "%Lf%Lfi", &re, &im ) == EOF ) {}
    142155        return re + im * _Complex_I;
    143 }       
     156}
    144157
    145158int strto( const char * sptr, char ** eptr, int base ) {
     
    213226//---------------------------------------
    214227
    215 // forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
    216 // [ T, T ] div( T t1, T t2 ) { return [ t1 / t2, t1 % t2 ]; }
     228forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
     229[ T, T ] div( T t1, T t2 ) { return [ t1 / t2, t1 % t2 ]; }
    217230
    218231//---------------------------------------
  • src/main.cc

    rbb82c03 r2162c2c  
    6969        symtabp = false,
    7070        treep = false,
     71        tuplep = false,
    7172        validp = false,
    7273        errorp = false,
     
    266267                OPTPRINT( "expandUniqueExpr" ); // xxx - is this the right place for this? want to expand ASAP so that subsequent passes don't need to worry about double-visiting a unique expr - needs to go after InitTweak::fix so that copy constructed return declarations are reused
    267268                Tuples::expandUniqueExpr( translationUnit );
     269
     270                OPTPRINT( "convertSpecializations" ) // needs to happen before tuple types are expanded
     271                GenPoly::convertSpecializations( translationUnit );
     272
    268273                OPTPRINT( "expandTuples" ); // xxx - is this the right place for this?
    269274                Tuples::expandTuples( translationUnit );
     275                if ( tuplep ) {
     276                        dump( translationUnit );
     277                        return 0;
     278                }
    270279
    271280                OPTPRINT("instantiateGenerics")
     
    273282                OPTPRINT( "copyParams" );
    274283                GenPoly::copyParams( translationUnit );
    275                 OPTPRINT( "convertSpecializations" )
    276                 GenPoly::convertSpecializations( translationUnit );
    277284                OPTPRINT( "convertLvalue" )
    278285                GenPoly::convertLvalue( translationUnit );
     
    327334
    328335void parse_cmdline( int argc, char * argv[], const char *& filename ) {
    329         enum { Ast, Bbox, Bresolver, CtorInitFix, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, Validate, };
     336        enum { Ast, Bbox, Bresolver, CtorInitFix, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, TupleExpansion, Validate, };
    330337
    331338        static struct option long_opts[] = {
     
    344351                { "symbol", no_argument, 0, Symbol },
    345352                { "tree", no_argument, 0, Tree },
     353                { "tuple-expansion", no_argument, 0, TupleExpansion },
    346354                { "validate", no_argument, 0, Validate },
    347355                { 0, 0, 0, 0 }
     
    352360
    353361        int c;
    354         while ( (c = getopt_long( argc, argv, "abBcefglnpqrstvyzD:F:", long_opts, &long_index )) != -1 ) {
     362        while ( (c = getopt_long( argc, argv, "abBcefglnpqrstTvyzD:F:", long_opts, &long_index )) != -1 ) {
    355363                switch ( c ) {
    356364                  case Ast:
     
    362370                        bresolvep = true;
    363371                        break;
    364                   case 'B':                                                                             // print before resolver steps
     372                  case 'B':                                                                             // print before box steps
    365373                        bboxp = true;
    366374                        break;
     
    408416                  case 't':                                                                             // build in tree
    409417                        treep = true;
     418                        break;
     419                  case TupleExpansion:
     420                  case 'T':                                                                             // print after tuple expansion
     421                        tuplep = true;
    410422                        break;
    411423                  case 'v':                                                                             // dump AST after decl validation pass
  • src/tests/avltree/avl.h

    rbb82c03 r2162c2c  
    1919forall(otype T | Comparable(T))
    2020int ?>?(T t1, T t2);
     21
     22// xxx - unbound type variable problems when trying to use new instead of create
     23// forall( otype T, ttype Params | { void ?{}(T *, Params); } ) T * new( Params p );
    2124
    2225forall(dtype T | { void ^?{}(T *); })
  • src/tests/avltree/avl0.c

    rbb82c03 r2162c2c  
    1010  return t2 < t1;
    1111}
    12 
    13 forall(dtype T | { void ^?{}(T *); })
    14 void delete(T * x) {
    15   if (x) {
    16     ^?{}(x);
    17     free(x);
    18   }
    19 }
Note: See TracChangeset for help on using the changeset viewer.