Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/CodeGen/CodeGenerator.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 15 15:53:15 2016
-// Update Count     : 306
+// Last Modified On : Thu Aug  4 13:35:30 2016
+// Update Count     : 352
 //
 
@@ -45,8 +45,8 @@
 	bool wantSpacing( Statement * stmt) {
 		return dynamic_cast< IfStmt * >( stmt ) || dynamic_cast< CompoundStmt * >( stmt ) ||
-			dynamic_cast< WhileStmt * >( stmt ) || dynamic_cast< ForStmt * > ( stmt ) || dynamic_cast< SwitchStmt *>( stmt );
-	}
-
-	void CodeGenerator::extension( Expression *expr ) {
+			dynamic_cast< WhileStmt * >( stmt ) || dynamic_cast< ForStmt * >( stmt ) || dynamic_cast< SwitchStmt *>( stmt );
+	}
+
+	void CodeGenerator::extension( Expression * expr ) {
 		if ( expr->get_extension() ) {
 			output << "__extension__ ";
@@ -54,5 +54,5 @@
 	} // extension
 
-	void CodeGenerator::extension( Declaration *decl ) {
+	void CodeGenerator::extension( Declaration * decl ) {
 		if ( decl->get_extension() ) {
 			output << "__extension__ ";
@@ -73,5 +73,5 @@
 	}
 
-	ostream & operator<<( ostream & output, CodeGenerator::LabelPrinter &printLabels ) {
+	ostream & operator<<( ostream & output, CodeGenerator::LabelPrinter & printLabels ) {
 		std::list< Label > & labs = *printLabels.labels;
 		// l.unique(); // assumes a sorted list. Why not use set? Does order matter?
@@ -79,21 +79,21 @@
 			output << l.get_name() + ": ";
 			printLabels.cg.genAttributes( l.get_attributes() );
-		}
+		} // for
 		return output;
 	}
 
-	CodeGenerator::CodeGenerator( std::ostream &os ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ) { }
-
-	CodeGenerator::CodeGenerator( std::ostream &os, std::string init, int indentation, bool infunp )
+	CodeGenerator::CodeGenerator( std::ostream & os ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ) {}
+
+	CodeGenerator::CodeGenerator( std::ostream & os, std::string init, int indentation, bool infunp )
 			: indent( *this), cur_indent( indentation ), insideFunction( infunp ), output( os ), printLabels( *this ) {
 		//output << std::string( init );
 	}
 
-	CodeGenerator::CodeGenerator( std::ostream &os, char *init, int indentation, bool infunp )
+	CodeGenerator::CodeGenerator( std::ostream & os, char * init, int indentation, bool infunp )
 			: indent( *this ), cur_indent( indentation ), insideFunction( infunp ), output( os ), printLabels( *this ) {
 		//output << std::string( init );
 	}
 
-	string mangleName( DeclarationWithType *decl ) {
+	string mangleName( DeclarationWithType * decl ) {
 		if ( decl->get_mangleName() != "" ) {
 			// need to incorporate scope level in order to differentiate names for destructors
@@ -112,14 +112,14 @@
 					genCommaList( attr->get_parameters().begin(), attr->get_parameters().end() );
 					output << ")";
-				}
+				} // if
 				output << ",";
-			}
+			} // for
 			output << ")) ";
-		}
+		} // if
 	}
 
 
 	//*** Declarations
-	void CodeGenerator::visit( FunctionDecl *functionDecl ) {
+	void CodeGenerator::visit( FunctionDecl * functionDecl ) {
 		extension( functionDecl );
 		genAttributes( functionDecl->get_attributes() );
@@ -146,6 +146,8 @@
 	}
 
-	void CodeGenerator::visit( ObjectDecl *objectDecl ) {
+	void CodeGenerator::visit( ObjectDecl * objectDecl ) {
 		extension( objectDecl );
+		genAttributes( objectDecl->get_attributes() );
+
 		handleStorageClass( objectDecl );
 		output << genType( objectDecl->get_type(), mangleName( objectDecl ) );
@@ -155,4 +157,5 @@
 			objectDecl->get_init()->accept( *this );
 		} // if
+
 		if ( objectDecl->get_bitfieldWidth() ) {
 			output << ":";
@@ -161,20 +164,20 @@
 	}
 
-	void CodeGenerator::handleAggregate( AggregateDecl *aggDecl ) {
+	void CodeGenerator::handleAggregate( AggregateDecl * aggDecl ) {
 		if ( aggDecl->get_name() != "" )
 			output << aggDecl->get_name();
 
-		std::list< Declaration * > &memb = aggDecl->get_members();
+		std::list< Declaration * > & memb = aggDecl->get_members();
 		if ( ! memb.empty() ) {
 //		if ( aggDecl->has_body() ) {
-//			std::list< Declaration * > &memb = aggDecl->get_members();
+//			std::list< Declaration * > & memb = aggDecl->get_members();
 			output << " {" << endl;
 
 			cur_indent += CodeGenerator::tabsize;
-			for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
+			for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++ ) {
 				output << indent;
 				(*i)->accept( *this );
 				output << ";" << endl;
-			}
+			} // for
 
 			cur_indent -= CodeGenerator::tabsize;
@@ -184,5 +187,5 @@
 	}
 
-	void CodeGenerator::visit( StructDecl *structDecl ) {
+	void CodeGenerator::visit( StructDecl * structDecl ) {
 		extension( structDecl );
 		output << "struct ";
@@ -190,5 +193,5 @@
 	}
 
-	void CodeGenerator::visit( UnionDecl *unionDecl ) {
+	void CodeGenerator::visit( UnionDecl * unionDecl ) {
 		extension( unionDecl );
 		output << "union ";
@@ -196,5 +199,5 @@
 	}
 
-	void CodeGenerator::visit( EnumDecl *enumDecl ) {
+	void CodeGenerator::visit( EnumDecl * enumDecl ) {
 		extension( enumDecl );
 		output << "enum ";
@@ -210,5 +213,5 @@
 			cur_indent += CodeGenerator::tabsize;
 			for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
-				ObjectDecl *obj = dynamic_cast< ObjectDecl* >( *i );
+				ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
 				assert( obj );
 				output << indent << mangleName( obj );
@@ -226,7 +229,7 @@
 	}
 
-	void CodeGenerator::visit( TraitDecl *traitDecl ) {}
-
-	void CodeGenerator::visit( TypedefDecl *typeDecl ) {
+	void CodeGenerator::visit( TraitDecl * traitDecl ) {}
+
+	void CodeGenerator::visit( TypedefDecl * typeDecl ) {
 		assert( false && "Typedefs are removed and substituted in earlier passes." );
 		//output << "typedef ";
@@ -234,5 +237,5 @@
 	}
 
-	void CodeGenerator::visit( TypeDecl *typeDecl ) {
+	void CodeGenerator::visit( TypeDecl * typeDecl ) {
 		// really, we should mutate this into something that isn't a TypeDecl but that requires large-scale changes,
 		// still to be done
@@ -257,34 +260,34 @@
 				(*iter)->accept( *this );
 				output << "]";
-			}
-		}
+			} // if
+		} // for
 		output << " = ";
 	}
 
-	void CodeGenerator::visit( SingleInit *init ) {
+	void CodeGenerator::visit( SingleInit * init ) {
 		printDesignators( init->get_designators() );
 		init->get_value()->accept( *this );
 	}
 
-	void CodeGenerator::visit( ListInit *init ) {
+	void CodeGenerator::visit( ListInit * init ) {
 		printDesignators( init->get_designators() );
 		output << "{ ";
-		if ( init->begin_initializers() == init->end_initializers() ) {
+		if ( init->begin() == init->end() ) {
 			// illegal to leave initializer list empty for scalar initializers, but always legal to have 0
 			output << "0";
 		} else {
-			genCommaList( init->begin_initializers(), init->end_initializers() );
-		}
+			genCommaList( init->begin(), init->end() );
+		} // if
 		output << " }";
 	}
 
-	void CodeGenerator::visit( Constant *constant ) {
+	void CodeGenerator::visit( Constant * constant ) {
 		output << constant->get_value() ;
 	}
 
 	//*** Expressions
-	void CodeGenerator::visit( ApplicationExpr *applicationExpr ) {
+	void CodeGenerator::visit( ApplicationExpr * applicationExpr ) {
 		extension( applicationExpr );
-		if ( VariableExpr *varExpr = dynamic_cast< VariableExpr* >( applicationExpr->get_function() ) ) {
+		if ( VariableExpr * varExpr = dynamic_cast< VariableExpr* >( applicationExpr->get_function() ) ) {
 			OperatorInfo opInfo;
 			if ( varExpr->get_var()->get_linkage() == LinkageSpec::Intrinsic && operatorLookup( varExpr->get_var()->get_name(), opInfo ) ) {
@@ -298,10 +301,10 @@
 					{
 						assert( arg != applicationExpr->get_args().end() );
-						if ( AddressExpr *addrExpr = dynamic_cast< AddressExpr * >( *arg ) ) {
+						if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( *arg ) ) {
 							// remove & from first assignment/ctor argument
 							*arg = addrExpr->get_arg();
 						} else {
 							// no address-of operator, so must be a pointer - add dereference
-							UntypedExpr *newExpr = new UntypedExpr( new NameExpr( "*?" ) );
+							UntypedExpr * newExpr = new UntypedExpr( new NameExpr( "*?" ) );
 							newExpr->get_args().push_back( *arg );
 							assert( (*arg)->get_results().size() == 1 );
@@ -317,5 +320,5 @@
 					// do nothing
 					;
-				}
+				} // switch
 
 				switch ( opInfo.type ) {
@@ -351,5 +354,5 @@
 						// no constructors with 0 or more than 2 parameters
 						assert( false );
-					}
+					} // if
 					break;
 
@@ -385,5 +388,5 @@
 					// there are no intrinsic definitions of 0/1 or label addresses as functions
 					assert( false );
-				}
+				} // switch
 			} else {
 				varExpr->accept( *this );
@@ -400,7 +403,7 @@
 	}
 
-	void CodeGenerator::visit( UntypedExpr *untypedExpr ) {
+	void CodeGenerator::visit( UntypedExpr * untypedExpr ) {
 		extension( untypedExpr );
-		if ( NameExpr *nameExpr = dynamic_cast< NameExpr* >( untypedExpr->get_function() ) ) {
+		if ( NameExpr * nameExpr = dynamic_cast< NameExpr* >( untypedExpr->get_function() ) ) {
 			OperatorInfo opInfo;
 			if ( operatorLookup( nameExpr->get_name(), opInfo ) ) {
@@ -417,5 +420,4 @@
 				  case OT_CALL:
 					assert( false );
-
 
 				  case OT_CTOR:
@@ -437,5 +439,5 @@
 						// no constructors with 0 or more than 2 parameters
 						assert( false );
-					}
+					} // if
 					break;
 
@@ -470,10 +472,17 @@
 					// there are no intrinsic definitions of 0 or 1 as functions
 					assert( false );
-				}
+				} // switch
 			} else {
-				nameExpr->accept( *this );
-				output << "(";
-				genCommaList( untypedExpr->get_args().begin(), untypedExpr->get_args().end() );
-				output << ")";
+				if ( nameExpr->get_name() == "..." ) { // case V1 ... V2 or case V1~V2
+					assert( untypedExpr->get_args().size() == 2 );
+					(*untypedExpr->get_args().begin())->accept( *this );
+					output << " ... ";
+					(*--untypedExpr->get_args().end())->accept( *this );
+				} else {								// builtin routines
+					nameExpr->accept( *this );
+					output << "(";
+					genCommaList( untypedExpr->get_args().begin(), untypedExpr->get_args().end() );
+					output << ")";
+				} // if
 			} // if
 		} else {
@@ -485,5 +494,11 @@
 	}
 
-	void CodeGenerator::visit( NameExpr *nameExpr ) {
+	void CodeGenerator::visit( RangeExpr * rangeExpr ) {
+		rangeExpr->get_low()->accept( *this );
+		output << " ... ";
+		rangeExpr->get_high()->accept( *this );
+	}
+
+	void CodeGenerator::visit( NameExpr * nameExpr ) {
 		extension( nameExpr );
 		OperatorInfo opInfo;
@@ -496,9 +511,9 @@
 	}
 
-	void CodeGenerator::visit( AddressExpr *addressExpr ) {
+	void CodeGenerator::visit( AddressExpr * addressExpr ) {
 		extension( addressExpr );
 		output << "(&";
 		// this hack makes sure that we don't convert "constant_zero" to "0" if we're taking its address
-		if ( VariableExpr *variableExpr = dynamic_cast< VariableExpr* >( addressExpr->get_arg() ) ) {
+		if ( VariableExpr * variableExpr = dynamic_cast< VariableExpr* >( addressExpr->get_arg() ) ) {
 			output << mangleName( variableExpr->get_var() );
 		} else {
@@ -508,5 +523,5 @@
 	}
 
-	void CodeGenerator::visit( CastExpr *castExpr ) {
+	void CodeGenerator::visit( CastExpr * castExpr ) {
 		extension( castExpr );
 		output << "(";
@@ -521,14 +536,14 @@
 			// otherwise, the cast is to an lvalue type, so the cast should be dropped, since the result of a cast is
 			// never an lvalue in C
-		}
+		} // if
 		castExpr->get_arg()->accept( *this );
 		output << ")";
 	}
 
-	void CodeGenerator::visit( UntypedMemberExpr *memberExpr ) {
+	void CodeGenerator::visit( UntypedMemberExpr * memberExpr ) {
 		assert( false );
 	}
 
-	void CodeGenerator::visit( MemberExpr *memberExpr ) {
+	void CodeGenerator::visit( MemberExpr * memberExpr ) {
 		extension( memberExpr );
 		memberExpr->get_aggregate()->accept( *this );
@@ -536,5 +551,5 @@
 	}
 
-	void CodeGenerator::visit( VariableExpr *variableExpr ) {
+	void CodeGenerator::visit( VariableExpr * variableExpr ) {
 		extension( variableExpr );
 		OperatorInfo opInfo;
@@ -546,5 +561,5 @@
 	}
 
-	void CodeGenerator::visit( ConstantExpr *constantExpr ) {
+	void CodeGenerator::visit( ConstantExpr * constantExpr ) {
 		assert( constantExpr->get_constant() );
 		extension( constantExpr );
@@ -552,5 +567,5 @@
 	}
 
-	void CodeGenerator::visit( SizeofExpr *sizeofExpr ) {
+	void CodeGenerator::visit( SizeofExpr * sizeofExpr ) {
 		extension( sizeofExpr );
 		output << "sizeof(";
@@ -563,5 +578,5 @@
 	}
 
-	void CodeGenerator::visit( AlignofExpr *alignofExpr ) {
+	void CodeGenerator::visit( AlignofExpr * alignofExpr ) {
 		// use GCC extension to avoid bumping std to C11
 		extension( alignofExpr );
@@ -575,9 +590,9 @@
 	}
 
-	void CodeGenerator::visit( UntypedOffsetofExpr *offsetofExpr ) {
+	void CodeGenerator::visit( UntypedOffsetofExpr * offsetofExpr ) {
 		assert( false && "UntypedOffsetofExpr should not reach code generation." );
 	}
 
-	void CodeGenerator::visit( OffsetofExpr *offsetofExpr ) {
+	void CodeGenerator::visit( OffsetofExpr * offsetofExpr ) {
 		// use GCC builtin
 		output << "__builtin_offsetof(";
@@ -587,9 +602,9 @@
 	}
 
-	void CodeGenerator::visit( OffsetPackExpr *offsetPackExpr ) {
+	void CodeGenerator::visit( OffsetPackExpr * offsetPackExpr ) {
 		assert( false && "OffsetPackExpr should not reach code generation." );
 	}
 
-	void CodeGenerator::visit( LogicalExpr *logicalExpr ) {
+	void CodeGenerator::visit( LogicalExpr * logicalExpr ) {
 		extension( logicalExpr );
 		output << "(";
@@ -604,5 +619,5 @@
 	}
 
-	void CodeGenerator::visit( ConditionalExpr *conditionalExpr ) {
+	void CodeGenerator::visit( ConditionalExpr * conditionalExpr ) {
 		extension( conditionalExpr );
 		output << "(";
@@ -615,5 +630,5 @@
 	}
 
-	void CodeGenerator::visit( CommaExpr *commaExpr ) {
+	void CodeGenerator::visit( CommaExpr * commaExpr ) {
 		extension( commaExpr );
 		output << "(";
@@ -624,9 +639,9 @@
 	}
 
-	void CodeGenerator::visit( TupleExpr *tupleExpr ) {}
-
-	void CodeGenerator::visit( TypeExpr *typeExpr ) {}
-
-	void CodeGenerator::visit( AsmExpr *asmExpr ) {
+	void CodeGenerator::visit( TupleExpr * tupleExpr ) {}
+
+	void CodeGenerator::visit( TypeExpr * typeExpr ) {}
+
+	void CodeGenerator::visit( AsmExpr * asmExpr ) {
 		if ( asmExpr->get_inout() ) {
 			output << "[ ";
@@ -641,5 +656,5 @@
 
 	//*** Statements
-	void CodeGenerator::visit( CompoundStmt *compoundStmt ) {
+	void CodeGenerator::visit( CompoundStmt * compoundStmt ) {
 		std::list<Statement*> ks = compoundStmt->get_kids();
 		output << "{" << endl;
@@ -654,6 +669,6 @@
 			if ( wantSpacing( *i ) ) {
 				output << endl;
-			}
-		}
+			} // if
+		} // for
 		cur_indent -= CodeGenerator::tabsize;
 
@@ -661,5 +676,5 @@
 	}
 
-	void CodeGenerator::visit( ExprStmt *exprStmt ) {
+	void CodeGenerator::visit( ExprStmt * exprStmt ) {
 		assert( exprStmt );
 		// cast the top-level expression to void to reduce gcc warnings.
@@ -669,5 +684,5 @@
 	}
 
-	void CodeGenerator::visit( AsmStmt *asmStmt ) {
+	void CodeGenerator::visit( AsmStmt * asmStmt ) {
 		output << "asm ";
 		if ( asmStmt->get_voltile() ) output << "volatile ";
@@ -692,5 +707,5 @@
 	}
 
-	void CodeGenerator::visit( IfStmt *ifStmt ) {
+	void CodeGenerator::visit( IfStmt * ifStmt ) {
 		output << "if ( ";
 		ifStmt->get_condition()->accept( *this );
@@ -705,5 +720,5 @@
 	}
 
-	void CodeGenerator::visit( SwitchStmt *switchStmt ) {
+	void CodeGenerator::visit( SwitchStmt * switchStmt ) {
 		output << "switch ( " ;
 		switchStmt->get_condition()->accept( *this );
@@ -712,13 +727,10 @@
 		output << "{" << std::endl;
 		cur_indent += CodeGenerator::tabsize;
-
-		acceptAll( switchStmt->get_branches(), *this );
-
+		acceptAll( switchStmt->get_statements(), *this );
 		cur_indent -= CodeGenerator::tabsize;
-
 		output << indent << "}";
 	}
 
-	void CodeGenerator::visit( CaseStmt *caseStmt ) {
+	void CodeGenerator::visit( CaseStmt * caseStmt ) {
 		output << indent;
 		if ( caseStmt->isDefault()) {
@@ -737,9 +749,9 @@
 			(*i)->accept( *this );
 			output << endl;
-		}
+		} // for
 		cur_indent -= CodeGenerator::tabsize;
 	}
 
-	void CodeGenerator::visit( BranchStmt *branchStmt ) {
+	void CodeGenerator::visit( BranchStmt * branchStmt ) {
 		switch ( branchStmt->get_type()) {
 		  case BranchStmt::Goto:
@@ -759,10 +771,10 @@
 			output << "continue";
 			break;
-		}
+		} // switch
 		output << ";";
 	}
 
 
-	void CodeGenerator::visit( ReturnStmt *returnStmt ) {
+	void CodeGenerator::visit( ReturnStmt * returnStmt ) {
 		output << "return ";
 		maybeAccept( returnStmt->get_expr(), *this );
@@ -770,5 +782,5 @@
 	}
 
-	void CodeGenerator::visit( WhileStmt *whileStmt ) {
+	void CodeGenerator::visit( WhileStmt * whileStmt ) {
 		if ( whileStmt->get_isDoWhile() ) {
 			output << "do" ;
@@ -792,5 +804,5 @@
 	}
 
-	void CodeGenerator::visit( ForStmt *forStmt ) {
+	void CodeGenerator::visit( ForStmt * forStmt ) {
 		// initialization is always hoisted, so don't bother doing anything with that
 		output << "for (;";
@@ -798,5 +810,5 @@
 		if ( forStmt->get_condition() != 0 ) {
 			forStmt->get_condition()->accept( *this );
-		}
+		} // if
 		output << ";";
 
@@ -805,5 +817,5 @@
 			Expression * expr = new CastExpr( forStmt->get_increment() );
 			expr->accept( *this );
-		}
+		} // if
 		output << ") ";
 
@@ -814,10 +826,10 @@
 	}
 
-	void CodeGenerator::visit( NullStmt *nullStmt ) {
+	void CodeGenerator::visit( NullStmt * nullStmt ) {
 		//output << indent << CodeGenerator::printLabels( nullStmt->get_labels() );
 		output << "/* null statement */ ;";
 	}
 
-	void CodeGenerator::visit( DeclStmt *declStmt ) {
+	void CodeGenerator::visit( DeclStmt * declStmt ) {
 		declStmt->get_decl()->accept( *this );
 
@@ -827,5 +839,5 @@
 	}
 
-	void CodeGenerator::handleStorageClass( Declaration *decl ) {
+	void CodeGenerator::handleStorageClass( Declaration * decl ) {
 		switch ( decl->get_storageClass() ) {
 		  case DeclarationNode::Extern:
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/CodeGen/CodeGenerator.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jul  4 17:12:40 2016
-// Update Count     : 34
+// Last Modified On : Thu Aug  4 13:37:07 2016
+// Update Count     : 38
 //
 
@@ -54,4 +54,5 @@
 		virtual void visit( ApplicationExpr *applicationExpr );
 		virtual void visit( UntypedExpr *untypedExpr );
+		virtual void visit( RangeExpr * rangeExpr );
 		virtual void visit( NameExpr *nameExpr );
 		virtual void visit( AddressExpr *addressExpr );
@@ -118,5 +119,5 @@
 		void handleAggregate( AggregateDecl *aggDecl );
 		void handleTypedef( NamedTypeDecl *namedType );
-	};
+	}; // CodeGenerator
 
 	template< class Iterator >
Index: src/ControlStruct/CaseRangeMutator.cc
===================================================================
--- src/ControlStruct/CaseRangeMutator.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ 	(revision )
@@ -1,192 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// CaseRangeMutator.cc -- 
-//
-// Author           : Rodolfo G. Esteves
-// Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:35:13 2016
-// Update Count     : 9
-//
-
-#include <list>
-#include <cassert>
-#include <cstdlib>
-#include <iterator>
-
-#include "Common/utility.h"
-
-#include "SynTree/Statement.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Constant.h"
-#include "SynTree/Type.h"
-#include "CaseRangeMutator.h"
-
-namespace ControlStruct {
-	Statement *CaseRangeMutator::mutate( SwitchStmt *switchStmt ) {
-		std::list< Statement * > &cases = switchStmt->get_branches();
-
-		// a `for' would be more natural... all this contortions are because `replace' invalidates the iterator
-		std::list< Statement * >::iterator i = cases.begin();
-		while ( i != cases.end() ) {
-			(*i )->acceptMutator( *this );
-
-			if ( ! newCaseLabels.empty() ) {
-				std::list< Statement * > newCases;
-
-				// transform( newCaseLabels.begin(), newCaseLabels.end(), bnd1st( ptr_fun( ctor< CaseStmt, Label, Expression * > ) ) );
-
-				for ( std::list< Expression * >::iterator j = newCaseLabels.begin();
-					  j != newCaseLabels.end(); j++ ) {
-					std::list<Label> emptyLabels;
-					std::list< Statement *> emptyStmts;
-					newCases.push_back( new CaseStmt( emptyLabels, *j, emptyStmts ) );
-				} // for
-
-				if ( CaseStmt *currentCase = dynamic_cast< CaseStmt * > ( *i ) )
-					if ( ! currentCase->get_statements().empty() ) {
-						CaseStmt *lastCase = dynamic_cast< CaseStmt * > ( newCases.back() );
-						if ( lastCase == 0 ) { throw ( 0 ); /* FIXME */ } // something is very wrong, as I just made these, and they were all cases
-						// transfer the statement block ( if any ) to the new list:
-						lastCase->set_statements( currentCase->get_statements() );
-					} // if
-				std::list< Statement * >::iterator j = i; advance( j, 1 );
-				replace ( cases, i, newCases );
-				i = j;
-				newCaseLabels.clear();
-			} else
-				i++;
-		} // while
-
-		return switchStmt;
-	}
-
-	Statement *CaseRangeMutator::mutate( CaseStmt *caseStmt ) {
-		UntypedExpr *cond;
-		if ( ( cond = dynamic_cast< UntypedExpr * >( caseStmt->get_condition() )) != 0 ) {
-			NameExpr *nmfunc;
-			if ( ( nmfunc = dynamic_cast< NameExpr *>( cond->get_function() )) != 0 ) {
-				if ( nmfunc->get_name() == std::string("Range") ) {
-					assert( cond->get_args().size() == 2 );
-					std::list<Expression *>::iterator i = cond->get_args().begin();
-					Expression *lo = *i, *hi = *(++i ); // "unnecessary" temporaries
-					fillRange( lo, hi );
-				} // if
-			} // if
-		} else if ( TupleExpr *tcond = dynamic_cast< TupleExpr * >( caseStmt->get_condition() ) ) {
-			// case list
-			assert( ! tcond->get_exprs().empty() );
-			for ( std::list< Expression * >::iterator i = tcond->get_exprs().begin(); i != tcond->get_exprs().end(); i++ )
-				newCaseLabels.push_back( *i ); // do I need to clone them?
-		} // if
-
-		std::list< Statement * > &stmts = caseStmt->get_statements();
-		mutateAll ( stmts, *this );
-
-		return caseStmt;
-	}
-
-	void CaseRangeMutator::fillRange( Expression *lo, Expression *hi ) {
-		// generate the actual range ( and check for consistency )
-		Constant *c_lo, *c_hi;
-		ConstantExpr *ce_lo, *ce_hi;
-		ce_lo = dynamic_cast< ConstantExpr * >( lo );
-		ce_hi = dynamic_cast< ConstantExpr * >( hi );
-
-		if ( ce_lo && ce_hi ) {
-			c_lo = ce_lo->get_constant(); c_hi = ce_hi->get_constant();
-		} /* else {
-			 if ( ! ce_lo ) ;
-			 if ( ! ce_hi ) ;
-			 } */
-		BasicType *ty_lo = dynamic_cast< BasicType * >( c_lo->get_type() ),
-			*ty_hi = dynamic_cast< BasicType * >( c_hi->get_type() );
-	
-		if ( ! ty_lo || ! ty_hi )
-			return; // one of them is not a constant
-
-		switch ( ty_lo->get_kind() ) {
-		  case BasicType::Char:
-		  case BasicType::UnsignedChar:
-			switch ( ty_hi->get_kind() ) {
-			  case BasicType::Char:
-			  case BasicType::UnsignedChar:
-				// first case, they are both printable ASCII characters represented as 'x'
-				if ( c_lo->get_value().size() == 3 && c_hi->get_value().size() == 3 ) {
-					char ch_lo = ( c_lo->get_value())[1], ch_hi = ( c_hi->get_value())[1];
-
-					if ( ch_lo > ch_hi ) { char t=ch_lo; ch_lo=ch_hi; ch_hi=t; }
-
-					for ( char c = ch_lo; c <=  ch_hi; c++ ) {
-						Type::Qualifiers q;
-						Constant cnst( new BasicType( q, BasicType::Char ),
-									   std::string("'") + c + std::string("'") );
-						newCaseLabels.push_back( new ConstantExpr( cnst ) );
-					} // for
-
-					return;
-				} // if
-				break;
-			  default:
-				// error: incompatible constants
-				break;
-			} // switch
-			break;
-		  case BasicType::ShortSignedInt:
-		  case BasicType::ShortUnsignedInt:
-		  case BasicType::SignedInt:
-		  case BasicType::UnsignedInt:
-		  case BasicType::LongSignedInt:
-		  case BasicType::LongUnsignedInt:
-		  case BasicType::LongLongSignedInt:
-		  case BasicType::LongLongUnsignedInt:
-			switch ( ty_hi->get_kind() ) {
-			  case BasicType::ShortSignedInt:
-			  case BasicType::ShortUnsignedInt:
-			  case BasicType::SignedInt:
-			  case BasicType::UnsignedInt:
-			  case BasicType::LongSignedInt:
-			  case BasicType::LongUnsignedInt:
-			  case BasicType::LongLongSignedInt:
-			  case BasicType::LongLongUnsignedInt: {
-				  int i_lo = atoi( c_lo->get_value().c_str()),
-					  i_hi = atoi( c_hi->get_value().c_str());
-
-				  if ( i_lo > i_hi ) { int t=i_lo; i_lo=i_hi; i_hi=t; }
-
-				  for ( int c = i_lo; c <=  i_hi; c++ ) {
-					  Type::Qualifiers q;
-					  Constant cnst( new BasicType( q, ty_hi->get_kind()), // figure can't hurt (used to think in positives)
-									 toString< int >( c ) );
-					  newCaseLabels.push_back( new ConstantExpr( cnst ) );
-				  }
-
-				  return;
-			  }
-			  default:
-				// error: incompatible constants
-				break;
-			}
-			break;
-		  default:
-			break;
-		} // switch
-
-		/* End: */{ 
-			// invalid range, signal a warning (it still generates the two case labels)
-			newCaseLabels.push_back( lo );
-			newCaseLabels.push_back( hi );
-			return;
-		}
-	}
-} // namespace ControlStruct
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/ControlStruct/CaseRangeMutator.h
===================================================================
--- src/ControlStruct/CaseRangeMutator.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ 	(revision )
@@ -1,45 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// CaseRangeMutator.h -- 
-//
-// Author           : Rodolfo G. Esteves
-// Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:35:30 2016
-// Update Count     : 4
-//
-
-#ifndef CASERNG_MUTATOR_H
-#define CASERNG_MUTATOR_H
-
-#include <list>
-
-#include "SynTree/Mutator.h"
-
-namespace ControlStruct {
-	/// expand case ranges and turn fallthru into a null statement
-	class CaseRangeMutator : public Mutator {
-	  public:
-		CaseRangeMutator() {}
-
-		virtual Statement *mutate( SwitchStmt * );
-		virtual Statement *mutate( CaseStmt * );
-	  private:
-		void fillRange( Expression *lo, Expression *hi );
-
-		Expression *currentCondition;
-		std::list< Expression * > newCaseLabels;
-	};
-} // namespace ControlStruct
-
-#endif // CASERNG_MUTATOR_H
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/ControlStruct/MLEMutator.cc
===================================================================
--- src/ControlStruct/MLEMutator.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/ControlStruct/MLEMutator.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:36:51 2016
-// Update Count     : 197
+// Last Modified On : Thu Aug  4 11:21:32 2016
+// Update Count     : 202
 //
 
@@ -128,5 +128,5 @@
 		Label brkLabel = generator->newLabel("switchBreak");
 		enclosingControlStructures.push_back( Entry(switchStmt, brkLabel) );
-		mutateAll( switchStmt->get_branches(), *this );
+		mutateAll( switchStmt->get_statements(), *this );
 
 		Entry &e = enclosingControlStructures.back();
@@ -138,13 +138,13 @@
 			// switch should be CastStmts), append the exit label + break to the last case statement; create a default
 			// case if there are no cases
-			std::list< Statement * > &branches = switchStmt->get_branches();
-			if ( branches.empty() ) {
-				branches.push_back( CaseStmt::makeDefault() );
-			} // if
-
-			if ( CaseStmt * c = dynamic_cast< CaseStmt * >( branches.back() ) ) {
+			std::list< Statement * > &statements = switchStmt->get_statements();
+			if ( statements.empty() ) {
+				statements.push_back( CaseStmt::makeDefault() );
+			} // if
+
+			if ( CaseStmt * c = dynamic_cast< CaseStmt * >( statements.back() ) ) {
 				std::list<Label> temp; temp.push_back( brkLabel );
 				c->get_statements().push_back( new BranchStmt( temp, Label("brkLabel"), BranchStmt::Break ) );
-			} else assert(0); // as of this point, all branches of a switch are still CaseStmts
+			} else assert(0); // as of this point, all statements of a switch are still CaseStmts
 		} // if
 
Index: src/ControlStruct/Mutate.cc
===================================================================
--- src/ControlStruct/Mutate.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/ControlStruct/Mutate.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:37:45 2016
-// Update Count     : 8
+// Last Modified On : Thu Aug  4 11:39:08 2016
+// Update Count     : 9
 //
 
@@ -22,5 +22,4 @@
 #include "LabelFixer.h"
 #include "MLEMutator.h"
-#include "CaseRangeMutator.h"
 #include "ForExprMutator.h"
 #include "LabelTypeChecker.h"
@@ -41,7 +40,4 @@
 		LabelFixer lfix;
 
-		// expand case ranges and turn fallthru into a null statement
-		CaseRangeMutator ranges;
-
 		//ExceptMutator exc;
 		// LabelTypeChecker lbl;
@@ -49,5 +45,4 @@
 		mutateAll( translationUnit, formut );
 		acceptAll( translationUnit, lfix );
-		mutateAll( translationUnit, ranges );
 		//mutateAll( translationUnit, exc );
 		//acceptAll( translationUnit, lbl );
Index: src/ControlStruct/module.mk
===================================================================
--- src/ControlStruct/module.mk	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/ControlStruct/module.mk	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -11,6 +11,6 @@
 ## Created On       : Mon Jun  1 17:49:17 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Tue Jul 12 17:40:31 2016
-## Update Count     : 2
+## Last Modified On : Thu Aug  4 11:38:06 2016
+## Update Count     : 3
 ###############################################################################
 
@@ -18,5 +18,4 @@
 	ControlStruct/LabelFixer.cc \
         ControlStruct/MLEMutator.cc \
-	ControlStruct/CaseRangeMutator.cc \
 	ControlStruct/Mutate.cc \
 	ControlStruct/ForExprMutator.cc \
Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/GenPoly/Box.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -62,91 +62,4 @@
 
 		FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars );
-
-		/// Abstracts type equality for a list of parameter types
-		struct TypeList {
-			TypeList() : params() {}
-			TypeList( const std::list< Type* > &_params ) : params() { cloneAll(_params, params); }
-			TypeList( std::list< Type* > &&_params ) : params( _params ) {}
-
-			TypeList( const TypeList &that ) : params() { cloneAll(that.params, params); }
-			TypeList( TypeList &&that ) : params( std::move( that.params ) ) {}
-
-			/// Extracts types from a list of TypeExpr*
-			TypeList( const std::list< TypeExpr* >& _params ) : params() {
-				for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) {
-					params.push_back( (*param)->get_type()->clone() );
-				}
-			}
-
-			TypeList& operator= ( const TypeList &that ) {
-				deleteAll( params );
-
-				params.clear();
-				cloneAll( that.params, params );
-
-				return *this;
-			}
-
-			TypeList& operator= ( TypeList &&that ) {
-				deleteAll( params );
-
-				params = std::move( that.params );
-
-				return *this;
-			}
-
-			~TypeList() { deleteAll( params ); }
-
-			bool operator== ( const TypeList& that ) const {
-				if ( params.size() != that.params.size() ) return false;
-
-				SymTab::Indexer dummy;
-				for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) {
-					if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false;
-				}
-				return true;
-			}
-
-			std::list< Type* > params;  ///< Instantiation parameters
-		};
-
-		/// Maps a key and a TypeList to the some value, accounting for scope
-		template< typename Key, typename Value >
-		class InstantiationMap {
-			/// Wraps value for a specific (Key, TypeList) combination
-			typedef std::pair< TypeList, Value* > Instantiation;
-			/// List of TypeLists paired with their appropriate values
-			typedef std::vector< Instantiation > ValueList;
-			/// Underlying map type; maps keys to a linear list of corresponding TypeLists and values
-			typedef ScopedMap< Key*, ValueList > InnerMap;
-
-			InnerMap instantiations;  ///< instantiations
-
-		public:
-			/// Starts a new scope
-			void beginScope() { instantiations.beginScope(); }
-
-			/// Ends a scope
-			void endScope() { instantiations.endScope(); }
-
-			/// Gets the value for the (key, typeList) pair, returns NULL on none such.
-			Value *lookup( Key *key, const std::list< TypeExpr* >& params ) const {
- 				TypeList typeList( params );
-
-				// scan scopes for matches to the key
-				for ( typename InnerMap::const_iterator insts = instantiations.find( key ); insts != instantiations.end(); insts = instantiations.findNext( insts, key ) ) {
-					for ( typename ValueList::const_reverse_iterator inst = insts->second.rbegin(); inst != insts->second.rend(); ++inst ) {
-						if ( inst->first == typeList ) return inst->second;
-					}
-				}
-				// no matching instantiations found
-				return 0;
-			}
-
-			/// Adds a value for a (key, typeList) pair to the current scope
-			void insert( Key *key, const std::list< TypeExpr* > &params, Value *value ) {
-				instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) );
-			}
-		};
 
 		/// Adds layout-generation functions to polymorphic types
@@ -191,5 +104,5 @@
 			Type *replaceWithConcrete( ApplicationExpr *appExpr, Type *type, bool doClone = true );
 			/// wraps a function application returning a polymorphic type with a new temporary for the out-parameter return value
-			Expression *addPolyRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *polyType, std::list< Expression *>::iterator &arg );
+			Expression *addDynRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *polyType, std::list< Expression *>::iterator &arg );
 			Expression *applyAdapter( ApplicationExpr *appExpr, FunctionType *function, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars );
 			void boxParam( Type *formal, Expression *&arg, const TyVarMap &exprTyVars );
@@ -237,32 +150,4 @@
 
 			std::map< UniqueId, std::string > adapterName;
-		};
-
-		/// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately
-		class GenericInstantiator : public DeclMutator {
-			/// Map of (generic type, parameter list) pairs to concrete type instantiations
-			InstantiationMap< AggregateDecl, AggregateDecl > instantiations;
-			/// Namer for concrete types
-			UniqueName typeNamer;
-
-		public:
-			GenericInstantiator() : DeclMutator(), instantiations(), typeNamer("_conc_") {}
-
-			virtual Type* mutate( StructInstType *inst );
-			virtual Type* mutate( UnionInstType *inst );
-
-	// 		virtual Expression* mutate( MemberExpr *memberExpr );
-
-			virtual void doBeginScope();
-			virtual void doEndScope();
-		private:
-			/// Wrap instantiation lookup for structs
-			StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); }
-			/// Wrap instantiation lookup for unions
-			UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); }
-			/// Wrap instantiation insertion for structs
-			void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); }
-			/// Wrap instantiation insertion for unions
-			void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }
 		};
 
@@ -354,5 +239,4 @@
 		Pass1 pass1;
 		Pass2 pass2;
-		GenericInstantiator instantiator;
 		PolyGenericCalculator polyCalculator;
 		Pass3 pass3;
@@ -361,5 +245,4 @@
 		mutateTranslationUnit/*All*/( translationUnit, pass1 );
 		mutateTranslationUnit/*All*/( translationUnit, pass2 );
-		instantiator.mutateDeclarationList( translationUnit );
 		mutateTranslationUnit/*All*/( translationUnit, polyCalculator );
 		mutateTranslationUnit/*All*/( translationUnit, pass3 );
@@ -619,5 +502,5 @@
 			return 0;
 		}
-		
+
 		/// Returns T if the given declaration is a function with parameters (T*, T) for some TypeInstType T, NULL otherwise
 		TypeInstType *isTypeInstPtrValFn( DeclarationWithType *decl ) {
@@ -637,5 +520,5 @@
 			return 0;
 		}
-		
+
 		/// Returns T if the given declaration is (*?=?)(T *, T) for some TypeInstType T (return not checked, but maybe should be), NULL otherwise
 		TypeInstType *isTypeInstAssignment( DeclarationWithType *decl ) {
@@ -677,5 +560,5 @@
 			return 0;
 		}
-		
+
 		/// Returns T if the given declaration is a function with parameters (T*, T) for some type T, where neither parameter is cv-qualified,
 		/// NULL otherwise
@@ -772,5 +655,5 @@
 				copyOps.beginScope();
 				dtorOps.beginScope();
-				
+
 				DeclarationWithType *oldRetval = retval;
 				bool oldUseRetval = useRetval;
@@ -778,5 +661,5 @@
 				// process polymorphic return value
 				retval = 0;
-				if ( isPolyRet( functionDecl->get_functionType() ) && functionDecl->get_linkage() == LinkageSpec::Cforall ) {
+				if ( isDynRet( functionDecl->get_functionType() ) && functionDecl->get_linkage() == LinkageSpec::Cforall ) {
 					retval = functionDecl->get_functionType()->get_returnVals().front();
 
@@ -889,5 +772,5 @@
 						arg++;
 					} else {
-						/// xxx - should this be an assertion?
+						// xxx - should this be an assertion?
 						throw SemanticError( "unbound type variable: " + tyParm->first + " in application ", appExpr );
 					} // if
@@ -902,5 +785,5 @@
 			std::list< DeclarationWithType* >::const_iterator fnParm = funcType->get_parameters().begin();
 			std::list< Expression* >::const_iterator fnArg = arg;
-			std::set< std::string > seenTypes; //< names for generic types we've seen
+			std::set< std::string > seenTypes; ///< names for generic types we've seen
 
 			// a polymorphic return type may need to be added to the argument list
@@ -985,7 +868,7 @@
 		}
 
-		Expression *Pass1::addPolyRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *polyType, std::list< Expression *>::iterator &arg ) {
+		Expression *Pass1::addDynRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *dynType, std::list< Expression *>::iterator &arg ) {
 			assert( env );
-			Type *concrete = replaceWithConcrete( appExpr, polyType );
+			Type *concrete = replaceWithConcrete( appExpr, dynType );
 			// add out-parameter for return value
 			return addRetParam( appExpr, function, concrete, arg );
@@ -994,5 +877,6 @@
 		Expression *Pass1::applyAdapter( ApplicationExpr *appExpr, FunctionType *function, std::list< Expression *>::iterator &arg, const TyVarMap &tyVars ) {
 			Expression *ret = appExpr;
-			if ( ! function->get_returnVals().empty() && isPolyType( function->get_returnVals().front()->get_type(), tyVars ) ) {
+//			if ( ! function->get_returnVals().empty() && isPolyType( function->get_returnVals().front()->get_type(), tyVars ) ) {
+			if ( isDynRet( function, tyVars ) ) {
 				ret = addRetParam( appExpr, function, function->get_returnVals().front()->get_type(), arg );
 			} // if
@@ -1042,6 +926,6 @@
 		/// this gets rid of warnings from gcc.
 		void addCast( Expression *&actual, Type *formal, const TyVarMap &tyVars ) {
-			Type * newType = formal->clone();
-			if ( getFunctionType( newType ) ) {
+			if ( getFunctionType( formal ) ) {
+				Type * newType = formal->clone();
 				newType = ScrubTyVars::scrub( newType, tyVars );
 				actual = new CastExpr( actual, newType );
@@ -1085,5 +969,6 @@
 			// actually make the adapter type
 			FunctionType *adapter = adaptee->clone();
-			if ( ! adapter->get_returnVals().empty() && isPolyType( adapter->get_returnVals().front()->get_type(), tyVars ) ) {
+//			if ( ! adapter->get_returnVals().empty() && isPolyType( adapter->get_returnVals().front()->get_type(), tyVars ) ) {
+			if ( isDynRet( adapter, tyVars ) ) {
 				makeRetParm( adapter );
 			} // if
@@ -1147,5 +1032,6 @@
 				addAdapterParams( adapteeApp, arg, param, adapterType->get_parameters().end(), realParam, tyVars );
 				bodyStmt = new ExprStmt( noLabels, adapteeApp );
-			} else if ( isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
+//			} else if ( isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
+			} else if ( isDynType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
 				// return type T
 				if ( (*param)->get_name() == "" ) {
@@ -1394,8 +1280,8 @@
 			TyVarMap exprTyVars( (TypeDecl::Kind)-1 );
 			makeTyVarMap( function, exprTyVars );
-			ReferenceToType *polyRetType = isPolyRet( function );
-
-			if ( polyRetType ) {
-				ret = addPolyRetParam( appExpr, function, polyRetType, arg );
+			ReferenceToType *dynRetType = isDynRet( function, exprTyVars );
+
+			if ( dynRetType ) {
+				ret = addDynRetParam( appExpr, function, dynRetType, arg );
 			} else if ( needsAdapter( function, scopeTyVars ) ) {
 				// std::cerr << "needs adapter: ";
@@ -1407,5 +1293,5 @@
 			arg = appExpr->get_args().begin();
 
-			passTypeVars( appExpr, polyRetType, arg, exprTyVars );
+			passTypeVars( appExpr, dynRetType, arg, exprTyVars );
 			addInferredParams( appExpr, function, arg, exprTyVars );
 
@@ -1471,7 +1357,9 @@
 		VariableExpr *wrapFunctionDecl( DeclarationWithType *functionDecl ) {
 			// line below cloned from FixFunction.cc
+			// xxx - functionObj is never added to a list of declarations...
 			ObjectDecl *functionObj = new ObjectDecl( functionDecl->get_name(), functionDecl->get_storageClass(), functionDecl->get_linkage(), 0,
 			                                          new PointerType( Type::Qualifiers(), functionDecl->get_type()->clone() ), 0 );
 			functionObj->set_mangleName( functionDecl->get_mangleName() );
+			functionObj->set_scopeLevel( functionDecl->get_scopeLevel() );
 			return new VariableExpr( functionObj );
 		}
@@ -1492,5 +1380,5 @@
 					= ParamEntry( assertOp->get_uniqueId(), assertOp->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertOp ) );
 		}
-		
+
 		Statement * Pass1::mutate( ReturnStmt *returnStmt ) {
 			if ( retval && returnStmt->get_expr() ) {
@@ -1554,5 +1442,5 @@
 						DeclarationWithType *assertDtor = findOpForType( formalType, dtorOps, scopedDtorOps );
 						if ( ! assertDtor ) throw SemanticError( "No destructor found for ", formalType );
-						
+
 						// add inferred parameters for otype operators to assignment expression
 						// NOTE: Code here assumes that first four assertions are assign op, ctor, copy ctor, dtor, in that order
@@ -1568,8 +1456,5 @@
 						++actualIt;
 						addAssertionFor( assignExpr, *actualIt, assertDtor );
-						
-						//DeclarationWithType *actualDecl = asserts.front();
-						//assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ]
-						//	= ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) );
+
 					}
 				}
@@ -1695,5 +1580,5 @@
 
 			// move polymorphic return type to parameter list
-			if ( isPolyRet( funcType ) ) {
+			if ( isDynRet( funcType ) ) {
 				DeclarationWithType *ret = funcType->get_returnVals().front();
 				ret->set_type( new PointerType( Type::Qualifiers(), ret->get_type() ) );
@@ -1776,193 +1661,4 @@
 		}
 
-//////////////////////////////////////// GenericInstantiator //////////////////////////////////////////////////
-
-		/// Makes substitutions of params into baseParams; returns true if all parameters substituted for a concrete type
-		bool makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) {
-			bool allConcrete = true;  // will finish the substitution list even if they're not all concrete
-
-			// substitute concrete types for given parameters, and incomplete types for placeholders
-			std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();
-			std::list< Expression* >::const_iterator param = params.begin();
-			for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) {
-	// 			switch ( (*baseParam)->get_kind() ) {
-	// 			case TypeDecl::Any: {   // any type is a valid substitution here; complete types can be used to instantiate generics
-					TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
-					assert(paramType && "Aggregate parameters should be type expressions");
-					out.push_back( paramType->clone() );
-					// check that the substituted type isn't a type variable itself
-					if ( dynamic_cast< TypeInstType* >( paramType->get_type() ) ) {
-						allConcrete = false;
-					}
-	// 				break;
-	// 			}
-	// 			case TypeDecl::Dtype:  // dtype can be consistently replaced with void [only pointers, which become void*]
-	// 				out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
-	// 				break;
-	// 			case TypeDecl::Ftype:  // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]
-	// 				out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
-	// 				break;
-	// 			}
-			}
-
-			// if any parameters left over, not done
-			if ( baseParam != baseParams.end() ) return false;
-	// 		// if not enough parameters given, substitute remaining incomplete types for placeholders
-	// 		for ( ; baseParam != baseParams.end(); ++baseParam ) {
-	// 			switch ( (*baseParam)->get_kind() ) {
-	// 			case TypeDecl::Any:    // no more substitutions here, fail early
-	// 				return false;
-	// 			case TypeDecl::Dtype:  // dtype can be consistently replaced with void [only pointers, which become void*]
-	// 				out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
-	// 				break;
-	// 			case TypeDecl::Ftype:  // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]
-	// 				out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
-	// 				break;
-	// 			}
-	// 		}
-
-			return allConcrete;
-		}
-
-		/// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out
-		void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs,
-								std::list< Declaration* >& out ) {
-			// substitute types into new members
-			TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() );
-			for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) {
-				Declaration *newMember = (*member)->clone();
-				subs.apply(newMember);
-				out.push_back( newMember );
-			}
-		}
-
-		Type* GenericInstantiator::mutate( StructInstType *inst ) {
-			// mutate subtypes
-			Type *mutated = Mutator::mutate( inst );
-			inst = dynamic_cast< StructInstType* >( mutated );
-			if ( ! inst ) return mutated;
-
-			// exit early if no need for further mutation
-			if ( inst->get_parameters().empty() ) return inst;
-			assert( inst->get_baseParameters() && "Base struct has parameters" );
-
-			// check if type can be concretely instantiated; put substitutions into typeSubs
-			std::list< TypeExpr* > typeSubs;
-			if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {
-				deleteAll( typeSubs );
-				return inst;
-			}
-
-			// make concrete instantiation of generic type
-			StructDecl *concDecl = lookup( inst, typeSubs );
-			if ( ! concDecl ) {
-				// set concDecl to new type, insert type declaration into statements to add
-				concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) );
-				substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, 	concDecl->get_members() );
-				DeclMutator::addDeclaration( concDecl );
-				insert( inst, typeSubs, concDecl );
-			}
-			StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() );
-			newInst->set_baseStruct( concDecl );
-
-			deleteAll( typeSubs );
-			delete inst;
-			return newInst;
-		}
-
-		Type* GenericInstantiator::mutate( UnionInstType *inst ) {
-			// mutate subtypes
-			Type *mutated = Mutator::mutate( inst );
-			inst = dynamic_cast< UnionInstType* >( mutated );
-			if ( ! inst ) return mutated;
-
-			// exit early if no need for further mutation
-			if ( inst->get_parameters().empty() ) return inst;
-			assert( inst->get_baseParameters() && "Base union has parameters" );
-
-			// check if type can be concretely instantiated; put substitutions into typeSubs
-			std::list< TypeExpr* > typeSubs;
-			if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {
-				deleteAll( typeSubs );
-				return inst;
-			}
-
-			// make concrete instantiation of generic type
-			UnionDecl *concDecl = lookup( inst, typeSubs );
-			if ( ! concDecl ) {
-				// set concDecl to new type, insert type declaration into statements to add
-				concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) );
-				substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
-				DeclMutator::addDeclaration( concDecl );
-				insert( inst, typeSubs, concDecl );
-			}
-			UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() );
-			newInst->set_baseUnion( concDecl );
-
-			deleteAll( typeSubs );
-			delete inst;
-			return newInst;
-		}
-
-	// 	/// Gets the base struct or union declaration for a member expression; NULL if not applicable
-	// 	AggregateDecl* getMemberBaseDecl( MemberExpr *memberExpr ) {
-	// 		// get variable for member aggregate
-	// 		VariableExpr *varExpr = dynamic_cast< VariableExpr* >( memberExpr->get_aggregate() );
-	// 		if ( ! varExpr ) return NULL;
-	//
-	// 		// get object for variable
-	// 		ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() );
-	// 		if ( ! objectDecl ) return NULL;
-	//
-	// 		// get base declaration from object type
-	// 		Type *objectType = objectDecl->get_type();
-	// 		StructInstType *structType = dynamic_cast< StructInstType* >( objectType );
-	// 		if ( structType ) return structType->get_baseStruct();
-	// 		UnionInstType *unionType = dynamic_cast< UnionInstType* >( objectType );
-	// 		if ( unionType ) return unionType->get_baseUnion();
-	//
-	// 		return NULL;
-	// 	}
-	//
-	// 	/// Finds the declaration with the given name, returning decls.end() if none such
-	// 	std::list< Declaration* >::const_iterator findDeclNamed( const std::list< Declaration* > &decls, const std::string &name ) {
-	// 		for( std::list< Declaration* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) {
-	// 			if ( (*decl)->get_name() == name ) return decl;
-	// 		}
-	// 		return decls.end();
-	// 	}
-	//
-	// 	Expression* Instantiate::mutate( MemberExpr *memberExpr ) {
-	// 		// mutate, exiting early if no longer MemberExpr
-	// 		Expression *expr = Mutator::mutate( memberExpr );
-	// 		memberExpr = dynamic_cast< MemberExpr* >( expr );
-	// 		if ( ! memberExpr ) return expr;
-	//
-	// 		// get declaration of member and base declaration of member, exiting early if not found
-	// 		AggregateDecl *memberBase = getMemberBaseDecl( memberExpr );
-	// 		if ( ! memberBase ) return memberExpr;
-	// 		DeclarationWithType *memberDecl = memberExpr->get_member();
-	// 		std::list< Declaration* >::const_iterator baseIt = findDeclNamed( memberBase->get_members(), memberDecl->get_name() );
-	// 		if ( baseIt == memberBase->get_members().end() ) return memberExpr;
-	// 		DeclarationWithType *baseDecl = dynamic_cast< DeclarationWithType* >( *baseIt );
-	// 		if ( ! baseDecl ) return memberExpr;
-	//
-	// 		// check if stated type of the member is not the type of the member's declaration; if so, need a cast
-	// 		// this *SHOULD* be safe, I don't think anything but the void-replacements I put in for dtypes would make it past the typechecker
-	// 		SymTab::Indexer dummy;
-	// 		if ( ResolvExpr::typesCompatible( memberDecl->get_type(), baseDecl->get_type(), dummy ) ) return memberExpr;
-	// 		else return new CastExpr( memberExpr, memberDecl->get_type() );
-	// 	}
-
-		void GenericInstantiator::doBeginScope() {
-			DeclMutator::doBeginScope();
-			instantiations.beginScope();
-		}
-
-		void GenericInstantiator::doEndScope() {
-			DeclMutator::doEndScope();
-			instantiations.endScope();
-		}
-
 ////////////////////////////////////////// PolyGenericCalculator ////////////////////////////////////////////////////
 
@@ -2108,4 +1804,5 @@
 			findGeneric( objectType ); // ensure layout for this type is available
 
+			// replace member expression with dynamically-computed layout expression
 			Expression *newMemberExpr = 0;
 			if ( StructInstType *structType = dynamic_cast< StructInstType* >( objectType ) ) {
@@ -2181,5 +1878,5 @@
 		bool PolyGenericCalculator::findGeneric( Type *ty ) {
 			ty = replaceTypeInst( ty, env );
-			
+
 			if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) {
 				if ( scopeTyVars.find( typeInst->get_name() ) != scopeTyVars.end() ) {
Index: src/GenPoly/DeclMutator.cc
===================================================================
--- src/GenPoly/DeclMutator.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/GenPoly/DeclMutator.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Fri Nov 27 14:44:00 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:38:46 2016
-// Update Count     : 2
+// Last Modified On : Thu Aug  4 11:16:43 2016
+// Update Count     : 3
 //
 
@@ -163,5 +163,5 @@
 	Statement* DeclMutator::mutate(SwitchStmt *switchStmt) {
 		switchStmt->set_condition( maybeMutate( switchStmt->get_condition(), *this ) );
-		mutateAll( switchStmt->get_branches(), *this );
+		mutateAll( switchStmt->get_statements(), *this );
 		return switchStmt;
 	}
Index: src/GenPoly/DeclMutator.h
===================================================================
--- src/GenPoly/DeclMutator.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/GenPoly/DeclMutator.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -28,7 +28,10 @@
 	class DeclMutator : public Mutator {
 	public:
+		typedef Mutator Parent;
+
 		DeclMutator();
 		virtual ~DeclMutator();
-		
+
+		using Parent::mutate;
 		virtual CompoundStmt* mutate(CompoundStmt *compoundStmt);
 		virtual Statement* mutate(IfStmt *ifStmt);
@@ -42,5 +45,5 @@
 		/// Mutates a list of declarations with this visitor
 		void mutateDeclarationList(std::list< Declaration* >& decls);
-		
+
 		/// Called on entry to a new scope; overriders should call this as a super-class call
 		virtual void doBeginScope();
Index: src/GenPoly/GenPoly.cc
===================================================================
--- src/GenPoly/GenPoly.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/GenPoly/GenPoly.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -23,25 +23,4 @@
 
 namespace GenPoly {
-	bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVars ) {
-		if ( ! adaptee->get_returnVals().empty() && isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
-			return true;
-		} // if
-		for ( std::list< DeclarationWithType* >::const_iterator innerArg = adaptee->get_parameters().begin(); innerArg != adaptee->get_parameters().end(); ++innerArg ) {
-			if ( isPolyType( (*innerArg)->get_type(), tyVars ) ) {
-				return true;
-			} // if
-		} // for
-		return false;
-	}
-
-	ReferenceToType *isPolyRet( FunctionType *function ) {
-		if ( ! function->get_returnVals().empty() ) {
-			TyVarMap forallTypes( (TypeDecl::Kind)-1 );
-			makeTyVarMap( function, forallTypes );
-			return (ReferenceToType*)isPolyType( function->get_returnVals().front()->get_type(), forallTypes );
-		} // if
-		return 0;
-	}
-
 	namespace {
 		/// Checks a parameter list for polymorphic parameters; will substitute according to env if present
@@ -64,4 +43,14 @@
 			return false;
 		}
+
+		/// Checks a parameter list for dynamic-layout parameters from tyVars; will substitute according to env if present
+		bool hasDynParams( std::list< Expression* >& params, const TyVarMap &tyVars, const TypeSubstitution *env ) {
+			for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
+				TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
+				assert(paramType && "Aggregate parameters should be type expressions");
+				if ( isDynType( paramType->get_type(), tyVars, env ) ) return true;
+			}
+			return false;
+		}
 	}
 
@@ -101,4 +90,49 @@
 		}
 		return 0;
+	}
+
+	Type *isDynType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env ) {
+		type = replaceTypeInst( type, env );
+
+		if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( type ) ) {
+			auto var = tyVars.find( typeInst->get_name() );
+			if ( var != tyVars.end() && var->second == TypeDecl::Any ) {
+				return type;
+			}
+		} else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) {
+			if ( hasDynParams( structType->get_parameters(), tyVars, env ) ) return type;
+		} else if ( UnionInstType *unionType = dynamic_cast< UnionInstType* >( type ) ) {
+			if ( hasDynParams( unionType->get_parameters(), tyVars, env ) ) return type;
+		}
+		return 0;
+	}
+
+	ReferenceToType *isDynRet( FunctionType *function, const TyVarMap &forallTypes ) {
+		if ( function->get_returnVals().empty() ) return 0;
+		
+		return (ReferenceToType*)isDynType( function->get_returnVals().front()->get_type(), forallTypes );
+	}
+
+	ReferenceToType *isDynRet( FunctionType *function ) {
+		if ( function->get_returnVals().empty() ) return 0;
+
+		TyVarMap forallTypes( (TypeDecl::Kind)-1 );
+		makeTyVarMap( function, forallTypes );
+		return (ReferenceToType*)isDynType( function->get_returnVals().front()->get_type(), forallTypes );
+	}
+
+	bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVars ) {
+// 		if ( ! adaptee->get_returnVals().empty() && isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
+// 			return true;
+// 		} // if
+		if ( isDynRet( adaptee, tyVars ) ) return true;
+		
+		for ( std::list< DeclarationWithType* >::const_iterator innerArg = adaptee->get_parameters().begin(); innerArg != adaptee->get_parameters().end(); ++innerArg ) {
+// 			if ( isPolyType( (*innerArg)->get_type(), tyVars ) ) {
+			if ( isDynType( (*innerArg)->get_type(), tyVars ) ) {
+				return true;
+			} // if
+		} // for
+		return false;
 	}
 
Index: src/GenPoly/GenPoly.h
===================================================================
--- src/GenPoly/GenPoly.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/GenPoly/GenPoly.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -31,11 +31,4 @@
 namespace GenPoly {
 	typedef ErasableScopedMap< std::string, TypeDecl::Kind > TyVarMap;
-	
-	/// A function needs an adapter if it returns a polymorphic value or if any of its
-	/// parameters have polymorphic type
-	bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVarr );
-
-	/// true iff function has polymorphic return type
-	ReferenceToType *isPolyRet( FunctionType *function );
 
 	/// Replaces a TypeInstType by its referrent in the environment, if applicable
@@ -47,4 +40,16 @@
 	/// returns polymorphic type if is polymorphic type in tyVars, NULL otherwise; will look up substitution in env if provided
 	Type *isPolyType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env = 0 );
+
+	/// returns dynamic-layout type if is dynamic-layout type in tyVars, NULL otherwise; will look up substitution in env if provided
+	Type *isDynType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env = 0 );
+
+	/// true iff function has dynamic-layout return type under the given type variable map
+	ReferenceToType *isDynRet( FunctionType *function, const TyVarMap &tyVars );
+
+	/// true iff function has dynamic-layout return type under the type variable map generated from its forall-parameters
+	ReferenceToType *isDynRet( FunctionType *function );
+
+	/// A function needs an adapter if it returns a dynamic-layout value or if any of its parameters have dynamic-layout type
+	bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVarr );
 
 	/// returns polymorphic type if is pointer to polymorphic type, NULL otherwise; will look up substitution in env if provided
Index: src/GenPoly/InstantiateGeneric.cc
===================================================================
--- src/GenPoly/InstantiateGeneric.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
+++ src/GenPoly/InstantiateGeneric.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -0,0 +1,376 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// InstantiateGeneric.cc --
+//
+// Author           : Aaron B. Moss
+// Created On       : Thu Aug 04 18:33:00 2016
+// Last Modified By : Aaron B. Moss
+// Last Modified On : Thu Aug 04 18:33:00 2016
+// Update Count     : 1
+//
+
+#include <cassert>
+#include <list>
+#include <utility>
+#include <vector>
+
+#include "InstantiateGeneric.h"
+
+#include "DeclMutator.h"
+#include "GenPoly.h"
+#include "ScopedMap.h"
+#include "ScopedSet.h"
+
+#include "ResolvExpr/typeops.h"
+
+#include "SynTree/Declaration.h"
+#include "SynTree/Expression.h"
+#include "SynTree/Type.h"
+
+#include "Common/UniqueName.h"
+#include "Common/utility.h"
+
+namespace GenPoly {
+
+	/// Abstracts type equality for a list of parameter types
+	struct TypeList {
+		TypeList() : params() {}
+		TypeList( const std::list< Type* > &_params ) : params() { cloneAll(_params, params); }
+		TypeList( std::list< Type* > &&_params ) : params( _params ) {}
+
+		TypeList( const TypeList &that ) : params() { cloneAll(that.params, params); }
+		TypeList( TypeList &&that ) : params( std::move( that.params ) ) {}
+
+		/// Extracts types from a list of TypeExpr*
+		TypeList( const std::list< TypeExpr* >& _params ) : params() {
+			for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) {
+				params.push_back( (*param)->get_type()->clone() );
+			}
+		}
+
+		TypeList& operator= ( const TypeList &that ) {
+			deleteAll( params );
+
+			params.clear();
+			cloneAll( that.params, params );
+
+			return *this;
+		}
+
+		TypeList& operator= ( TypeList &&that ) {
+			deleteAll( params );
+
+			params = std::move( that.params );
+
+			return *this;
+		}
+
+		~TypeList() { deleteAll( params ); }
+
+		bool operator== ( const TypeList& that ) const {
+			if ( params.size() != that.params.size() ) return false;
+
+			SymTab::Indexer dummy;
+			for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) {
+				if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false;
+			}
+			return true;
+		}
+
+		std::list< Type* > params;  ///< Instantiation parameters
+	};
+	
+	/// Maps a key and a TypeList to the some value, accounting for scope
+	template< typename Key, typename Value >
+	class InstantiationMap {
+		/// Wraps value for a specific (Key, TypeList) combination
+		typedef std::pair< TypeList, Value* > Instantiation;
+		/// List of TypeLists paired with their appropriate values
+		typedef std::vector< Instantiation > ValueList;
+		/// Underlying map type; maps keys to a linear list of corresponding TypeLists and values
+		typedef ScopedMap< Key*, ValueList > InnerMap;
+
+		InnerMap instantiations;  ///< instantiations
+
+	public:
+		/// Starts a new scope
+		void beginScope() { instantiations.beginScope(); }
+
+		/// Ends a scope
+		void endScope() { instantiations.endScope(); }
+
+		/// Gets the value for the (key, typeList) pair, returns NULL on none such.
+		Value *lookup( Key *key, const std::list< TypeExpr* >& params ) const {
+			TypeList typeList( params );
+
+			// scan scopes for matches to the key
+			for ( typename InnerMap::const_iterator insts = instantiations.find( key ); insts != instantiations.end(); insts = instantiations.findNext( insts, key ) ) {
+				for ( typename ValueList::const_reverse_iterator inst = insts->second.rbegin(); inst != insts->second.rend(); ++inst ) {
+					if ( inst->first == typeList ) return inst->second;
+				}
+			}
+			// no matching instantiations found
+			return 0;
+		}
+
+		/// Adds a value for a (key, typeList) pair to the current scope
+		void insert( Key *key, const std::list< TypeExpr* > &params, Value *value ) {
+			instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) );
+		}
+	};
+
+	/// Possible options for a given specialization of a generic type
+	enum class genericType {
+		dtypeStatic,  ///< Concrete instantiation based solely on {d,f}type-to-void conversions
+		concrete,     ///< Concrete instantiation requiring at least one parameter type
+		dynamic       ///< No concrete instantiation
+	};
+
+	genericType& operator |= ( genericType& gt, const genericType& ht ) {
+		switch ( gt ) {
+		case genericType::dtypeStatic:
+			gt = ht;
+			break;
+		case genericType::concrete:
+			if ( ht == genericType::dynamic ) { gt = genericType::dynamic; }
+			break;
+		case genericType::dynamic:
+			// nothing possible
+			break;
+		}
+		return gt;
+	}
+	
+	/// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately
+	class GenericInstantiator : public DeclMutator {
+		/// Map of (generic type, parameter list) pairs to concrete type instantiations
+		InstantiationMap< AggregateDecl, AggregateDecl > instantiations;
+		/// Set of types which are dtype-only generic (and therefore have static layout)
+		ScopedSet< AggregateDecl* > dtypeStatics;
+		/// Namer for concrete types
+		UniqueName typeNamer;
+
+	public:
+		GenericInstantiator() : DeclMutator(), instantiations(), dtypeStatics(), typeNamer("_conc_") {}
+
+		virtual Type* mutate( StructInstType *inst );
+		virtual Type* mutate( UnionInstType *inst );
+
+		virtual void doBeginScope();
+		virtual void doEndScope();
+	private:
+		/// Wrap instantiation lookup for structs
+		StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); }
+		/// Wrap instantiation lookup for unions
+		UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); }
+		/// Wrap instantiation insertion for structs
+		void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); }
+		/// Wrap instantiation insertion for unions
+		void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }
+
+		/// Strips a dtype-static aggregate decl of its type parameters, marks it as stripped
+		void stripDtypeParams( AggregateDecl *base, std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs );
+	};
+
+	void instantiateGeneric( std::list< Declaration* > &translationUnit ) {
+		GenericInstantiator instantiator;
+		instantiator.mutateDeclarationList( translationUnit );
+	}
+
+	/// Makes substitutions of params into baseParams; returns dtypeStatic if there is a concrete instantiation based only on {d,f}type-to-void conversions,
+	/// concrete if there is a concrete instantiation requiring at least one parameter type, and dynamic if there is no concrete instantiation
+	genericType makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) {
+		genericType gt = genericType::dtypeStatic;
+
+		// substitute concrete types for given parameters, and incomplete types for placeholders
+		std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();
+		std::list< Expression* >::const_iterator param = params.begin();
+		for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) {
+			TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
+			assert(paramType && "Aggregate parameters should be type expressions");
+			
+			switch ( (*baseParam)->get_kind() ) {
+			case TypeDecl::Any: {
+				// substitute parameter for otype; makes the type concrete or dynamic depending on the parameter
+				out.push_back( paramType->clone() );
+				gt |= isPolyType( paramType->get_type() ) ? genericType::dynamic : genericType::concrete;
+				break;
+			}
+			case TypeDecl::Dtype:
+				// can pretend that any dtype is `void`
+				out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
+				break;
+			case TypeDecl::Ftype:
+				// can pretend that any ftype is `void (*)(void)`
+				out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
+				break;
+			}
+		}
+
+		assert( baseParam == baseParams.end() && param == params.end() && "Type parameters should match type variables" );
+		return gt;
+	}
+
+	/// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out
+	void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs,
+							std::list< Declaration* >& out ) {
+		// substitute types into new members
+		TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() );
+		for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) {
+			Declaration *newMember = (*member)->clone();
+			subs.apply(newMember);
+			out.push_back( newMember );
+		}
+	}
+
+	/// Substitutes types of members according to baseParams => typeSubs, working in-place
+	void substituteMembers( std::list< Declaration* >& members, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs ) {
+		// substitute types into new members
+		TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() );
+		for ( std::list< Declaration* >::iterator member = members.begin(); member != members.end(); ++member ) {
+			subs.apply(*member);
+		}
+	}
+
+	/// Strips the instances's type parameters
+	void stripInstParams( ReferenceToType *inst ) {
+		deleteAll( inst->get_parameters() );
+		inst->get_parameters().clear();
+	}
+	
+	void GenericInstantiator::stripDtypeParams( AggregateDecl *base, std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs ) {
+		substituteMembers( base->get_members(), baseParams, typeSubs );
+
+		deleteAll( baseParams );
+		baseParams.clear();
+		
+		dtypeStatics.insert( base );
+	}
+
+	Type* GenericInstantiator::mutate( StructInstType *inst ) {
+		// mutate subtypes
+		Type *mutated = Mutator::mutate( inst );
+		inst = dynamic_cast< StructInstType* >( mutated );
+		if ( ! inst ) return mutated;
+
+		// exit early if no need for further mutation
+		if ( inst->get_parameters().empty() ) return inst;
+
+		// check for an already-instantiatiated dtype-static type
+		if ( dtypeStatics.find( inst->get_baseStruct() ) != dtypeStatics.end() ) {
+			stripInstParams( inst );
+			return inst;
+		}
+		
+		// check if type can be concretely instantiated; put substitutions into typeSubs
+		assert( inst->get_baseParameters() && "Base struct has parameters" );
+		std::list< TypeExpr* > typeSubs;
+		genericType gt = makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs );
+		switch ( gt ) {
+		case genericType::dtypeStatic:
+			stripDtypeParams( inst->get_baseStruct(), *inst->get_baseParameters(), typeSubs );
+			stripInstParams( inst );
+			break;
+		
+		case genericType::concrete: {
+			// make concrete instantiation of generic type
+			StructDecl *concDecl = lookup( inst, typeSubs );
+			if ( ! concDecl ) {
+				// set concDecl to new type, insert type declaration into statements to add
+				concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) );
+				substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, 	concDecl->get_members() );
+				DeclMutator::addDeclaration( concDecl );
+				insert( inst, typeSubs, concDecl );
+			}
+			StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() );
+			newInst->set_baseStruct( concDecl );
+
+			delete inst;
+			inst = newInst;
+			break;
+		}
+
+		case genericType::dynamic:
+			// do nothing
+			break;
+		}
+
+		deleteAll( typeSubs );
+		return inst;
+	}
+
+	Type* GenericInstantiator::mutate( UnionInstType *inst ) {
+		// mutate subtypes
+		Type *mutated = Mutator::mutate( inst );
+		inst = dynamic_cast< UnionInstType* >( mutated );
+		if ( ! inst ) return mutated;
+
+		// exit early if no need for further mutation
+		if ( inst->get_parameters().empty() ) return inst;
+
+		// check for an already-instantiatiated dtype-static type
+		if ( dtypeStatics.find( inst->get_baseUnion() ) != dtypeStatics.end() ) {
+			stripInstParams( inst );
+			return inst;
+		}
+
+		// check if type can be concretely instantiated; put substitutions into typeSubs
+		assert( inst->get_baseParameters() && "Base union has parameters" );
+		std::list< TypeExpr* > typeSubs;
+		genericType gt = makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs );
+		switch ( gt ) {
+		case genericType::dtypeStatic:
+			stripDtypeParams( inst->get_baseUnion(), *inst->get_baseParameters(), typeSubs );
+			stripInstParams( inst );
+			break;
+			
+		case genericType::concrete:
+		{
+			// make concrete instantiation of generic type
+			UnionDecl *concDecl = lookup( inst, typeSubs );
+			if ( ! concDecl ) {
+				// set concDecl to new type, insert type declaration into statements to add
+				concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) );
+				substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
+				DeclMutator::addDeclaration( concDecl );
+				insert( inst, typeSubs, concDecl );
+			}
+			UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() );
+			newInst->set_baseUnion( concDecl );
+
+			delete inst;
+			inst = newInst;
+			break;
+		}
+		case genericType::dynamic:
+			// do nothing
+			break;
+		}
+
+		deleteAll( typeSubs );
+		return inst;
+	}
+
+	void GenericInstantiator::doBeginScope() {
+		DeclMutator::doBeginScope();
+		instantiations.beginScope();
+		dtypeStatics.beginScope();
+	}
+
+	void GenericInstantiator::doEndScope() {
+		DeclMutator::doEndScope();
+		instantiations.endScope();
+		dtypeStatics.endScope();
+	}
+
+} // namespace GenPoly
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/GenPoly/InstantiateGeneric.h
===================================================================
--- src/GenPoly/InstantiateGeneric.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
+++ src/GenPoly/InstantiateGeneric.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -0,0 +1,34 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// InstantiateGeneric.h --
+//
+// Author           : Aaron B. Moss
+// Created On       : Thu Aug 04 18:33:00 2016
+// Last Modified By : Aaron B. Moss
+// Last Modified On : Thu Aug 04 18:33:00 2016
+// Update Count     : 1
+//
+
+#ifndef _INSTANTIATEGENERIC_H
+#define _INSTANTIATEGENERIC_H
+
+#include "SynTree/SynTree.h"
+
+namespace GenPoly {
+	/// Replaces all generic types that have static layout with concrete instantiations.
+	/// Types with concrete values for otype parameters will be template-expanded, while
+	/// dtype and ftype parameters will be replaced by the appropriate void type.
+	void instantiateGeneric( std::list< Declaration* > &translationUnit );
+} // namespace GenPoly
+
+#endif // _INSTANTIATEGENERIC_H
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/GenPoly/PolyMutator.cc
===================================================================
--- src/GenPoly/PolyMutator.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/GenPoly/PolyMutator.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:39:32 2016
-// Update Count     : 12
+// Last Modified On : Thu Aug  4 11:26:22 2016
+// Update Count     : 16
 //
 
@@ -99,5 +99,5 @@
 
 	Statement * PolyMutator::mutate(SwitchStmt *switchStmt) {
-		mutateStatementList( switchStmt->get_branches() );
+		mutateStatementList( switchStmt->get_statements() );
 		switchStmt->set_condition( mutateExpression( switchStmt->get_condition() ) );
 		return switchStmt;
Index: src/GenPoly/ScrubTyVars.cc
===================================================================
--- src/GenPoly/ScrubTyVars.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/GenPoly/ScrubTyVars.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -45,5 +45,5 @@
 
 	Type * ScrubTyVars::mutateAggregateType( Type *ty ) {
-		if ( isPolyType( ty, tyVars ) ) {
+		if ( shouldScrub( ty ) ) {
 			PointerType *ret = new PointerType( Type::Qualifiers(), new VoidType( ty->get_qualifiers() ) );
 			delete ty;
@@ -63,6 +63,6 @@
 	Expression * ScrubTyVars::mutate( SizeofExpr *szeof ) {
 		// sizeof( T ) => _sizeof_T parameter, which is the size of T
-		if ( Type *polyType = isPolyType( szeof->get_type() ) ) {
-			Expression *expr = new NameExpr( sizeofName( mangleType( polyType ) ) );
+		if ( Type *dynType = shouldScrub( szeof->get_type() ) ) {
+			Expression *expr = new NameExpr( sizeofName( mangleType( dynType ) ) );
 			return expr;
 		} else {
@@ -73,6 +73,6 @@
 	Expression * ScrubTyVars::mutate( AlignofExpr *algnof ) {
 		// alignof( T ) => _alignof_T parameter, which is the alignment of T
-		if ( Type *polyType = isPolyType( algnof->get_type() ) ) {
-			Expression *expr = new NameExpr( alignofName( mangleType( polyType ) ) );
+		if ( Type *dynType = shouldScrub( algnof->get_type() ) ) {
+			Expression *expr = new NameExpr( alignofName( mangleType( dynType ) ) );
 			return expr;
 		} else {
@@ -82,6 +82,19 @@
 
 	Type * ScrubTyVars::mutate( PointerType *pointer ) {
-		if ( Type *polyType = isPolyType( pointer->get_base(), tyVars ) ) {
-			Type *ret = polyType->acceptMutator( *this );
+//		// special case of shouldScrub that takes all TypeInstType pointer bases, even if they're not dynamic
+// 		Type *base = pointer->get_base();
+// 		Type *dynType = 0;
+// 		if ( dynamicOnly ) {
+// 			if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( base ) ) {
+// 				if ( tyVars.find( typeInst->get_name() ) != tyVars.end() ) { dynType = typeInst; }
+// 			} else {
+// 				dynType = isDynType( base, tyVars );
+// 			}
+// 		} else {
+// 			dynType = isPolyType( base, tyVars );
+// 		}
+// 		if ( dynType ) {
+		if ( Type *dynType = shouldScrub( pointer->get_base() ) ) {
+			Type *ret = dynType->acceptMutator( *this );
 			ret->get_qualifiers() += pointer->get_qualifiers();
 			pointer->set_base( 0 );
Index: src/GenPoly/ScrubTyVars.h
===================================================================
--- src/GenPoly/ScrubTyVars.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/GenPoly/ScrubTyVars.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -27,5 +27,5 @@
 	class ScrubTyVars : public Mutator {
 	  public:
-		ScrubTyVars( const TyVarMap &tyVars ): tyVars( tyVars ) {}
+		ScrubTyVars( const TyVarMap &tyVars, bool dynamicOnly = false ): tyVars( tyVars ), dynamicOnly( dynamicOnly ) {}
 
 		/// For all polymorphic types with type variables in `tyVars`, replaces generic types, dtypes, and ftypes with the appropriate void type,
@@ -33,4 +33,9 @@
 		template< typename SynTreeClass >
 		static SynTreeClass *scrub( SynTreeClass *target, const TyVarMap &tyVars );
+
+		/// For all dynamic-layout types with type variables in `tyVars`, replaces generic types, dtypes, and ftypes with the appropriate void type,
+		/// and sizeof/alignof expressions with the proper variable
+		template< typename SynTreeClass >
+		static SynTreeClass *scrubDynamic( SynTreeClass *target, const TyVarMap &tyVars );
 
 		virtual Type* mutate( TypeInstType *typeInst );
@@ -42,14 +47,32 @@
 
 	  private:
+		/// Returns the type if it should be scrubbed, NULL otherwise.
+		Type* shouldScrub( Type *ty ) {
+			return dynamicOnly ? isDynType( ty, tyVars ) : isPolyType( ty, tyVars );
+// 			if ( ! dynamicOnly ) return isPolyType( ty, tyVars );
+// 
+// 			if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) {
+// 				return tyVars.find( typeInst->get_name() ) != tyVars.end() ? ty : 0;
+// 			}
+// 
+// 			return isDynType( ty, tyVars );
+		}
+		
 		/// Mutates (possibly generic) aggregate types appropriately
 		Type* mutateAggregateType( Type *ty );
 		
-		const TyVarMap &tyVars;
+		const TyVarMap &tyVars;  ///< Type variables to scrub
+		bool dynamicOnly;        ///< only scrub the types with dynamic layout? [false]
 	};
 
-	/* static class method */
 	template< typename SynTreeClass >
 	SynTreeClass * ScrubTyVars::scrub( SynTreeClass *target, const TyVarMap &tyVars ) {
 		ScrubTyVars scrubber( tyVars );
+		return static_cast< SynTreeClass * >( target->acceptMutator( scrubber ) );
+	}
+
+	template< typename SynTreeClass >
+	SynTreeClass * ScrubTyVars::scrubDynamic( SynTreeClass *target, const TyVarMap &tyVars ) {
+		ScrubTyVars scrubber( tyVars, true );
 		return static_cast< SynTreeClass * >( target->acceptMutator( scrubber ) );
 	}
Index: src/GenPoly/Specialize.cc
===================================================================
--- src/GenPoly/Specialize.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/GenPoly/Specialize.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -31,4 +31,5 @@
 #include "Common/UniqueName.h"
 #include "Common/utility.h"
+#include "InitTweak/InitTweak.h"
 
 namespace GenPoly {
@@ -184,10 +185,13 @@
 		mutateAll( appExpr->get_args(), *this );
 
-		// create thunks for the inferred parameters
-		for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) {
-			inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() );
-		}
-
-		handleExplicitParams( appExpr );
+		if ( ! InitTweak::isIntrinsicCallExpr( appExpr ) ) {
+			// create thunks for the inferred parameters
+			// don't need to do this for intrinsic calls, because they aren't actually passed
+			for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) {
+				inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() );
+			}
+
+			handleExplicitParams( appExpr );
+		}
 
 		return appExpr;
Index: src/GenPoly/module.mk
===================================================================
--- src/GenPoly/module.mk	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/GenPoly/module.mk	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -23,3 +23,4 @@
        GenPoly/CopyParams.cc \
        GenPoly/FindFunction.cc \
-       GenPoly/DeclMutator.cc
+       GenPoly/DeclMutator.cc \
+       GenPoly/InstantiateGeneric.cc
Index: src/InitTweak/FixGlobalInit.cc
===================================================================
--- src/InitTweak/FixGlobalInit.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/InitTweak/FixGlobalInit.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -46,47 +46,4 @@
 		FunctionDecl * destroyFunction;
 	};
-
-	class ConstExprChecker : public Visitor {
-	public:
-		ConstExprChecker() : isConstExpr( true ) {}
-
-		virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; }
-		virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; }
-		virtual void visit( NameExpr *nameExpr ) { isConstExpr = false; }
-		virtual void visit( CastExpr *castExpr ) { isConstExpr = false; }
-		virtual void visit( LabelAddressExpr *labAddressExpr ) { isConstExpr = false; }
-		virtual void visit( UntypedMemberExpr *memberExpr ) { isConstExpr = false; }
-		virtual void visit( MemberExpr *memberExpr ) { isConstExpr = false; }
-		virtual void visit( VariableExpr *variableExpr ) { isConstExpr = false; }
-		virtual void visit( ConstantExpr *constantExpr ) { /* bottom out */ }
-		// these might be okay?
-		// virtual void visit( SizeofExpr *sizeofExpr );
-		// virtual void visit( AlignofExpr *alignofExpr );
-		// virtual void visit( UntypedOffsetofExpr *offsetofExpr );
-		// virtual void visit( OffsetofExpr *offsetofExpr );
-		// virtual void visit( OffsetPackExpr *offsetPackExpr );
-		// virtual void visit( AttrExpr *attrExpr );
-		// virtual void visit( CommaExpr *commaExpr );
-		// virtual void visit( LogicalExpr *logicalExpr );
-		// virtual void visit( ConditionalExpr *conditionalExpr );
-		virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }
-		virtual void visit( SolvedTupleExpr *tupleExpr ) { isConstExpr = false; }
-		virtual void visit( TypeExpr *typeExpr ) { isConstExpr = false; }
-		virtual void visit( AsmExpr *asmExpr ) { isConstExpr = false; }
-		virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }
-		virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }
-
-		bool isConstExpr;
-	};
-
-	bool isConstExpr( Initializer * init ) {
-		if ( init ) {
-			ConstExprChecker checker;
-			init->accept( checker );
-			return checker.isConstExpr;
-		} // if
-		// for all intents and purposes, no initializer means const expr
-		return true;
-	}
 
 	void fixGlobalInit( std::list< Declaration * > & translationUnit, const std::string & name, bool inLibrary ) {
@@ -140,6 +97,4 @@
 		std::list< Statement * > & destroyStatements = destroyFunction->get_statements()->get_kids();
 
-		if ( ! tryConstruct( objDecl ) ) return; // don't construct @= or designated objects
-		if ( objDecl->get_storageClass() == DeclarationNode::Extern ) return;
 		// C allows you to initialize objects with constant expressions
 		// xxx - this is an optimization. Need to first resolve constructors before we decide
@@ -147,22 +102,27 @@
 		// if ( isConstExpr( objDecl->get_init() ) ) return;
 
-		if ( dynamic_cast< ArrayType * > ( objDecl->get_type() ) ) {
-			// xxx - initialize each element of the array
-		} else {
-			// steal initializer from object and attach it to a new temporary
-			ObjectDecl *newObj = new ObjectDecl( tempNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, 0, objDecl->get_type()->clone(), objDecl->get_init() );
-			objDecl->set_init( NULL );
-			initStatements.push_back( new DeclStmt( noLabels, newObj ) );
+		if ( ConstructorInit * ctorInit = dynamic_cast< ConstructorInit * >( objDecl->get_init() ) ) {
+			// a decision should have been made by the resolver, so ctor and init are not both non-NULL
+			assert( ! ctorInit->get_ctor() || ! ctorInit->get_init() );
 
-			// copy construct objDecl using temporary
-			UntypedExpr * init = new UntypedExpr( new NameExpr( "?{}" ) );
-			init->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) );
-			init->get_args().push_back( new VariableExpr( newObj ) );
-			initStatements.push_back( new ImplicitCtorDtorStmt( new ExprStmt( noLabels, init ) ) );
-
-			// add destructor calls to global destroy function
-			UntypedExpr * destroy = new UntypedExpr( new NameExpr( "^?{}" ) );
-			destroy->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) );
-			destroyStatements.push_front( new ImplicitCtorDtorStmt( new ExprStmt( noLabels, destroy ) ) );
+			Statement * dtor = ctorInit->get_dtor();
+			if ( dtor && ! isIntrinsicSingleArgCallStmt( dtor ) ) {
+				// don't need to call intrinsic dtor, because it does nothing, but
+				// non-intrinsic dtors must be called
+				destroyStatements.push_front( dtor );
+				ctorInit->set_dtor( NULL );
+			} // if
+			if ( Statement * ctor = ctorInit->get_ctor() ) {
+				initStatements.push_back( ctor );
+				objDecl->set_init( NULL );
+				ctorInit->set_ctor( NULL );
+			} else if ( Initializer * init = ctorInit->get_init() ) {
+				objDecl->set_init( init );
+				ctorInit->set_init( NULL );
+			} else {
+				// no constructor and no initializer, which is okay
+				objDecl->set_init( NULL );
+			} // if
+			delete ctorInit;
 		} // if
 	}
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/InitTweak/FixInit.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -18,6 +18,7 @@
 #include <iterator>
 #include <algorithm>
+#include "InitTweak.h"
 #include "FixInit.h"
-#include "InitTweak.h"
+#include "FixGlobalInit.h"
 #include "ResolvExpr/Resolver.h"
 #include "ResolvExpr/typeops.h"
@@ -25,4 +26,5 @@
 #include "SynTree/Type.h"
 #include "SynTree/Expression.h"
+#include "SynTree/Attribute.h"
 #include "SynTree/Statement.h"
 #include "SynTree/Initializer.h"
@@ -83,4 +85,5 @@
 		};
 
+		// debug
 		struct printSet {
 			typedef ObjDeclCollector::ObjectSet ObjectSet;
@@ -159,4 +162,6 @@
 
 			virtual DeclarationWithType * mutate( ObjectDecl *objDecl );
+
+			std::list< Declaration * > staticDtorDecls;
 		};
 
@@ -171,5 +176,8 @@
 	} // namespace
 
-	void fix( std::list< Declaration * > & translationUnit ) {
+	void fix( std::list< Declaration * > & translationUnit, const std::string & filename, bool inLibrary ) {
+		// fixes ConstructorInit for global variables. should happen before fixInitializers.
+		InitTweak::fixGlobalInit( translationUnit, filename, inLibrary );
+
 		InsertImplicitCalls::insert( translationUnit );
 		ResolveCopyCtors::resolveImplicitCalls( translationUnit );
@@ -194,5 +202,19 @@
 		void FixInit::fixInitializers( std::list< Declaration * > & translationUnit ) {
 			FixInit fixer;
-			mutateAll( translationUnit, fixer );
+
+			// can't use mutateAll, because need to insert declarations at top-level
+			// can't use DeclMutator, because sometimes need to insert IfStmt, etc.
+			SemanticError errors;
+			for ( std::list< Declaration * >::iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) {
+				try {
+					*i = maybeMutate( *i, fixer );
+					translationUnit.splice( i, fixer.staticDtorDecls );
+				} catch( SemanticError &e ) {
+					errors.append( e );
+				} // try
+			} // for
+			if ( ! errors.isEmpty() ) {
+				throw errors;
+			} // if
 		}
 
@@ -422,16 +444,27 @@
 				if ( Statement * ctor = ctorInit->get_ctor() ) {
 					if ( objDecl->get_storageClass() == DeclarationNode::Static ) {
+						// originally wanted to take advantage of gcc nested functions, but
+						// we get memory errors with this approach. To remedy this, the static
+						// variable is hoisted when the destructor needs to be called.
+						//
 						// generate:
-						// static bool __objName_uninitialized = true;
-						// if (__objName_uninitialized) {
-						//   __ctor(__objName);
-						//   void dtor_atexit() {
-						//     __dtor(__objName);
+						// static T __objName_static_varN;
+						// void __objName_dtor_atexitN() {
+						//   __dtor__...;
+						// }
+						// int f(...) {
+						//   ...
+						//   static bool __objName_uninitialized = true;
+						//   if (__objName_uninitialized) {
+						//     __ctor(__objName);
+						//     __objName_uninitialized = false;
+						//     atexit(__objName_dtor_atexitN);
 						//   }
-						//   on_exit(dtorOnExit, &__objName);
-						//   __objName_uninitialized = false;
+						//   ...
 						// }
 
-						// generate first line
+						static UniqueName dtorCallerNamer( "_dtor_atexit" );
+
+						// static bool __objName_uninitialized = true
 						BasicType * boolType = new BasicType( Type::Qualifiers(), BasicType::Bool );
 						SingleInit * boolInitExpr = new SingleInit( new ConstantExpr( Constant( boolType->clone(), "1" ) ), noDesignators );
@@ -439,13 +472,4 @@
 						isUninitializedVar->fixUniqueId();
 
-						// void dtor_atexit(...) {...}
-						FunctionDecl * dtorCaller = new FunctionDecl( objDecl->get_mangleName() + "_dtor_atexit", DeclarationNode::NoStorageClass, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ), false, false );
-						dtorCaller->fixUniqueId();
-						dtorCaller->get_statements()->get_kids().push_back( ctorInit->get_dtor()->clone() );
-
-						// on_exit(dtor_atexit);
-						UntypedExpr * callAtexit = new UntypedExpr( new NameExpr( "atexit" ) );
-						callAtexit->get_args().push_back( new VariableExpr( dtorCaller ) );
-
 						// __objName_uninitialized = false;
 						UntypedExpr * setTrue = new UntypedExpr( new NameExpr( "?=?" ) );
@@ -457,6 +481,4 @@
 						std::list< Statement * > & body = initStmts->get_kids();
 						body.push_back( ctor );
-						body.push_back( new DeclStmt( noLabels, dtorCaller ) );
-						body.push_back( new ExprStmt( noLabels, callAtexit ) );
 						body.push_back( new ExprStmt( noLabels, setTrue ) );
 
@@ -465,4 +487,43 @@
 						stmtsToAddAfter.push_back( new DeclStmt( noLabels, isUninitializedVar ) );
 						stmtsToAddAfter.push_back( ifStmt );
+
+						if ( ctorInit->get_dtor() ) {
+							// if the object has a non-trivial destructor, have to
+							// hoist it and the object into the global space and
+							// call the destructor function with atexit.
+
+							Statement * dtorStmt = ctorInit->get_dtor()->clone();
+
+							// void __objName_dtor_atexitN(...) {...}
+							FunctionDecl * dtorCaller = new FunctionDecl( objDecl->get_mangleName() + dtorCallerNamer.newName(), DeclarationNode::Static, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ), false, false );
+							dtorCaller->fixUniqueId();
+							dtorCaller->get_statements()->get_kids().push_back( dtorStmt );
+
+							// atexit(dtor_atexit);
+							UntypedExpr * callAtexit = new UntypedExpr( new NameExpr( "atexit" ) );
+							callAtexit->get_args().push_back( new VariableExpr( dtorCaller ) );
+
+							body.push_back( new ExprStmt( noLabels, callAtexit ) );
+
+							// hoist variable and dtor caller decls to list of decls that will be added into global scope
+							staticDtorDecls.push_back( objDecl );
+							staticDtorDecls.push_back( dtorCaller );
+
+							// need to rename object uniquely since it now appears
+							// at global scope and there could be multiple function-scoped
+							// static variables with the same name in different functions.
+							static UniqueName staticNamer( "_static_var" );
+							objDecl->set_mangleName( objDecl->get_mangleName() + staticNamer.newName() );
+
+							objDecl->set_init( NULL );
+							ctorInit->set_ctor( NULL );
+							delete ctorInit;
+
+							// xxx - temporary hack: need to return a declaration, but want to hoist the current object out of this scope
+							// create a new object which is never used
+							static UniqueName dummyNamer( "_dummy" );
+							ObjectDecl * dummy = new ObjectDecl( dummyNamer.newName(), DeclarationNode::Static, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new VoidType( Type::Qualifiers() ) ), 0, std::list< Attribute * >{ new Attribute("unused") } );
+							return dummy;
+						}
 					} else {
 						stmtsToAddAfter.push_back( ctor );
@@ -524,5 +585,5 @@
 					assert( ! ctorInit->get_ctor() || ! ctorInit->get_init() );
 					Statement * dtor = ctorInit->get_dtor();
-					if ( dtor && ! isInstrinsicSingleArgCallStmt( dtor ) ) {
+					if ( dtor && ! isIntrinsicSingleArgCallStmt( dtor ) ) {
 						// don't need to call intrinsic dtor, because it does nothing, but
 						// non-intrinsic dtors must be called
Index: src/InitTweak/FixInit.h
===================================================================
--- src/InitTweak/FixInit.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/InitTweak/FixInit.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -27,5 +27,5 @@
   /// replace constructor initializers with expression statements
   /// and unwrap basic C-style initializers
-	void fix( std::list< Declaration * > & translationUnit );
+	void fix( std::list< Declaration * > & translationUnit, const std::string & name, bool inLibrary );
 } // namespace
 
Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/InitTweak/GenInit.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -26,4 +26,5 @@
 #include "SymTab/Autogen.h"
 #include "GenPoly/PolyMutator.h"
+#include "GenPoly/DeclMutator.h"
 
 namespace InitTweak {
@@ -55,28 +56,57 @@
 	  public:
 		/// create constructor and destructor statements for object declarations.
-		/// Destructors are inserted directly into the code, whereas constructors
-		/// will be added in after the resolver has run so that the initializer expression
-		/// is only removed if a constructor is found
+		/// the actual call statements will be added in after the resolver has run
+		/// so that the initializer expression is only removed if a constructor is found
+		/// and the same destructor call is inserted in all of the appropriate locations.
 		static void generateCtorDtor( std::list< Declaration * > &translationUnit );
-
-		CtorDtor() : inFunction( false ) {}
 
 		virtual DeclarationWithType * mutate( ObjectDecl * );
 		virtual DeclarationWithType * mutate( FunctionDecl *functionDecl );
-		virtual Declaration* mutate( StructDecl *aggregateDecl );
-		virtual Declaration* mutate( UnionDecl *aggregateDecl );
-		virtual Declaration* mutate( EnumDecl *aggregateDecl );
-		virtual Declaration* mutate( TraitDecl *aggregateDecl );
-		virtual TypeDecl* mutate( TypeDecl *typeDecl );
-		virtual Declaration* mutate( TypedefDecl *typeDecl );
-
-		virtual Type * mutate( FunctionType *funcType );
+		// should not traverse into any of these declarations to find objects
+		// that need to be constructed or destructed
+		virtual Declaration* mutate( StructDecl *aggregateDecl ) { return aggregateDecl; }
+		virtual Declaration* mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; }
+		virtual Declaration* mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; }
+		virtual Declaration* mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; }
+		virtual TypeDecl* mutate( TypeDecl *typeDecl ) { return typeDecl; }
+		virtual Declaration* mutate( TypedefDecl *typeDecl ) { return typeDecl; }
+
+		virtual Type * mutate( FunctionType *funcType ) { return funcType; }
 
 	  protected:
-		bool inFunction;
+	};
+
+	class HoistArrayDimension : public GenPoly::DeclMutator {
+	  public:
+		typedef GenPoly::DeclMutator Parent;
+
+		/// hoist dimension from array types in object declaration so that it uses a single
+		/// const variable of type size_t, so that side effecting array dimensions are only
+		/// computed once.
+		static void hoistArrayDimension( std::list< Declaration * > & translationUnit );
+
+	  private:
+		virtual DeclarationWithType * mutate( ObjectDecl * objectDecl );
+		virtual DeclarationWithType * mutate( FunctionDecl *functionDecl );
+		// should not traverse into any of these declarations to find objects
+		// that need to be constructed or destructed
+		virtual Declaration* mutate( StructDecl *aggregateDecl ) { return aggregateDecl; }
+		virtual Declaration* mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; }
+		virtual Declaration* mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; }
+		virtual Declaration* mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; }
+		virtual TypeDecl* mutate( TypeDecl *typeDecl ) { return typeDecl; }
+		virtual Declaration* mutate( TypedefDecl *typeDecl ) { return typeDecl; }
+
+		virtual Type* mutate( FunctionType *funcType ) { return funcType; }
+
+		void hoist( Type * type );
+
+		DeclarationNode::StorageClass storageclass = DeclarationNode::NoStorageClass;
+		bool inFunction = false;
 	};
 
 	void genInit( std::list< Declaration * > & translationUnit ) {
 		ReturnFixer::makeReturnTemp( translationUnit );
+		HoistArrayDimension::hoistArrayDimension( translationUnit );
 		CtorDtor::generateCtorDtor( translationUnit );
 	}
@@ -124,4 +154,53 @@
 	}
 
+	// precompute array dimension expression, because constructor generation may duplicate it,
+	// which would be incorrect if it is a side-effecting computation.
+	void HoistArrayDimension::hoistArrayDimension( std::list< Declaration * > & translationUnit ) {
+		HoistArrayDimension hoister;
+		hoister.mutateDeclarationList( translationUnit );
+	}
+
+	DeclarationWithType * HoistArrayDimension::mutate( ObjectDecl * objectDecl ) {
+		storageclass = objectDecl->get_storageClass();
+		DeclarationWithType * temp = Parent::mutate( objectDecl );
+		hoist( objectDecl->get_type() );
+		storageclass = DeclarationNode::NoStorageClass;
+		return temp;
+	}
+
+	void HoistArrayDimension::hoist( Type * type ) {
+		// if in function, generate const size_t var
+		static UniqueName dimensionName( "_array_dim" );
+
+		// C doesn't allow variable sized arrays at global scope or for static variables,
+		// so don't hoist dimension.
+		if ( ! inFunction ) return;
+		if ( storageclass == DeclarationNode::Static ) return;
+
+		if ( ArrayType * arrayType = dynamic_cast< ArrayType * >( type ) ) {
+			if ( ! arrayType->get_dimension() ) return; // xxx - recursive call to hoist?
+
+			// don't need to hoist dimension if it's a constexpr - only need to if there's potential
+			// for side effects.
+			if ( isConstExpr( arrayType->get_dimension() ) ) return;
+
+			ObjectDecl * arrayDimension = new ObjectDecl( dimensionName.newName(), storageclass, LinkageSpec::C, 0, SymTab::SizeType->clone(), new SingleInit( arrayType->get_dimension() ) );
+			arrayDimension->get_type()->set_isConst( true );
+
+			arrayType->set_dimension( new VariableExpr( arrayDimension ) );
+			addDeclaration( arrayDimension );
+
+			hoist( arrayType->get_base() );
+			return;
+		}
+	}
+
+	DeclarationWithType * HoistArrayDimension::mutate( FunctionDecl *functionDecl ) {
+		bool oldInFunc = inFunction;
+		inFunction = true;
+		DeclarationWithType * decl = Parent::mutate( functionDecl );
+		inFunction = oldInFunc;
+		return decl;
+	}
 
 	void CtorDtor::generateCtorDtor( std::list< Declaration * > & translationUnit ) {
@@ -130,60 +209,34 @@
 	}
 
-	namespace {
-		Expression * makeCtorDtorExpr( std::string name, ObjectDecl * objDecl, std::list< Expression * > args ) {
-			UntypedExpr * expr = new UntypedExpr( new NameExpr( name ) );
-			expr->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) );
-			expr->get_args().splice( expr->get_args().end(), args );
-			return expr;
-		}
-	}
-
 	DeclarationWithType * CtorDtor::mutate( ObjectDecl * objDecl ) {
-		// hands off if designated or if @=
+		// hands off if designated, if @=, or if extern
 		if ( tryConstruct( objDecl ) ) {
-			if ( inFunction ) {
-				if ( ArrayType * at = dynamic_cast< ArrayType * >( objDecl->get_type() ) ) {
-					// call into makeArrayFunction from validate.cc to generate calls to ctor/dtor for each element of array
-					// TODO: walk initializer and generate appropriate copy ctor if element has initializer
-					std::list< Expression * > args = makeInitList( objDecl->get_init() );
-					if ( args.empty() ) {
-						std::list< Statement * > ctor;
-						std::list< Statement * > dtor;
-
-						SymTab::makeArrayFunction( NULL, new VariableExpr( objDecl ), at, "?{}", back_inserter( ctor ) );
-						SymTab::makeArrayFunction( NULL, new VariableExpr( objDecl ), at, "^?{}", front_inserter( dtor ), false );
-
-						// Currently makeArrayFunction produces a single Statement - a CompoundStmt
-						// which  wraps everything that needs to happen. As such, it's technically
-						// possible to use a Statement ** in the above calls, but this is inherently
-						// unsafe, so instead we take the slightly less efficient route, but will be
-						// immediately informed if somehow the above assumption is broken. In this case,
-						// we could always wrap the list of statements at this point with a CompoundStmt,
-						// but it seems reasonable at the moment for this to be done by makeArrayFunction
-						// itself
-						assert( ctor.size() == 1 && dynamic_cast< ImplicitCtorDtorStmt * >( ctor.front() ) );
-						assert( dtor.size() == 1 && dynamic_cast< ImplicitCtorDtorStmt * >( dtor.front() ) );
-						objDecl->set_init( new ConstructorInit( ctor.front(), dtor.front(), objDecl->get_init() ) );
-					} else {
-						// array came with an initializer list: initialize each element
-						// may have more initializers than elements in the array - need to check at each index that
-						// we haven't exceeded size. This requires precomputing the size because it might be a side-effecting
-						// computation.
-						// may have fewer initializers than eleemnts in the array - need to default construct
-						// remaining elements.
-						// might be able to merge this with the case above.
-					}
-				} else {
-					// it's sufficient to attempt to call the ctor/dtor for the given object and its initializer
-					Expression * ctor = makeCtorDtorExpr( "?{}", objDecl, makeInitList( objDecl->get_init() ) );
-					Expression * dtor = makeCtorDtorExpr( "^?{}", objDecl, std::list< Expression * >() );
-
-					// need to remember init expression, in case no ctors exist
-					// if ctor does exist, want to use ctor expression instead of init
-					// push this decision to the resolver
-					ExprStmt * ctorStmt = new ExprStmt( noLabels, ctor );
-					ExprStmt * dtorStmt = new ExprStmt( noLabels, dtor );
-					objDecl->set_init( new ConstructorInit( new ImplicitCtorDtorStmt( ctorStmt ), new ImplicitCtorDtorStmt( dtorStmt ), objDecl->get_init() ) );
-				}
+			// call into genImplicitCall from Autogen.h to generate calls to ctor/dtor
+			// for each constructable object
+			std::list< Statement * > ctor;
+			std::list< Statement * > dtor;
+
+			InitExpander srcParam( objDecl->get_init() );
+			InitExpander nullParam( (Initializer *)NULL );
+			SymTab::genImplicitCall( srcParam, new VariableExpr( objDecl ), "?{}", back_inserter( ctor ), objDecl );
+			SymTab::genImplicitCall( nullParam, new VariableExpr( objDecl ), "^?{}", front_inserter( dtor ), objDecl, false );
+
+			// Currently genImplicitCall produces a single Statement - a CompoundStmt
+			// which  wraps everything that needs to happen. As such, it's technically
+			// possible to use a Statement ** in the above calls, but this is inherently
+			// unsafe, so instead we take the slightly less efficient route, but will be
+			// immediately informed if somehow the above assumption is broken. In this case,
+			// we could always wrap the list of statements at this point with a CompoundStmt,
+			// but it seems reasonable at the moment for this to be done by genImplicitCall
+			// itself. It is possible that genImplicitCall produces no statements (e.g. if
+			// an array type does not have a dimension). In this case, it's fine to ignore
+			// the object for the purposes of construction.
+			assert( ctor.size() == dtor.size() && ctor.size() <= 1 );
+			if ( ctor.size() == 1 ) {
+				// need to remember init expression, in case no ctors exist
+				// if ctor does exist, want to use ctor expression instead of init
+				// push this decision to the resolver
+				assert( dynamic_cast< ImplicitCtorDtorStmt * > ( ctor.front() ) && dynamic_cast< ImplicitCtorDtorStmt * > ( dtor.front() ) );
+				objDecl->set_init( new ConstructorInit( ctor.front(), dtor.front(), objDecl->get_init() ) );
 			}
 		}
@@ -193,22 +246,8 @@
 	DeclarationWithType * CtorDtor::mutate( FunctionDecl *functionDecl ) {
 		// parameters should not be constructed and destructed, so don't mutate FunctionType
-		bool oldInFunc = inFunction;
 		mutateAll( functionDecl->get_oldDecls(), *this );
-		inFunction = true;
 		functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
-		inFunction = oldInFunc;
 		return functionDecl;
 	}
-
-	// should not traverse into any of these declarations to find objects
-	// that need to be constructed or destructed
-	Declaration* CtorDtor::mutate( StructDecl *aggregateDecl ) { return aggregateDecl; }
-	Declaration* CtorDtor::mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; }
-	Declaration* CtorDtor::mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; }
-	Declaration* CtorDtor::mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; }
-	TypeDecl* CtorDtor::mutate( TypeDecl *typeDecl ) { return typeDecl; }
-	Declaration* CtorDtor::mutate( TypedefDecl *typeDecl ) { return typeDecl; }
-	Type* CtorDtor::mutate( FunctionType *funcType ) { return funcType; }
-
 } // namespace InitTweak
 
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/InitTweak/InitTweak.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -1,2 +1,3 @@
+#include <algorithm>
 #include "InitTweak.h"
 #include "SynTree/Visitor.h"
@@ -4,4 +5,5 @@
 #include "SynTree/Initializer.h"
 #include "SynTree/Expression.h"
+#include "SynTree/Attribute.h"
 #include "GenPoly/GenPoly.h"
 
@@ -20,7 +22,6 @@
 		};
 
-		class InitExpander : public Visitor {
+		class InitFlattener : public Visitor {
 			public:
-			InitExpander() {}
 			virtual void visit( SingleInit * singleInit );
 			virtual void visit( ListInit * listInit );
@@ -28,12 +29,12 @@
 		};
 
-		void InitExpander::visit( SingleInit * singleInit ) {
+		void InitFlattener::visit( SingleInit * singleInit ) {
 			argList.push_back( singleInit->get_value()->clone() );
 		}
 
-		void InitExpander::visit( ListInit * listInit ) {
-			// xxx - for now, assume no nested list inits
-			std::list<Initializer*>::iterator it = listInit->begin_initializers();
-			for ( ; it != listInit->end_initializers(); ++it ) {
+		void InitFlattener::visit( ListInit * listInit ) {
+			// flatten nested list inits
+			std::list<Initializer*>::iterator it = listInit->begin();
+			for ( ; it != listInit->end(); ++it ) {
 				(*it)->accept( *this );
 			}
@@ -42,7 +43,7 @@
 
 	std::list< Expression * > makeInitList( Initializer * init ) {
-		InitExpander expander;
-		maybeAccept( init, expander );
-		return expander.argList;
+		InitFlattener flattener;
+		maybeAccept( init, flattener );
+		return flattener.argList;
 	}
 
@@ -53,48 +54,254 @@
 	}
 
+	class InitExpander::ExpanderImpl {
+	public:
+		virtual std::list< Expression * > next( std::list< Expression * > & indices ) = 0;
+		virtual Statement * buildListInit( UntypedExpr * callExpr, std::list< Expression * > & indices ) = 0;
+	};
+
+	class InitImpl : public InitExpander::ExpanderImpl {
+	public:
+		InitImpl( Initializer * init ) : init( init ) {}
+
+		virtual std::list< Expression * > next( std::list< Expression * > & indices ) {
+			// this is wrong, but just a placeholder for now
+			// if ( ! flattened ) flatten( indices );
+			// return ! inits.empty() ? makeInitList( inits.front() ) : std::list< Expression * >();
+			return makeInitList( init );
+		}
+
+		virtual Statement * buildListInit( UntypedExpr * callExpr, std::list< Expression * > & indices );
+	private:
+		Initializer * init;
+	};
+
+	class ExprImpl : public InitExpander::ExpanderImpl {
+	public:
+		ExprImpl( Expression * expr ) : arg( expr ) {}
+
+		virtual std::list< Expression * > next( std::list< Expression * > & indices ) {
+			std::list< Expression * > ret;
+			Expression * expr = maybeClone( arg );
+			if ( expr ) {
+				for ( std::list< Expression * >::reverse_iterator it = indices.rbegin(); it != indices.rend(); ++it ) {
+					// go through indices and layer on subscript exprs ?[?]
+					++it;
+					UntypedExpr * subscriptExpr = new UntypedExpr( new NameExpr( "?[?]") );
+					subscriptExpr->get_args().push_back( expr );
+					subscriptExpr->get_args().push_back( (*it)->clone() );
+					expr = subscriptExpr;
+				}
+				ret.push_back( expr );
+			}
+			return ret;
+		}
+
+		virtual Statement * buildListInit( UntypedExpr * callExpr, std::list< Expression * > & indices );
+	private:
+		Expression * arg;
+	};
+
+	InitExpander::InitExpander( Initializer * init ) : expander( new InitImpl( init ) ) {}
+
+	InitExpander::InitExpander( Expression * expr ) : expander( new ExprImpl( expr ) ) {}
+
+	std::list< Expression * > InitExpander::operator*() {
+		return cur;
+	}
+
+	InitExpander & InitExpander::operator++() {
+		cur = expander->next( indices );
+		return *this;
+	}
+
+	// use array indices list to build switch statement
+	void InitExpander::addArrayIndex( Expression * index, Expression * dimension ) {
+		indices.push_back( index );
+		indices.push_back( dimension );
+	}
+
+	void InitExpander::clearArrayIndices() {
+		indices.clear();
+	}
+
+	namespace {
+		/// given index i, dimension d, initializer init, and callExpr f, generates
+		///   if (i < d) f(..., init)
+		///   ++i;
+		/// so that only elements within the range of the array are constructed
+		template< typename OutIterator >
+		void buildCallExpr( UntypedExpr * callExpr, Expression * index, Expression * dimension, Initializer * init, OutIterator out ) {
+			UntypedExpr * cond = new UntypedExpr( new NameExpr( "?<?") );
+			cond->get_args().push_back( index->clone() );
+			cond->get_args().push_back( dimension->clone() );
+
+			std::list< Expression * > args = makeInitList( init );
+			callExpr->get_args().splice( callExpr->get_args().end(), args );
+
+			*out++ = new IfStmt( noLabels, cond, new ExprStmt( noLabels, callExpr ), NULL );
+
+			UntypedExpr * increment = new UntypedExpr( new NameExpr( "++?" ) );
+			increment->get_args().push_back( new AddressExpr( index->clone() ) );
+			*out++ = new ExprStmt( noLabels, increment );
+		}
+
+		template< typename OutIterator >
+		void build( UntypedExpr * callExpr, InitExpander::IndexList::iterator idx, InitExpander::IndexList::iterator idxEnd, Initializer * init, OutIterator out ) {
+			if ( idx == idxEnd ) return;
+			Expression * index = *idx++;
+			assert( idx != idxEnd );
+			Expression * dimension = *idx++;
+
+			// xxx - may want to eventually issue a warning here if we can detect
+			// that the number of elements exceeds to dimension of the array
+			if ( idx == idxEnd ) {
+				if ( ListInit * listInit = dynamic_cast< ListInit * >( init ) ) {
+					for ( Initializer * init : *listInit ) {
+						buildCallExpr( callExpr->clone(), index, dimension, init, out );
+					}
+				} else {
+					buildCallExpr( callExpr->clone(), index, dimension, init, out );
+				}
+			} else {
+				std::list< Statement * > branches;
+
+				unsigned long cond = 0;
+				ListInit * listInit = dynamic_cast< ListInit * >( init );
+				if ( ! listInit ) {
+					// xxx - this shouldn't be an error, but need a way to
+					// terminate without creating output, so should catch this error
+					throw SemanticError( "unbalanced list initializers" );
+				}
+
+				static UniqueName targetLabel( "L__autogen__" );
+				Label switchLabel( targetLabel.newName(), 0, std::list< Attribute * >{ new Attribute("unused") } );
+				for ( Initializer * init : *listInit ) {
+					Expression * condition;
+					// check for designations
+					// if ( init-> ) {
+						condition = new ConstantExpr( Constant::from_ulong( cond ) );
+						++cond;
+					// } else {
+					// 	condition = // ... take designation
+					// 	cond = // ... take designation+1
+					// }
+					std::list< Statement * > stmts;
+					build( callExpr, idx, idxEnd, init, back_inserter( stmts ) );
+					stmts.push_back( new BranchStmt( noLabels, switchLabel, BranchStmt::Break ) );
+					CaseStmt * caseStmt = new CaseStmt( noLabels, condition, stmts );
+					branches.push_back( caseStmt );
+				}
+				*out++ = new SwitchStmt( noLabels, index->clone(), branches );
+				*out++ = new NullStmt( std::list<Label>{ switchLabel } );
+			}
+		}
+	}
+
+	// if array came with an initializer list: initialize each element
+	// may have more initializers than elements in the array - need to check at each index that
+	// we haven't exceeded size.
+	// may have fewer initializers than elements in the array - need to default construct
+	// remaining elements.
+	// To accomplish this, generate switch statement, consuming all of expander's elements
+	Statement * InitImpl::buildListInit( UntypedExpr * dst, std::list< Expression * > & indices ) {
+		if ( ! init ) return NULL;
+		CompoundStmt * block = new CompoundStmt( noLabels );
+		build( dst, indices.begin(), indices.end(), init, back_inserter( block->get_kids() ) );
+		if ( block->get_kids().empty() ) {
+			delete block;
+			return NULL;
+		} else {
+			init = NULL; // init was consumed in creating the list init
+			return block;
+		}
+	}
+
+	Statement * ExprImpl::buildListInit( UntypedExpr * dst, std::list< Expression * > & indices ) {
+		return NULL;
+	}
+
+	Statement * InitExpander::buildListInit( UntypedExpr * dst ) {
+		return expander->buildListInit( dst, indices );
+	}
+
 	bool tryConstruct( ObjectDecl * objDecl ) {
 		return ! LinkageSpec::isBuiltin( objDecl->get_linkage() ) &&
 			(objDecl->get_init() == NULL ||
 				( objDecl->get_init() != NULL && objDecl->get_init()->get_maybeConstructed() )) &&
-			! isDesignated( objDecl->get_init() );
+			! isDesignated( objDecl->get_init() )
+			&& objDecl->get_storageClass() != DeclarationNode::Extern;
+	}
+
+	class CallFinder : public Visitor {
+	public:
+		typedef Visitor Parent;
+		CallFinder( const std::list< std::string > & names ) : names( names ) {}
+
+		virtual void visit( ApplicationExpr * appExpr ) {
+			handleCallExpr( appExpr );
+		}
+
+		virtual void visit( UntypedExpr * untypedExpr ) {
+			handleCallExpr( untypedExpr );
+		}
+
+		std::list< Expression * > * matches;
+	private:
+		const std::list< std::string > names;
+
+		template< typename CallExpr >
+		void handleCallExpr( CallExpr * expr ) {
+			Parent::visit( expr );
+			std::string fname = getFunctionName( expr );
+			if ( std::find( names.begin(), names.end(), fname ) != names.end() ) {
+				matches->push_back( expr );
+			}
+		}
+	};
+
+	void collectCtorDtorCalls( Statement * stmt, std::list< Expression * > & matches ) {
+		static CallFinder finder( std::list< std::string >{ "?{}", "^?{}" } );
+		finder.matches = &matches;
+		maybeAccept( stmt, finder );
 	}
 
 	Expression * getCtorDtorCall( Statement * stmt ) {
-		if ( stmt == NULL ) return NULL;
-		if ( ExprStmt * exprStmt = dynamic_cast< ExprStmt * >( stmt ) ) {
-			return exprStmt->get_expr();
-		} else if ( CompoundStmt * compoundStmt = dynamic_cast< CompoundStmt * >( stmt ) ) {
-			// could also be a compound statement with a loop, in the case of an array
-			if( compoundStmt->get_kids().size() == 2 ) {
-				// loop variable and loop
-				ForStmt * forStmt = dynamic_cast< ForStmt * >( compoundStmt->get_kids().back() );
-				assert( forStmt && forStmt->get_body() );
-				return getCtorDtorCall( forStmt->get_body() );
-			} else if ( compoundStmt->get_kids().size() == 1 ) {
-				// should be the call statement, but in any case there's only one option
-				return getCtorDtorCall( compoundStmt->get_kids().front() );
-			} else {
-				assert( false && "too many statements in compoundStmt for getCtorDtorCall" );
-			}
-		} if ( ImplicitCtorDtorStmt * impCtorDtorStmt = dynamic_cast< ImplicitCtorDtorStmt * > ( stmt ) ) {
-			return getCtorDtorCall( impCtorDtorStmt->get_callStmt() );
-		} else {
-			// should never get here
-			assert( false && "encountered unknown call statement" );
-		}
-	}
-
-	bool isInstrinsicSingleArgCallStmt( Statement * stmt ) {
-		Expression * callExpr = getCtorDtorCall( stmt );
-		if ( ! callExpr ) return false;
-		ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( callExpr );
-		assert( appExpr );
-		VariableExpr * function = dynamic_cast< VariableExpr * >( appExpr->get_function() );
+		std::list< Expression * > matches;
+		collectCtorDtorCalls( stmt, matches );
+		assert( matches.size() <= 1 );
+		return matches.size() == 1 ? matches.front() : NULL;
+	}
+
+	namespace {
+		VariableExpr * getCalledFunction( ApplicationExpr * appExpr ) {
+			assert( appExpr );
+			// xxx - it's possible this can be other things, e.g. MemberExpr, so this is insufficient
+			return dynamic_cast< VariableExpr * >( appExpr->get_function() );
+		}
+	}
+
+	ApplicationExpr * isIntrinsicCallExpr( Expression * expr ) {
+		ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr );
+		if ( ! appExpr ) return NULL;
+		VariableExpr * function = getCalledFunction( appExpr );
 		assert( function );
 		// check for Intrinsic only - don't want to remove all overridable ctor/dtors because autogenerated ctor/dtor
 		// will call all member dtors, and some members may have a user defined dtor.
-		FunctionType * funcType = GenPoly::getFunctionType( function->get_var()->get_type() );
-		assert( funcType );
-		return function->get_var()->get_linkage() == LinkageSpec::Intrinsic && funcType->get_parameters().size() == 1;
+		return function->get_var()->get_linkage() == LinkageSpec::Intrinsic ? appExpr : NULL;
+	}
+
+	bool isIntrinsicSingleArgCallStmt( Statement * stmt ) {
+		std::list< Expression * > callExprs;
+		collectCtorDtorCalls( stmt, callExprs );
+		// if ( callExprs.empty() ) return false; // xxx - do I still need this check?
+		return std::all_of( callExprs.begin(), callExprs.end(), []( Expression * callExpr ){
+			if ( ApplicationExpr * appExpr = isIntrinsicCallExpr( callExpr ) ) {
+				assert( ! appExpr->get_function()->get_results().empty() );
+				FunctionType *funcType = GenPoly::getFunctionType( appExpr->get_function()->get_results().front() );
+				assert( funcType );
+				return funcType->get_parameters().size() == 1;
+			}
+			return false;
+		});
 	}
 
@@ -160,3 +367,56 @@
 		else return NULL;
 	}
+
+	class ConstExprChecker : public Visitor {
+	public:
+		ConstExprChecker() : isConstExpr( true ) {}
+
+		virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; }
+		virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; }
+		virtual void visit( NameExpr *nameExpr ) { isConstExpr = false; }
+		virtual void visit( CastExpr *castExpr ) { isConstExpr = false; }
+		virtual void visit( LabelAddressExpr *labAddressExpr ) { isConstExpr = false; }
+		virtual void visit( UntypedMemberExpr *memberExpr ) { isConstExpr = false; }
+		virtual void visit( MemberExpr *memberExpr ) { isConstExpr = false; }
+		virtual void visit( VariableExpr *variableExpr ) { isConstExpr = false; }
+		virtual void visit( ConstantExpr *constantExpr ) { /* bottom out */ }
+		// these might be okay?
+		// virtual void visit( SizeofExpr *sizeofExpr );
+		// virtual void visit( AlignofExpr *alignofExpr );
+		// virtual void visit( UntypedOffsetofExpr *offsetofExpr );
+		// virtual void visit( OffsetofExpr *offsetofExpr );
+		// virtual void visit( OffsetPackExpr *offsetPackExpr );
+		// virtual void visit( AttrExpr *attrExpr );
+		// virtual void visit( CommaExpr *commaExpr );
+		// virtual void visit( LogicalExpr *logicalExpr );
+		// virtual void visit( ConditionalExpr *conditionalExpr );
+		virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }
+		virtual void visit( SolvedTupleExpr *tupleExpr ) { isConstExpr = false; }
+		virtual void visit( TypeExpr *typeExpr ) { isConstExpr = false; }
+		virtual void visit( AsmExpr *asmExpr ) { isConstExpr = false; }
+		virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }
+		virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }
+
+		bool isConstExpr;
+	};
+
+	bool isConstExpr( Expression * expr ) {
+		if ( expr ) {
+			ConstExprChecker checker;
+			expr->accept( checker );
+			return checker.isConstExpr;
+		}
+		return true;
+	}
+
+	bool isConstExpr( Initializer * init ) {
+		if ( init ) {
+			ConstExprChecker checker;
+			init->accept( checker );
+			return checker.isConstExpr;
+		} // if
+		// for all intents and purposes, no initializer means const expr
+		return true;
+	}
+
 }
Index: src/InitTweak/InitTweak.h
===================================================================
--- src/InitTweak/InitTweak.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/InitTweak/InitTweak.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -26,32 +26,70 @@
 // helper functions for initialization
 namespace InitTweak {
-  /// transform Initializer into an argument list that can be passed to a call expression
-  std::list< Expression * > makeInitList( Initializer * init );
+	/// transform Initializer into an argument list that can be passed to a call expression
+	std::list< Expression * > makeInitList( Initializer * init );
 
-  /// True if the resolver should try to construct objDecl
-  bool tryConstruct( ObjectDecl * objDecl );
+	/// True if the resolver should try to construct objDecl
+	bool tryConstruct( ObjectDecl * objDecl );
 
-  /// True if the Initializer contains designations
-  bool isDesignated( Initializer * init );
+	/// True if the Initializer contains designations
+	bool isDesignated( Initializer * init );
 
-  /// True if stmt is a call statement where the function called is intrinsic and takes one parameter.
-  /// Intended to be used for default ctor/dtor calls, but might have use elsewhere.
-  /// Currently has assertions that make it less than fully general.
-  bool isInstrinsicSingleArgCallStmt( Statement * expr );
+  /// Non-Null if expr is a call expression whose target function is intrinsic
+  ApplicationExpr * isIntrinsicCallExpr( Expression * expr );
 
-  /// get the Ctor/Dtor call expression from a Statement that looks like a generated ctor/dtor call
-  Expression * getCtorDtorCall( Statement * stmt );
+	/// True if stmt is a call statement where the function called is intrinsic and takes one parameter.
+	/// Intended to be used for default ctor/dtor calls, but might have use elsewhere.
+	/// Currently has assertions that make it less than fully general.
+	bool isIntrinsicSingleArgCallStmt( Statement * expr );
 
-  /// returns the name of the function being called
-  std::string getFunctionName( Expression * expr );
+	/// get all Ctor/Dtor call expressions from a Statement
+	void collectCtorDtorCalls( Statement * stmt, std::list< Expression * > & matches );
 
-  /// returns the argument to a call expression in position N indexed from 0
-  Expression *& getCallArg( Expression * callExpr, unsigned int pos );
+	/// get the Ctor/Dtor call expression from a Statement that looks like a generated ctor/dtor call
+	Expression * getCtorDtorCall( Statement * stmt );
 
-  /// returns the base type of a PointerType or ArrayType, else returns NULL
-  Type * getPointerBase( Type * );
+	/// returns the name of the function being called
+	std::string getFunctionName( Expression * expr );
 
-  /// returns the argument if it is a PointerType or ArrayType, else returns NULL
-  Type * isPointerType( Type * );
+	/// returns the argument to a call expression in position N indexed from 0
+	Expression *& getCallArg( Expression * callExpr, unsigned int pos );
+
+	/// returns the base type of a PointerType or ArrayType, else returns NULL
+	Type * getPointerBase( Type * );
+
+	/// returns the argument if it is a PointerType or ArrayType, else returns NULL
+	Type * isPointerType( Type * );
+
+	/// returns true if expr is trivially a compile-time constant
+	bool isConstExpr( Expression * expr );
+	bool isConstExpr( Initializer * init );
+
+	class InitExpander {
+	public:
+		// expand by stepping through init to get each list of arguments
+		InitExpander( Initializer * init );
+
+		// always expand to expr
+		InitExpander( Expression * expr );
+
+		// iterator-like interface
+		std::list< Expression * > operator*();
+		InitExpander & operator++();
+
+		// builds statement which has the same semantics as a C-style list initializer
+		// (for array initializers) using callExpr as the base expression to perform initialization
+		Statement * buildListInit( UntypedExpr * callExpr );
+		void addArrayIndex( Expression * index, Expression * dimension );
+		void clearArrayIndices();
+
+		class ExpanderImpl;
+	private:
+		std::shared_ptr< ExpanderImpl > expander;
+		std::list< Expression * > cur;
+
+		// invariant: list of size 2N (elements come in pairs [index, dimension])
+		typedef std::list< Expression * > IndexList;
+		IndexList indices;
+	};
 } // namespace
 
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Makefile.in	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -108,5 +108,4 @@
 	ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT) \
 	ControlStruct/driver_cfa_cpp-MLEMutator.$(OBJEXT) \
-	ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT) \
 	ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT) \
 	ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) \
@@ -122,4 +121,5 @@
 	GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) \
 	GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT) \
+	GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) \
 	InitTweak/driver_cfa_cpp-GenInit.$(OBJEXT) \
 	InitTweak/driver_cfa_cpp-FixInit.$(OBJEXT) \
@@ -372,18 +372,18 @@
 	Common/SemanticError.cc Common/UniqueName.cc \
 	ControlStruct/LabelGenerator.cc ControlStruct/LabelFixer.cc \
-	ControlStruct/MLEMutator.cc ControlStruct/CaseRangeMutator.cc \
-	ControlStruct/Mutate.cc ControlStruct/ForExprMutator.cc \
+	ControlStruct/MLEMutator.cc ControlStruct/Mutate.cc \
+	ControlStruct/ForExprMutator.cc \
 	ControlStruct/LabelTypeChecker.cc Designators/Processor.cc \
 	GenPoly/Box.cc GenPoly/GenPoly.cc GenPoly/PolyMutator.cc \
 	GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \
 	GenPoly/CopyParams.cc GenPoly/FindFunction.cc \
-	GenPoly/DeclMutator.cc InitTweak/GenInit.cc \
-	InitTweak/FixInit.cc InitTweak/FixGlobalInit.cc \
-	InitTweak/InitTweak.cc Parser/parser.yy Parser/lex.ll \
-	Parser/TypedefTable.cc Parser/ParseNode.cc \
-	Parser/DeclarationNode.cc Parser/ExpressionNode.cc \
-	Parser/StatementNode.cc Parser/InitializerNode.cc \
-	Parser/TypeData.cc Parser/LinkageSpec.cc \
-	Parser/parseutility.cc Parser/Parser.cc \
+	GenPoly/DeclMutator.cc GenPoly/InstantiateGeneric.cc \
+	InitTweak/GenInit.cc InitTweak/FixInit.cc \
+	InitTweak/FixGlobalInit.cc InitTweak/InitTweak.cc \
+	Parser/parser.yy Parser/lex.ll Parser/TypedefTable.cc \
+	Parser/ParseNode.cc Parser/DeclarationNode.cc \
+	Parser/ExpressionNode.cc Parser/StatementNode.cc \
+	Parser/InitializerNode.cc Parser/TypeData.cc \
+	Parser/LinkageSpec.cc Parser/parseutility.cc Parser/Parser.cc \
 	ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \
 	ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \
@@ -542,7 +542,4 @@
 	ControlStruct/$(DEPDIR)/$(am__dirstamp)
 ControlStruct/driver_cfa_cpp-MLEMutator.$(OBJEXT):  \
-	ControlStruct/$(am__dirstamp) \
-	ControlStruct/$(DEPDIR)/$(am__dirstamp)
-ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT):  \
 	ControlStruct/$(am__dirstamp) \
 	ControlStruct/$(DEPDIR)/$(am__dirstamp)
@@ -589,4 +586,6 @@
 GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \
 	GenPoly/$(DEPDIR)/$(am__dirstamp)
+GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT):  \
+	GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)
 InitTweak/$(am__dirstamp):
 	@$(MKDIR_P) InitTweak
@@ -820,5 +819,4 @@
 	-rm -f Common/driver_cfa_cpp-SemanticError.$(OBJEXT)
 	-rm -f Common/driver_cfa_cpp-UniqueName.$(OBJEXT)
-	-rm -f ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT)
 	-rm -f ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT)
 	-rm -f ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT)
@@ -833,4 +831,5 @@
 	-rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT)
 	-rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT)
+	-rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT)
 	-rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT)
 	-rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT)
@@ -930,5 +929,4 @@
 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-SemanticError.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-UniqueName.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ForExprMutator.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-LabelFixer.Po@am__quote@
@@ -943,4 +941,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-GenPoly.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Lvalue.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po@am__quote@
@@ -1212,18 +1211,4 @@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-MLEMutator.obj `if test -f 'ControlStruct/MLEMutator.cc'; then $(CYGPATH_W) 'ControlStruct/MLEMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/MLEMutator.cc'; fi`
 
-ControlStruct/driver_cfa_cpp-CaseRangeMutator.o: ControlStruct/CaseRangeMutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-CaseRangeMutator.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo -c -o ControlStruct/driver_cfa_cpp-CaseRangeMutator.o `test -f 'ControlStruct/CaseRangeMutator.cc' || echo '$(srcdir)/'`ControlStruct/CaseRangeMutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='ControlStruct/CaseRangeMutator.cc' object='ControlStruct/driver_cfa_cpp-CaseRangeMutator.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-CaseRangeMutator.o `test -f 'ControlStruct/CaseRangeMutator.cc' || echo '$(srcdir)/'`ControlStruct/CaseRangeMutator.cc
-
-ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj: ControlStruct/CaseRangeMutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo -c -o ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj `if test -f 'ControlStruct/CaseRangeMutator.cc'; then $(CYGPATH_W) 'ControlStruct/CaseRangeMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/CaseRangeMutator.cc'; fi`
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='ControlStruct/CaseRangeMutator.cc' object='ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj `if test -f 'ControlStruct/CaseRangeMutator.cc'; then $(CYGPATH_W) 'ControlStruct/CaseRangeMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/CaseRangeMutator.cc'; fi`
-
 ControlStruct/driver_cfa_cpp-Mutate.o: ControlStruct/Mutate.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-Mutate.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-Mutate.Tpo -c -o ControlStruct/driver_cfa_cpp-Mutate.o `test -f 'ControlStruct/Mutate.cc' || echo '$(srcdir)/'`ControlStruct/Mutate.cc
@@ -1407,4 +1392,18 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-DeclMutator.obj `if test -f 'GenPoly/DeclMutator.cc'; then $(CYGPATH_W) 'GenPoly/DeclMutator.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/DeclMutator.cc'; fi`
+
+GenPoly/driver_cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
+
+GenPoly/driver_cfa_cpp-InstantiateGeneric.obj: GenPoly/InstantiateGeneric.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`
 
 InitTweak/driver_cfa_cpp-GenInit.o: InitTweak/GenInit.cc
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/DeclarationNode.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 20:49:31 2016
-// Update Count     : 164
+// Last Modified On : Mon Aug 15 20:48:55 2016
+// Update Count     : 178
 //
 
@@ -49,8 +49,8 @@
 	newnode->name = name;
 	newnode->storageClasses = storageClasses;
-	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
+	newnode->bitfieldWidth = bitfieldWidth;
 	newnode->hasEllipsis = hasEllipsis;
 	newnode->initializer = initializer;
-	newnode->next = maybeClone( next );
+	newnode->set_next( maybeClone( get_next() ) );
 	newnode->linkage = linkage;
 	return newnode;
@@ -283,5 +283,5 @@
 	newnode->type->array->dimension = size;
 	newnode->type->array->isStatic = isStatic;
-	if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantNode *>( newnode->type->array->dimension ) ) {
+	if ( newnode->type->array->dimension == 0 || dynamic_cast< ConstantExpr * >( newnode->type->array->dimension->build() ) ) {
 		newnode->type->array->isVarLen = false;
 	} else {
@@ -469,6 +469,6 @@
 
 		// there may be typedefs chained onto the type
-		if ( o->get_link() ) {
-			set_link( o->get_link()->clone() );
+		if ( o->get_next() ) {
+			set_last( o->get_next()->clone() );
 		} // if
 	} // if
@@ -756,5 +756,5 @@
 DeclarationNode *DeclarationNode::appendList( DeclarationNode *node ) {
 	if ( node != 0 ) {
-		set_link( node );
+		set_last( node );
 	} // if
 	return this;
@@ -775,5 +775,5 @@
 void buildList( const DeclarationNode *firstNode, std::list< Declaration * > &outputList ) {
 	SemanticError errors;
-	std::back_insert_iterator< std::list< Declaration *> > out( outputList );
+	std::back_insert_iterator< std::list< Declaration * > > out( outputList );
 	const DeclarationNode *cur = firstNode;
 	while ( cur ) {
@@ -793,5 +793,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast<DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -800,7 +800,7 @@
 }
 
-void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType *> &outputList ) {
+void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList ) {
 	SemanticError errors;
-	std::back_insert_iterator< std::list< DeclarationWithType *> > out( outputList );
+	std::back_insert_iterator< std::list< DeclarationWithType * > > out( outputList );
 	const DeclarationNode *cur = firstNode;
 	while ( cur ) {
@@ -816,11 +816,11 @@
 			Declaration *decl = cur->build();
 			if ( decl ) {
-				if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType *>( decl ) ) {
+				if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {
 					*out++ = dwt;
-				} else if ( StructDecl *agg = dynamic_cast< StructDecl *>( decl ) ) {
+				} else if ( StructDecl *agg = dynamic_cast< StructDecl * >( decl ) ) {
 					StructInstType *inst = new StructInstType( Type::Qualifiers(), agg->get_name() );
 					*out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 );
 					delete agg;
-				} else if ( UnionDecl *agg = dynamic_cast< UnionDecl *>( decl ) ) {
+				} else if ( UnionDecl *agg = dynamic_cast< UnionDecl * >( decl ) ) {
 					UnionInstType *inst = new UnionInstType( Type::Qualifiers(), agg->get_name() );
 					*out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 );
@@ -830,5 +830,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -837,7 +837,7 @@
 }
 
-void buildTypeList( const DeclarationNode *firstNode, std::list< Type *> &outputList ) {
+void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList ) {
 	SemanticError errors;
-	std::back_insert_iterator< std::list< Type *> > out( outputList );
+	std::back_insert_iterator< std::list< Type * > > out( outputList );
 	const DeclarationNode *cur = firstNode;
 	while ( cur ) {
@@ -847,5 +847,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/ExpressionNode.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,13 +10,14 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul  5 13:41:55 2016
-// Update Count     : 320
+// Last Modified On : Tue Aug 16 00:09:20 2016
+// Update Count     : 495
 //
 
 #include <cassert>
 #include <cctype>
+#include <climits>
+#include <cstdio>
 #include <algorithm>
 #include <sstream>
-#include <cstdio>
 
 #include "ParseNode.h"
@@ -31,771 +32,281 @@
 using namespace std;
 
-ExpressionNode::ExpressionNode() : ParseNode() {}
-
-ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ) {}
-
-ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {
-	if ( other.argName ) {
-		argName = other.argName->clone();
-	} else {
-		argName = 0;
-	} // if
-}
-
-ExpressionNode * ExpressionNode::set_argName( const std::string *aName ) {
-	argName = new VarRefNode( aName );
-	return this;
-}
-
-ExpressionNode * ExpressionNode::set_argName( ExpressionNode *aDesignator ) {
-	argName = aDesignator;
-	return this;
-}
-
-void ExpressionNode::printDesignation( std::ostream &os, int indent ) const {
-	if ( argName ) {
-		os << string( indent, ' ' ) << "(designated by:  ";
-		argName->printOneLine( os, indent );
-		os << ")" << std::endl;
-	} // if
-}
+ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.get_name() ), extension( other.extension ) {}
 
 //##############################################################################
 
-NullExprNode::NullExprNode() {}
-
-NullExprNode *NullExprNode::clone() const {
-	return new NullExprNode();
-}
-
-void NullExprNode::print( std::ostream & os, int indent ) const {
-	printDesignation( os );
-	os << "null expression";
-}
-
-void NullExprNode::printOneLine( std::ostream & os, int indent ) const {
-	printDesignation( os );
-	os << "null";
-}
-
-Expression *NullExprNode::build() const {
-	return 0;
-}
-
-CommaExprNode *ExpressionNode::add_to_list( ExpressionNode *exp ) {
-	return new CommaExprNode( this, exp );
-}
-
-//##############################################################################
-
-ConstantNode::ConstantNode( ConstantExpr *expr ) : expr( expr ) {
-} // ConstantNode::ConstantNode
-
-ConstantNode *ConstantNode::appendstr( const std::string *newValue ) {
-	assert( newValue != 0 );
-
-	string value = expr->get_constant()->get_value();
-
-	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
-	value.insert( value.length() - 1, newValue->substr( 1, newValue->length() - 2 ) );
-	expr->get_constant()->set_value( value );
-
-	delete newValue;									// allocated by lexer
-	return this;
-}
-
-void ConstantNode::printOneLine( std::ostream &os, int indent ) const {
-	// os << string( indent, ' ' );
-	// printDesignation( os );
-
-	// switch ( type ) {
-	//   case Integer:
-	//   case Float:
-	// 	os << value ;
-	// 	break;
-	//   case Character:
-	// 	os << "'" << value << "'";
-	// 	break;
-	//   case String:
-	// 	os << '"' << value << '"';
-	// 	break;
-	// } // switch
-
-	// os << ' ';
-}
-
-void ConstantNode::print( std::ostream &os, int indent ) const {
-	printOneLine( os, indent );
-	os << endl;
-}
-
-Expression *ConstantNode::build() const {
-	return expr->clone();
-}
-
-//##############################################################################
-
-VarRefNode::VarRefNode() : isLabel( false ) {}
-
-VarRefNode::VarRefNode( const string *name_, bool labelp ) : ExpressionNode( name_ ), isLabel( labelp ) {}
-
-VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {
-}
-
-Expression *VarRefNode::build() const {
-	return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
-}
-
-void VarRefNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << get_name() << ' ';
-}
-
-void VarRefNode::print( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Referencing: ";
-	os << "Variable: " << get_name();
-	os << endl;
-}
-
-//##############################################################################
-
-DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex ) : isArrayIndex( isArrayIndex ) {
-	set_argName( expr );
-	assert( get_argName() );
-
-	if ( ! isArrayIndex ) {
-		if ( VarRefNode * var = dynamic_cast< VarRefNode * >( expr ) ) {
-
-			stringstream ss( var->get_name() );
-			double value;
-			if ( ss >> value ) {
-				// this is a floating point constant. It MUST be
-				// ".0" or ".1", otherwise the program is invalid
-				if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) {
-					throw SemanticError( "invalid designator name: " + var->get_name() );
-				} // if
-				var->set_name( var->get_name().substr(1) );
+// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
+//
+//		prefix action constant action suffix
+//
+// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
+//
+//		constant BEGIN CONT ...
+//		<CONT>(...)? BEGIN 0 ... // possible empty suffix
+//
+// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
+// type.
+
+static Type::Qualifiers emptyQualifiers;				// no qualifiers on constants
+
+static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
+static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
+static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
+static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
+static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
+static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
+
+Expression *build_constantInteger( std::string & str ) {
+	static const BasicType::Kind kind[2][3] = {
+		{ BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
+		{ BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
+	};
+	bool dec = true, Unsigned = false;					// decimal, unsigned constant
+	int size;											// 0 => int, 1 => long, 2 => long long
+	unsigned long long v;								// converted integral value
+	size_t last = str.length() - 1;						// last character of constant
+
+	if ( str[0] == '0' ) {								// octal/hex constant ?
+		dec = false;
+		if ( last != 0 && checkX( str[1] ) ) {			// hex constant ?
+			sscanf( (char *)str.c_str(), "%llx", &v );
+			//printf( "%llx %llu\n", v, v );
+		} else {										// octal constant
+			sscanf( (char *)str.c_str(), "%llo", &v );
+			//printf( "%llo %llu\n", v, v );
+		} // if
+	} else {											// decimal constant ?
+		sscanf( (char *)str.c_str(), "%llu", &v );
+		//printf( "%llu %llu\n", v, v );
+	} // if
+
+	if ( v <= INT_MAX ) {								// signed int
+		size = 0;
+	} else if ( v <= UINT_MAX && ! dec ) {				// unsigned int
+		size = 0;
+		Unsigned = true;								// unsigned
+	} else if ( v <= LONG_MAX ) {						// signed long int
+		size = 1;
+	} else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
+		size = 1;
+		Unsigned = true;								// unsigned long int
+	} else if ( v <= LLONG_MAX ) {						// signed long long int
+		size = 2;
+	} else {											// unsigned long long int
+		size = 2;
+		Unsigned = true;								// unsigned long long int
+	} // if
+
+	if ( checkU( str[last] ) ) {						// suffix 'u' ?
+		Unsigned = true;
+		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'l' ?
+			size = 1;
+			if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ?
+				size = 2;
 			} // if
 		} // if
-	} // if
-}
-
-DesignatorNode::DesignatorNode( const DesignatorNode &other ) : ExpressionNode( other ), isArrayIndex( other.isArrayIndex ) {
-}
-
-class DesignatorFixer : public Mutator {
-public:
-	virtual Expression* mutate( NameExpr *nameExpr ) {
-		if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
-			Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
-			delete nameExpr;
-			return new ConstantExpr( val );
-		}
-		return nameExpr;
-	}
-};
-
-Expression *DesignatorNode::build() const {
-	Expression * ret = maybeBuild<Expression>(get_argName());
-
-	if ( isArrayIndex ) {
-		// need to traverse entire structure and change any instances of 0 or 1 to
-		// ConstantExpr
-		DesignatorFixer fixer;
-		ret = ret->acceptMutator( fixer );
-	} // if
-
-	return ret;
-}
-
-void DesignatorNode::printOneLine( std::ostream &os, int indent ) const {
-	if ( get_argName() ) {
-		if ( isArrayIndex ) {
-			os << "[";
-			get_argName()->printOneLine( os, indent );
-			os << "]";
+	} else if ( checkL( str[ last ] ) ) {				// suffix 'l' ?
+		size = 1;
+		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'll' ?
+			size = 2;
+			if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ?
+				Unsigned = true;
+			} // if
 		} else {
-			os << ".";
-			get_argName()->printOneLine( os, indent );
-		}
-	} // if
-}
-
-void DesignatorNode::print( std::ostream &os, int indent ) const {
-	if ( get_argName() ) {
-		if ( isArrayIndex ) {
-			os << "[";
-			get_argName()->print( os, indent );
-			os << "]";
-		} else {
-			os << ".";
-			get_argName()->print( os, indent );
-		}
-	} // if
-}
-
-//##############################################################################
-
-static const char *opName[] = {
-	"TupleC", "Comma", "TupleFieldSel", // "TuplePFieldSel", // n-adic
-	// triadic
-	"Cond", "NCond",
+			if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ?
+				Unsigned = true;
+			} // if
+		} // if
+	} // if
+
+	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) );
+} // build_constantInteger
+
+Expression *build_constantFloat( std::string & str ) {
+	static const BasicType::Kind kind[2][3] = {
+		{ BasicType::Float, BasicType::Double, BasicType::LongDouble },
+		{ BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
+	};
+
+	bool complx = false;								// real, complex
+	int size = 1;										// 0 => float, 1 => double (default), 2 => long double
+	// floating-point constant has minimum of 2 characters: 1. or .1
+	size_t last = str.length() - 1;
+
+	if ( checkI( str[last] ) ) {						// imaginary ?
+		complx = true;
+		last -= 1;										// backup one character
+	} // if
+
+	if ( checkF( str[last] ) ) {						// float ?
+		size = 0;
+	} else if ( checkD( str[last] ) ) {					// double ?
+		size = 1;
+	} else if ( checkL( str[last] ) ) {					// long double ?
+		size = 2;
+	} // if
+	if ( ! complx && checkI( str[last - 1] ) ) {		// imaginary ?
+		complx = true;
+	} // if
+
+	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) );
+} // build_constantFloat
+
+Expression *build_constantChar( std::string & str ) {
+	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
+} // build_constantChar
+
+ConstantExpr *build_constantStr( std::string & str ) {
+	// string should probably be a primitive type
+	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
+				new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
+											toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
+								   false, false );
+	return new ConstantExpr( Constant( at, str ) );
+} // build_constantStr
+
+NameExpr * build_varref( const string *name, bool labelp ) {
+	return new NameExpr( *name, nullptr );
+}
+
+static const char *OperName[] = {
 	// diadic
-	"SizeOf", "AlignOf", "OffsetOf", "Attr", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
+	"SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
 	"?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
 	"?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
-	"?[?]", "FieldSel", "PFieldSel", "Range",
+	"?[?]", "...",
 	// monadic
 	"+?", "-?", "AddressOf", "*?", "!?", "~?", "++?", "?++", "--?", "?--", "&&"
 };
 
-OperatorNode::OperatorNode( Type t ) : type( t ) {}
-
-OperatorNode::OperatorNode( const OperatorNode &other ) : ExpressionNode( other ), type( other.type ) {
-}
-
-OperatorNode::~OperatorNode() {}
-
-OperatorNode::Type OperatorNode::get_type( void ) const{
-	return type;
-}
-
-void OperatorNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << opName[ type ] << ' ';
-}
-
-void OperatorNode::print( std::ostream &os, int indent ) const{
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Operator: " << opName[type] << endl;
-	return;
-}
-
-const char *OperatorNode::get_typename( void ) const{
-	return opName[ type ];
-}
-
-//##############################################################################
-
-CompositeExprNode::CompositeExprNode() : ExpressionNode(), function( 0 ), arguments( 0 ) {
-}
-
-CompositeExprNode::CompositeExprNode( const string *name_ ) : ExpressionNode( name_ ), function( 0 ), arguments( 0 ) {
-}
-
-CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *args ):
-	function( f ), arguments( args ) {
-}
-
-CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2):
-	function( f ), arguments( arg1 ) {
-	arguments->set_link( arg2 );
-}
-
-CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : ExpressionNode( other ), function( maybeClone( other.function ) ), arguments( 0 ) {
-	ParseNode *cur = other.arguments;
-	while ( cur ) {
-		if ( arguments ) {
-			arguments->set_link( cur->clone() );
-		} else {
-			arguments = ( ExpressionNode*)cur->clone();
-		} // if
-		cur = cur->get_link();
-	}
-}
-
-CompositeExprNode::~CompositeExprNode() {
-	delete function;
-	delete arguments;
-}
-
-#include "Common/utility.h"
-
-Expression *CompositeExprNode::build() const {
-	OperatorNode *op;
-	std::list<Expression *> args;
-
-	buildList( get_args(), args );
-
-	if ( ! ( op = dynamic_cast<OperatorNode *>( function ) ) ) { // function as opposed to operator
-		return new UntypedExpr( maybeBuild<Expression>(function), args, maybeBuild< Expression >( get_argName() ));
-	} // if
-
-	switch ( op->get_type()) {
-	  case OperatorNode::Incr:
-	  case OperatorNode::Decr:
-	  case OperatorNode::IncrPost:
-	  case OperatorNode::DecrPost:
-	  case OperatorNode::Assign:
-	  case OperatorNode::MulAssn:
-	  case OperatorNode::DivAssn:
-	  case OperatorNode::ModAssn:
-	  case OperatorNode::PlusAssn:
-	  case OperatorNode::MinusAssn:
-	  case OperatorNode::LSAssn:
-	  case OperatorNode::RSAssn:
-	  case OperatorNode::AndAssn:
-	  case OperatorNode::ERAssn:
-	  case OperatorNode::OrAssn:
-		// the rewrite rules for these expressions specify that the first argument has its address taken
-		assert( ! args.empty() );
-		args.front() = new AddressExpr( args.front() );
-		break;
-	  default:		// do nothing
-		;
-	} // switch
-
-	switch ( op->get_type() ) {
-	  case OperatorNode::Incr:
-	  case OperatorNode::Decr:
-	  case OperatorNode::IncrPost:
-	  case OperatorNode::DecrPost:
-	  case OperatorNode::Assign:
-	  case OperatorNode::MulAssn:
-	  case OperatorNode::DivAssn:
-	  case OperatorNode::ModAssn:
-	  case OperatorNode::PlusAssn:
-	  case OperatorNode::MinusAssn:
-	  case OperatorNode::LSAssn:
-	  case OperatorNode::RSAssn:
-	  case OperatorNode::AndAssn:
-	  case OperatorNode::ERAssn:
-	  case OperatorNode::OrAssn:
-	  case OperatorNode::Plus:
-	  case OperatorNode::Minus:
-	  case OperatorNode::Mul:
-	  case OperatorNode::Div:
-	  case OperatorNode::Mod:
-	  case OperatorNode::BitOr:
-	  case OperatorNode::BitAnd:
-	  case OperatorNode::Xor:
-	  case OperatorNode::LShift:
-	  case OperatorNode::RShift:
-	  case OperatorNode::LThan:
-	  case OperatorNode::GThan:
-	  case OperatorNode::LEThan:
-	  case OperatorNode::GEThan:
-	  case OperatorNode::Eq:
-	  case OperatorNode::Neq:
-	  case OperatorNode::Index:
-	  case OperatorNode::Range:
-	  case OperatorNode::UnPlus:
-	  case OperatorNode::UnMinus:
-	  case OperatorNode::PointTo:
-	  case OperatorNode::Neg:
-	  case OperatorNode::BitNeg:
-	  case OperatorNode::LabelAddress:
-		return new UntypedExpr( new NameExpr( opName[ op->get_type() ] ), args );
-	  case OperatorNode::AddressOf:
-		assert( args.size() == 1 );
-		assert( args.front() );
-
-		return new AddressExpr( args.front() );
-	  case OperatorNode::Cast:
-		{
-			TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args());
-			assert( arg );
-
-			DeclarationNode *decl_node = arg->get_decl();
-			ExpressionNode *expr_node = dynamic_cast<ExpressionNode *>( arg->get_link());
-
-			Type *targetType = decl_node->buildType();
-			if ( dynamic_cast< VoidType* >( targetType ) ) {
-				delete targetType;
-				return new CastExpr( maybeBuild<Expression>(expr_node), maybeBuild< Expression >( get_argName() ) );
-			} else {
-				return new CastExpr( maybeBuild<Expression>(expr_node),targetType, maybeBuild< Expression >( get_argName() ) );
-			} // if
-		}
-	  case OperatorNode::FieldSel:
-		{
-			assert( args.size() == 2 );
-
-			NameExpr *member = dynamic_cast<NameExpr *>( args.back());
-			// TupleExpr *memberTup = dynamic_cast<TupleExpr *>( args.back());
-
-			if ( member != 0 ) {
-				UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), args.front());
-				delete member;
-				return ret;
-				/* else if ( memberTup != 0 )
-				   {
-				   UntypedMemberExpr *ret = new UntypedMemberExpr( memberTup->get_name(), args.front());
-				   delete member;
-				   return ret;
-				   } */
-			} else
-				assert( false );
-		}
-	  case OperatorNode::PFieldSel:
-		{
-			assert( args.size() == 2 );
-
-			NameExpr *member = dynamic_cast<NameExpr *>( args.back());  // modify for Tuples   xxx
-			assert( member != 0 );
-
-			UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
-			deref->get_args().push_back( args.front() );
-
-			UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
-			delete member;
-			return ret;
-		}
-	  case OperatorNode::SizeOf:
-		{
-			if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) {
-				return new SizeofExpr( arg->get_decl()->buildType());
-			} else {
-				return new SizeofExpr( args.front());
-			} // if
-		}
-	  case OperatorNode::AlignOf:
-		{
-			if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) {
-				return new AlignofExpr( arg->get_decl()->buildType());
-			} else {
-				return new AlignofExpr( args.front());
-			} // if
-		}
-	  case OperatorNode::OffsetOf:
-		{
-			assert( args.size() == 2 );
-
-			if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args() ) ) {
-				NameExpr *member = dynamic_cast<NameExpr *>( args.back() );
-				assert( member != 0 );
-
-				return new UntypedOffsetofExpr( arg->get_decl()->buildType(), member->get_name() );
-			} else assert( false );
-		}
-	  case OperatorNode::Attr:
-		{
-			VarRefNode *var = dynamic_cast<VarRefNode *>( get_args());
-			assert( var );
-			if ( ! get_args()->get_link() ) {
-				return new AttrExpr( maybeBuild<Expression>(var), ( Expression*)0);
-			} else if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()->get_link()) ) {
-				return new AttrExpr( maybeBuild<Expression>(var), arg->get_decl()->buildType());
-			} else {
-				return new AttrExpr( maybeBuild<Expression>(var), args.back());
-			} // if
-		}
-	  case OperatorNode::Or:
-	  case OperatorNode::And:
-		assert( args.size() == 2);
-		return new LogicalExpr( notZeroExpr( args.front() ), notZeroExpr( args.back() ), ( op->get_type() == OperatorNode::And ) );
-	  case OperatorNode::Cond:
-		{
-			assert( args.size() == 3);
-			std::list< Expression * >::const_iterator i = args.begin();
-			Expression *arg1 = notZeroExpr( *i++ );
-			Expression *arg2 = *i++;
-			Expression *arg3 = *i++;
-			return new ConditionalExpr( arg1, arg2, arg3 );
-		}
-	  case OperatorNode::NCond:
-		throw UnimplementedError( "GNU 2-argument conditional expression" );
-	  case OperatorNode::Comma:
-		{
-			assert( args.size() == 2);
-			std::list< Expression * >::const_iterator i = args.begin();
-			Expression *ret = *i++;
-			while ( i != args.end() ) {
-				ret = new CommaExpr( ret, *i++ );
-			}
-			return ret;
-		}
-		// Tuples
-	  case OperatorNode::TupleC:
-		{
-			TupleExpr *ret = new TupleExpr();
-			std::copy( args.begin(), args.end(), back_inserter( ret->get_exprs() ) );
-			return ret;
-		}
-	  default:
-		// shouldn't happen
-		assert( false );
-		return 0;
-	} // switch
-}
-
-void CompositeExprNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << "( ";
-	function->printOneLine( os, indent );
-	for ( ExpressionNode *cur = arguments; cur != 0; cur = dynamic_cast< ExpressionNode* >( cur->get_link() ) ) {
-		cur->printOneLine( os, indent );
-	} // for
-	os << ") ";
-}
-
-void CompositeExprNode::print( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Application of: " << endl;
-	function->print( os, indent + ParseNode::indent_by );
-
-	os << string( indent, ' ' ) ;
-	if ( arguments ) {
-		os << "... on arguments: " << endl;
-		arguments->printList( os, indent + ParseNode::indent_by );
-	} else
-		os << "... on no arguments: " << endl;
-}
-
-void CompositeExprNode::set_function( ExpressionNode *f ) {
-	function = f;
-}
-
-void CompositeExprNode::set_args( ExpressionNode *args ) {
-	arguments = args;
-}
-
-ExpressionNode *CompositeExprNode::get_function( void ) const {
-	return function;
-}
-
-ExpressionNode *CompositeExprNode::get_args( void ) const {
-	return arguments;
-}
-
-void CompositeExprNode::add_arg( ExpressionNode *arg ) {
-	if ( arguments )
-		arguments->set_link( arg );
-	else
-		set_args( arg );
-}
-
-//##############################################################################
-
-Expression *AsmExprNode::build() const {
-	return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) );
-}
-
-void AsmExprNode::print( std::ostream &os, int indent ) const {
-	os << string( indent, ' ' ) << "Assembler Expression:" << endl;
-	if ( inout ) {
-		os << string( indent, ' ' ) << "inout: " << std::endl;
-		inout->print( os, indent + 2 );
-	} // if
-	if ( constraint ) {
-		os << string( indent, ' ' ) << "constraint: " << std::endl;
-		constraint->print( os, indent + 2 );
-	} // if
-	if ( operand ) {
-		os << string( indent, ' ' ) << "operand: " << std::endl;
-		operand->print( os, indent + 2 );
-	} // if
-}
-
-void AsmExprNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << "( ";
-	if ( inout ) inout->printOneLine( os, indent + 2 );
-	os << ", ";
-	if ( constraint ) constraint->printOneLine( os, indent + 2 );
-	os << ", ";
-	if ( operand ) operand->printOneLine( os, indent + 2 );
-	os << ") ";
-}
-
-//##############################################################################
-
-void LabelNode::print( std::ostream &os, int indent ) const {}
-
-void LabelNode::printOneLine( std::ostream &os, int indent ) const {}
-
-//##############################################################################
-
-CommaExprNode::CommaExprNode(): CompositeExprNode( new OperatorNode( OperatorNode::Comma )) {}
-
-CommaExprNode::CommaExprNode( ExpressionNode *exp ) : CompositeExprNode( new OperatorNode( OperatorNode::Comma ), exp ) {
-}
-
-CommaExprNode::CommaExprNode( ExpressionNode *exp1, ExpressionNode *exp2) : CompositeExprNode( new OperatorNode( OperatorNode::Comma ), exp1, exp2) {
-}
-
-CommaExprNode *CommaExprNode::add_to_list( ExpressionNode *exp ) {
-	add_arg( exp );
-
-	return this;
-}
-
-CommaExprNode::CommaExprNode( const CommaExprNode &other ) : CompositeExprNode( other ) {
-}
-
-//##############################################################################
-
-ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {}
-
-ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) {
-}
-
-ValofExprNode::~ValofExprNode() {
-	delete body;
-}
-
-void ValofExprNode::print( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Valof Expression:" << std::endl;
-	get_body()->print( os, indent + 4);
-}
-
-void ValofExprNode::printOneLine( std::ostream &, int indent ) const {
-	assert( false );
-}
-
-Expression *ValofExprNode::build() const {
-	return new UntypedValofExpr ( maybeBuild<Statement>(get_body()), maybeBuild< Expression >( get_argName() ) );
-}
-
-//##############################################################################
-
-ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr ) throw ( SemanticError ) : condition( cond ), change( incr ) {
-	if ( init_ == 0 )
-		init = 0;
-	else {
-		DeclarationNode *decl;
-		ExpressionNode *exp;
-
-		if (( decl = dynamic_cast<DeclarationNode *>(init_) ) != 0)
-			init = new StatementNode( decl );
-		else if (( exp = dynamic_cast<ExpressionNode *>( init_)) != 0)
-			init = new StatementNode( StatementNode::Exp, exp );
-		else
-			throw SemanticError("Error in for control expression");
-	}
-}
-
-ForCtlExprNode::ForCtlExprNode( const ForCtlExprNode &other )
-	: ExpressionNode( other ), init( maybeClone( other.init ) ), condition( maybeClone( other.condition ) ), change( maybeClone( other.change ) ) {
-}
-
-ForCtlExprNode::~ForCtlExprNode() {
-	delete init;
-	delete condition;
-	delete change;
-}
-
-Expression *ForCtlExprNode::build() const {
-	// this shouldn't be used!
-	assert( false );
-	return 0;
-}
-
-void ForCtlExprNode::print( std::ostream &os, int indent ) const{
-	os << string( indent,' ' ) << "For Control Expression -- :" << endl;
-
-	os << string( indent + 2, ' ' ) << "initialization:" << endl;
-	if ( init != 0 )
-		init->printList( os, indent + 4 );
-
-	os << string( indent + 2, ' ' ) << "condition: " << endl;
-	if ( condition != 0 )
-		condition->print( os, indent + 4 );
-	os << string( indent + 2, ' ' ) << "increment: " << endl;
-	if ( change != 0 )
-		change->print( os, indent + 4 );
-}
-
-void ForCtlExprNode::printOneLine( std::ostream &, int indent ) const {
-	assert( false );
-}
-
-//##############################################################################
-
-TypeValueNode::TypeValueNode( DeclarationNode *decl ) : decl( decl ) {
-}
-
-TypeValueNode::TypeValueNode( const TypeValueNode &other ) : ExpressionNode( other ), decl( maybeClone( other.decl ) ) {
-}
-
-Expression *TypeValueNode::build() const {
+Expression *build_cast( DeclarationNode *decl_node, ExpressionNode *expr_node ) {
+	Type *targetType = decl_node->buildType();
+	if ( dynamic_cast< VoidType * >( targetType ) ) {
+		delete targetType;
+		return new CastExpr( maybeBuild< Expression >(expr_node) );
+	} else {
+		return new CastExpr( maybeBuild< Expression >(expr_node), targetType );
+	} // if
+}
+
+Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
+	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeBuild< Expression >(expr_node) );
+	delete member;
+	return ret;
+}
+
+Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
+	UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
+	deref->get_args().push_back( maybeBuild< Expression >(expr_node) );
+	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
+	delete member;
+	return ret;
+}
+
+Expression *build_addressOf( ExpressionNode *expr_node ) {
+		return new AddressExpr( maybeBuild< Expression >(expr_node) );
+}
+Expression *build_sizeOfexpr( ExpressionNode *expr_node ) {
+	return new SizeofExpr( maybeBuild< Expression >(expr_node) );
+}
+Expression *build_sizeOftype( DeclarationNode *decl_node ) {
+	return new SizeofExpr( decl_node->buildType() );
+}
+Expression *build_alignOfexpr( ExpressionNode *expr_node ) {
+	return new AlignofExpr( maybeBuild< Expression >(expr_node) );
+}
+Expression *build_alignOftype( DeclarationNode *decl_node ) {
+	return new AlignofExpr( decl_node->buildType() );
+}
+Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ) {
+	return new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
+}
+
+Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind ) {
+	return new LogicalExpr( notZeroExpr( maybeBuild< Expression >(expr_node1) ), notZeroExpr( maybeBuild< Expression >(expr_node2) ), kind );
+}
+
+Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) {
+	std::list< Expression * > args;
+	args.push_back( maybeBuild< Expression >(expr_node) );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ) {
+	std::list< Expression * > args;
+	args.push_back( new AddressExpr( maybeBuild< Expression >(expr_node) ) );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
+	std::list< Expression * > args;
+	args.push_back( maybeBuild< Expression >(expr_node1) );
+	args.push_back( maybeBuild< Expression >(expr_node2) );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
+	std::list< Expression * > args;
+	args.push_back( new AddressExpr( maybeBuild< Expression >(expr_node1) ) );
+	args.push_back( maybeBuild< Expression >(expr_node2) );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+
+Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 ) {
+	return new ConditionalExpr( notZeroExpr( maybeBuild< Expression >(expr_node1) ), maybeBuild< Expression >(expr_node2), maybeBuild< Expression >(expr_node3) );
+}
+
+Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
+	return new CommaExpr( maybeBuild< Expression >(expr_node1), maybeBuild< Expression >(expr_node2) );
+}
+
+Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) {
+	return new AttrExpr( var, maybeBuild< Expression >(expr_node) );
+}
+Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) {
+	return new AttrExpr( var, decl_node->buildType() );
+}
+
+Expression *build_tuple( ExpressionNode * expr_node ) {
+	TupleExpr *ret = new TupleExpr();
+	buildList( expr_node, ret->get_exprs() );
+	return ret;
+}
+
+Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) {
+	std::list< Expression * > args;
+
+	buildList( expr_node, args );
+	return new UntypedExpr( maybeBuild< Expression >(function), args, nullptr );
+}
+
+Expression *build_range( ExpressionNode * low, ExpressionNode *high ) {
+	Expression *low_cexpr = maybeBuild< Expression >( low );
+	Expression *high_cexpr = maybeBuild< Expression >( high );
+	return new RangeExpr( low_cexpr, high_cexpr );
+}
+
+Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
+	return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild< Expression >(operand) );
+}
+
+Expression *build_valexpr( StatementNode *s ) {
+	return new UntypedValofExpr( maybeBuild< Statement >(s), nullptr );
+}
+Expression *build_typevalue( DeclarationNode *decl ) {
 	return new TypeExpr( decl->buildType() );
 }
 
-void TypeValueNode::print( std::ostream &os, int indent ) const {
-	os << std::string( indent, ' ' ) << "Type:";
-	get_decl()->print( os, indent + 2);
-}
-
-void TypeValueNode::printOneLine( std::ostream &os, int indent ) const {
-	os << "Type:";
-	get_decl()->print( os, indent + 2);
-}
-
-
-CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
-CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
-
-CompoundLiteralNode::~CompoundLiteralNode() {
-	delete kids;
-	delete type;
-}
-
-CompoundLiteralNode *CompoundLiteralNode::clone() const {
-	return new CompoundLiteralNode( *this );
-}
-
-void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
-	os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
-
-	os << string( indent + 2, ' ' ) << "type:" << endl;
-	if ( type != 0 )
-		type->print( os, indent + 4 );
-
-	os << string( indent + 2, ' ' ) << "initialization:" << endl;
-	if ( kids != 0 )
-		kids->printList( os, indent + 4 );
-}
-
-void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
-	os << "( ";
-	if ( type ) type->print( os );
-	os << ", ";
-	if ( kids ) kids->printOneLine( os );
-	os << ") ";
-}
-
-Expression *CompoundLiteralNode::build() const {
-	Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type
+Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ) {
+	Declaration * newDecl = maybeBuild< Declaration >(decl_node); // compound literal type
 	if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
-		return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
+		return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild< Initializer >(kids) );
 	// these types do not have associated type information
 	} else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
-		return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild<Initializer>(kids) );
+		return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild< Initializer >(kids) );
 	} else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
-		return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild<Initializer>(kids) );
+		return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild< Initializer >(kids) );
 	} else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
-		return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild<Initializer>(kids) );
+		return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild< Initializer >(kids) );
 	} else {
 		assert( false );
 	} // if
-}
-
-
-ExpressionNode *flattenCommas( ExpressionNode *list ) {
-	if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
-		OperatorNode *op;
-		if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::Comma ) ) {
-			if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
-				composite->add_arg( next );
-			return flattenCommas( composite->get_args() );
-		} // if
-	} // if
-
-	if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
-		list->set_next( flattenCommas( next ) );
-
-	return list;
-}
-
-ExpressionNode *tupleContents( ExpressionNode *tuple ) {
-	if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( tuple ) ) {
-		OperatorNode *op = 0;
-		if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::TupleC ) )
-			return composite->get_args();
-	} // if
-	return tuple;
 }
 
Index: src/Parser/InitializerNode.cc
===================================================================
--- src/Parser/InitializerNode.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/InitializerNode.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:20:24 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jul  4 15:37:15 2016
-// Update Count     : 15
+// Last Modified On : Mon Aug 15 18:27:02 2016
+// Update Count     : 20
 //
 
@@ -25,8 +25,8 @@
 	: expr( _expr ), aggregate( aggrp ), designator( des ), kids( 0 ), maybeConstructed( true ) {
 	if ( aggrp )
-		kids = dynamic_cast< InitializerNode *>( get_link() );
+		kids = dynamic_cast< InitializerNode * >( get_next() );
 
 	if ( kids != 0 )
-		set_link( 0 );
+		set_last( 0 );
 }
 
@@ -34,8 +34,8 @@
 	: expr( 0 ), aggregate( aggrp ), designator( des ), kids( 0 ), maybeConstructed( true ) {
 	if ( init != 0 )
-		set_link(init);
+		set_last( init );
 
 	if ( aggrp )
-		kids = dynamic_cast< InitializerNode *>( get_link() );
+		kids = dynamic_cast< InitializerNode * >( get_next() );
 
 	if ( kids != 0 )
@@ -58,5 +58,5 @@
 			while ( curdes != 0) {
 				curdes->printOneLine(os);
-				curdes = (ExpressionNode *)(curdes->get_link());
+				curdes = (ExpressionNode *)(curdes->get_next());
 				if ( curdes ) os << ", ";
 			} // while
@@ -72,5 +72,5 @@
 
 	InitializerNode *moreInit;
-	if  ( get_link() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_link() ) ) != 0) )
+	if  ( get_next() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) != 0) )
 		moreInit->printOneLine( os );
 }
@@ -82,22 +82,22 @@
 		//assert( next_init() != 0 );
 
-		std::list< Initializer *> initlist;
-		buildList<Initializer, InitializerNode>( next_init(), initlist );
+		std::list< Initializer * > initlist;
+		buildList< Initializer, InitializerNode >( next_init(), initlist );
 
-		std::list< Expression *> designlist;
+		std::list< Expression * > designlist;
 
 		if ( designator != 0 ) {
-			buildList<Expression, ExpressionNode>( designator, designlist );
+			buildList< Expression, ExpressionNode >( designator, designlist );
 		} // if
 
 		return new ListInit( initlist, designlist, maybeConstructed );
 	} else {
-		std::list< Expression *> designators;
+		std::list< Expression * > designators;
 
 		if ( designator != 0 )
-			buildList<Expression, ExpressionNode>( designator, designators );
+			buildList< Expression, ExpressionNode >( designator, designators );
 
 		if ( get_expression() != 0)
-			return new SingleInit( maybeBuild<Expression>( get_expression() ), designators, maybeConstructed );
+			return new SingleInit( maybeBuild< Expression >( get_expression() ), designators, maybeConstructed );
 	} // if
 
Index: src/Parser/ParseNode.cc
===================================================================
--- src/Parser/ParseNode.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/ParseNode.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,180 +10,16 @@
 // Created On       : Sat May 16 13:26:29 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 15 18:49:25 2016
-// Update Count     : 62
+// Last Modified On : Tue Aug 16 08:42:29 2016
+// Update Count     : 107
 // 
 
-#include <climits>
 #include "ParseNode.h"
 using namespace std;
 
-// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
-//
-//		prefix action constant action suffix
-//
-// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
-//
-//		constant BEGIN CONT ...
-//		<CONT>(...)? BEGIN 0 ... // possible empty suffix
-//
-// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
-// type.
-
-static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
-static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
-static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
-static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
-static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
-static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
-
-BasicType::Kind literalType( ConstantNode::Type type, string &value ) {
-	BasicType::Kind btype;
-
-	// lexing divides constants into 4 kinds
-	switch ( type ) {
-	  case ConstantNode::Integer:
-		{
-			static const BasicType::Kind kind[2][3] = {
-				{ BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
-				{ BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
-			};
-			bool dec = true, Unsigned = false;			// decimal, unsigned constant
-			int size;									// 0 => int, 1 => long, 2 => long long
-			unsigned long long v;						// converted integral value
-			size_t last = value.length() - 1;			// last character of constant
-
-			if ( value[0] == '0' ) {					// octal/hex constant ?
-				dec = false;
-				if ( last != 0 && checkX( value[1] ) ) { // hex constant ?
-					sscanf( (char *)value.c_str(), "%llx", &v );
-					//printf( "%llx %llu\n", v, v );
-				} else {								// octal constant
-					sscanf( (char *)value.c_str(), "%llo", &v );
-					//printf( "%llo %llu\n", v, v );
-				} // if
-			} else {									// decimal constant ?
-				sscanf( (char *)value.c_str(), "%llu", &v );
-				//printf( "%llu %llu\n", v, v );
-			} // if
-
-			if ( v <= INT_MAX ) {						// signed int
-				size = 0;
-			} else if ( v <= UINT_MAX && ! dec ) {		// unsigned int
-				size = 0;
-				Unsigned = true;						// unsigned
-			} else if ( v <= LONG_MAX ) {				// signed long int
-				size = 1;
-			} else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
-				size = 1;
-				Unsigned = true;						// unsigned long int
-			} else if ( v <= LLONG_MAX ) {				// signed long long int
-				size = 2;
-			} else {									// unsigned long long int
-				size = 2;
-				Unsigned = true;						// unsigned long long int
-			} // if
-
-			if ( checkU( value[last] ) ) {				// suffix 'u' ?
-				Unsigned = true;
-				if ( last > 0 && checkL( value[ last - 1 ] ) ) { // suffix 'l' ?
-					size = 1;
-					if ( last > 1 && checkL( value[ last - 2 ] ) ) { // suffix 'll' ?
-						size = 2;
-					} // if
-				} // if
-			} else if ( checkL( value[ last ] ) ) {		// suffix 'l' ?
-				size = 1;
-				if ( last > 0 && checkL( value[ last - 1 ] ) ) { // suffix 'll' ?
-					size = 2;
-					if ( last > 1 && checkU( value[ last - 2 ] ) ) { // suffix 'u' ?
-						Unsigned = true;
-					} // if
-				} else {
-					if ( last > 0 && checkU( value[ last - 1 ] ) ) { // suffix 'u' ?
-						Unsigned = true;
-					} // if
-				} // if
-			} // if
-			btype = kind[Unsigned][size];				// lookup constant type
-			break;
-		}
-	  case ConstantNode::Float:
-		{
-			//long double v;
-			static const BasicType::Kind kind[2][3] = {
-				{ BasicType::Float, BasicType::Double, BasicType::LongDouble },
-				{ BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
-			};
-			bool complx = false;						// real, complex
-			int size = 1;								// 0 => float, 1 => double (default), 2 => long double
-			// floating-point constant has minimum of 2 characters: 1. or .1
-			size_t last = value.length() - 1;
-
-			if ( checkI( value[last] ) ) {				// imaginary ?
-				complx = true;
-				last -= 1;								// backup one character
-			} // if
-
-			//sscanf( (char *)value.c_str(), "%Lf", &v );
-			//printf( "%s %24.22Lf %Lf\n", value.c_str(), v, v );
-
-			if ( checkF( value[last] ) ) {				// float ?
-				size = 0;
-			} else if ( checkD( value[last] ) ) {		// double ?
-				size = 1;
-			} else if ( checkL( value[last] ) ) {		// long double ?
-				size = 2;
-			} // if
-			if ( ! complx && checkI( value[last - 1] ) ) { // imaginary ?
-				complx = true;
-			} // if
-			btype = kind[complx][size];					// lookup constant type
-			break;
-		}
-	  case ConstantNode::Character:
-		btype = BasicType::Char;						// default
-		if ( string( "LUu" ).find( value[0] ) != string::npos ) {
-			// ???
-		} // if
-		break;
-	  case ConstantNode::String:
-		assert( false );
-		// array of char
-		if ( string( "LUu" ).find( value[0] ) != string::npos ) {
-			if ( value[0] == 'u' && value[1] == '8' ) {
-				// ???
-			} else {
-				// ???
-			} // if
-		} // if
-		break;
-	} // switch
-	return btype;
-} // literalType
-
-
-ConstantNode *makeConstant( ConstantNode::Type type, std::string *str ) {
-	::Type::Qualifiers emptyQualifiers;					// no qualifiers on constants
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, literalType( type, *str ) ), *str ), nullptr ) );
-}
-
-ConstantNode *makeConstantStr( ConstantNode::Type type, std::string *str ) {
-	::Type::Qualifiers emptyQualifiers;					// no qualifiers on constants
-	// string should probably be a primitive type
-	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
-								   new ConstantExpr(
-									   Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
-												 toString( str->size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
-								   false, false );
-	return new ConstantNode( new ConstantExpr( Constant( at, *str ), nullptr ) );
-}
-
-
-// Builder
 int ParseNode::indent_by = 4;
 
-ParseNode::ParseNode() : next( 0 ) {};
-ParseNode::ParseNode( const string *name ) : name( *name ), next( 0 ) { delete name; }
-ParseNode::ParseNode( const string &name ) : name( name ), next( 0 ) { }
+ParseNode::ParseNode() : next( nullptr ) {};
+ParseNode::ParseNode( const string *name ) : name( *name ), next( nullptr ) { delete name; }
+ParseNode::ParseNode( const string &name ) : name( name ), next( nullptr ) { }
 
 ParseNode::~ParseNode() {
@@ -194,17 +30,13 @@
 	ParseNode *current = this;
 
-	while ( current->get_link() != 0 )
-	current = current->get_link();
-
+	while ( current->get_next() != 0 )
+	current = current->get_next();
 	return current;
 }
 
-ParseNode *ParseNode::set_link( ParseNode *next_ ) {
+ParseNode *ParseNode::set_last( ParseNode *next_ ) {
 	if ( next_ != 0 ) get_last()->next = next_;
 	return this;
 }
-
-void ParseNode::print( std::ostream &os, int indent ) const {}
-
 
 void ParseNode::printList( std::ostream &os, int indent ) const {
@@ -216,17 +48,4 @@
 }
 
-ParseNode &ParseNode::operator,( ParseNode &p ) {
-	set_link( &p );
-
-	return *this;
-}
-
-ParseNode *mkList( ParseNode &pn ) {
-	// it just relies on `operator,' to take care of the "arguments" and provides a nice interface to an awful-looking
-	// address-of, rendering, for example (StatementNode *)(&(*$5 + *$7)) into (StatementNode *)mkList(($5, $7))
-	// (although "nice" is probably not the word)
-	return &pn;
-}
-
 // Local Variables: //
 // tab-width: 4 //
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/ParseNode.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 20:50:21 2016
-// Update Count     : 261
+// Last Modified On : Tue Aug 16 08:37:47 2016
+// Update Count     : 527
 //
 
@@ -22,21 +22,20 @@
 #include <memory>
 
-#include "Common/utility.h"
 #include "Parser/LinkageSpec.h"
 #include "SynTree/Type.h"
 #include "SynTree/Expression.h"
-//#include "SynTree/Declaration.h"
+#include "SynTree/Statement.h"
+#include "SynTree/Label.h"
+#include "Common/utility.h"
 #include "Common/UniqueName.h"
-#include "SynTree/Label.h"
-
-class ExpressionNode;
-class CompositeExprNode;
-class CommaExprNode;
+
 class StatementNode;
 class CompoundStmtNode;
 class DeclarationNode;
+class ExpressionNode;
 class InitializerNode;
 
-// Builder
+//##############################################################################
+
 class ParseNode {
   public:
@@ -45,57 +44,78 @@
 	ParseNode( const std::string & );					// for copy constructing subclasses
 	virtual ~ParseNode();
-
-	ParseNode *get_link() const { return next; }
+	virtual ParseNode *clone() const { assert( false ); return nullptr; };
+
+	ParseNode *get_next() const { return next; }
+	ParseNode *set_next( ParseNode *newlink ) { next = newlink; return this; }
 	ParseNode *get_last();
-	ParseNode *set_link( ParseNode * );
-	void set_next( ParseNode *newlink ) { next = newlink; }
-
-	virtual ParseNode *clone() const { return 0; };
+	ParseNode *set_last( ParseNode * );
 
 	const std::string &get_name() const { return name; }
 	void set_name( const std::string &newValue ) { name = newValue; }
 
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printList( std::ostream &, int indent = 0 ) const;
-
-	ParseNode &operator,( ParseNode &);
-  protected:
+	virtual void print( std::ostream &os, int indent = 0 ) const {}
+	virtual void printList( std::ostream &os, int indent = 0 ) const;
+  private:
+	static int indent_by;
+
+	ParseNode *next;
 	std::string name;
-	static int indent_by;
-	ParseNode *next;
-};
-
-ParseNode *mkList( ParseNode & );
+}; // ParseNode
+
+//##############################################################################
+
+class InitializerNode : public ParseNode {
+  public:
+	InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
+	InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
+	~InitializerNode();
+
+	ExpressionNode *get_expression() const { return expr; }
+
+	InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
+	ExpressionNode *get_designators() const { return designator; }
+
+	InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
+	bool get_maybeConstructed() const { return maybeConstructed; }
+
+	InitializerNode *next_init() const { return kids; }
+
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printOneLine( std::ostream & ) const;
+
+	virtual Initializer *build() const;
+  private:
+	ExpressionNode *expr;
+	bool aggregate;
+	ExpressionNode *designator;							// may be list
+	InitializerNode *kids;
+	bool maybeConstructed;
+};
+
+//##############################################################################
 
 class ExpressionNode : public ParseNode {
   public:
-	ExpressionNode();
-	ExpressionNode( const std::string * );
+	ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
+	ExpressionNode( Expression * expr, const std::string *name ) : ParseNode( name ), expr( expr ) {}
 	ExpressionNode( const ExpressionNode &other );
-	virtual ~ExpressionNode() { delete argName; } // cannot delete argName because it might be referenced elsewhere
-
-	virtual ExpressionNode *clone() const = 0;
-
-	virtual CommaExprNode *add_to_list( ExpressionNode * );
-
-	ExpressionNode *get_argName() const { return argName; }
-	ExpressionNode *set_argName( const std::string *aName );
-	ExpressionNode *set_argName( ExpressionNode *aDesignator );
+	virtual ~ExpressionNode() {}
+
+	virtual ExpressionNode *clone() const { assert( false ); return nullptr; }
+
 	bool get_extension() const { return extension; }
 	ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
 
-	virtual void print( std::ostream &, int indent = 0) const = 0;
-	virtual void printOneLine( std::ostream &, int indent = 0) const = 0;
-
-	virtual Expression *build() const = 0;
-  protected:
-	void printDesignation ( std::ostream &, int indent = 0) const;
-  private:
-	ExpressionNode *argName = 0;
+	virtual void print( std::ostream &os, int indent = 0 ) const {}
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
+
+	virtual Expression *build() const { return expr; }
+  private:
 	bool extension = false;
+	Expression *expr;
 };
 
 template< typename T >
-struct maybeBuild_t<Expression, T> {
+struct maybeBuild_t< Expression, T > {
 	static inline Expression * doit( const T *orig ) {
 		if ( orig ) {
@@ -104,239 +124,59 @@
 			return p;
 		} else {
-			return 0;
+			return nullptr;
 		} // if
 	}
 };
 
-// NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ]
-class NullExprNode : public ExpressionNode {
-  public:
-	NullExprNode();
-
-	virtual NullExprNode *clone() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	virtual Expression *build() const;
-};
-
-class ConstantNode : public ExpressionNode {
-  public:
-	enum Type { Integer, Float, Character, String };
-
-	ConstantNode( ConstantExpr * );
-	ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {};
-	~ConstantNode() { delete expr; }
-
-	virtual ConstantNode *clone() const { return new ConstantNode( *this ); }
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	ConstantNode *appendstr( const std::string *newValue );
-
-	Expression *build() const;
-  private:
-	ConstantExpr *expr;
-};
-
-ConstantNode *makeConstant( ConstantNode::Type, std::string * );
-ConstantNode *makeConstantStr( ConstantNode::Type type, std::string *str );
-
-class VarRefNode : public ExpressionNode {
-  public:
-	VarRefNode();
-	VarRefNode( const std::string *, bool isLabel = false );
-	VarRefNode( const VarRefNode &other );
-
-	virtual Expression *build() const ;
-
-	virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
-
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
-  private:
-	bool isLabel;
-};
-
-class DesignatorNode : public ExpressionNode {
-  public:
-	DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false );
-	DesignatorNode( const DesignatorNode &other );
-
-	virtual Expression *build() const ;
-	virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
-
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
-  private:
-	bool isArrayIndex;
-};
-
-class TypeValueNode : public ExpressionNode {
-  public:
-	TypeValueNode( DeclarationNode * );
-	TypeValueNode( const TypeValueNode &other );
-
-	DeclarationNode *get_decl() const { return decl; }
-
-	virtual Expression *build() const ;
-
-	virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-  private:
-	DeclarationNode *decl;
-};
-
-class OperatorNode : public ExpressionNode {
-  public:
-	enum Type { TupleC, Comma, TupleFieldSel, // n-adic
-				// triadic
-				Cond, NCond,
-				// diadic
-				SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And,
-				BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
-				Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
-				Index, FieldSel, PFieldSel, Range,
-				// monadic
-				UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
-				Ctor, Dtor,
-	};
-
-	OperatorNode( Type t );
-	OperatorNode( const OperatorNode &other );
-	virtual ~OperatorNode();
-
-	virtual OperatorNode *clone() const { return new OperatorNode( *this ); }
-
-	Type get_type() const;
-	const char *get_typename() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	virtual Expression *build() const { return 0; }
-  private:
-	Type type;
-};
-
-class CompositeExprNode : public ExpressionNode {
-  public:
-	CompositeExprNode();
-	CompositeExprNode( const std::string * );
-	CompositeExprNode( ExpressionNode *f, ExpressionNode *args = 0 );
-	CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2 );
-	CompositeExprNode( const CompositeExprNode &other );
-	virtual ~CompositeExprNode();
-
-	virtual CompositeExprNode *clone() const { return new CompositeExprNode( *this ); }
-	virtual Expression *build() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	void set_function( ExpressionNode * );
-	void set_args( ExpressionNode * );
-
-	void add_arg( ExpressionNode * );
-
-	ExpressionNode *get_function() const;
-	ExpressionNode *get_args() const;
-  private:
-	ExpressionNode *function;
-	ExpressionNode *arguments;
-};
-
-class AsmExprNode : public ExpressionNode {
-  public:
-	AsmExprNode();
-	AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
-	virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; }
-
-	virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); }
-	virtual Expression *build() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	ExpressionNode *get_inout() const { return inout; };
-	void set_inout( ExpressionNode *newValue ) { inout = newValue; }
-
-	ConstantNode *get_constraint() const { return constraint; };
-	void set_constraint( ConstantNode *newValue ) { constraint = newValue; }
-
-	ExpressionNode *get_operand() const { return operand; };
-	void set_operand( ExpressionNode *newValue ) { operand = newValue; }
-  private:
-	ExpressionNode *inout;
-	ConstantNode *constraint;
-	ExpressionNode *operand;
-};
-
-class LabelNode : public ExpressionNode {
-  public:
-	virtual Expression *build() const { return NULL; }
-	virtual LabelNode *clone() const { return new LabelNode( *this ); }
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	const std::list< Label > &get_labels() const { return labels; };
-	void append_label( std::string *label ) { labels.push_back( *label ); delete label; }
-  private:
+enum class OperKinds {
+	// diadic
+	SizeOf, AlignOf, OffsetOf, Plus, Minus, Mul, Div, Mod, Or, And,
+	BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
+	Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
+	Index, Range,
+	// monadic
+	UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
+	Ctor, Dtor,
+};
+
+struct LabelNode {
 	std::list< Label > labels;
 };
 
-class CommaExprNode : public CompositeExprNode {
-  public:
-	CommaExprNode();
-	CommaExprNode( ExpressionNode * );
-	CommaExprNode( ExpressionNode *, ExpressionNode * );
-	CommaExprNode( const CommaExprNode &other );
-
-	virtual CommaExprNode *add_to_list( ExpressionNode * );
-	virtual CommaExprNode *clone() const { return new CommaExprNode( *this ); }
-};
-
-class ForCtlExprNode : public ExpressionNode {
-  public:
-	ForCtlExprNode( ParseNode *, ExpressionNode *, ExpressionNode * ) throw ( SemanticError );
-	ForCtlExprNode( const ForCtlExprNode &other );
-	~ForCtlExprNode();
-
-	StatementNode *get_init() const { return init; }
-	ExpressionNode *get_condition() const { return condition; }
-	ExpressionNode *get_change() const { return change; }
-
-	virtual ForCtlExprNode *clone() const { return new ForCtlExprNode( *this ); }
-	virtual Expression *build() const;
-
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
-  private:
-	StatementNode *init;
-	ExpressionNode *condition;
-	ExpressionNode *change;
-};
-
-class ValofExprNode : public ExpressionNode {
-  public:
-	ValofExprNode();
-	ValofExprNode( StatementNode *s = 0 );
-	ValofExprNode( const ValofExprNode &other );
-	~ValofExprNode();
-
-	virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
-
-	StatementNode *get_body() const { return body; }
-	void print( std::ostream &, int indent = 0 ) const;
-	void printOneLine( std::ostream &, int indent = 0 ) const;
-	Expression *build() const;
-
-  private:
-	StatementNode *body;
-};
+Expression *build_constantInteger( std::string &str );
+Expression *build_constantFloat( std::string &str );
+Expression *build_constantChar( std::string &str );
+ConstantExpr *build_constantStr( std::string &str );
+
+NameExpr *build_varref( const std::string *name, bool labelp = false );
+Expression *build_typevalue( DeclarationNode *decl );
+
+Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node );
+Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member );
+Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member );
+Expression *build_addressOf( ExpressionNode *expr_node );
+Expression *build_sizeOfexpr( ExpressionNode *expr_node );
+Expression *build_sizeOftype( DeclarationNode *decl_node );
+Expression *build_alignOfexpr( ExpressionNode *expr_node );
+Expression *build_alignOftype( DeclarationNode *decl_node );
+Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member );
+Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
+Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind );
+Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node );
+Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node );
+Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
+Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
+Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 );
+Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
+Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node );
+Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node );
+Expression *build_tuple( ExpressionNode * expr_node = 0 );
+Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node );
+Expression *build_range( ExpressionNode * low, ExpressionNode *high );
+Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
+Expression *build_valexpr( StatementNode *s );
+Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids );
+
+//##############################################################################
 
 class TypeData;
@@ -386,4 +226,8 @@
 	static DeclarationNode *newBuiltinType( BuiltinType );
 
+	DeclarationNode();
+	~DeclarationNode();
+	DeclarationNode *clone() const;
+
 	DeclarationNode *addQualifiers( DeclarationNode *);
 	DeclarationNode *copyStorageClasses( DeclarationNode *);
@@ -401,5 +245,5 @@
 	DeclarationNode *addNewArray( DeclarationNode *array );
 	DeclarationNode *addParamList( DeclarationNode *list );
-	DeclarationNode *addIdList( DeclarationNode *list );       // old-style functions
+	DeclarationNode *addIdList( DeclarationNode *list ); // old-style functions
 	DeclarationNode *addInitializer( InitializerNode *init );
 
@@ -412,7 +256,6 @@
 	DeclarationNode *appendList( DeclarationNode * );
 
-	DeclarationNode *clone() const;
-	void print( std::ostream &, int indent = 0 ) const;
-	void printList( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printList( std::ostream &os, int indent = 0 ) const;
 
 	Declaration *build() const;
@@ -427,7 +270,4 @@
 	bool get_extension() const { return extension; }
 	DeclarationNode *set_extension( bool exten ) { extension = exten; return this; }
-
-	DeclarationNode();
-	~DeclarationNode();
   private:
 	StorageClass buildStorageClass() const;
@@ -448,154 +288,72 @@
 }; // DeclarationNode
 
+Type *buildType( TypeData *type );
+
+//##############################################################################
+
 class StatementNode : public ParseNode {
   public:
-	enum Type { Exp,   If,        Switch,  Case,    Default,  Choose,   Fallthru,
-				While, Do,        For,
-				Goto,  Continue,  Break,   Return,  Throw,
-				Try,   Catch,     Finally, Asm,
-				Decl
-	};
-
-	StatementNode();
-	StatementNode( const std::string *name );
-	StatementNode( Type t, ExpressionNode *control = 0, StatementNode *block = 0 );
-	StatementNode( Type t, std::string *target );
+	StatementNode() { stmt = nullptr; }
+	StatementNode( Statement *stmt ) : stmt( stmt ) {}
 	StatementNode( DeclarationNode *decl );
-
-	~StatementNode();
-
-	static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
-
-	StatementNode *set_block( StatementNode *b ) {	block = b; return this; }
-	StatementNode *get_block() const { return block; }
-
-	void set_control( ExpressionNode *c ) { control = c; }
-	ExpressionNode *get_control() const { return control; }
-
-	StatementNode::Type get_type() const { return type; }
-
-	StatementNode *add_label( const std::string * );
-	const std::list<std::string> &get_labels() const { return labels; }
-
-	void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
-	void setCatchRest( bool newVal ) { isCatchRest = newVal; }
-
-	std::string get_target() const;
-
-	StatementNode *add_controlexp( ExpressionNode * );
-	StatementNode *append_block( StatementNode * );
-	StatementNode *append_last_case( StatementNode * );
-
-	void print( std::ostream &, int indent = 0) const;
-	virtual StatementNode *clone() const;
-	virtual Statement *build() const;
-  private:
-	static const char *StType[];
-	Type type;
-	ExpressionNode *control;
-	StatementNode *block;
-	std::list<std::string> labels;
-	std::string *target;				// target label for jump statements
-	DeclarationNode *decl;
-	bool isCatchRest;
+	virtual ~StatementNode() {}
+
+	virtual StatementNode *clone() const { assert( false ); return nullptr; }
+	virtual Statement *build() const { return stmt; }
+
+	virtual StatementNode *add_label( const std::string * name ) {
+		stmt->get_labels().emplace_back( *name );
+		return this;
+	}
+
+	virtual StatementNode *append_last_case( StatementNode * );
+
+	virtual void print( std::ostream &os, int indent = 0 ) {}
+	virtual void printList( std::ostream &os, int indent = 0 ) {}
+  private:
+	Statement *stmt;
 }; // StatementNode
 
-class CompoundStmtNode : public StatementNode {
-  public:
-	CompoundStmtNode();
-	CompoundStmtNode( const std::string * );
-	CompoundStmtNode( StatementNode * );
-	~CompoundStmtNode();
-
-	void add_statement( StatementNode * );
-
-	void print( std::ostream &, int indent = 0 ) const;
-	virtual Statement *build() const;
-  private:
-	StatementNode *first, *last;
-};
-
-class AsmStmtNode : public StatementNode {
-  public:
-	AsmStmtNode( Type, bool voltile, ConstantNode *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ConstantNode *clobber = 0, LabelNode *gotolabels = 0 );
-	~AsmStmtNode();
-
-	void print( std::ostream &, int indent = 0 ) const;
-	Statement *build() const;
-  private:
-	bool voltile;
-	ConstantNode *instruction;
-	ExpressionNode *output, *input;
-	ConstantNode *clobber;
-	std::list< Label > gotolabels;
-};
-
-class NullStmtNode : public CompoundStmtNode {
-  public:
-	Statement *build() const;
-	void print( std::ostream &, int indent = 0 ) const;
-};
-
-class InitializerNode : public ParseNode {
-  public:
-	InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
-	InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
-	~InitializerNode();
-
-	ExpressionNode *get_expression() const { return expr; }
-
-	InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
-	ExpressionNode *get_designators() const { return designator; }
-
-	InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
-	bool get_maybeConstructed() const { return maybeConstructed; }
-
-	InitializerNode *next_init() const { return kids; }
-
-	void print( std::ostream &, int indent = 0 ) const;
-	void printOneLine( std::ostream & ) const;
-
-	virtual Initializer *build() const;
-  private:
-	ExpressionNode *expr;
-	bool aggregate;
-	ExpressionNode *designator; // may be list
-	InitializerNode *kids;
-	bool maybeConstructed;
-};
-
-class CompoundLiteralNode : public ExpressionNode {
-  public:
-	CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
-	CompoundLiteralNode( const CompoundLiteralNode &type );
-	~CompoundLiteralNode();
-
-	virtual CompoundLiteralNode *clone() const;
-
-	DeclarationNode *get_type() const { return type; }
-	CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
-
-	InitializerNode *get_initializer() const { return kids; }
-	CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
-
-	void print( std::ostream &, int indent = 0 ) const;
-	void printOneLine( std::ostream &, int indent = 0 ) const;
-
-	virtual Expression *build() const;
-  private:
-	DeclarationNode *type;
-	InitializerNode *kids;
-};
+Statement *build_expr( ExpressionNode *ctl );
+
+struct ForCtl {
+	ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) :
+		init( new StatementNode( build_expr( expr ) ) ), condition( condition ), change( change ) {}
+	ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) :
+		init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
+
+	StatementNode *init;
+	ExpressionNode *condition;
+	ExpressionNode *change;
+};
+
+Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
+Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
+Statement *build_case( ExpressionNode *ctl );
+Statement *build_default();
+Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind = false );
+Statement *build_for( ForCtl *forctl, StatementNode *stmt );
+Statement *build_branch( std::string identifier, BranchStmt::Type kind );
+Statement *build_computedgoto( ExpressionNode *ctl );
+Statement *build_return( ExpressionNode *ctl );
+Statement *build_throw( ExpressionNode *ctl );
+Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt );
+Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny = false );
+Statement *build_finally( StatementNode *stmt );
+Statement *build_compound( StatementNode *first );
+Statement *build_asmstmt( bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 );
+
+//##############################################################################
 
 template< typename SynTreeType, typename NodeType >
-void buildList( const NodeType *firstNode, std::list< SynTreeType *> &outputList ) {
+void buildList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {
 	SemanticError errors;
-	std::back_insert_iterator< std::list< SynTreeType *> > out( outputList );
+	std::back_insert_iterator< std::list< SynTreeType * > > out( outputList );
 	const NodeType *cur = firstNode;
 
 	while ( cur ) {
 		try {
-//			SynTreeType *result = dynamic_cast< SynTreeType *>( maybeBuild<typename std::result_of<decltype(&NodeType::build)(NodeType)>::type>( cur ) );
-			SynTreeType *result = dynamic_cast< SynTreeType *>( maybeBuild<typename std::pointer_traits<decltype(cur->build())>::element_type>( cur ) );
+//			SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::result_of< decltype(&NodeType::build)(NodeType)>::type >( cur ) );
+			SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::pointer_traits< decltype(cur->build())>::element_type >( cur ) );
 			if ( result ) {
 				*out++ = result;
@@ -605,5 +363,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< NodeType *>( cur->get_link() );
+		cur = dynamic_cast< NodeType * >( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -614,10 +372,6 @@
 // in DeclarationNode.cc
 void buildList( const DeclarationNode *firstNode, std::list< Declaration * > &outputList );
-void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType *> &outputList );
+void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList );
 void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList );
-
-// in ExpressionNode.cc
-ExpressionNode *flattenCommas( ExpressionNode *list );
-ExpressionNode *tupleContents( ExpressionNode *tuple );
 
 #endif // PARSENODE_H
Index: src/Parser/Parser.cc
===================================================================
--- src/Parser/Parser.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/Parser.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:54:28 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Mar 21 18:04:47 2016
-// Update Count     : 5
+// Last Modified On : Mon Aug 15 17:44:22 2016
+// Update Count     : 7
 // 
 
Index: src/Parser/Parser.h
===================================================================
--- src/Parser/Parser.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/Parser.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:56:50 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May 16 14:58:56 2015
-// Update Count     : 2
+// Last Modified On : Mon Aug 15 16:33:22 2016
+// Update Count     : 3
 //
 
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/StatementNode.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:21:02 2016
-// Update Count     : 133
+// Last Modified On : Mon Aug 15 20:47:11 2016
+// Update Count     : 322
 //
 
@@ -26,402 +26,169 @@
 using namespace std;
 
-const char *StatementNode::StType[] = {
-	"Exp",   "If",       "Switch", "Case",    "Default",  "Choose",   "Fallthru",
-	"While", "Do",       "For",
-	"Goto",  "Continue", "Break",  "Return",  "Throw",
-	"Try",   "Catch",    "Finally", "Asm",
-	"Decl"
-};
 
-StatementNode::StatementNode() : ParseNode(), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {}
-
-StatementNode::StatementNode( const string *name ) : ParseNode( name ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {}
-
-StatementNode::StatementNode( DeclarationNode *decl ) : type( Decl ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), isCatchRest ( false ) {
+StatementNode::StatementNode( DeclarationNode *decl ) {
 	if ( decl ) {
-		if ( DeclarationNode *agg = decl->extractAggregate() ) {
-			this->decl = agg;
-			StatementNode *nextStmt = new StatementNode;
-			nextStmt->type = Decl;
-			nextStmt->decl = decl;
-			next = nextStmt;
-			if ( decl->get_link() ) {
-				next->set_next( new StatementNode( dynamic_cast< DeclarationNode* >( decl->get_link() ) ) );
+		DeclarationNode *agg = decl->extractAggregate();
+		if ( agg ) {
+			StatementNode *nextStmt = new StatementNode( new DeclStmt( noLabels, maybeBuild< Declaration >( decl ) ) );
+			set_next( nextStmt );
+			if ( decl->get_next() ) {
+				get_next()->set_next( new StatementNode( dynamic_cast< DeclarationNode * >(decl->get_next()) ) );
 				decl->set_next( 0 );
 			} // if
 		} else {
-			if ( decl->get_link() ) {
-				next = new StatementNode( dynamic_cast< DeclarationNode* >( decl->get_link() ) );
+			if ( decl->get_next() ) {
+				set_next(new StatementNode( dynamic_cast< DeclarationNode * >( decl->get_next() ) ) );
 				decl->set_next( 0 );
 			} // if
-			this->decl = decl;
+			agg = decl;
 		} // if
+		stmt = new DeclStmt( noLabels, maybeBuild< Declaration >(agg) );
+	} else {
+		assert( false );
 	} // if
 }
 
-StatementNode::StatementNode( Type t, ExpressionNode *ctrl_label, StatementNode *block ) : type( t ), control( ctrl_label ), block( block ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {
-	this->control = ( t == Default ) ? 0 : control;
-}
-
-StatementNode::StatementNode( Type t, string *target ) : type( t ), control( 0 ), block( 0 ), labels( 0 ), target( target ), decl( 0 ), isCatchRest ( false ) {}
-
-StatementNode::~StatementNode() {
-	delete control;
-	delete block;
-	delete target;
-	delete decl;
-}
-
-StatementNode * StatementNode::newCatchStmt( DeclarationNode *d, StatementNode *s, bool catchRestP ) {
-	StatementNode *ret = new StatementNode( StatementNode::Catch, 0, s );
-	ret->addDeclaration( d );
-	ret->setCatchRest( catchRestP );
-
-	return ret;
-}
-
-std::string StatementNode::get_target() const{
-	if ( target )
-		return *target;
-
-	return string("");
-}
-
-StatementNode * StatementNode::clone() const {
-	StatementNode *newnode = new StatementNode( type, maybeClone( control ), maybeClone( block ) );
-	if ( target ) {
-		newnode->target = new string( *target );
-	} else {
-		newnode->target = 0;
-	} // if
-	newnode->decl = maybeClone( decl );
-	return newnode;
-}
-
-StatementNode *StatementNode::add_label( const std::string *l ) {
-	if ( l != 0 ) {
-		labels.push_front( *l );
-		delete l;
-	} // if
+StatementNode *StatementNode::append_last_case( StatementNode *stmt ) {
+	StatementNode *prev = this;
+	// find end of list and maintain previous pointer
+	for ( StatementNode * curr = prev; curr != nullptr; curr = (StatementNode *)curr->get_next() ) {
+		StatementNode *node = dynamic_cast< StatementNode * >(curr);
+		assert( node );
+		assert( dynamic_cast< CaseStmt * >(node->stmt) );
+		prev = curr;
+	} // for
+	// convert from StatementNode list to Statement list
+	StatementNode *node = dynamic_cast< StatementNode * >(prev);
+	std::list< Statement * > stmts;
+	buildList( stmt, stmts );
+	// splice any new Statements to end of current Statements
+	CaseStmt * caseStmt = dynamic_cast< CaseStmt * >(node->stmt);
+	caseStmt->get_statements().splice( caseStmt->get_statements().end(), stmts );
 	return this;
 }
 
-StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) {
-	if ( control && e )
-		control->add_to_list( e ); // xxx - check this
-	return this;
+Statement *build_expr( ExpressionNode *ctl ) {
+	Expression *e = maybeBuild< Expression >( ctl );
+
+	if ( e )
+		return new ExprStmt( noLabels, e );
+	else
+		return new NullStmt( noLabels );
 }
 
-StatementNode *StatementNode::append_block( StatementNode *stmt ) {
-	if ( stmt != 0 ) {
-		if ( block == 0 )
-			block = stmt;
-		else
-			block->set_link( stmt );
+Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt ) {
+	Statement *thenb, *elseb = 0;
+	std::list< Statement * > branches;
+	buildList< Statement, StatementNode >( then_stmt, branches );
+	assert( branches.size() == 1 );
+	thenb = branches.front();
+
+	if ( else_stmt ) {
+		std::list< Statement * > branches;
+		buildList< Statement, StatementNode >( else_stmt, branches );
+		assert( branches.size() == 1 );
+		elseb = branches.front();
 	} // if
-	return this;
+	return new IfStmt( noLabels, notZeroExpr( maybeBuild< Expression >(ctl) ), thenb, elseb );
 }
 
-StatementNode *StatementNode::append_last_case( StatementNode *stmt ) {
-	if ( stmt != 0 ) {
-		StatementNode *next = ( StatementNode *)get_link();
-		if ( next && ( next->get_type() == StatementNode::Case || next->get_type() == StatementNode::Default ) )
-			next->append_last_case ( stmt );
-		else
-			if ( block == 0 )
-				block = stmt;
-			else
-				block->set_link( stmt );
-	} // if
-	return this;
+Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt ) {
+	std::list< Statement * > branches;
+	buildList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() >= 0 );						// size == 0 for switch (...) {}, i.e., no declaration or statements
+	return new SwitchStmt( noLabels, maybeBuild< Expression >(ctl), branches );
+}
+Statement *build_case( ExpressionNode *ctl ) {
+	std::list< Statement * > branches;
+	return new CaseStmt( noLabels, maybeBuild< Expression >(ctl), branches );
+}
+Statement *build_default() {
+	std::list< Statement * > branches;
+	return new CaseStmt( noLabels, nullptr, branches, true );
 }
 
-void StatementNode::print( std::ostream &os, int indent ) const {
-	if ( ! labels.empty() ) {
-		std::list<std::string>::const_iterator i;
+Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind ) {
+	std::list< Statement * > branches;
+	buildList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+	return new WhileStmt( noLabels, notZeroExpr( maybeBuild< Expression >(ctl) ), branches.front(), kind );
+}
 
-		os << string( indent, ' ' );
-		for ( i = labels.begin(); i != labels.end(); i++ )
-			os << *i << ":";
-		os << endl;
+Statement *build_for( ForCtl *forctl, StatementNode *stmt ) {
+	std::list< Statement * > branches;
+	buildList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+
+	std::list< Statement * > init;
+	if ( forctl->init != 0 ) {
+		buildList( forctl->init, init );
 	} // if
 
-	switch ( type ) {
-	  case Decl:
-		decl->print( os, indent );
-		break;
-	  case Exp:
-		if ( control ) {
-			os << string( indent, ' ' );
-			control->print( os, indent );
-			os << endl;
-		} else
-			os << string( indent, ' ' ) << "Null Statement" << endl;
-		break;
-	  default:
-		os << string( indent, ' ' ) << StatementNode::StType[type] << endl;
-		if ( type == Catch ) {
-			if ( decl ) {
-				os << string( indent + ParseNode::indent_by, ' ' ) << "Declaration: " << endl;
-				decl->print( os, indent + 2 * ParseNode::indent_by );
-			} else if ( isCatchRest ) {
-				os << string( indent + ParseNode::indent_by, ' ' ) << "Catches the rest " << endl;
-			} else {
-				; // should never reach here
-			} // if
-		} // if
-		if ( control ) {
-			os << string( indent + ParseNode::indent_by, ' ' ) << "Control: " << endl;
-			control->printList( os, indent + 2 * ParseNode::indent_by );
-		} // if
-		if ( block ) {
-			os << string( indent + ParseNode::indent_by, ' ' ) << "Branches of execution: " << endl;
-			block->printList( os, indent + 2 * ParseNode::indent_by );
-		} // if
-		if ( target ) {
-			os << string( indent + ParseNode::indent_by, ' ' ) << "Target: " << get_target() << endl;
-		} // if
-		break;
-	} // switch
+	Expression *cond = 0;
+	if ( forctl->condition != 0 )
+		cond = notZeroExpr( maybeBuild< Expression >(forctl->condition) );
+
+	Expression *incr = 0;
+	if ( forctl->change != 0 )
+		incr = maybeBuild< Expression >(forctl->change);
+
+	delete forctl;
+	return new ForStmt( noLabels, init, cond, incr, branches.front() );
 }
 
-Statement *StatementNode::build() const {
-	std::list<Statement *> branches;
-	std::list<Expression *> exps;
-	std::list<Label> labs;
-
-	if ( ! labels.empty() ) {
-		std::back_insert_iterator< std::list<Label> > lab_it( labs );
-		copy( labels.begin(), labels.end(), lab_it );
-	} // if
-
-	// try {
-	buildList<Statement, StatementNode>( get_block(), branches );
-
-	switch ( type ) {
-	  case Decl:
-		return new DeclStmt( labs, maybeBuild< Declaration >( decl ) );
-	  case Exp:
-		{
-			Expression *e = maybeBuild< Expression >( get_control() );
-
-			if ( e )
-				return new ExprStmt( labs, e );
-			else
-				return new NullStmt( labs );
-		}
-	  case If:
-		{
-			Statement *thenb = 0, *elseb = 0;
-			assert( branches.size() >= 1 );
-
-			thenb = branches.front();
-			branches.pop_front();
-			if ( ! branches.empty() ) {
-				elseb = branches.front();
-				branches.pop_front();
-			} // if
-			return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );
-		}
-	  case While:
-		assert( branches.size() == 1 );
-		return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );
-	  case Do:
-		assert( branches.size() == 1 );
-		return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );
-	  case For:
-		{
-			assert( branches.size() == 1 );
-
-			ForCtlExprNode *ctl = dynamic_cast<ForCtlExprNode *>( get_control() );
-			assert( ctl != 0 );
-
-			std::list<Statement *> init;
-			if ( ctl->get_init() != 0 ) {
-				buildList( ctl->get_init(), init );
-			} // if
-
-			Expression *cond = 0;
-			if ( ctl->get_condition() != 0 )
-				cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );
-
-			Expression *incr = 0;
-			if ( ctl->get_change() != 0 )
-				incr = maybeBuild<Expression>(ctl->get_change());
-
-			return new ForStmt( labs, init, cond, incr, branches.front() );
-		}
-	  case Switch:
-		return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
-	  case Case:
-		return new CaseStmt( labs, maybeBuild<Expression>(get_control()), branches );
-	  case Default:
-		return new CaseStmt( labs, 0, branches, true );
-	  case Goto:
-		{
-			if ( get_target() == "" ) {					// computed goto
-				assert( get_control() != 0 );
-				return new BranchStmt( labs, maybeBuild<Expression>(get_control()), BranchStmt::Goto );
-			} // if
-
-			return new BranchStmt( labs, get_target(), BranchStmt::Goto );
-		}
-	  case Break:
-		return new BranchStmt( labs, get_target(), BranchStmt::Break );
-	  case Continue:
-		return new BranchStmt( labs, get_target(), BranchStmt::Continue );
-	  case Return:
-	  case Throw :
-		buildList( get_control(), exps );
-		if ( exps.size() ==0 )
-			return new ReturnStmt( labs, 0, type == Throw );
-		if ( exps.size() > 0 )
-			return new ReturnStmt( labs, exps.back(), type == Throw );
-	  case Try:
-		{
-			assert( branches.size() >= 0 );
-			CompoundStmt *tryBlock = dynamic_cast<CompoundStmt *>( branches.front());
-			branches.pop_front();
-			FinallyStmt *finallyBlock = 0;
-			if ( ( finallyBlock = dynamic_cast<FinallyStmt *>( branches.back())) ) {
-				branches.pop_back();
-			} // if
-			return new TryStmt( labs, tryBlock, branches, finallyBlock );
-		}
-	  case Catch:
-		{
-			assert( branches.size() == 1 );
-
-			return new CatchStmt( labs, maybeBuild< Declaration >( decl ), branches.front(), isCatchRest );
-		}
-	  case Finally:
-		{
-			assert( branches.size() == 1 );
-			CompoundStmt *block = dynamic_cast<CompoundStmt *>( branches.front() );
-			assert( block != 0 );
-
-			return new FinallyStmt( labs, block );
-		}
-	  case Asm:
-		assert( false );
-	  default:
-		// shouldn't be here
-		return 0;
-	} // switch
+Statement *build_branch( std::string identifier, BranchStmt::Type kind ) {
+	return new BranchStmt( noLabels, identifier, kind );
+}
+Statement *build_computedgoto( ExpressionNode *ctl ) {
+	return new BranchStmt( noLabels, maybeBuild< Expression >(ctl), BranchStmt::Goto );
 }
 
-
-CompoundStmtNode::CompoundStmtNode() : first( 0 ), last( 0 ) {}
-
-CompoundStmtNode::CompoundStmtNode( const string *name_ ) : StatementNode( name_ ), first( 0 ), last( 0 ) {}
-
-CompoundStmtNode::CompoundStmtNode( StatementNode *stmt ) : first( stmt ) {
-	if ( first ) {
-		last = ( StatementNode *)( stmt->get_last());
-	} else {
-		last = 0;
-	} // if
+Statement *build_return( ExpressionNode *ctl ) {
+	std::list< Expression * > exps;
+	buildList( ctl, exps );
+	return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr );
+}
+Statement *build_throw( ExpressionNode *ctl ) {
+	std::list< Expression * > exps;
+	buildList( ctl, exps );
+	return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr, true );
 }
 
-CompoundStmtNode::~CompoundStmtNode() {
-	delete first;
+Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt ) {
+	std::list< Statement * > branches;
+	buildList< Statement, StatementNode >( catch_stmt, branches );
+	CompoundStmt *tryBlock = dynamic_cast< CompoundStmt * >(maybeBuild< Statement >(try_stmt));
+	assert( tryBlock );
+	FinallyStmt *finallyBlock = dynamic_cast< FinallyStmt * >(maybeBuild< Statement >(finally_stmt) );
+	return new TryStmt( noLabels, tryBlock, branches, finallyBlock );
+}
+Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny ) {
+	std::list< Statement * > branches;
+	buildList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+	return new CatchStmt( noLabels, maybeBuild< Declaration >(decl), branches.front(), catchAny );
+}
+Statement *build_finally( StatementNode *stmt ) {
+	std::list< Statement * > branches;
+	buildList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+	return new FinallyStmt( noLabels, dynamic_cast< CompoundStmt * >( branches.front() ) );
 }
 
-void CompoundStmtNode::add_statement( StatementNode *stmt ) {
-	if ( stmt != 0 ) {
-		last->set_link( stmt );
-		last = ( StatementNode *)( stmt->get_link());
-	} // if
-}
-
-void CompoundStmtNode::print( ostream &os, int indent ) const {
-	if ( first ) {
-		first->printList( os, indent+2 );
-	} // if
-}
-
-Statement *CompoundStmtNode::build() const {
-	std::list<Label> labs;
-	const std::list<std::string> &labels = get_labels();
-
-	if ( ! labels.empty() ) {
-		std::back_insert_iterator< std::list<Label> > lab_it( labs );
-		copy( labels.begin(), labels.end(), lab_it );
-	} // if
-
-	CompoundStmt *cs = new CompoundStmt( labs );
+Statement *build_compound( StatementNode *first ) {
+	CompoundStmt *cs = new CompoundStmt( noLabels );
 	buildList( first, cs->get_kids() );
 	return cs;
 }
 
-
-AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantNode *instruction, ExpressionNode *output, ExpressionNode *input, ConstantNode *clobber, LabelNode *gotolabels ) :
-	StatementNode( t ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ) {
-	if ( gotolabels ) {
-		this->gotolabels = gotolabels->get_labels();
-		delete gotolabels;
-	} // if
-}
-
-AsmStmtNode::~AsmStmtNode() {
-	delete instruction; delete output; delete input; delete clobber;
-}
-
-void AsmStmtNode::print( std::ostream &os, int indent ) const {
-	StatementNode::print( os, indent );					// print statement labels
-	os << string( indent + ParseNode::indent_by, ' ' ) << "volatile:" << voltile << endl;
-	if ( instruction ) {
-		os << string( indent + ParseNode::indent_by, ' ' ) << "Instruction:" << endl;
-		instruction->printList( os, indent + 2 * ParseNode::indent_by );
-	} // if
-	if ( output ) {
-		os << string( indent + ParseNode::indent_by, ' ' ) << "Output:" << endl;
-		output->printList( os, indent + 2 * ParseNode::indent_by );
-	} // if
-	if ( input ) {
-		os << string( indent + ParseNode::indent_by, ' ' ) << "Input:" << endl;
-		input->printList( os, indent + 2 * ParseNode::indent_by );
-	} // if
-	if ( clobber ) {
-		os << string( indent + ParseNode::indent_by, ' ' ) << "Clobber:" << endl;
-		clobber->printList( os, indent + 2 * ParseNode::indent_by );
-	} // if
-	if ( ! gotolabels.empty() ) {
-		os << string( indent + ParseNode::indent_by, ' ' ) << "Goto Labels:" << endl;
-		os << string( indent + 2 * ParseNode::indent_by, ' ' );
-		for ( std::list<Label>::const_iterator i = gotolabels.begin();; ) {
-			os << *i;
-			i++;
-		  if ( i == gotolabels.end() ) break;
-			os << ", ";
-		}
-		os << endl;
-	} // if
-}
-
-Statement *AsmStmtNode::build() const {
-	std::list<Label> labs;
-
-	if ( ! get_labels().empty() ) {
-		std::back_insert_iterator< std::list<Label> > lab_it( labs );
-		copy( get_labels().begin(), get_labels().end(), lab_it );
-	} // if
-
+Statement *build_asmstmt( bool voltile, ConstantExpr *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) {
 	std::list< Expression * > out, in;
 	std::list< ConstantExpr * > clob;
+
 	buildList( output, out );
 	buildList( input, in );
 	buildList( clobber, clob );
-	std::list< Label > gotolabs = gotolabels;
-	return new AsmStmt( labs, voltile, (ConstantExpr *)maybeBuild< Expression >( instruction ), out, in, clob, gotolabs );
-}
-
-
-void NullStmtNode::print( ostream &os, int indent ) const {
-	os << string( indent, ' ' ) << "Null Statement:" << endl;
-}
-
-Statement *NullStmtNode::build() const {
-	return new NullStmt;
+	return new AsmStmt( noLabels, voltile, instruction, out, in, clob, gotolabels ? gotolabels->labels : noLabels );
 }
 
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/TypeData.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul 13 18:03:29 2016
-// Update Count     : 56
+// Last Modified On : Mon Aug 15 20:48:52 2016
+// Update Count     : 62
 //
 
@@ -182,5 +182,5 @@
 		break;
 	  case Array:
-		newtype->array->dimension = maybeClone( array->dimension );
+		newtype->array->dimension = array->dimension;
 		newtype->array->isVarLen = array->isVarLen;
 		newtype->array->isStatic = array->isStatic;
@@ -488,11 +488,11 @@
 				decl = new FunctionDecl( name, sc, linkage, buildFunction(), body, isInline, isNoreturn );
 			} else {
-				// std::list<Label> ls;
-				decl = new FunctionDecl( name, sc, linkage, buildFunction(), new CompoundStmt( std::list<Label>() ), isInline, isNoreturn );
+				// std::list< Label > ls;
+				decl = new FunctionDecl( name, sc, linkage, buildFunction(), new CompoundStmt( std::list< Label >() ), isInline, isNoreturn );
 			} // if
 		} else {
 			decl = new FunctionDecl( name, sc, linkage, buildFunction(), 0, isInline, isNoreturn );
 		} // if
-		for ( DeclarationNode *cur = function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_link() ) ) {
+		for ( DeclarationNode *cur = function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_next() ) ) {
 			if ( cur->get_name() != "" ) {
 				decl->get_oldIdents().insert( decl->get_oldIdents().end(), cur->get_name() );
@@ -510,5 +510,5 @@
 		return buildVariable();
 	} else {
-		return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init, isInline, isNoreturn );
+		return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init, std::list< Attribute * >(),  isInline, isNoreturn );
 	} // if
 	return 0;
@@ -908,7 +908,7 @@
 	buildList( enumeration->constants, ret->get_members() );
 	std::list< Declaration * >::iterator members = ret->get_members().begin();
-	for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) {
+	for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ), ++members ) {
 		if ( cur->get_enumeratorValue() != NULL ) {
-			ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members);
+			ObjectDecl *member = dynamic_cast< ObjectDecl * >(*members);
 			member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ), std::list< Expression * >() ) );
 		} // if
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/TypeData.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 20:52:02 2016
-// Update Count     : 20
+// Last Modified On : Mon Aug 15 14:28:32 2016
+// Update Count     : 21
 //
 
Index: src/Parser/TypedefTable.cc
===================================================================
--- src/Parser/TypedefTable.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/TypedefTable.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:20:13 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Apr 13 16:57:30 2016
-// Update Count     : 24
+// Last Modified On : Mon Aug 15 18:24:42 2016
+// Update Count     : 25
 //
 
@@ -64,9 +64,9 @@
 		tableType::iterator curPos = table.find( identifier );
 		if ( curPos == table.end()) {
-			list<Entry> newList;
+			list< Entry > newList;
 			newList.push_front( newEntry );
 			table[identifier] = newList;
 		} else {
-			list<Entry>::iterator listPos = (*curPos ).second.begin();
+			list< Entry >::iterator listPos = (*curPos ).second.begin();
 			while ( listPos != (*curPos ).second.end() && listPos->scope > scope ) {
 				listPos++;
@@ -127,5 +127,5 @@
 	debugPrint( "Leaving scope " << currentScope << endl );
 	for ( tableType::iterator i = table.begin(); i != table.end(); ) {
-		list<Entry> &declList = (*i).second;
+		list< Entry > &declList = (*i).second;
 		while ( ! declList.empty() && declList.front().scope == currentScope ) {
 			declList.pop_front();
@@ -157,6 +157,6 @@
 	for ( tableType::const_iterator i = table.begin(); i != table.end(); i++) {
 		debugPrint( (*i ).first << ": " );
-		list<Entry> declList = (*i).second;
-		for ( list<Entry>::const_iterator j = declList.begin(); j != declList.end(); j++ ) {
+		list< Entry > declList = (*i).second;
+		for ( list< Entry >::const_iterator j = declList.begin(); j != declList.end(); j++ ) {
 			debugPrint( "(" << (*j).scope << " " << (*j).kind << ") " );
 		}
Index: src/Parser/TypedefTable.h
===================================================================
--- src/Parser/TypedefTable.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/TypedefTable.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:24:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Apr 13 16:59:56 2016
-// Update Count     : 27
+// Last Modified On : Mon Aug 15 18:25:04 2016
+// Update Count     : 28
 //
 
@@ -39,5 +39,5 @@
 	};
 
-	typedef std::map<std::string, std::list<Entry> > tableType;
+	typedef std::map< std::string, std::list< Entry > > tableType;
 	tableType table;
 
Index: src/Parser/lex.cc
===================================================================
--- src/Parser/lex.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/lex.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -382,6 +382,6 @@
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 180
-#define YY_END_OF_BUFFER 181
+#define YY_NUM_RULES 181
+#define YY_END_OF_BUFFER 182
 /* This struct is not used in this scanner,
    but its presence is necessary. */
@@ -391,103 +391,105 @@
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[888] =
+static yyconst flex_int16_t yy_accept[892] =
     {   0,
-        0,    0,    0,    0,    0,    0,  115,  115,  118,  118,
-      181,  179,    7,    9,    8,  138,  117,  102,  143,  146,
-      114,  125,  126,  141,  139,  129,  140,  132,  142,  107,
-      108,  109,  130,  131,  148,  150,  149,  151,  179,  102,
-      123,  179,  124,  144,  102,  104,  102,  102,  102,  102,
-      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  127,  147,  128,  145,    7,  179,    4,    4,
-      180,  105,  180,  106,  115,  116,  122,  118,  119,    7,
-        9,    0,    8,  155,  174,  102,    0,  167,  137,  160,
-      168,  165,  152,  163,  153,  164,  162,    0,  112,    3,
-
-        0,  166,  112,  110,    0,    0,  110,  110,    0,    0,
-      110,  109,  109,  109,    0,  109,  135,  136,  134,  156,
-      158,  154,  159,  157,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  103,
-      173,    0,  117,  114,  102,    0,    0,  170,    0,  102,
-      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,  102,  102,   38,  102,  102,  102,
-      102,  102,  102,  102,  102,  102,  102,   56,  102,  102,
-      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,  169,  161,    7,    0,    0,    0,
-
-        2,    0,    5,  105,    0,    0,    0,  115,    0,  121,
-      120,  120,    0,    0,    0,  118,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  116,  116,  119,  119,
+      182,  180,    7,    9,    8,  139,  118,  103,  144,  147,
+      115,  126,  127,  142,  140,  130,  141,  133,  143,  108,
+      109,  110,  131,  132,  149,  151,  150,  152,  180,  103,
+      124,  180,  125,  145,  103,  105,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  128,  148,  129,  146,    7,  180,    4,    4,
+      181,  106,  181,  107,  116,  117,  123,  119,  120,    7,
+        9,    0,    8,  156,  175,  103,    0,  168,  138,  161,
+      169,  166,  153,  164,  154,  165,  163,    0,  113,    3,
+
+        0,  167,  113,  111,    0,    0,  111,  111,    0,    0,
+      111,  110,  110,  110,    0,  110,  136,  137,  135,  157,
+      159,  155,  160,  158,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  104,
+      174,    0,  118,  115,  103,    0,    0,  171,    0,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,   38,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,   57,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  170,  162,    7,    0,    0,    0,
+
+        2,    0,    5,  106,    0,    0,    0,  116,    0,  122,
+      121,  121,    0,    0,    0,  119,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  133,  112,  112,    0,  112,  112,    0,    0,    6,
-        0,  110,    0,    0,    0,  112,    0,  110,  110,  110,
-      110,    0,  111,    0,    0,  109,  109,  109,  109,    0,
-      171,  172,    0,  177,  175,    0,    0,    0,  103,    0,
-        0,    0,    0,    0,    0,    0,    0,  102,   17,  102,
-      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,  102,  102,  102,   14,  102,  102,
-
-      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,  102,  102,   50,  102,  102,  102,
-       63,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,  102,   89,  102,  102,  102,  102,
-      102,  102,  102,    0,    0,    0,    0,    0,    0,    0,
-        0,  120,    0,    0,    0,    0,    0,  120,    0,    0,
-      178,    0,    0,    0,    0,    0,    0,    0,  112,    0,
-      112,    0,  112,    0,    0,  112,    0,  110,  110,    0,
-        0,  111,  111,    0,  111,    0,  111,  109,  109,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  176,
-
-      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,   21,  102,   24,  102,   27,  102,  102,
-      102,  102,  102,  102,  102,   41,  102,   43,  102,  102,
-      102,  102,  102,  102,  102,   55,  102,   66,  102,  102,
-      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,   97,  102,  102,    0,    0,    0,
+        0,  134,  113,  113,    0,  113,  113,    0,    0,    6,
+        0,  111,    0,    0,    0,  113,    0,  111,  111,  111,
+      111,    0,  112,    0,    0,  110,  110,  110,  110,    0,
+      172,  173,    0,  178,  176,    0,    0,    0,  104,    0,
+        0,    0,    0,    0,    0,    0,    0,  103,   17,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,   14,  103,  103,
+
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,   51,  103,  103,  103,
+       64,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,   90,  103,  103,  103,  103,
+      103,  103,  103,    0,    0,    0,    0,    0,    0,    0,
+        0,  121,    0,    0,    0,    0,    0,  121,    0,    0,
+      179,    0,    0,    0,    0,    0,    0,    0,  113,    0,
+      113,    0,  113,    0,    0,  113,    0,  111,  111,    0,
+        0,  112,  112,    0,  112,    0,  112,  110,  110,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  177,
+
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,   21,  103,   24,  103,   27,  103,  103,
+      103,  103,  103,  103,  103,   41,  103,   43,  103,  103,
+      103,  103,  103,  103,  103,   56,  103,   67,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,   98,  103,  103,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  120,    0,    0,    0,    0,    0,  112,    0,    0,
-        0,    0,    0,    0,  111,  111,    0,  113,    0,  111,
-
-      111,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  102,  102,   22,  102,  102,  102,
-      102,  102,  102,  102,   15,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,  102,  102,  102,  102,  102,   23,
-       25,  102,   32,  102,  102,  102,  102,   40,  102,  102,
-      102,  102,   48,  102,  102,   53,  102,  102,   70,  102,
-      102,  102,   76,  102,  102,  102,  102,  102,   86,   88,
-      102,  102,   94,  102,  102,  101,    0,    0,    0,    0,
+        0,  121,    0,    0,    0,    0,    0,  113,    0,    0,
+        0,    0,    0,    0,  112,  112,    0,  114,    0,  112,
+
+      112,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  103,  103,   22,  103,  103,  103,
+      103,  103,  103,  103,   15,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,   23,
+       25,  103,   32,  103,  103,  103,  103,   40,  103,  103,
+      103,  103,   49,  103,  103,   54,  103,  103,   71,  103,
+      103,  103,   77,  103,  103,  103,  103,  103,   87,   89,
+      103,  103,   95,  103,  103,  102,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  113,    0,    0,  111,  113,
-
-      113,  113,  113,    0,  111,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  102,    0,  102,  102,  102,
-      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,   58,  102,  102,  102,  102,  102,  102,
-      102,  102,   28,  102,  102,  102,   39,   42,   45,  102,
-      102,   51,  102,   60,   67,  102,  102,   75,   77,   80,
-       81,   83,   84,  102,  102,   91,  102,  102,    0,    1,
-        0,    0,    0,    0,    0,    0,  105,    0,    0,    0,
-      120,    0,    0,    0,    0,  113,    0,  113,  113,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
-
-       18,  102,  102,  102,  102,  102,  102,  102,   16,  102,
-      102,  102,   33,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,  102,   36,   37,  102,   47,   52,
-      102,  102,  102,   90,  102,  102,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  114,    0,    0,  112,  114,
+
+      114,  114,  114,    0,  112,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  103,    0,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,   59,  103,  103,  103,  103,  103,  103,
+      103,  103,   28,  103,  103,  103,   39,   42,   45,  103,
+      103,   52,  103,   61,   68,  103,  103,   76,   78,   81,
+       82,   84,   85,  103,  103,   92,  103,  103,    0,    1,
+        0,    0,    0,    0,    0,    0,  106,    0,    0,    0,
+      121,    0,    0,    0,    0,  114,    0,  114,  114,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  103,  103,
+
+       18,  103,  103,  103,  103,  103,  103,  103,   16,  103,
+      103,  103,   33,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,   36,   37,  103,   48,   53,
+      103,  103,  103,   91,  103,  103,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
-       11,   29,   54,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,   59,   61,   64,  102,  102,   78,
-       92,  102,  102,   35,   46,   71,   72,  102,   95,   98,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  102,   68,  102,  102,   12,  102,  102,   30,
-
-       34,  102,  102,  102,   65,  102,  102,  102,  102,  102,
-      102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   57,  102,  102,  102,  102,  102,
-      102,  102,   49,   62,   73,   79,   93,   99,  102,  102,
-        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
-       13,   19,  102,  102,   31,  102,  102,  102,   26,   87,
-        0,    0,  102,  102,  102,  102,  102,  102,   74,  100,
-      102,   85,   20,  102,  102,   44,   82,  102,  102,  102,
-      102,  102,  102,  102,   96,   69,    0
+       11,   29,   55,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,   60,   62,   65,  103,  103,   79,
+       93,  103,  103,   35,  103,   47,   72,   73,  103,   96,
+       99,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  103,   69,  103,  103,   12,  103,  103,
+
+       30,   34,  103,  103,  103,   66,  103,  103,  103,  103,
+      103,  103,  103,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   58,  103,  103,  103,
+      103,  103,  103,  103,   50,   63,   74,   80,   94,  100,
+      103,  103,  103,    0,    0,    0,    0,    0,    0,    0,
+        0,  103,  103,   13,   19,  103,  103,   31,  103,  103,
+      103,   26,   46,   88,    0,    0,  103,  103,  103,  103,
+      103,  103,   75,  101,  103,   86,   20,  103,  103,   44,
+       83,  103,  103,  103,  103,  103,  103,  103,   97,   70,
+        0
+
     } ;
 
@@ -537,247 +539,247 @@
     } ;
 
-static yyconst flex_int16_t yy_base[1062] =
+static yyconst flex_int16_t yy_base[1066] =
     {   0,
-        0,   84, 2272, 2269,   94,    0,  177,  178,  179,  180,
-     2285, 2822,  191, 2822,  197,   55, 2822, 2231,   60,  173,
-     2822, 2822, 2822,   56,  188, 2822,  191,  189,  204,  216,
-      275,    0, 2249, 2822,  216, 2247,  152,  344,  155,  220,
-     2822,  159, 2822,  217,  226, 2822,  185,  154,  212,  251,
+        0,   84, 2285, 2282,   94,    0,  177,  178,  179,  180,
+     2298, 2825,  191, 2825,  197,   55, 2825, 2244,   60,  173,
+     2825, 2825, 2825,   56,  188, 2825,  191,  189,  204,  216,
+      275,    0, 2262, 2825,  216, 2260,  152,  344,  155,  220,
+     2825,  159, 2825,  217,  226, 2825,  185,  154,  212,  251,
       237,  270,  235,  257,  241,  205,  193,  305,  314,  333,
-      238,  228, 2822,  225, 2822, 2242,  402,  390, 2822, 2253,
-     2822, 2221,  235, 2822,    0, 2822,  426,    0, 2822,  417,
-     2822,  439,  451, 2822,  498, 2219,  264, 2822, 2822, 2822,
-     2822, 2822, 2235, 2822, 2232, 2822, 2822, 2244,  559, 2822,
-
-     2261, 2822,  438,  444,  511,  534,  289,  253,  197,  380,
-      305,    0,  319,  280,  198,  322, 2822, 2822, 2822, 2230,
-     2822, 2822, 2822, 2227, 2224,  218,  255, 2239,  298,  350,
-      368,  312,  440,  398,  405, 2220,  441, 2168,  446, 2196,
-     2822,  335, 2822, 2822,  468, 2190, 2189, 2822, 2162,  439,
+      238,  228, 2825,  225, 2825, 2255,  402,  390, 2825, 2266,
+     2825, 2234,  235, 2825,    0, 2825,  426,    0, 2825,  417,
+     2825,  439,  451, 2825,  498, 2232,  264, 2825, 2825, 2825,
+     2825, 2825, 2248, 2825, 2245, 2825, 2825, 2257,  559, 2825,
+
+     2274, 2825,  438,  444,  511,  534,  289,  253,  197,  380,
+      305,    0,  319,  280,  198,  322, 2825, 2825, 2825, 2243,
+     2825, 2825, 2825, 2240, 2237,  218,  255, 2252,  298,  350,
+      368,  312,  440,  398,  405, 2233,  441, 2181,  446, 2209,
+     2825,  335, 2825, 2825,  468, 2203, 2202, 2825, 2175,  439,
       282,  433,  372,  281,  437,  434,  428,  570,  444,  466,
       464,  469,  475,  321,  492,  438,  471,  445,  474,  512,
-      489,  503,  496,  521,  276,  515,  516, 2189,  526,  510,
+      489,  503,  496,  521,  276,  515,  516, 2202,  526,  510,
       519,  525,  543,  522,  560,  553,  523,  561,  551,  544,
-      599,  582,  593,  584, 2822, 2822,  660,  651, 2236,  666,
-
-     2822,  678, 2822, 2183,  607, 2179, 2178,    0,  693, 2822,
-     2822,  684, 2176, 2156, 2154,    0, 2177,  578,  608,  617,
-      654,  679,  650,  683,  684,  687, 2172,  690,  691, 2147,
-     2146, 2822,    0,  683,  710,  686,  700, 2145, 2196, 2822,
-      714,    0,  427,  746,  764,  786,  808,  621, 2822, 2152,
-     2125,    0,  794, 2171,  795,  709, 2822, 2147, 2121,  832,
-     2822, 2822, 2152, 2822, 2822,  711,  714, 2129, 2129,  717,
-     2125, 2123, 2120,    0, 2117,    0, 2088,  694,  679,  712,
+      599,  582,  593,  584, 2825, 2825,  660,  651, 2249,  666,
+
+     2825,  678, 2825, 2196,  607, 2192, 2191,    0,  693, 2825,
+     2825,  684, 2189, 2186, 2183,    0, 2206,  578,  608,  617,
+      654,  679,  650,  683,  684,  687, 2203,  690,  691, 2179,
+     2159, 2825,    0,  683,  710,  686,  700, 2157, 2209, 2825,
+      714,    0,  427,  746,  764,  786,  808,  621, 2825, 2165,
+     2138,    0,  794, 2184,  795,  709, 2825, 2160, 2134,  832,
+     2825, 2825, 2165, 2825, 2825,  711,  714, 2142, 2142,  717,
+     2138, 2136, 2133,    0, 2130,    0, 2101,  694,  679,  712,
       709,  711,  698,  566,  726,  743,  771,  741,  790,  784,
-      800,  795,  742,  744,  814,  816,  818, 2118,  819,  745,
+      800,  795,  742,  744,  814,  816,  818, 2131,  819,  745,
 
       820,  821,  822,  823,  824,  746,  825,  748,  659,  831,
       826,  833,  838,  839,  848,  850,  851,  844,  834,  857,
-     2116,  858,  859,  860,  862,  861,  864,  865,  867,  868,
-      866,  871,  876,  872,  878, 2113,  880,  689,  881,  882,
-      892,  896,  893,  953,  954, 2109, 2108, 2106,    0, 2103,
-        0,  941,  945, 2102,    0, 2101,    0, 2099,    0, 2118,
-     2822,  940,  941, 2094, 2088,    0, 2086,    0, 2822,  953,
-      975,  964, 2822,  981,  997, 1021, 2084, 2822, 2822,  939,
-      940, 1006,  982, 1041,  310, 1039, 1004, 2822, 2822, 2081,
-     2079, 2077,    0, 2074,    0, 2071,    0, 2070,    0, 2822,
+     2129,  858,  859,  860,  862,  861,  864,  865,  867,  868,
+      866,  871,  876,  872,  878, 2126,  880,  689,  881,  882,
+      892,  896,  893,  953,  954, 2120, 2119, 2118,    0, 2116,
+        0,  941,  945, 2113,    0, 2112,    0, 2111,    0, 2131,
+     2825,  940,  941, 2108, 2105,    0, 2104,    0, 2825,  953,
+      975,  964, 2825,  981,  997, 1021, 2102, 2825, 2825,  939,
+      940, 1006,  982, 1041,  310, 1039, 1004, 2825, 2825, 2099,
+     2095, 2091,    0, 2089,    0, 2087,    0, 2084,    0, 2825,
 
       886,  941,  960,  962,  977,  976,  980,  982, 1017, 1010,
      1002,  998, 1022, 1031, 1028, 1033, 1034, 1037, 1040, 1043,
-     1038, 1041, 1053, 2072, 1055, 2070, 1045, 2067, 1056, 1061,
-     1063, 1065, 1066, 1067, 1070, 2064, 1071, 2063, 1073, 1074,
-     1075, 1078, 1080, 1081, 1085, 2062, 1087, 2060, 1084, 1089,
+     1038, 1041, 1053, 2085, 1055, 2083, 1045, 2080, 1056, 1061,
+     1063, 1065, 1066, 1067, 1070, 2077, 1071, 2076, 1073, 1074,
+     1075, 1078, 1080, 1081, 1085, 2075, 1087, 2073, 1084, 1089,
      1091, 1097, 1099, 1092, 1102, 1103, 1105, 1106, 1108,  905,
-     1109, 1116, 1110, 1122, 2057, 1120, 1123, 1179, 2051,    0,
-     2050,    0, 2049,    0, 2047,    0, 1166, 2044,    0, 2041,
-        0, 2040, 2039, 2037,    0, 2034,    0, 1173, 2031, 1179,
-     1137, 1195, 1181, 1178, 1176, 2822, 1219, 1231, 1253, 2042,
-
-     2017, 2027, 2024,    0, 2021,    0, 2020,    0, 2019,    0,
-     2017,    0, 2014,    0, 1141, 1172, 2014, 1180, 1155, 1196,
+     1109, 1116, 1110, 1122, 2070, 1120, 1123, 1179, 2064,    0,
+     2063,    0, 2062,    0, 2060,    0, 1166, 2057,    0, 2054,
+        0, 2053, 2052, 2050,    0, 2047,    0, 1173, 2044, 1179,
+     1137, 1195, 1181, 1178, 1176, 2825, 1219, 1231, 1253, 2055,
+
+     2030, 2040, 2037,    0, 2034,    0, 2033,    0, 2032,    0,
+     2030,    0, 2027,    0, 1141, 1172, 2027, 1180, 1155, 1196,
      1157, 1216, 1207, 1231, 1125, 1210, 1232, 1214, 1187, 1236,
-     1235, 1237, 1238, 1272, 1249, 1252, 1250, 1253, 1254, 2013,
-     1261, 1256, 2012, 1260, 1263, 1264, 1257, 2010, 1271, 1268,
-     1269, 1273, 2007, 1275, 1282, 2006, 1283, 1284, 2005, 1276,
-     1286, 1289, 2003, 1294, 1291, 1296, 1295, 1297, 1310, 2000,
-     1305, 1308, 1999, 1307, 1300, 1998, 2046, 1960,    0, 1958,
-        0, 1957,    0, 1954,    0, 1951,    0, 1950,    0, 1949,
-        0, 1947,    0, 1355, 1361, 1389, 1372, 1944, 2822, 1378,
-
-     1325, 1365, 1379, 1941, 2822, 1940,    0, 1939,    0, 1937,
-        0, 1934,    0,    0,    0, 1936,    0, 1366, 1312, 1311,
+     1235, 1237, 1238, 1272, 1249, 1252, 1250, 1253, 1254, 2026,
+     1261, 1256, 2025, 1260, 1263, 1264, 1257, 2023, 1271, 1268,
+     1269, 1273, 2020, 1275, 1282, 2017, 1283, 1284, 2016, 1276,
+     1286, 1289, 2015, 1294, 1291, 1296, 1295, 1297, 1310, 2013,
+     1305, 1308, 2010, 1307, 1300, 2009, 2058, 2003,    0, 2000,
+        0, 1999,    0, 1998,    0, 1996,    0, 1963,    0, 1961,
+        0, 1960,    0, 1355, 1361, 1389, 1372, 1957, 2825, 1378,
+
+     1325, 1365, 1379, 1954, 2825, 1953,    0, 1952,    0, 1950,
+        0, 1947,    0,    0,    0, 1947,    0, 1366, 1312, 1311,
      1341, 1323, 1368, 1369, 1374, 1356, 1383, 1372, 1388, 1390,
      1393, 1395, 1396, 1398, 1400, 1431, 1406, 1407, 1411, 1408,
-     1413, 1414, 1935, 1409, 1416, 1419, 1933, 1930, 1929, 1422,
-     1424, 1928, 1429, 1926, 1923, 1425, 1430, 1919, 1915, 1911,
-     1895, 1894, 1893, 1436, 1433, 1891, 1439, 1440, 1938, 2822,
-     1884,    0, 1883,    0,    0,    0, 1884,    0,    0,    0,
-     2822,    0,    0,    0,    0, 1486, 1878, 2822, 2822, 1492,
-     1877,    0, 1876,    0,    0,    0,    0, 1874, 1447, 1444,
-
-     1874, 1449, 1471, 1479, 1450, 1480, 1482, 1469, 1873, 1486,
+     1413, 1414, 1946, 1409, 1416, 1419, 1945, 1943, 1940, 1422,
+     1424, 1939, 1429, 1938, 1936, 1425, 1430, 1933, 1932, 1931,
+     1929, 1926, 1922, 1436, 1433, 1918, 1439, 1440, 1964, 2825,
+     1895,    0, 1894,    0,    0,    0, 1896,    0,    0,    0,
+     2825,    0,    0,    0,    0, 1486, 1891, 2825, 2825, 1492,
+     1888,    0, 1887,    0,    0,    0,    0, 1886, 1447, 1444,
+
+     1887, 1449, 1471, 1479, 1450, 1480, 1482, 1469, 1884, 1486,
      1490, 1488, 1502, 1452, 1510, 1504, 1491, 1519, 1506, 1498,
-     1508, 1512, 1513, 1514, 1515, 1872, 1870, 1517, 1867, 1866,
-     1518, 1520, 1523, 1865, 1521, 1525,    0,    0,    0, 1860,
-     1857, 1856, 1575,    0, 1855, 1853, 1850, 1849, 1848, 1849,
-     1846, 1845, 1844, 1531, 1536, 1527, 1528, 1552, 1533, 1537,
-     1539, 1555, 1557, 1569, 1842, 1560, 1839, 1561, 1559, 1568,
-     1572, 1567, 1573, 1838, 1837, 1835, 1828, 1574, 1826, 1825,
-     1819, 1818, 1817, 1815, 1798, 1789, 1788, 1785, 1778, 1775,
-     1768, 1766, 1576, 1768, 1577, 1581, 1580, 1579, 1584, 1585,
-
-     1747, 1586, 1615, 1590, 1746, 1591, 1592, 1602, 1600, 1594,
-     1606, 1742, 1735, 1733, 1732, 1690, 1689, 1686, 1685, 1683,
-     1682, 1678, 1677, 1674, 1676, 1607, 1611, 1614, 1612, 1608,
-     1616, 1620, 1675, 1623, 1624, 1530, 1453, 1630, 1625, 1629,
-     1438, 1354, 1319, 1318, 1267, 1212, 1210, 1208, 1631, 1636,
-     1178, 1639, 1635, 1643, 1177, 1644, 1646, 1650, 1126,  964,
-      937,  903, 1651, 1652, 1654, 1655, 1656, 1658,  788,  752,
-     1660,  607,  487, 1662, 1663,  394,  357, 1664, 1666, 1668,
-     1670, 1669, 1672, 1674,  233,  137, 2822, 1747, 1760, 1773,
-     1783, 1793, 1806, 1816, 1829, 1842, 1855, 1863, 1873, 1880,
-
-     1887, 1894, 1901, 1908, 1915, 1922, 1929, 1936, 1949, 1956,
-     1960, 1968, 1971, 1978, 1985, 1992, 1995, 2002, 2008, 2021,
-     2034, 2041, 2048, 2055, 2062, 2065, 2072, 2075, 2082, 2085,
-     2092, 2095, 2102, 2105, 2112, 2115, 2122, 2125, 2132, 2140,
-     2147, 2154, 2161, 2168, 2171, 2178, 2181, 2188, 2191, 2198,
-     2204, 2217, 2224, 2231, 2234, 2241, 2244, 2251, 2254, 2261,
-     2264, 2271, 2274, 2281, 2284, 2291, 2298, 2301, 2308, 2311,
-     2318, 2325, 2332, 2335, 2342, 2345, 2352, 2355, 2362, 2365,
-     2372, 2375, 2382, 2388, 2401, 2408, 2415, 2418, 2425, 2428,
-     2435, 2438, 2445, 2448, 2455, 2458, 2465, 2468, 2475, 2478,
-
-     2485, 2488, 2495, 2502, 2505, 2512, 2515, 2522, 2525, 2532,
-     2535, 2538, 2544, 2551, 2560, 2567, 2574, 2577, 2584, 2587,
-     2590, 2596, 2603, 2606, 2609, 2612, 2615, 2618, 2621, 2624,
-     2631, 2634, 2641, 2644, 2647, 2650, 2653, 2663, 2670, 2673,
-     2676, 2679, 2686, 2693, 2700, 2703, 2710, 2717, 2724, 2731,
-     2738, 2745, 2752, 2759, 2766, 2773, 2780, 2787, 2794, 2801,
-     2808
+     1508, 1512, 1513, 1514, 1515, 1883, 1882, 1518, 1880, 1877,
+     1517, 1520, 1523, 1876, 1521, 1525,    0,    0,    0, 1872,
+     1870, 1867, 1575,    0, 1866, 1865, 1863, 1860, 1859, 1861,
+     1859, 1856, 1855, 1531, 1538, 1527, 1528, 1530, 1533, 1552,
+     1539, 1554, 1553, 1586, 1854, 1559, 1852, 1560, 1561, 1564,
+     1570, 1572, 1571, 1849, 1574, 1848, 1847, 1845, 1575, 1842,
+     1841, 1837, 1835, 1828, 1826, 1825, 1822, 1821, 1820, 1818,
+     1801, 1792, 1791, 1576, 1791, 1579, 1577, 1580, 1582, 1581,
+
+     1585, 1784, 1589, 1616, 1593, 1781, 1591, 1599, 1605, 1592,
+     1606, 1609, 1610, 1771, 1769, 1768, 1747, 1746, 1745, 1738,
+     1736, 1735, 1693, 1689, 1688, 1687, 1689, 1611, 1612, 1614,
+     1615, 1618, 1625, 1621, 1686, 1683, 1627, 1682, 1681, 1631,
+     1635, 1441, 1637, 1677, 1674, 1354, 1319, 1318, 1267, 1212,
+     1210, 1639, 1640, 1211, 1647, 1623, 1649, 1178, 1652, 1653,
+     1657, 1177, 1126,  964,  937,  903, 1641, 1643, 1659, 1663,
+     1664, 1665,  788,  752, 1629,  607,  487, 1666, 1669,  394,
+      357, 1670, 1672, 1671, 1674, 1676, 1675, 1678,  233,  137,
+     2825, 1750, 1763, 1776, 1786, 1796, 1809, 1819, 1832, 1845,
+
+     1858, 1866, 1876, 1883, 1890, 1897, 1904, 1911, 1918, 1925,
+     1932, 1939, 1952, 1959, 1963, 1971, 1974, 1981, 1988, 1995,
+     1998, 2005, 2011, 2024, 2037, 2044, 2051, 2058, 2065, 2068,
+     2075, 2078, 2085, 2088, 2095, 2098, 2105, 2108, 2115, 2118,
+     2125, 2128, 2135, 2143, 2150, 2157, 2164, 2171, 2174, 2181,
+     2184, 2191, 2194, 2201, 2207, 2220, 2227, 2234, 2237, 2244,
+     2247, 2254, 2257, 2264, 2267, 2274, 2277, 2284, 2287, 2294,
+     2301, 2304, 2311, 2314, 2321, 2328, 2335, 2338, 2345, 2348,
+     2355, 2358, 2365, 2368, 2375, 2378, 2385, 2391, 2404, 2411,
+     2418, 2421, 2428, 2431, 2438, 2441, 2448, 2451, 2458, 2461,
+
+     2468, 2471, 2478, 2481, 2488, 2491, 2498, 2505, 2508, 2515,
+     2518, 2525, 2528, 2535, 2538, 2541, 2547, 2554, 2563, 2570,
+     2577, 2580, 2587, 2590, 2593, 2599, 2606, 2609, 2612, 2615,
+     2618, 2621, 2624, 2627, 2634, 2637, 2644, 2647, 2650, 2653,
+     2656, 2666, 2673, 2676, 2679, 2682, 2689, 2696, 2703, 2706,
+     2713, 2720, 2727, 2734, 2741, 2748, 2755, 2762, 2769, 2776,
+     2783, 2790, 2797, 2804, 2811
     } ;
 
-static yyconst flex_int16_t yy_def[1062] =
+static yyconst flex_int16_t yy_def[1066] =
     {   0,
-      887,    1,  888,  888,  887,    5,  889,  889,  890,  890,
-      887,  887,  887,  887,  887,  887,  887,  891,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,   31,  887,  887,  887,  887,  887,  887,  892,  891,
-      887,  887,  887,  887,  891,  887,  891,  891,  891,  891,
+      891,    1,  892,  892,  891,    5,  893,  893,  894,  894,
+      891,  891,  891,  891,  891,  891,  891,  895,  891,  891,
       891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
-      891,  891,  887,  887,  887,  887,  887,  893,  887,  887,
-      887,  894,  887,  887,  895,  887,  887,  896,  887,  887,
-      887,  887,  887,  887,  887,  891,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-
-      897,  887,   99,   30,  887,  887,  887,  887,  898,   30,
-      887,   31,  887,  887,   31,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  899,
-      887,  887,  887,  887,  891,  900,  901,  887,  887,  891,
+      891,   31,  891,  891,  891,  891,  891,  891,  896,  895,
+      891,  891,  891,  891,  895,  891,  895,  895,  895,  895,
+      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
+      895,  895,  891,  891,  891,  891,  891,  897,  891,  891,
+      891,  898,  891,  891,  899,  891,  891,  900,  891,  891,
+      891,  891,  891,  891,  891,  895,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+
+      901,  891,   99,   30,  891,  891,  891,  891,  902,   30,
+      891,   31,  891,  891,   31,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  903,
+      891,  891,  891,  891,  895,  904,  905,  891,  891,  895,
+      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
+      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
+      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
+      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
+      895,  895,  895,  895,  891,  891,  891,  897,  897,  897,
+
+      891,  897,  891,  898,  891,  906,  907,  899,  891,  891,
+      891,  891,  908,  909,  910,  900,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  911,
+      912,  891,   99,  891,  891,  891,  891,   99,  913,  891,
+      891,  104,  104,  891,  891,  891,  891,  891,  891,  891,
+      891,  914,  915,  916,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  903,  891,
+      917,  918,  919,  920,  921,  922,  891,  923,  923,  923,
+      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
+      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
+
+      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
+      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
+      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
+      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
+      923,  923,  923,  924,  925,  926,  927,  928,  929,  930,
+      931,  891,  891,  932,  933,  934,  935,  936,  937,  891,
+      891,  891,  891,  891,  938,  939,  940,  941,  891,  891,
+      891,  891,  891,  891,  891,  371,  376,  891,  891,  942,
+      943,  944,  891,  891,  891,  944,  891,  891,  891,  945,
+      946,  947,  948,  949,  950,  951,  952,  953,  954,  891,
+
+      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
+      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
+      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
+      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
+      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
+      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
+      955,  955,  955,  955,  955,  955,  955,  956,  957,  958,
+      959,  960,  961,  962,  963,  964,  891,  965,  966,  967,
+      968,  969,  969,  970,  971,  972,  973,  891,  488,  891,
+      974,  891,  974,  891,  891,  891,  891,  891,  891,  891,
+
+      891,  975,  976,  977,  978,  979,  980,  981,  982,  983,
+      984,  985,  986,  987,  988,  988,  988,  988,  988,  988,
+      988,  988,  988,  988,  988,  988,  988,  988,  988,  988,
+      988,  988,  988,  988,  988,  988,  988,  988,  988,  988,
+      988,  988,  988,  988,  988,  988,  988,  988,  988,  988,
+      988,  988,  988,  988,  988,  988,  988,  988,  988,  988,
+      988,  988,  988,  988,  988,  988,  988,  988,  988,  988,
+      988,  988,  988,  988,  988,  988,  989,  990,  991,  992,
+      993,  994,  995,  996,  997,  998,  999, 1000, 1001, 1002,
+     1003, 1004, 1005,  891,  891,  891,  891, 1006,  891,  596,
+
+      891,  891,  891,  600,  891, 1007, 1008, 1009, 1010, 1011,
+     1012, 1013, 1014, 1015, 1016, 1017, 1018, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1019,  891,
+     1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
+      891, 1030, 1031, 1032, 1033,  891,  686,  891,  891,  891,
+     1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1042,
+
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1043, 1044, 1045, 1046,
+     1047, 1048,  891, 1049, 1034, 1036, 1050, 1051, 1041, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1052, 1053, 1046, 1054, 1047, 1055, 1048, 1056, 1057,
+     1050, 1058, 1051, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1059, 1052, 1060, 1053, 1061, 1054, 1062,
+     1055, 1063, 1056, 1064, 1057, 1058, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1065, 1059, 1060, 1061, 1062, 1036, 1063,
+     1064, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1065, 1036, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+        0,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+
       891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
       891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
       891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
       891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
-      891,  891,  891,  891,  887,  887,  887,  893,  893,  893,
-
-      887,  893,  887,  894,  887,  902,  903,  895,  887,  887,
-      887,  887,  904,  905,  906,  896,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  907,
-      908,  887,   99,  887,  887,  887,  887,   99,  909,  887,
-      887,  104,  104,  887,  887,  887,  887,  887,  887,  887,
-      887,  910,  911,  912,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  899,  887,
-      913,  914,  915,  916,  917,  918,  887,  919,  919,  919,
-      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
-      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
-
-      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
-      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
-      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
-      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
-      919,  919,  919,  920,  921,  922,  923,  924,  925,  926,
-      927,  887,  887,  928,  929,  930,  931,  932,  933,  887,
-      887,  887,  887,  887,  934,  935,  936,  937,  887,  887,
-      887,  887,  887,  887,  887,  371,  376,  887,  887,  938,
-      939,  940,  887,  887,  887,  940,  887,  887,  887,  941,
-      942,  943,  944,  945,  946,  947,  948,  949,  950,  887,
-
-      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
-      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
-      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
-      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
-      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
-      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
-      951,  951,  951,  951,  951,  951,  951,  952,  953,  954,
-      955,  956,  957,  958,  959,  960,  887,  961,  962,  963,
-      964,  965,  965,  966,  967,  968,  969,  887,  488,  887,
-      970,  887,  970,  887,  887,  887,  887,  887,  887,  887,
-
-      887,  971,  972,  973,  974,  975,  976,  977,  978,  979,
-      980,  981,  982,  983,  984,  984,  984,  984,  984,  984,
-      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
-      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
-      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
-      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
-      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
-      984,  984,  984,  984,  984,  984,  985,  986,  987,  988,
-      989,  990,  991,  992,  993,  994,  995,  996,  997,  998,
-      999, 1000, 1001,  887,  887,  887,  887, 1002,  887,  596,
-
-      887,  887,  887,  600,  887, 1003, 1004, 1005, 1006, 1007,
-     1008, 1009, 1010, 1011, 1012, 1013, 1014, 1013, 1013, 1013,
-     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
-     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
-     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
-     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
-     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1015,  887,
-     1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,
-      887, 1026, 1027, 1028, 1029,  887,  686,  887,  887,  887,
-     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1038,
-
-     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1038, 1038, 1038, 1038, 1038, 1038, 1039, 1040, 1041, 1042,
-     1043, 1044,  887, 1045, 1030, 1032, 1046, 1047, 1037, 1038,
-     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1048, 1049, 1042, 1050, 1043, 1051, 1044, 1052, 1053, 1046,
-     1054, 1047, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-
-     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1038, 1055, 1048, 1056, 1049, 1057, 1050, 1058, 1051, 1059,
-     1052, 1060, 1053, 1054, 1038, 1038, 1038, 1038, 1038, 1038,
-     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1061, 1055, 1056, 1057, 1058, 1032, 1059, 1060, 1038, 1038,
-     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1061, 1032, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
-     1038, 1038, 1038, 1038, 1038, 1038,    0,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891
     } ;
 
-static yyconst flex_int16_t yy_nxt[2908] =
+static yyconst flex_int16_t yy_nxt[2911] =
     {   0,
        12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
@@ -804,5 +806,5 @@
 
        83,   83,   83,   82,   91,   93,   87,  142,  146,   98,
-       95,   99,   99,   99,   99,   99,   99,  252,  887,   94,
+       95,   99,   99,   99,   99,   99,   99,  252,  891,   94,
       100,   85,   96,   97,   85,  101,  161,  118,  143,   77,
        77,   77,   77,  144,  147,  102,  103,   87,  104,  104,
@@ -825,18 +827,18 @@
       305,  200,  201,  190,  257,  136,  200,  257,  137,  263,
 
-      887,  264,  192,  197,   81,   82,   82,   82,  197,   87,
+      891,  264,  192,  197,   81,   82,   82,   82,  197,   87,
       272,  198,  202,  202,  202,  202,  202,  202,   80,   81,
        82,   82,   82,   80,   87,  138,  139,  209,  210,  263,
-      887,  264,  209,  282,  211,  255,  263,  267,  264,  211,
-       82,   81,   82,   82,   82,   82,   87,  887,  212,  212,
-      212,  212,   82,   81,   83,   83,   83,   82,  887,  211,
+      891,  264,  209,  282,  211,  255,  263,  267,  264,  211,
+       82,   81,   82,   82,   82,   82,   87,  891,  212,  212,
+      212,  212,   82,   81,   83,   83,   83,   82,  891,  211,
        99,   99,   99,   99,   99,   99,  242,  242,  242,  242,
       266,  263,  263,  264,  264,  213,  143,  263,  211,  264,
        87,  144,  375,  211,  211,   87,   87,  211,  211,   87,
-       87,   87,  286,  241,  887,  211,   87,   87,  211,  243,
+       87,   87,  286,  241,  891,  211,   87,   87,  211,  243,
 
       211,  214,  211,  281,  215,  217,  278,  284,  285,  218,
       219,  307,  298,  279,  220,  221,   87,  222,   87,  223,
-       87,   87,  887,   87,  309,  300,   87,   87,  224,  225,
+       87,   87,  891,   87,  309,  300,   87,   87,  224,  225,
       226,  103,  303,  105,  105,  105,  105,  105,  105,   87,
       299,   87,  301,  302,   87,  304,  308,  310,   87,  227,
@@ -885,9 +887,9 @@
        87,  450,   87,   87,   87,  452,  455,  454,   87,  453,
       457,  462,  460,  461,   87,   87,  458,  464,   87,  515,
-      459,  463,  465,  466,  344,  201,  201,   87,  887,  344,
+      459,  463,  465,  466,  344,  201,  201,   87,  891,  344,
       467,  345,  199,  211,  211,  211,  211,  352,  352,  352,
       352,  360,  360,  361,  361,  371,  371,  371,  371,  371,
       371,  370,  569,  370,  492,  492,  371,  371,  371,  371,
-      371,  371,  887,   87,  493,  494,  477,  488,  488,  488,
+      371,  371,  891,   87,  493,  494,  477,  488,  488,  488,
 
       488,  488,  488,  233,  233,  233,  233,  233,  233,  516,
@@ -896,5 +898,5 @@
       489,  496,   87,  518,   87,  236,  374,  236,  519,  520,
       237,  521,  236,  376,  376,  376,  376,  376,  376,  383,
-       87,  384,  375,  496,   87,  385,  522,  496,  497,  887,
+       87,  384,  375,  496,   87,  385,  522,  496,  497,  891,
       497,  386,   87,  498,  498,  498,  498,  498,  498,   87,
       525,  495,  526,  387,   87,  524,  377,  384,  523,  496,
@@ -919,5 +921,5 @@
       236,  498,  498,  498,  498,  498,  498,  620,   87,  492,
       597,  599,  492,  600,  600,  600,  600,  600,  600,   87,
-      631,  622,   87,  887,  625,  887,   87,  862,   87,  601,
+      631,  622,   87,   87,  625,  891,   87,  891,   87,  601,
       497,  602,  497,  603,  602,  498,  498,  498,  498,  498,
       498,  624,  628,   87,   87,  630,  604,   87,   87,   87,
@@ -926,14 +928,14 @@
       634,   87,   87,  635,   87,   87,   87,  642,   87,   87,
       637,  641,   87,   87,  640,   87,   87,  643,  647,  639,
-       87,   87,  887,   87,   87,   87,  638,   87,   87,  644,
+       87,   87,  866,   87,   87,   87,  638,   87,   87,  644,
       645,  646,  648,  650,   87,   87,   87,  649,   87,  653,
       651,   87,  652,   87,  654,  655,   87,   87,   87,   87,
       656,  657,   87,  660,  659,  661,  664,   87,  658,   87,
        87,  663,   87,   87,   87,  668,  665,  688,  688,  662,
-      666,  701,  702,  887,  887,   87,  667,  488,  488,  488,
+      666,  701,  702,  891,  891,   87,  667,  488,  488,  488,
       488,  488,  488,  596,  596,  596,  596,  596,  596,  595,
       688,  595,  704,   87,  596,  596,  596,  596,  596,  596,
 
-      600,  600,  600,  600,  600,  600,  703,  688,   87,  887,
+      600,  600,  600,  600,  600,  600,  703,  688,   87,  891,
       594,  686,  686,  686,  686,  686,  686,  689,   87,  689,
        87,   87,  689,  699,   87,  708,   87,  601,  706,  602,
@@ -944,7 +946,7 @@
       715,   87,  721,  719,   87,  724,   87,   87,  722,  720,
       727,   87,   87,   87,  725,   87,  731,  723,   87,  732,
-      726,   87,   87,  861,  728,  734,   87,  733,  730,   87,
-
-      735,   87,   87,  729,   87,   87,  751,  736,  686,  686,
+      726,   87,   87,   87,  728,  734,   87,  733,  730,   87,
+
+      735,   87,   87,  729,   87,  863,  751,  736,  686,  686,
       686,  686,  686,  686,  600,  600,  600,  600,  600,  600,
       750,   87,  755,   87,  601,  763,  602,  752,  603,  602,
@@ -954,154 +956,154 @@
        87,  768,   87,  769,   87,   87,   87,   87,  770,   87,
        87,   87,   87,   87,  771,   87,  774,   87,  772,   87,
-       87,  779,   87,   87,  795,   87,  780,  773,   87,   87,
-      776,   87,  775,  803,  777,  796,  778,  686,  686,  686,
-
-      686,  686,  686,  793,   87,  794,  799,   87,  798,   87,
-      801,   87,   87,   87,  797,  804,  805,  800,  806,   87,
-       87,   87,  802,  807,   87,   87,   87,  808,   87,   87,
-      743,   87,   87,   87,  809,  828,   87,   87,   87,  830,
-      831,  833,   87,   87,   87,  834,   87,  836,  810,  811,
-      826,  827,   87,  829,   87,  825,  832,  837,   87,   87,
-       87,  838,  839,   87,   87,  835,   87,   87,   87,  851,
-      850,  855,   87,  852,  840,   87,   87,   87,  853,  857,
-      849,   87,   87,   87,  854,  858,  859,   87,   87,  856,
-      860,   87,  863,  864,  865,   87,   87,  866,   87,  868,
-
-      867,  869,   87,   87,   87,  870,   87,   87,   87,  873,
-       87,  875,   87,  876,   87,   87,   87,  874,   87,  872,
-       87,   87,   87,  871,   87,  880,   87,   87,   87,  887,
-      879,  881,  887,  848,  877,  878,  886,  887,  847,  884,
-      887,  845,  882,  883,  887,  844,  885,   69,   69,   69,
+       87,  780,   87,   87,  796,   87,  781,  773,  775,  777,
+       87,   87,  798,  776,  778,  797,  779,  686,  686,  686,
+
+      686,  686,  686,  794,   87,   87,   87,  795,  799,  802,
+      804,   87,   87,   87,  805,  806,   87,  801,  803,  808,
+      807,  800,   87,   87,   87,  809,   87,   87,   87,   87,
+      743,   87,   87,   87,   87,  830,  832,   87,   87,  810,
+      833,   87,  835,   87,   87,   87,  811,  829,  836,  812,
+      813,   87,  828,  840,  838,  827,  831,   87,   87,  834,
+      839,   87,   87,   87,   87,  837,   87,   87,   87,  854,
+       87,  853,  842,   87,  841,   87,  855,   87,  843,   87,
+      858,   87,  860,   87,  852,  870,  861,   87,  856,   87,
+      859,   87,   87,   87,  857,   87,  862,  868,  864,   87,
+
+      867,   87,  869,  881,   87,   87,  871,  872,  873,   87,
+      876,   87,  874,  875,  877,   87,   87,   87,   87,  879,
+      880,   87,   87,   87,   87,  878,   87,   87,   87,  891,
+       87,  884,  865,   87,   87,   87,  883,  885,   87,  882,
+      890,   87,  891,  891,  851,  886,  888,  887,  891,  889,
        69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   78,   78,   78,   78,   78,   78,   78,
-       78,   78,   78,   78,   78,   78,   86,  887,  843,   86,
-      887,   86,   86,   86,   86,   86,  140,  842,   87,   87,
-
-      140,  140,  140,  140,  140,  140,  199,  199,  199,  199,
-      199,  199,  199,  199,  199,  199,  199,  199,  199,  204,
-       87,  887,  204,  824,  204,  204,  204,  204,  204,  208,
-      887,  208,  208,  823,  208,  208,  208,  208,  208,  208,
-      821,  208,  216,  887,  819,  216,  216,  216,  216,  216,
-      216,  216,  216,  887,  216,  239,  239,  239,  239,  239,
-      239,  239,  239,  239,  239,  239,  239,  239,  253,  253,
-      817,  253,  887,  815,  813,  253,  269,   87,   87,  269,
-       87,  269,  269,  269,  269,  269,  273,   87,  273,   87,
-       87,   87,  273,  275,   87,  275,   87,   87,   87,  275,
-
-      348,   87,  348,  887,  792,  790,  348,  350,  887,  350,
-      887,  787,  785,  350,  354,  783,  354,   87,   87,   87,
-      354,  356,   87,  356,   87,   87,   87,  356,  358,  749,
-      358,  746,  745,  743,  358,  365,  205,  365,  739,  738,
-      670,  365,  367,   87,  367,   87,   87,   87,  367,  239,
+       69,   69,   69,   75,   75,   75,   75,   75,   75,   75,
+       75,   75,   75,   75,   75,   75,   78,   78,   78,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   86,
+      850,  891,   86,  848,   86,   86,   86,   86,   86,  140,
+
+      891,  847,  891,  140,  140,  140,  140,  140,  140,  199,
+      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
+      199,  199,  204,  846,  891,  204,  845,  204,  204,  204,
+      204,  204,  208,   87,  208,  208,   87,  208,  208,  208,
+      208,  208,  208,   87,  208,  216,  891,  826,  216,  216,
+      216,  216,  216,  216,  216,  216,  891,  216,  239,  239,
       239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
-      239,  239,  380,   87,  380,  382,  382,   87,  382,  382,
-      382,   87,  382,  253,  253,   87,  253,  392,   87,  392,
-       87,   87,   87,  392,  394,   87,  394,   87,   87,  697,
-      394,  396,  696,  396,  694,  692,  690,  396,  273,  598,
-
-      273,  398,  685,  398,  684,  682,  680,  398,  275,  678,
-      275,   86,  676,  674,   86,  672,   86,   86,   86,   86,
-       86,  199,  199,  199,  199,  199,  199,  199,  199,  199,
-      199,  199,  199,  199,  468,  468,  468,  468,  468,  468,
-      468,  468,  468,  468,  468,  468,  468,  469,  670,  469,
-       87,   87,   87,  469,  471,   87,  471,   87,   87,   87,
-      471,  473,   87,  473,   87,   87,   87,  473,  348,  617,
-      348,  475,  615,  475,  613,  611,  609,  475,  350,  607,
-      350,  478,  502,  478,  605,  605,  594,  478,  354,  593,
-      354,  480,  591,  480,  483,  483,  589,  480,  356,  587,
-
-      356,  482,  585,  482,  583,  581,  579,  482,  358,   87,
-      358,  484,   87,  484,   87,   87,   87,  484,  365,   87,
-      365,  486,   87,  486,   87,  514,  512,  486,  367,  510,
-      367,  491,  508,  491,  506,  491,  504,  491,  380,  490,
-      380,  487,  380,  485,  380,  382,  382,  361,  382,  382,
-      382,  361,  382,  503,  483,  503,  481,  479,  476,  503,
-      505,  474,  505,  472,  470,   87,  505,  507,   87,  507,
-       87,  400,  399,  507,  392,  397,  392,  509,  395,  509,
-      393,  270,  265,  509,  394,  264,  394,  511,  389,  511,
-      389,  252,  379,  511,  396,  379,  396,  513,  240,  513,
-
-      374,  368,  366,  513,  398,  364,  398,   86,  360,  359,
-       86,  357,   86,   86,   86,   86,   86,  468,  468,  468,
+      239,  253,  253,  825,  253,  823,  891,  821,  253,  269,
+      891,  819,  269,  891,  269,  269,  269,  269,  269,  273,
+      817,  273,  815,   87,   87,  273,  275,   87,  275,   87,
+
+       87,   87,  275,  348,   87,  348,   87,   87,   87,  348,
+      350,   87,  350,   87,  891,  793,  350,  354,  791,  354,
+      891,  891,  788,  354,  356,  786,  356,  784,   87,   87,
+      356,  358,   87,  358,   87,   87,   87,  358,  365,   87,
+      365,  749,  746,  745,  365,  367,  743,  367,  205,  739,
+      738,  367,  239,  239,  239,  239,  239,  239,  239,  239,
+      239,  239,  239,  239,  239,  380,  670,  380,  382,  382,
+       87,  382,  382,  382,   87,  382,  253,  253,   87,  253,
+      392,   87,  392,   87,   87,   87,  392,  394,   87,  394,
+       87,   87,   87,  394,  396,   87,  396,   87,   87,   87,
+
+      396,  273,  697,  273,  398,  696,  398,  694,  692,  690,
+      398,  275,  598,  275,   86,  685,  684,   86,  682,   86,
+       86,   86,   86,   86,  199,  199,  199,  199,  199,  199,
+      199,  199,  199,  199,  199,  199,  199,  468,  468,  468,
       468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
-      578,  355,  578,  351,  349,  205,  578,  469,  201,  469,
-      580,   87,  580,  277,  276,  274,  580,  471,  270,  471,
-      582,  265,  582,  268,  265,  263,  582,  473,  262,  473,
-      584,  261,  584,  240,  232,   85,  584,  475,   85,  475,
-      586,   87,  586,  205,  203,   85,  586,  478,  122,  478,
-      588,  117,  588,   87,  887,   70,  588,  480,   70,  480,
-      482,  887,  482,  887,  887,  887,  482,  590,  887,  590,
-
-      887,  887,  887,  590,  484,  887,  484,  592,  887,  592,
-      887,  887,  887,  592,  486,  887,  486,  491,  887,  491,
-      887,  491,  887,  491,  382,  887,  382,  887,  887,  887,
-      382,  606,  887,  606,  887,  887,  887,  606,  503,  887,
-      503,  608,  887,  608,  887,  887,  887,  608,  505,  887,
-      505,  610,  887,  610,  887,  887,  887,  610,  507,  887,
-      507,  612,  887,  612,  887,  887,  887,  612,  509,  887,
-      509,  614,  887,  614,  887,  887,  887,  614,  511,  887,
-      511,  616,  887,  616,  887,  887,  887,  616,  513,  887,
-      513,   86,  887,  887,   86,  887,   86,   86,   86,   86,
-
-       86,  669,  669,  669,  669,  669,  669,  669,  669,  669,
-      669,  669,  669,  669,  671,  887,  671,  887,  887,  887,
-      671,  578,  887,  578,  673,  887,  673,  887,  887,  887,
-      673,  580,  887,  580,  675,  887,  675,  887,  887,  887,
-      675,  582,  887,  582,  677,  887,  677,  887,  887,  887,
-      677,  584,  887,  584,  679,  887,  679,  887,  887,  887,
-      679,  586,  887,  586,  681,  887,  681,  887,  887,  887,
-      681,  588,  887,  588,  683,  887,  683,  887,  887,  887,
-      683,  590,  887,  590,   86,  887,   86,  887,  887,  887,
-       86,  592,  887,  592,  491,  887,  491,  887,  887,  887,
-
-      491,  691,  887,  691,  887,  887,  887,  691,  606,  887,
-      606,  693,  887,  693,  887,  887,  887,  693,  608,  887,
-      608,  695,  887,  695,  887,  887,  887,  695,  610,  887,
-      610,  140,  887,  140,  887,  887,  887,  140,  612,  887,
-      612,  698,  887,  698,  614,  887,  614,   86,  887,  887,
-       86,  887,   86,   86,   86,   86,   86,  616,  887,  616,
-      669,  669,  669,  669,  669,  669,  669,  669,  669,  669,
-      669,  669,  669,  737,  887,  737,  887,  887,  887,  737,
-      671,  887,  671,  204,  887,  204,  887,  887,  887,  204,
-      673,  887,  673,  740,  887,  740,  675,  887,  675,  204,
-
-      887,  887,  204,  887,  204,  204,  204,  204,  204,  677,
-      887,  677,  741,  887,  741,  679,  887,  679,  681,  887,
-      681,  742,  887,  742,  683,  887,  683,   86,  887,   86,
-      744,  887,  744,  887,  887,  887,  744,  691,  887,  691,
-      269,  887,  269,  887,  887,  887,  269,  693,  887,  693,
-      747,  887,  747,  695,  887,  695,  140,  887,  140,  748,
-      887,  748,  887,  887,  887,  748,   86,  887,  887,   86,
-      887,   86,   86,   86,   86,   86,  781,  887,  781,  737,
-      887,  737,  204,  887,  204,  782,  887,  782,  887,  887,
-      887,  782,  784,  887,  784,  887,  887,  887,  784,  786,
-
-      887,  786,  887,  887,  887,  786,  788,  887,  788,  789,
-      887,  789,  887,  887,  887,  789,  791,  887,  791,  887,
-      887,  887,  791,  812,  887,  812,  887,  887,  887,  812,
-      814,  887,  814,  887,  887,  887,  814,  816,  887,  816,
-      887,  887,  887,  816,  818,  887,  818,  887,  887,  887,
-      818,  820,  887,  820,  887,  887,  887,  820,  822,  887,
-      822,  887,  887,  887,  822,  616,  887,  616,  887,  887,
-      887,  616,  841,  887,  841,  887,  887,  887,  841,  677,
-      887,  677,  887,  887,  887,  677,  681,  887,  681,  887,
-      887,  887,  681,   86,  887,   86,  887,  887,  887,   86,
-
-      846,  887,  846,  887,  887,  887,  846,  140,  887,  140,
-      887,  887,  887,  140,  204,  887,  204,  887,  887,  887,
-      204,   11,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-
-      887,  887,  887,  887,  887,  887,  887
+      469,  680,  469,  678,  676,  674,  469,  471,  672,  471,
+      670,   87,   87,  471,  473,   87,  473,   87,   87,   87,
+      473,  348,   87,  348,  475,   87,  475,   87,   87,   87,
+      475,  350,  617,  350,  478,  615,  478,  613,  611,  609,
+      478,  354,  607,  354,  480,  502,  480,  605,  605,  594,
+
+      480,  356,  593,  356,  482,  591,  482,  483,  483,  589,
+      482,  358,  587,  358,  484,  585,  484,  583,  581,  579,
+      484,  365,   87,  365,  486,   87,  486,   87,   87,   87,
+      486,  367,   87,  367,  491,   87,  491,   87,  491,  514,
+      491,  380,  512,  380,  510,  380,  508,  380,  382,  382,
+      506,  382,  382,  382,  504,  382,  503,  490,  503,  487,
+      485,  361,  503,  505,  361,  505,  483,  481,  479,  505,
+      507,  476,  507,  474,  472,  470,  507,  392,   87,  392,
+      509,   87,  509,   87,  400,  399,  509,  394,  397,  394,
+      511,  395,  511,  393,  270,  265,  511,  396,  264,  396,
+
+      513,  389,  513,  389,  252,  379,  513,  398,  379,  398,
+       86,  240,  374,   86,  368,   86,   86,   86,   86,   86,
+      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
+      468,  468,  468,  578,  366,  578,  364,  360,  359,  578,
+      469,  357,  469,  580,  355,  580,  351,  349,  205,  580,
+      471,  201,  471,  582,   87,  582,  277,  276,  274,  582,
+      473,  270,  473,  584,  265,  584,  268,  265,  263,  584,
+      475,  262,  475,  586,  261,  586,  240,  232,   85,  586,
+      478,   85,  478,  588,   87,  588,  205,  203,   85,  588,
+      480,  122,  480,  482,  117,  482,   87,  891,   70,  482,
+
+      590,   70,  590,  891,  891,  891,  590,  484,  891,  484,
+      592,  891,  592,  891,  891,  891,  592,  486,  891,  486,
+      491,  891,  491,  891,  491,  891,  491,  382,  891,  382,
+      891,  891,  891,  382,  606,  891,  606,  891,  891,  891,
+      606,  503,  891,  503,  608,  891,  608,  891,  891,  891,
+      608,  505,  891,  505,  610,  891,  610,  891,  891,  891,
+      610,  507,  891,  507,  612,  891,  612,  891,  891,  891,
+      612,  509,  891,  509,  614,  891,  614,  891,  891,  891,
+      614,  511,  891,  511,  616,  891,  616,  891,  891,  891,
+      616,  513,  891,  513,   86,  891,  891,   86,  891,   86,
+
+       86,   86,   86,   86,  669,  669,  669,  669,  669,  669,
+      669,  669,  669,  669,  669,  669,  669,  671,  891,  671,
+      891,  891,  891,  671,  578,  891,  578,  673,  891,  673,
+      891,  891,  891,  673,  580,  891,  580,  675,  891,  675,
+      891,  891,  891,  675,  582,  891,  582,  677,  891,  677,
+      891,  891,  891,  677,  584,  891,  584,  679,  891,  679,
+      891,  891,  891,  679,  586,  891,  586,  681,  891,  681,
+      891,  891,  891,  681,  588,  891,  588,  683,  891,  683,
+      891,  891,  891,  683,  590,  891,  590,   86,  891,   86,
+      891,  891,  891,   86,  592,  891,  592,  491,  891,  491,
+
+      891,  891,  891,  491,  691,  891,  691,  891,  891,  891,
+      691,  606,  891,  606,  693,  891,  693,  891,  891,  891,
+      693,  608,  891,  608,  695,  891,  695,  891,  891,  891,
+      695,  610,  891,  610,  140,  891,  140,  891,  891,  891,
+      140,  612,  891,  612,  698,  891,  698,  614,  891,  614,
+       86,  891,  891,   86,  891,   86,   86,   86,   86,   86,
+      616,  891,  616,  669,  669,  669,  669,  669,  669,  669,
+      669,  669,  669,  669,  669,  669,  737,  891,  737,  891,
+      891,  891,  737,  671,  891,  671,  204,  891,  204,  891,
+      891,  891,  204,  673,  891,  673,  740,  891,  740,  675,
+
+      891,  675,  204,  891,  891,  204,  891,  204,  204,  204,
+      204,  204,  677,  891,  677,  741,  891,  741,  679,  891,
+      679,  681,  891,  681,  742,  891,  742,  683,  891,  683,
+       86,  891,   86,  744,  891,  744,  891,  891,  891,  744,
+      691,  891,  691,  269,  891,  269,  891,  891,  891,  269,
+      693,  891,  693,  747,  891,  747,  695,  891,  695,  140,
+      891,  140,  748,  891,  748,  891,  891,  891,  748,   86,
+      891,  891,   86,  891,   86,   86,   86,   86,   86,  782,
+      891,  782,  737,  891,  737,  204,  891,  204,  783,  891,
+      783,  891,  891,  891,  783,  785,  891,  785,  891,  891,
+
+      891,  785,  787,  891,  787,  891,  891,  891,  787,  789,
+      891,  789,  790,  891,  790,  891,  891,  891,  790,  792,
+      891,  792,  891,  891,  891,  792,  814,  891,  814,  891,
+      891,  891,  814,  816,  891,  816,  891,  891,  891,  816,
+      818,  891,  818,  891,  891,  891,  818,  820,  891,  820,
+      891,  891,  891,  820,  822,  891,  822,  891,  891,  891,
+      822,  824,  891,  824,  891,  891,  891,  824,  616,  891,
+      616,  891,  891,  891,  616,  844,  891,  844,  891,  891,
+      891,  844,  677,  891,  677,  891,  891,  891,  677,  681,
+      891,  681,  891,  891,  891,  681,   86,  891,   86,  891,
+
+      891,  891,   86,  849,  891,  849,  891,  891,  891,  849,
+      140,  891,  140,  891,  891,  891,  140,  204,  891,  204,
+      891,  891,  891,  204,   11,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891
     } ;
 
-static yyconst flex_int16_t yy_chk[2908] =
+static yyconst flex_int16_t yy_chk[2911] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1124,5 +1126,5 @@
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
-        8,    9,   10,   37,   37,   20,   39,    9,   10,  886,
+        8,    9,   10,   37,   37,   20,   39,    9,   10,  890,
         7,    8,   13,   13,   13,   13,   13,   13,   15,   15,
 
@@ -1135,5 +1137,5 @@
        47,   45,   45,   45,   49,   30,   30,   45,   45,   49,
        45,   30,   40,   45,   45,   40,   49,   30,   45,   56,
-       62,   45,   49,   30,   73,  885,  127,   53,  127,   51,
+       62,   45,   49,   30,   73,  889,  127,   53,  127,   51,
        61,   30,   62,   55,   30,   31,  108,   31,   31,   31,
 
@@ -1149,9 +1151,9 @@
       164,   68,   68,   59,  113,   38,   68,  116,   38,  131,
 
-      110,  131,   60,   67,   67,   67,   67,   67,   67,  877,
+      110,  131,   60,   67,   67,   67,   67,   67,   67,  881,
       142,   67,   68,   68,   68,   68,   68,   68,   80,   80,
        80,   80,   80,   80,  153,   38,   38,   77,   77,  134,
       110,  134,   77,  153,   77,  110,  135,  135,  135,   77,
-       82,   82,   82,   82,   82,   82,  876,  243,   77,   77,
+       82,   82,   82,   82,   82,   82,  880,  243,   77,   77,
        77,   77,   83,   83,   83,   83,   83,   83,  110,   77,
       103,  103,  103,  103,  103,  103,  104,  104,  104,  104,
@@ -1163,5 +1165,5 @@
        85,  166,  159,  150,   85,   85,  161,   85,  160,   85,
       145,  162,  104,  167,  168,  161,  169,  163,   85,   85,
-       85,  105,  163,  105,  105,  105,  105,  105,  105,  873,
+       85,  105,  163,  105,  105,  105,  105,  105,  105,  877,
       160,  171,  162,  162,  165,  163,  167,  169,  173,   85,
       105,  106,   85,  106,  165,  172,  106,  106,  106,  106,
@@ -1176,5 +1178,5 @@
       189,  158,  158,  188,  192,  158,  194,  158,  284,  219,
       185,  219,  158,  158,  158,  193,  158,  192,  220,  194,
-      220,  191,  198,  198,  191,  192,  205,  198,  193,  872,
+      220,  191,  198,  198,  191,  192,  205,  198,  193,  876,
       193,  197,  197,  197,  197,  197,  197,  200,  200,  197,
       248,  221,  200,  198,  198,  198,  198,  198,  198,  202,
@@ -1193,9 +1195,9 @@
       245,  245,  270,  288,  293,  286,  294,  300,  306,  293,
 
-      308,  244,  300,  306,  870,  294,  308,  244,  246,  246,
+      308,  244,  300,  306,  874,  294,  308,  244,  246,  246,
       246,  246,  246,  246,  253,  286,  288,  255,  255,  255,
       255,  255,  255,  287,  246,  247,  246,  247,  246,  246,
       247,  247,  247,  247,  247,  247,  290,  253,  287,  253,
-      869,  246,  289,  253,  287,  287,  246,  292,  246,  253,
+      873,  246,  289,  253,  287,  287,  246,  292,  246,  253,
       255,  246,  291,  246,  260,  260,  260,  260,  260,  260,
       289,  253,  290,  292,  292,  253,  295,  291,  296,  253,
@@ -1209,12 +1211,12 @@
       335,  324,  337,  339,  340,  326,  329,  328,  401,  327,
       331,  337,  334,  335,  341,  343,  332,  340,  342,  401,
-      333,  339,  341,  342,  344,  344,  345,  460,  862,  344,
+      333,  339,  341,  342,  344,  344,  345,  460,  866,  344,
       343,  344,  345,  352,  352,  352,  352,  353,  353,  353,
       353,  362,  363,  362,  363,  370,  370,  370,  370,  370,
       370,  372,  460,  372,  380,  381,  372,  372,  372,  372,
-      372,  372,  861,  402,  380,  381,  352,  371,  371,  371,
+      372,  372,  865,  402,  380,  381,  352,  371,  371,  371,
 
       371,  371,  371,  374,  374,  374,  374,  374,  374,  402,
-      380,  381,  403,  371,  404,  371,  860,  371,  371,  375,
+      380,  381,  403,  371,  404,  371,  864,  371,  371,  375,
       375,  375,  375,  375,  375,  383,  382,  403,  406,  405,
       371,  383,  407,  404,  408,  371,  374,  371,  405,  406,
@@ -1233,5 +1235,5 @@
       450,  453,  442,  444,  455,  456,  447,  457,  458,  449,
       459,  461,  463,  455,  451,  458,  454,  459,  462,  452,
-      457,  453,  466,  456,  464,  467,  462,  525,  859,  463,
+      457,  453,  466,  456,  464,  467,  462,  525,  863,  463,
       525,  468,  491,  461,  467,  464,  462,  468,  477,  477,
       477,  477,  491,  515,  466,  488,  488,  488,  488,  488,
@@ -1239,9 +1241,9 @@
       488,  490,  490,  490,  490,  490,  490,  519,  491,  521,
       515,  488,  492,  488,  492,  488,  488,  492,  492,  492,
-      492,  492,  492,  494,  516,  495,  493,  519,  488,  855,
-      851,  521,  518,  488,  490,  488,  493,  516,  488,  529,
+      492,  492,  492,  494,  516,  495,  493,  519,  488,  862,
+      858,  521,  518,  488,  490,  488,  493,  516,  488,  529,
       488,  497,  497,  497,  497,  497,  497,  518,  520,  494,
       492,  495,  493,  498,  498,  498,  498,  498,  498,  523,
-      529,  520,  526,  848,  523,  847,  528,  846,  522,  498,
+      529,  520,  526,  854,  523,  851,  528,  850,  522,  498,
       499,  498,  499,  498,  498,  499,  499,  499,  499,  499,
       499,  522,  526,  524,  527,  528,  498,  531,  530,  532,
@@ -1250,14 +1252,14 @@
       532,  535,  537,  533,  536,  538,  539,  541,  542,  547,
       535,  539,  544,  541,  538,  545,  546,  542,  547,  537,
-      550,  551,  845,  549,  534,  552,  536,  554,  560,  544,
+      550,  551,  849,  549,  534,  552,  536,  554,  560,  544,
       545,  546,  549,  551,  555,  557,  558,  550,  561,  555,
       552,  562,  554,  565,  557,  558,  564,  567,  566,  568,
       560,  561,  575,  565,  564,  566,  569,  571,  562,  574,
       572,  568,  569,  620,  619,  575,  571,  601,  601,  567,
-      572,  619,  620,  844,  843,  622,  574,  594,  594,  594,
+      572,  619,  620,  848,  847,  622,  574,  594,  594,  594,
       594,  594,  594,  595,  595,  595,  595,  595,  595,  597,
       601,  597,  622,  621,  597,  597,  597,  597,  597,  597,
 
-      600,  600,  600,  600,  600,  600,  621,  602,  626,  842,
+      600,  600,  600,  600,  600,  600,  621,  602,  626,  846,
       594,  596,  596,  596,  596,  596,  596,  603,  618,  603,
       623,  624,  603,  618,  628,  626,  625,  596,  624,  596,
@@ -1268,7 +1270,7 @@
       633,  646,  639,  637,  650,  642,  651,  656,  640,  638,
       646,  653,  657,  636,  644,  665,  656,  641,  664,  657,
-      645,  667,  668,  841,  650,  665,  700,  664,  653,  699,
-
-      667,  702,  705,  651,  714,  837,  700,  668,  686,  686,
+      645,  667,  668,  842,  650,  665,  700,  664,  653,  699,
+
+      667,  702,  705,  651,  714,  842,  700,  668,  686,  686,
       686,  686,  686,  686,  690,  690,  690,  690,  690,  690,
       699,  708,  705,  703,  686,  714,  686,  702,  686,  686,
@@ -1276,157 +1278,157 @@
       712,  686,  711,  717,  710,  718,  686,  690,  686,  712,
       720,  686,  717,  686,  713,  711,  716,  713,  719,  716,
-      721,  719,  715,  720,  722,  723,  724,  725,  721,  728,
-      731,  718,  732,  735,  722,  733,  725,  736,  723,  756,
-      757,  735,  836,  754,  756,  759,  736,  724,  755,  760,
-      731,  761,  728,  764,  732,  757,  733,  743,  743,  743,
-
-      743,  743,  743,  754,  758,  755,  760,  762,  759,  763,
-      762,  769,  766,  768,  758,  766,  768,  761,  769,  772,
-      770,  764,  763,  770,  771,  773,  778,  771,  793,  795,
-      743,  798,  797,  796,  772,  797,  799,  800,  802,  799,
-      800,  803,  804,  806,  807,  804,  810,  807,  773,  778,
-      795,  796,  809,  798,  808,  793,  802,  808,  811,  826,
-      830,  809,  810,  827,  829,  806,  828,  803,  831,  828,
-      827,  831,  832,  829,  811,  834,  835,  839,  830,  835,
-      826,  840,  838,  849,  830,  838,  839,  853,  850,  832,
-      840,  852,  849,  850,  852,  854,  856,  853,  857,  856,
-
-      854,  857,  858,  863,  864,  858,  865,  866,  867,  865,
-      868,  867,  871,  868,  874,  875,  878,  866,  879,  864,
-      880,  882,  881,  863,  883,  878,  884,  833,  825,  824,
-      875,  879,  823,  822,  871,  874,  884,  821,  820,  882,
-      819,  818,  880,  881,  817,  816,  883,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      889,  889,  889,  889,  889,  889,  889,  889,  889,  889,
-      889,  889,  889,  890,  890,  890,  890,  890,  890,  890,
-      890,  890,  890,  890,  890,  890,  891,  815,  814,  891,
-      813,  891,  891,  891,  891,  891,  892,  812,  805,  801,
-
-      892,  892,  892,  892,  892,  892,  893,  893,  893,  893,
-      893,  893,  893,  893,  893,  893,  893,  893,  893,  894,
-      794,  792,  894,  791,  894,  894,  894,  894,  894,  895,
-      790,  895,  895,  789,  895,  895,  895,  895,  895,  895,
-      788,  895,  896,  787,  786,  896,  896,  896,  896,  896,
-      896,  896,  896,  785,  896,  897,  897,  897,  897,  897,
-      897,  897,  897,  897,  897,  897,  897,  897,  898,  898,
-      784,  898,  783,  782,  781,  898,  899,  780,  779,  899,
-      777,  899,  899,  899,  899,  899,  900,  776,  900,  775,
-      774,  767,  900,  901,  765,  901,  753,  752,  751,  901,
-
-      902,  750,  902,  749,  748,  747,  902,  903,  746,  903,
-      745,  742,  741,  903,  904,  740,  904,  734,  730,  729,
-      904,  905,  727,  905,  726,  709,  701,  905,  906,  698,
-      906,  693,  691,  687,  906,  907,  677,  907,  673,  671,
-      669,  907,  908,  666,  908,  663,  662,  661,  908,  909,
-      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
-      909,  909,  910,  660,  910,  911,  911,  659,  911,  911,
-      911,  658,  911,  912,  912,  655,  912,  913,  654,  913,
-      652,  649,  648,  913,  914,  647,  914,  643,  616,  612,
-      914,  915,  610,  915,  608,  606,  604,  915,  916,  598,
-
-      916,  917,  592,  917,  590,  588,  586,  917,  918,  584,
-      918,  919,  582,  580,  919,  578,  919,  919,  919,  919,
-      919,  920,  920,  920,  920,  920,  920,  920,  920,  920,
-      920,  920,  920,  920,  921,  921,  921,  921,  921,  921,
-      921,  921,  921,  921,  921,  921,  921,  922,  577,  922,
-      576,  573,  570,  922,  923,  563,  923,  559,  556,  553,
-      923,  924,  548,  924,  543,  540,  517,  924,  925,  513,
-      925,  926,  511,  926,  509,  507,  505,  926,  927,  503,
-      927,  928,  502,  928,  501,  500,  489,  928,  929,  486,
-      929,  930,  484,  930,  483,  482,  480,  930,  931,  478,
-
-      931,  932,  475,  932,  473,  471,  469,  932,  933,  465,
-      933,  934,  448,  934,  446,  438,  436,  934,  935,  428,
-      935,  936,  426,  936,  424,  398,  396,  936,  937,  394,
-      937,  938,  392,  938,  391,  938,  390,  938,  939,  377,
-      939,  367,  939,  365,  939,  940,  940,  364,  940,  940,
-      940,  360,  940,  941,  358,  941,  356,  354,  350,  941,
-      942,  348,  942,  347,  346,  336,  942,  943,  321,  943,
-      298,  277,  275,  943,  944,  273,  944,  945,  272,  945,
-      271,  269,  268,  945,  946,  263,  946,  947,  259,  947,
-      258,  254,  251,  947,  948,  250,  948,  949,  239,  949,
-
-      238,  231,  230,  949,  950,  227,  950,  951,  217,  215,
-      951,  214,  951,  951,  951,  951,  951,  952,  952,  952,
-      952,  952,  952,  952,  952,  952,  952,  952,  952,  952,
-      953,  213,  953,  207,  206,  204,  953,  954,  199,  954,
-      955,  178,  955,  149,  147,  146,  955,  956,  140,  956,
-      957,  138,  957,  136,  128,  125,  957,  958,  124,  958,
-      959,  120,  959,  101,   98,   95,  959,  960,   93,  960,
-      961,   86,  961,   72,   70,   66,  961,  962,   36,  962,
-      963,   33,  963,   18,   11,    4,  963,  964,    3,  964,
-      965,    0,  965,    0,    0,    0,  965,  966,    0,  966,
-
-        0,    0,    0,  966,  967,    0,  967,  968,    0,  968,
-        0,    0,    0,  968,  969,    0,  969,  970,    0,  970,
-        0,  970,    0,  970,  971,    0,  971,    0,    0,    0,
-      971,  972,    0,  972,    0,    0,    0,  972,  973,    0,
-      973,  974,    0,  974,    0,    0,    0,  974,  975,    0,
-      975,  976,    0,  976,    0,    0,    0,  976,  977,    0,
-      977,  978,    0,  978,    0,    0,    0,  978,  979,    0,
-      979,  980,    0,  980,    0,    0,    0,  980,  981,    0,
-      981,  982,    0,  982,    0,    0,    0,  982,  983,    0,
-      983,  984,    0,    0,  984,    0,  984,  984,  984,  984,
-
-      984,  985,  985,  985,  985,  985,  985,  985,  985,  985,
-      985,  985,  985,  985,  986,    0,  986,    0,    0,    0,
-      986,  987,    0,  987,  988,    0,  988,    0,    0,    0,
-      988,  989,    0,  989,  990,    0,  990,    0,    0,    0,
-      990,  991,    0,  991,  992,    0,  992,    0,    0,    0,
-      992,  993,    0,  993,  994,    0,  994,    0,    0,    0,
-      994,  995,    0,  995,  996,    0,  996,    0,    0,    0,
-      996,  997,    0,  997,  998,    0,  998,    0,    0,    0,
-      998,  999,    0,  999, 1000,    0, 1000,    0,    0,    0,
-     1000, 1001,    0, 1001, 1002,    0, 1002,    0,    0,    0,
-
-     1002, 1003,    0, 1003,    0,    0,    0, 1003, 1004,    0,
-     1004, 1005,    0, 1005,    0,    0,    0, 1005, 1006,    0,
-     1006, 1007,    0, 1007,    0,    0,    0, 1007, 1008,    0,
-     1008, 1009,    0, 1009,    0,    0,    0, 1009, 1010,    0,
-     1010, 1011,    0, 1011, 1012,    0, 1012, 1013,    0,    0,
-     1013,    0, 1013, 1013, 1013, 1013, 1013, 1014,    0, 1014,
-     1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
-     1015, 1015, 1015, 1016,    0, 1016,    0,    0,    0, 1016,
-     1017,    0, 1017, 1018,    0, 1018,    0,    0,    0, 1018,
-     1019,    0, 1019, 1020,    0, 1020, 1021,    0, 1021, 1022,
-
-        0,    0, 1022,    0, 1022, 1022, 1022, 1022, 1022, 1023,
-        0, 1023, 1024,    0, 1024, 1025,    0, 1025, 1026,    0,
-     1026, 1027,    0, 1027, 1028,    0, 1028, 1029,    0, 1029,
-     1030,    0, 1030,    0,    0,    0, 1030, 1031,    0, 1031,
-     1032,    0, 1032,    0,    0,    0, 1032, 1033,    0, 1033,
-     1034,    0, 1034, 1035,    0, 1035, 1036,    0, 1036, 1037,
-        0, 1037,    0,    0,    0, 1037, 1038,    0,    0, 1038,
-        0, 1038, 1038, 1038, 1038, 1038, 1039,    0, 1039, 1040,
-        0, 1040, 1041,    0, 1041, 1042,    0, 1042,    0,    0,
-        0, 1042, 1043,    0, 1043,    0,    0,    0, 1043, 1044,
-
-        0, 1044,    0,    0,    0, 1044, 1045,    0, 1045, 1046,
-        0, 1046,    0,    0,    0, 1046, 1047,    0, 1047,    0,
-        0,    0, 1047, 1048,    0, 1048,    0,    0,    0, 1048,
-     1049,    0, 1049,    0,    0,    0, 1049, 1050,    0, 1050,
-        0,    0,    0, 1050, 1051,    0, 1051,    0,    0,    0,
-     1051, 1052,    0, 1052,    0,    0,    0, 1052, 1053,    0,
-     1053,    0,    0,    0, 1053, 1054,    0, 1054,    0,    0,
-        0, 1054, 1055,    0, 1055,    0,    0,    0, 1055, 1056,
-        0, 1056,    0,    0,    0, 1056, 1057,    0, 1057,    0,
-        0,    0, 1057, 1058,    0, 1058,    0,    0,    0, 1058,
-
-     1059,    0, 1059,    0,    0,    0, 1059, 1060,    0, 1060,
-        0,    0,    0, 1060, 1061,    0, 1061,    0,    0,    0,
-     1061,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
-
-      887,  887,  887,  887,  887,  887,  887
+      721,  719,  715,  720,  722,  723,  724,  725,  721,  731,
+      728,  718,  732,  735,  722,  733,  725,  736,  723,  756,
+      757,  735,  758,  754,  756,  759,  736,  724,  728,  731,
+      755,  761,  758,  728,  732,  757,  733,  743,  743,  743,
+
+      743,  743,  743,  754,  760,  763,  762,  755,  759,  762,
+      764,  766,  768,  769,  766,  768,  770,  761,  763,  770,
+      769,  760,  771,  773,  772,  771,  775,  779,  794,  797,
+      743,  796,  798,  800,  799,  798,  800,  801,  764,  772,
+      801,  803,  804,  807,  810,  805,  773,  797,  805,  775,
+      779,  808,  796,  810,  808,  794,  799,  809,  811,  803,
+      809,  812,  813,  828,  829,  807,  830,  831,  804,  830,
+      832,  829,  812,  834,  811,  856,  831,  833,  813,  837,
+      833,  875,  837,  840,  828,  856,  840,  841,  832,  843,
+      834,  852,  853,  867,  832,  868,  841,  853,  843,  855,
+
+      852,  857,  855,  875,  859,  860,  857,  859,  860,  861,
+      868,  869,  861,  867,  869,  870,  871,  872,  878,  871,
+      872,  879,  882,  884,  883,  870,  885,  887,  886,  845,
+      888,  882,  844,  839,  838,  836,  879,  883,  835,  878,
+      888,  827,  826,  825,  824,  884,  886,  885,  823,  887,
+      892,  892,  892,  892,  892,  892,  892,  892,  892,  892,
+      892,  892,  892,  893,  893,  893,  893,  893,  893,  893,
+      893,  893,  893,  893,  893,  893,  894,  894,  894,  894,
+      894,  894,  894,  894,  894,  894,  894,  894,  894,  895,
+      822,  821,  895,  820,  895,  895,  895,  895,  895,  896,
+
+      819,  818,  817,  896,  896,  896,  896,  896,  896,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  898,  816,  815,  898,  814,  898,  898,  898,
+      898,  898,  899,  806,  899,  899,  802,  899,  899,  899,
+      899,  899,  899,  795,  899,  900,  793,  792,  900,  900,
+      900,  900,  900,  900,  900,  900,  791,  900,  901,  901,
+      901,  901,  901,  901,  901,  901,  901,  901,  901,  901,
+      901,  902,  902,  790,  902,  789,  788,  787,  902,  903,
+      786,  785,  903,  784,  903,  903,  903,  903,  903,  904,
+      783,  904,  782,  781,  780,  904,  905,  778,  905,  777,
+
+      776,  774,  905,  906,  767,  906,  765,  753,  752,  906,
+      907,  751,  907,  750,  749,  748,  907,  908,  747,  908,
+      746,  745,  742,  908,  909,  741,  909,  740,  734,  730,
+      909,  910,  729,  910,  727,  726,  709,  910,  911,  701,
+      911,  698,  693,  691,  911,  912,  687,  912,  677,  673,
+      671,  912,  913,  913,  913,  913,  913,  913,  913,  913,
+      913,  913,  913,  913,  913,  914,  669,  914,  915,  915,
+      666,  915,  915,  915,  663,  915,  916,  916,  662,  916,
+      917,  661,  917,  660,  659,  658,  917,  918,  655,  918,
+      654,  652,  649,  918,  919,  648,  919,  647,  643,  616,
+
+      919,  920,  612,  920,  921,  610,  921,  608,  606,  604,
+      921,  922,  598,  922,  923,  592,  590,  923,  588,  923,
+      923,  923,  923,  923,  924,  924,  924,  924,  924,  924,
+      924,  924,  924,  924,  924,  924,  924,  925,  925,  925,
+      925,  925,  925,  925,  925,  925,  925,  925,  925,  925,
+      926,  586,  926,  584,  582,  580,  926,  927,  578,  927,
+      577,  576,  573,  927,  928,  570,  928,  563,  559,  556,
+      928,  929,  553,  929,  930,  548,  930,  543,  540,  517,
+      930,  931,  513,  931,  932,  511,  932,  509,  507,  505,
+      932,  933,  503,  933,  934,  502,  934,  501,  500,  489,
+
+      934,  935,  486,  935,  936,  484,  936,  483,  482,  480,
+      936,  937,  478,  937,  938,  475,  938,  473,  471,  469,
+      938,  939,  465,  939,  940,  448,  940,  446,  438,  436,
+      940,  941,  428,  941,  942,  426,  942,  424,  942,  398,
+      942,  943,  396,  943,  394,  943,  392,  943,  944,  944,
+      391,  944,  944,  944,  390,  944,  945,  377,  945,  367,
+      365,  364,  945,  946,  360,  946,  358,  356,  354,  946,
+      947,  350,  947,  348,  347,  346,  947,  948,  336,  948,
+      949,  321,  949,  298,  277,  275,  949,  950,  273,  950,
+      951,  272,  951,  271,  269,  268,  951,  952,  263,  952,
+
+      953,  259,  953,  258,  254,  251,  953,  954,  250,  954,
+      955,  239,  238,  955,  231,  955,  955,  955,  955,  955,
+      956,  956,  956,  956,  956,  956,  956,  956,  956,  956,
+      956,  956,  956,  957,  230,  957,  227,  217,  215,  957,
+      958,  214,  958,  959,  213,  959,  207,  206,  204,  959,
+      960,  199,  960,  961,  178,  961,  149,  147,  146,  961,
+      962,  140,  962,  963,  138,  963,  136,  128,  125,  963,
+      964,  124,  964,  965,  120,  965,  101,   98,   95,  965,
+      966,   93,  966,  967,   86,  967,   72,   70,   66,  967,
+      968,   36,  968,  969,   33,  969,   18,   11,    4,  969,
+
+      970,    3,  970,    0,    0,    0,  970,  971,    0,  971,
+      972,    0,  972,    0,    0,    0,  972,  973,    0,  973,
+      974,    0,  974,    0,  974,    0,  974,  975,    0,  975,
+        0,    0,    0,  975,  976,    0,  976,    0,    0,    0,
+      976,  977,    0,  977,  978,    0,  978,    0,    0,    0,
+      978,  979,    0,  979,  980,    0,  980,    0,    0,    0,
+      980,  981,    0,  981,  982,    0,  982,    0,    0,    0,
+      982,  983,    0,  983,  984,    0,  984,    0,    0,    0,
+      984,  985,    0,  985,  986,    0,  986,    0,    0,    0,
+      986,  987,    0,  987,  988,    0,    0,  988,    0,  988,
+
+      988,  988,  988,  988,  989,  989,  989,  989,  989,  989,
+      989,  989,  989,  989,  989,  989,  989,  990,    0,  990,
+        0,    0,    0,  990,  991,    0,  991,  992,    0,  992,
+        0,    0,    0,  992,  993,    0,  993,  994,    0,  994,
+        0,    0,    0,  994,  995,    0,  995,  996,    0,  996,
+        0,    0,    0,  996,  997,    0,  997,  998,    0,  998,
+        0,    0,    0,  998,  999,    0,  999, 1000,    0, 1000,
+        0,    0,    0, 1000, 1001,    0, 1001, 1002,    0, 1002,
+        0,    0,    0, 1002, 1003,    0, 1003, 1004,    0, 1004,
+        0,    0,    0, 1004, 1005,    0, 1005, 1006,    0, 1006,
+
+        0,    0,    0, 1006, 1007,    0, 1007,    0,    0,    0,
+     1007, 1008,    0, 1008, 1009,    0, 1009,    0,    0,    0,
+     1009, 1010,    0, 1010, 1011,    0, 1011,    0,    0,    0,
+     1011, 1012,    0, 1012, 1013,    0, 1013,    0,    0,    0,
+     1013, 1014,    0, 1014, 1015,    0, 1015, 1016,    0, 1016,
+     1017,    0,    0, 1017,    0, 1017, 1017, 1017, 1017, 1017,
+     1018,    0, 1018, 1019, 1019, 1019, 1019, 1019, 1019, 1019,
+     1019, 1019, 1019, 1019, 1019, 1019, 1020,    0, 1020,    0,
+        0,    0, 1020, 1021,    0, 1021, 1022,    0, 1022,    0,
+        0,    0, 1022, 1023,    0, 1023, 1024,    0, 1024, 1025,
+
+        0, 1025, 1026,    0,    0, 1026,    0, 1026, 1026, 1026,
+     1026, 1026, 1027,    0, 1027, 1028,    0, 1028, 1029,    0,
+     1029, 1030,    0, 1030, 1031,    0, 1031, 1032,    0, 1032,
+     1033,    0, 1033, 1034,    0, 1034,    0,    0,    0, 1034,
+     1035,    0, 1035, 1036,    0, 1036,    0,    0,    0, 1036,
+     1037,    0, 1037, 1038,    0, 1038, 1039,    0, 1039, 1040,
+        0, 1040, 1041,    0, 1041,    0,    0,    0, 1041, 1042,
+        0,    0, 1042,    0, 1042, 1042, 1042, 1042, 1042, 1043,
+        0, 1043, 1044,    0, 1044, 1045,    0, 1045, 1046,    0,
+     1046,    0,    0,    0, 1046, 1047,    0, 1047,    0,    0,
+
+        0, 1047, 1048,    0, 1048,    0,    0,    0, 1048, 1049,
+        0, 1049, 1050,    0, 1050,    0,    0,    0, 1050, 1051,
+        0, 1051,    0,    0,    0, 1051, 1052,    0, 1052,    0,
+        0,    0, 1052, 1053,    0, 1053,    0,    0,    0, 1053,
+     1054,    0, 1054,    0,    0,    0, 1054, 1055,    0, 1055,
+        0,    0,    0, 1055, 1056,    0, 1056,    0,    0,    0,
+     1056, 1057,    0, 1057,    0,    0,    0, 1057, 1058,    0,
+     1058,    0,    0,    0, 1058, 1059,    0, 1059,    0,    0,
+        0, 1059, 1060,    0, 1060,    0,    0,    0, 1060, 1061,
+        0, 1061,    0,    0,    0, 1061, 1062,    0, 1062,    0,
+
+        0,    0, 1062, 1063,    0, 1063,    0,    0,    0, 1063,
+     1064,    0, 1064,    0,    0,    0, 1064, 1065,    0, 1065,
+        0,    0,    0, 1065,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[181] =
+static yyconst flex_int32_t yy_rule_can_match_eol[182] =
     {   0,
 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -1435,9 +1437,9 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-    0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+    1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0,     };
+    0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
@@ -1466,7 +1468,7 @@
  * Author           : Peter A. Buhr
  * Created On       : Sat Sep 22 08:58:10 2001
- * Last Modified By : Peter A. Buhr
- * Last Modified On : Thu Jun 23 07:29:30 2016
- * Update Count     : 457
+ * Last Modified By : 
+ * Last Modified On : Sun Jul 31 07:19:36 2016
+ * Update Count     : 459
  */
 #line 20 "lex.ll"
@@ -1529,5 +1531,5 @@
 
 
-#line 1532 "Parser/lex.cc"
+#line 1534 "Parser/lex.cc"
 
 #define INITIAL 0
@@ -1724,5 +1726,5 @@
 
 				   /* line directives */
-#line 1727 "Parser/lex.cc"
+#line 1729 "Parser/lex.cc"
 
 	if ( !(yy_init) )
@@ -1778,5 +1780,5 @@
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 888 )
+				if ( yy_current_state >= 892 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
@@ -1784,5 +1786,5 @@
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 2822 );
+		while ( yy_base[yy_current_state] != 2825 );
 
 yy_find_action:
@@ -2081,60 +2083,60 @@
 YY_RULE_SETUP
 #line 216 "lex.ll"
+{ KEYWORD_RETURN(FALLTHRU); }			// CFA
+	YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 217 "lex.ll"
 { KEYWORD_RETURN(FINALLY); }			// CFA
 	YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 217 "lex.ll"
+case 49:
+YY_RULE_SETUP
+#line 218 "lex.ll"
 { KEYWORD_RETURN(FLOAT); }
 	YY_BREAK
-case 49:
-YY_RULE_SETUP
-#line 218 "lex.ll"
+case 50:
+YY_RULE_SETUP
+#line 219 "lex.ll"
 { KEYWORD_RETURN(FLOAT); }				// GCC
 	YY_BREAK
-case 50:
-YY_RULE_SETUP
-#line 219 "lex.ll"
+case 51:
+YY_RULE_SETUP
+#line 220 "lex.ll"
 { KEYWORD_RETURN(FOR); }
 	YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 220 "lex.ll"
+case 52:
+YY_RULE_SETUP
+#line 221 "lex.ll"
 { KEYWORD_RETURN(FORALL); }				// CFA
 	YY_BREAK
-case 52:
-YY_RULE_SETUP
-#line 221 "lex.ll"
+case 53:
+YY_RULE_SETUP
+#line 222 "lex.ll"
 { KEYWORD_RETURN(FORTRAN); }
 	YY_BREAK
-case 53:
-YY_RULE_SETUP
-#line 222 "lex.ll"
+case 54:
+YY_RULE_SETUP
+#line 223 "lex.ll"
 { KEYWORD_RETURN(FTYPE); }				// CFA
 	YY_BREAK
-case 54:
-YY_RULE_SETUP
-#line 223 "lex.ll"
+case 55:
+YY_RULE_SETUP
+#line 224 "lex.ll"
 { KEYWORD_RETURN(GENERIC); }			// C11
 	YY_BREAK
-case 55:
-YY_RULE_SETUP
-#line 224 "lex.ll"
+case 56:
+YY_RULE_SETUP
+#line 225 "lex.ll"
 { KEYWORD_RETURN(GOTO); }
 	YY_BREAK
-case 56:
-YY_RULE_SETUP
-#line 225 "lex.ll"
+case 57:
+YY_RULE_SETUP
+#line 226 "lex.ll"
 { KEYWORD_RETURN(IF); }
 	YY_BREAK
-case 57:
-YY_RULE_SETUP
-#line 226 "lex.ll"
+case 58:
+YY_RULE_SETUP
+#line 227 "lex.ll"
 { KEYWORD_RETURN(IMAGINARY); }			// C99
-	YY_BREAK
-case 58:
-YY_RULE_SETUP
-#line 227 "lex.ll"
-{ KEYWORD_RETURN(IMAGINARY); }			// GCC
 	YY_BREAK
 case 59:
@@ -2146,10 +2148,10 @@
 YY_RULE_SETUP
 #line 229 "lex.ll"
+{ KEYWORD_RETURN(IMAGINARY); }			// GCC
+	YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 230 "lex.ll"
 { KEYWORD_RETURN(INLINE); }				// C99
-	YY_BREAK
-case 61:
-YY_RULE_SETUP
-#line 230 "lex.ll"
-{ KEYWORD_RETURN(INLINE); }				// GCC
 	YY_BREAK
 case 62:
@@ -2161,55 +2163,55 @@
 YY_RULE_SETUP
 #line 232 "lex.ll"
+{ KEYWORD_RETURN(INLINE); }				// GCC
+	YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 233 "lex.ll"
 { KEYWORD_RETURN(INT); }
 	YY_BREAK
-case 64:
-YY_RULE_SETUP
-#line 233 "lex.ll"
+case 65:
+YY_RULE_SETUP
+#line 234 "lex.ll"
 { KEYWORD_RETURN(INT); }				// GCC
 	YY_BREAK
-case 65:
-YY_RULE_SETUP
-#line 234 "lex.ll"
+case 66:
+YY_RULE_SETUP
+#line 235 "lex.ll"
 { KEYWORD_RETURN(LABEL); }				// GCC
 	YY_BREAK
-case 66:
-YY_RULE_SETUP
-#line 235 "lex.ll"
+case 67:
+YY_RULE_SETUP
+#line 236 "lex.ll"
 { KEYWORD_RETURN(LONG); }
 	YY_BREAK
-case 67:
-YY_RULE_SETUP
-#line 236 "lex.ll"
+case 68:
+YY_RULE_SETUP
+#line 237 "lex.ll"
 { KEYWORD_RETURN(LVALUE); }				// CFA
 	YY_BREAK
-case 68:
-YY_RULE_SETUP
-#line 237 "lex.ll"
+case 69:
+YY_RULE_SETUP
+#line 238 "lex.ll"
 { KEYWORD_RETURN(NORETURN); }			// C11
 	YY_BREAK
-case 69:
-YY_RULE_SETUP
-#line 238 "lex.ll"
+case 70:
+YY_RULE_SETUP
+#line 239 "lex.ll"
 { KEYWORD_RETURN(OFFSETOF); }		// GCC
 	YY_BREAK
-case 70:
-YY_RULE_SETUP
-#line 239 "lex.ll"
+case 71:
+YY_RULE_SETUP
+#line 240 "lex.ll"
 { KEYWORD_RETURN(OTYPE); }				// CFA
 	YY_BREAK
-case 71:
-YY_RULE_SETUP
-#line 240 "lex.ll"
+case 72:
+YY_RULE_SETUP
+#line 241 "lex.ll"
 { KEYWORD_RETURN(REGISTER); }
 	YY_BREAK
-case 72:
-YY_RULE_SETUP
-#line 241 "lex.ll"
+case 73:
+YY_RULE_SETUP
+#line 242 "lex.ll"
 { KEYWORD_RETURN(RESTRICT); }			// C99
-	YY_BREAK
-case 73:
-YY_RULE_SETUP
-#line 242 "lex.ll"
-{ KEYWORD_RETURN(RESTRICT); }			// GCC
 	YY_BREAK
 case 74:
@@ -2221,20 +2223,20 @@
 YY_RULE_SETUP
 #line 244 "lex.ll"
+{ KEYWORD_RETURN(RESTRICT); }			// GCC
+	YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 245 "lex.ll"
 { KEYWORD_RETURN(RETURN); }
 	YY_BREAK
-case 76:
-YY_RULE_SETUP
-#line 245 "lex.ll"
+case 77:
+YY_RULE_SETUP
+#line 246 "lex.ll"
 { KEYWORD_RETURN(SHORT); }
 	YY_BREAK
-case 77:
-YY_RULE_SETUP
-#line 246 "lex.ll"
+case 78:
+YY_RULE_SETUP
+#line 247 "lex.ll"
 { KEYWORD_RETURN(SIGNED); }
-	YY_BREAK
-case 78:
-YY_RULE_SETUP
-#line 247 "lex.ll"
-{ KEYWORD_RETURN(SIGNED); }				// GCC
 	YY_BREAK
 case 79:
@@ -2246,60 +2248,60 @@
 YY_RULE_SETUP
 #line 249 "lex.ll"
+{ KEYWORD_RETURN(SIGNED); }				// GCC
+	YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 250 "lex.ll"
 { KEYWORD_RETURN(SIZEOF); }
 	YY_BREAK
-case 81:
-YY_RULE_SETUP
-#line 250 "lex.ll"
+case 82:
+YY_RULE_SETUP
+#line 251 "lex.ll"
 { KEYWORD_RETURN(STATIC); }
 	YY_BREAK
-case 82:
-YY_RULE_SETUP
-#line 251 "lex.ll"
+case 83:
+YY_RULE_SETUP
+#line 252 "lex.ll"
 { KEYWORD_RETURN(STATICASSERT); }		// C11
 	YY_BREAK
-case 83:
-YY_RULE_SETUP
-#line 252 "lex.ll"
+case 84:
+YY_RULE_SETUP
+#line 253 "lex.ll"
 { KEYWORD_RETURN(STRUCT); }
 	YY_BREAK
-case 84:
-YY_RULE_SETUP
-#line 253 "lex.ll"
+case 85:
+YY_RULE_SETUP
+#line 254 "lex.ll"
 { KEYWORD_RETURN(SWITCH); }
 	YY_BREAK
-case 85:
-YY_RULE_SETUP
-#line 254 "lex.ll"
+case 86:
+YY_RULE_SETUP
+#line 255 "lex.ll"
 { KEYWORD_RETURN(THREADLOCAL); }		// C11
 	YY_BREAK
-case 86:
-YY_RULE_SETUP
-#line 255 "lex.ll"
+case 87:
+YY_RULE_SETUP
+#line 256 "lex.ll"
 { KEYWORD_RETURN(THROW); }				// CFA
 	YY_BREAK
-case 87:
-YY_RULE_SETUP
-#line 256 "lex.ll"
+case 88:
+YY_RULE_SETUP
+#line 257 "lex.ll"
 { KEYWORD_RETURN(THROWRESUME); }		// CFA
 	YY_BREAK
-case 88:
-YY_RULE_SETUP
-#line 257 "lex.ll"
+case 89:
+YY_RULE_SETUP
+#line 258 "lex.ll"
 { KEYWORD_RETURN(TRAIT); }				// CFA
 	YY_BREAK
-case 89:
-YY_RULE_SETUP
-#line 258 "lex.ll"
+case 90:
+YY_RULE_SETUP
+#line 259 "lex.ll"
 { KEYWORD_RETURN(TRY); }				// CFA
 	YY_BREAK
-case 90:
-YY_RULE_SETUP
-#line 259 "lex.ll"
+case 91:
+YY_RULE_SETUP
+#line 260 "lex.ll"
 { KEYWORD_RETURN(TYPEDEF); }
-	YY_BREAK
-case 91:
-YY_RULE_SETUP
-#line 260 "lex.ll"
-{ KEYWORD_RETURN(TYPEOF); }				// GCC
 	YY_BREAK
 case 92:
@@ -2316,30 +2318,30 @@
 YY_RULE_SETUP
 #line 263 "lex.ll"
+{ KEYWORD_RETURN(TYPEOF); }				// GCC
+	YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 264 "lex.ll"
 { KEYWORD_RETURN(UNION); }
 	YY_BREAK
-case 95:
-YY_RULE_SETUP
-#line 264 "lex.ll"
+case 96:
+YY_RULE_SETUP
+#line 265 "lex.ll"
 { KEYWORD_RETURN(UNSIGNED); }
 	YY_BREAK
-case 96:
-YY_RULE_SETUP
-#line 265 "lex.ll"
+case 97:
+YY_RULE_SETUP
+#line 266 "lex.ll"
 { KEYWORD_RETURN(VALIST); }			// GCC
 	YY_BREAK
-case 97:
-YY_RULE_SETUP
-#line 266 "lex.ll"
+case 98:
+YY_RULE_SETUP
+#line 267 "lex.ll"
 { KEYWORD_RETURN(VOID); }
 	YY_BREAK
-case 98:
-YY_RULE_SETUP
-#line 267 "lex.ll"
+case 99:
+YY_RULE_SETUP
+#line 268 "lex.ll"
 { KEYWORD_RETURN(VOLATILE); }
-	YY_BREAK
-case 99:
-YY_RULE_SETUP
-#line 268 "lex.ll"
-{ KEYWORD_RETURN(VOLATILE); }			// GCC
 	YY_BREAK
 case 100:
@@ -2351,47 +2353,47 @@
 YY_RULE_SETUP
 #line 270 "lex.ll"
+{ KEYWORD_RETURN(VOLATILE); }			// GCC
+	YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 271 "lex.ll"
 { KEYWORD_RETURN(WHILE); }
 	YY_BREAK
 /* identifier */
-case 102:
-YY_RULE_SETUP
-#line 273 "lex.ll"
+case 103:
+YY_RULE_SETUP
+#line 274 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 103:
-YY_RULE_SETUP
-#line 274 "lex.ll"
+case 104:
+YY_RULE_SETUP
+#line 275 "lex.ll"
 { ATTRIBUTE_RETURN(); }
 	YY_BREAK
-case 104:
-YY_RULE_SETUP
-#line 275 "lex.ll"
+case 105:
+YY_RULE_SETUP
+#line 276 "lex.ll"
 { BEGIN BKQUOTE; }
 	YY_BREAK
-case 105:
-YY_RULE_SETUP
-#line 276 "lex.ll"
+case 106:
+YY_RULE_SETUP
+#line 277 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 106:
-YY_RULE_SETUP
-#line 277 "lex.ll"
+case 107:
+YY_RULE_SETUP
+#line 278 "lex.ll"
 { BEGIN 0; }
 	YY_BREAK
 /* numeric constants */
-case 107:
-YY_RULE_SETUP
-#line 280 "lex.ll"
+case 108:
+YY_RULE_SETUP
+#line 281 "lex.ll"
 { NUMERIC_RETURN(ZERO); }				// CFA
 	YY_BREAK
-case 108:
-YY_RULE_SETUP
-#line 281 "lex.ll"
+case 109:
+YY_RULE_SETUP
+#line 282 "lex.ll"
 { NUMERIC_RETURN(ONE); }				// CFA
-	YY_BREAK
-case 109:
-YY_RULE_SETUP
-#line 282 "lex.ll"
-{ NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
 case 110:
@@ -2408,5 +2410,5 @@
 YY_RULE_SETUP
 #line 285 "lex.ll"
-{ NUMERIC_RETURN(FLOATINGconstant); }
+{ NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
 case 113:
@@ -2415,63 +2417,63 @@
 { NUMERIC_RETURN(FLOATINGconstant); }
 	YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 287 "lex.ll"
+{ NUMERIC_RETURN(FLOATINGconstant); }
+	YY_BREAK
 /* character constant, allows empty value */
-case 114:
-YY_RULE_SETUP
-#line 289 "lex.ll"
+case 115:
+YY_RULE_SETUP
+#line 290 "lex.ll"
 { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
 	YY_BREAK
-case 115:
-YY_RULE_SETUP
-#line 290 "lex.ll"
+case 116:
+YY_RULE_SETUP
+#line 291 "lex.ll"
 { *strtext += std::string( yytext ); }
 	YY_BREAK
-case 116:
-/* rule 116 can match eol */
-YY_RULE_SETUP
-#line 291 "lex.ll"
+case 117:
+/* rule 117 can match eol */
+YY_RULE_SETUP
+#line 292 "lex.ll"
 { BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
 	YY_BREAK
 /* ' stop highlighting */
 /* string constant */
-case 117:
-YY_RULE_SETUP
-#line 295 "lex.ll"
+case 118:
+YY_RULE_SETUP
+#line 296 "lex.ll"
 { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
 	YY_BREAK
-case 118:
-YY_RULE_SETUP
-#line 296 "lex.ll"
+case 119:
+YY_RULE_SETUP
+#line 297 "lex.ll"
 { *strtext += std::string( yytext ); }
 	YY_BREAK
-case 119:
-/* rule 119 can match eol */
-YY_RULE_SETUP
-#line 297 "lex.ll"
+case 120:
+/* rule 120 can match eol */
+YY_RULE_SETUP
+#line 298 "lex.ll"
 { BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
 	YY_BREAK
 /* " stop highlighting */
 /* common character/string constant */
-case 120:
-YY_RULE_SETUP
-#line 301 "lex.ll"
+case 121:
+YY_RULE_SETUP
+#line 302 "lex.ll"
 { rm_underscore(); *strtext += std::string( yytext ); }
 	YY_BREAK
-case 121:
-/* rule 121 can match eol */
-YY_RULE_SETUP
-#line 302 "lex.ll"
+case 122:
+/* rule 122 can match eol */
+YY_RULE_SETUP
+#line 303 "lex.ll"
 {}						// continuation (ALSO HANDLED BY CPP)
 	YY_BREAK
-case 122:
-YY_RULE_SETUP
-#line 303 "lex.ll"
+case 123:
+YY_RULE_SETUP
+#line 304 "lex.ll"
 { *strtext += std::string( yytext ); } // unknown escape character
 	YY_BREAK
 /* punctuation */
-case 123:
-YY_RULE_SETUP
-#line 306 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 124:
 YY_RULE_SETUP
@@ -2502,10 +2504,10 @@
 YY_RULE_SETUP
 #line 312 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 313 "lex.ll"
 { ASCIIOP_RETURN(); }					// also operator
-	YY_BREAK
-case 130:
-YY_RULE_SETUP
-#line 313 "lex.ll"
-{ ASCIIOP_RETURN(); }
 	YY_BREAK
 case 131:
@@ -2517,38 +2519,38 @@
 YY_RULE_SETUP
 #line 315 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 316 "lex.ll"
 { ASCIIOP_RETURN(); }					// also operator
 	YY_BREAK
-case 133:
-YY_RULE_SETUP
-#line 316 "lex.ll"
+case 134:
+YY_RULE_SETUP
+#line 317 "lex.ll"
 { NAMEDOP_RETURN(ELLIPSIS); }
 	YY_BREAK
 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
-case 134:
-YY_RULE_SETUP
-#line 319 "lex.ll"
+case 135:
+YY_RULE_SETUP
+#line 320 "lex.ll"
 { RETURN_VAL('['); }
 	YY_BREAK
-case 135:
-YY_RULE_SETUP
-#line 320 "lex.ll"
+case 136:
+YY_RULE_SETUP
+#line 321 "lex.ll"
 { RETURN_VAL(']'); }
 	YY_BREAK
-case 136:
-YY_RULE_SETUP
-#line 321 "lex.ll"
+case 137:
+YY_RULE_SETUP
+#line 322 "lex.ll"
 { RETURN_VAL('{'); }
 	YY_BREAK
-case 137:
-YY_RULE_SETUP
-#line 322 "lex.ll"
+case 138:
+YY_RULE_SETUP
+#line 323 "lex.ll"
 { RETURN_VAL('}'); }
 	YY_BREAK
 /* operators */
-case 138:
-YY_RULE_SETUP
-#line 325 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 139:
 YY_RULE_SETUP
@@ -2618,122 +2620,122 @@
 case 152:
 YY_RULE_SETUP
-#line 340 "lex.ll"
+#line 339 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 341 "lex.ll"
 { NAMEDOP_RETURN(ICR); }
 	YY_BREAK
-case 153:
-YY_RULE_SETUP
-#line 341 "lex.ll"
+case 154:
+YY_RULE_SETUP
+#line 342 "lex.ll"
 { NAMEDOP_RETURN(DECR); }
 	YY_BREAK
-case 154:
-YY_RULE_SETUP
-#line 342 "lex.ll"
+case 155:
+YY_RULE_SETUP
+#line 343 "lex.ll"
 { NAMEDOP_RETURN(EQ); }
 	YY_BREAK
-case 155:
-YY_RULE_SETUP
-#line 343 "lex.ll"
+case 156:
+YY_RULE_SETUP
+#line 344 "lex.ll"
 { NAMEDOP_RETURN(NE); }
 	YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 344 "lex.ll"
+case 157:
+YY_RULE_SETUP
+#line 345 "lex.ll"
 { NAMEDOP_RETURN(LS); }
 	YY_BREAK
-case 157:
-YY_RULE_SETUP
-#line 345 "lex.ll"
+case 158:
+YY_RULE_SETUP
+#line 346 "lex.ll"
 { NAMEDOP_RETURN(RS); }
 	YY_BREAK
-case 158:
-YY_RULE_SETUP
-#line 346 "lex.ll"
+case 159:
+YY_RULE_SETUP
+#line 347 "lex.ll"
 { NAMEDOP_RETURN(LE); }
 	YY_BREAK
-case 159:
-YY_RULE_SETUP
-#line 347 "lex.ll"
+case 160:
+YY_RULE_SETUP
+#line 348 "lex.ll"
 { NAMEDOP_RETURN(GE); }
 	YY_BREAK
-case 160:
-YY_RULE_SETUP
-#line 348 "lex.ll"
+case 161:
+YY_RULE_SETUP
+#line 349 "lex.ll"
 { NAMEDOP_RETURN(ANDAND); }
 	YY_BREAK
-case 161:
-YY_RULE_SETUP
-#line 349 "lex.ll"
+case 162:
+YY_RULE_SETUP
+#line 350 "lex.ll"
 { NAMEDOP_RETURN(OROR); }
 	YY_BREAK
-case 162:
-YY_RULE_SETUP
-#line 350 "lex.ll"
+case 163:
+YY_RULE_SETUP
+#line 351 "lex.ll"
 { NAMEDOP_RETURN(ARROW); }
 	YY_BREAK
-case 163:
-YY_RULE_SETUP
-#line 351 "lex.ll"
+case 164:
+YY_RULE_SETUP
+#line 352 "lex.ll"
 { NAMEDOP_RETURN(PLUSassign); }
 	YY_BREAK
-case 164:
-YY_RULE_SETUP
-#line 352 "lex.ll"
+case 165:
+YY_RULE_SETUP
+#line 353 "lex.ll"
 { NAMEDOP_RETURN(MINUSassign); }
 	YY_BREAK
-case 165:
-YY_RULE_SETUP
-#line 353 "lex.ll"
+case 166:
+YY_RULE_SETUP
+#line 354 "lex.ll"
 { NAMEDOP_RETURN(MULTassign); }
 	YY_BREAK
-case 166:
-YY_RULE_SETUP
-#line 354 "lex.ll"
+case 167:
+YY_RULE_SETUP
+#line 355 "lex.ll"
 { NAMEDOP_RETURN(DIVassign); }
 	YY_BREAK
-case 167:
-YY_RULE_SETUP
-#line 355 "lex.ll"
+case 168:
+YY_RULE_SETUP
+#line 356 "lex.ll"
 { NAMEDOP_RETURN(MODassign); }
 	YY_BREAK
-case 168:
-YY_RULE_SETUP
-#line 356 "lex.ll"
+case 169:
+YY_RULE_SETUP
+#line 357 "lex.ll"
 { NAMEDOP_RETURN(ANDassign); }
 	YY_BREAK
-case 169:
-YY_RULE_SETUP
-#line 357 "lex.ll"
+case 170:
+YY_RULE_SETUP
+#line 358 "lex.ll"
 { NAMEDOP_RETURN(ORassign); }
 	YY_BREAK
-case 170:
-YY_RULE_SETUP
-#line 358 "lex.ll"
+case 171:
+YY_RULE_SETUP
+#line 359 "lex.ll"
 { NAMEDOP_RETURN(ERassign); }
 	YY_BREAK
-case 171:
-YY_RULE_SETUP
-#line 359 "lex.ll"
+case 172:
+YY_RULE_SETUP
+#line 360 "lex.ll"
 { NAMEDOP_RETURN(LSassign); }
 	YY_BREAK
-case 172:
-YY_RULE_SETUP
-#line 360 "lex.ll"
+case 173:
+YY_RULE_SETUP
+#line 361 "lex.ll"
 { NAMEDOP_RETURN(RSassign); }
 	YY_BREAK
-case 173:
-YY_RULE_SETUP
-#line 362 "lex.ll"
-{ NAMEDOP_RETURN(ATassign); }
+case 174:
+YY_RULE_SETUP
+#line 363 "lex.ll"
+{ NAMEDOP_RETURN(ATassign); }			// CFA
 	YY_BREAK
 /* CFA, operator identifier */
-case 174:
-YY_RULE_SETUP
-#line 365 "lex.ll"
+case 175:
+YY_RULE_SETUP
+#line 366 "lex.ll"
 { IDENTIFIER_RETURN(); }				// unary
-	YY_BREAK
-case 175:
-YY_RULE_SETUP
-#line 366 "lex.ll"
-{ IDENTIFIER_RETURN(); }
 	YY_BREAK
 case 176:
@@ -2745,4 +2747,9 @@
 YY_RULE_SETUP
 #line 368 "lex.ll"
+{ IDENTIFIER_RETURN(); }
+	YY_BREAK
+case 178:
+YY_RULE_SETUP
+#line 369 "lex.ll"
 { IDENTIFIER_RETURN(); }		// binary
 	YY_BREAK
@@ -2773,7 +2780,7 @@
 	  an argument list.
 	*/
-case 178:
-YY_RULE_SETUP
-#line 395 "lex.ll"
+case 179:
+YY_RULE_SETUP
+#line 396 "lex.ll"
 {
 	// 1 or 2 character unary operator ?
@@ -2788,15 +2795,15 @@
 	YY_BREAK
 /* unknown characters */
-case 179:
-YY_RULE_SETUP
-#line 407 "lex.ll"
+case 180:
+YY_RULE_SETUP
+#line 408 "lex.ll"
 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
 	YY_BREAK
-case 180:
-YY_RULE_SETUP
-#line 409 "lex.ll"
+case 181:
+YY_RULE_SETUP
+#line 410 "lex.ll"
 ECHO;
 	YY_BREAK
-#line 2801 "Parser/lex.cc"
+#line 2808 "Parser/lex.cc"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(COMMENT):
@@ -3095,5 +3102,5 @@
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 888 )
+			if ( yy_current_state >= 892 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
@@ -3123,9 +3130,9 @@
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 888 )
+		if ( yy_current_state >= 892 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 887);
+	yy_is_jam = (yy_current_state == 891);
 
 	return yy_is_jam ? 0 : yy_current_state;
@@ -3773,5 +3780,5 @@
 #define YYTABLES_NAME "yytables"
 
-#line 409 "lex.ll"
+#line 410 "lex.ll"
 
 
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/lex.ll	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -9,7 +9,7 @@
  * Author           : Peter A. Buhr
  * Created On       : Sat Sep 22 08:58:10 2001
- * Last Modified By : Peter A. Buhr
- * Last Modified On : Thu Jun 23 07:29:30 2016
- * Update Count     : 457
+ * Last Modified By : 
+ * Last Modified On : Sun Jul 31 07:19:36 2016
+ * Update Count     : 459
  */
 
@@ -213,4 +213,5 @@
 __extension__	{ KEYWORD_RETURN(EXTENSION); }			// GCC
 extern			{ KEYWORD_RETURN(EXTERN); }
+fallthrough		{ KEYWORD_RETURN(FALLTHRU); }			// CFA
 fallthru		{ KEYWORD_RETURN(FALLTHRU); }			// CFA
 finally			{ KEYWORD_RETURN(FINALLY); }			// CFA
@@ -360,5 +361,5 @@
 ">>="			{ NAMEDOP_RETURN(RSassign); }
 
-"@="			{ NAMEDOP_RETURN(ATassign); }
+"@="			{ NAMEDOP_RETURN(ATassign); }			// CFA
 
 				/* CFA, operator identifier */
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/parser.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -89,7 +89,12 @@
 TypedefTable typedefTable;
 
+void appendStr( std::string &to, std::string *from ) {
+	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
+	to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
+} // appendStr
+
 
 /* Line 268 of yacc.c  */
-#line 94 "Parser/parser.cc"
+#line 99 "Parser/parser.cc"
 
 /* Enabling traces.  */
@@ -342,5 +347,5 @@
 
 /* Line 293 of yacc.c  */
-#line 110 "parser.yy"
+#line 115 "parser.yy"
 
 	Token tok;
@@ -351,7 +356,9 @@
 	DeclarationNode::TypeClass tclass;
 	StatementNode *sn;
-	ConstantNode *constant;
+	ConstantExpr *constant;
+	ForCtl *fctl;
 	LabelNode *label;
 	InitializerNode *in;
+	OperKinds op;
 	bool flag;
 
@@ -359,5 +366,5 @@
 
 /* Line 293 of yacc.c  */
-#line 362 "Parser/parser.cc"
+#line 369 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -371,5 +378,5 @@
 
 /* Line 343 of yacc.c  */
-#line 374 "Parser/parser.cc"
+#line 381 "Parser/parser.cc"
 
 #ifdef short
@@ -588,7 +595,7 @@
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  252
+#define YYFINAL  251
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   12080
+#define YYLAST   10816
 
 /* YYNTOKENS -- Number of terminals.  */
@@ -597,7 +604,7 @@
 #define YYNNTS  241
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  755
+#define YYNRULES  750
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1579
+#define YYNSTATES  1554
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
@@ -614,14 +621,14 @@
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   122,     2,     2,     2,   125,   119,     2,
-     109,   110,   118,   120,   116,   121,   113,   124,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
-     126,   131,   127,   130,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   121,     2,     2,     2,   124,   118,     2,
+     109,   110,   117,   119,   116,   120,   113,   123,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   130,   132,
+     125,   131,   126,   129,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   111,     2,   112,   128,     2,     2,     2,     2,     2,
+       2,   111,     2,   112,   127,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
+       2,     2,     2,   114,   128,   115,   122,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -658,77 +665,77 @@
       17,    19,    21,    23,    25,    27,    29,    31,    34,    36,
       38,    42,    46,    48,    55,    60,    64,    72,    76,    84,
-      87,    90,    98,   103,   105,   109,   110,   112,   116,   124,
-     134,   136,   140,   142,   146,   154,   158,   166,   168,   170,
-     172,   175,   178,   181,   184,   187,   190,   195,   202,   204,
-     209,   214,   217,   222,   224,   226,   228,   230,   232,   234,
-     236,   238,   243,   248,   250,   254,   258,   262,   264,   268,
-     272,   274,   278,   282,   284,   288,   292,   296,   300,   302,
-     306,   310,   312,   316,   318,   322,   324,   328,   330,   334,
-     336,   340,   342,   348,   353,   359,   361,   363,   367,   371,
-     374,   375,   377,   380,   386,   393,   401,   403,   407,   409,
-     411,   413,   415,   417,   419,   421,   423,   425,   427,   429,
-     433,   434,   436,   438,   440,   442,   444,   446,   448,   450,
-     452,   459,   464,   467,   475,   477,   481,   483,   486,   488,
-     491,   493,   496,   499,   505,   513,   519,   529,   535,   545,
-     547,   551,   553,   555,   559,   563,   566,   568,   571,   574,
-     575,   577,   580,   584,   585,   587,   590,   594,   598,   603,
-     604,   606,   608,   611,   617,   625,   632,   639,   644,   648,
-     653,   656,   660,   663,   667,   671,   675,   679,   685,   689,
-     693,   698,   700,   706,   713,   719,   726,   736,   747,   757,
-     768,   771,   773,   776,   779,   782,   784,   791,   800,   811,
-     824,   839,   840,   842,   843,   845,   847,   851,   856,   864,
-     865,   867,   871,   873,   877,   879,   881,   883,   887,   889,
-     891,   893,   897,   898,   900,   904,   909,   911,   915,   917,
-     919,   923,   927,   931,   935,   939,   942,   946,   953,   957,
-     961,   966,   968,   971,   974,   978,   984,   993,  1001,  1009,
-    1015,  1025,  1028,  1031,  1037,  1041,  1047,  1052,  1056,  1061,
-    1066,  1074,  1078,  1082,  1086,  1090,  1095,  1102,  1104,  1106,
-    1108,  1110,  1112,  1114,  1116,  1118,  1119,  1121,  1123,  1126,
-    1128,  1130,  1132,  1134,  1136,  1138,  1140,  1141,  1147,  1149,
-    1152,  1156,  1158,  1161,  1163,  1165,  1167,  1169,  1171,  1173,
-    1175,  1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,
-    1195,  1197,  1199,  1201,  1203,  1205,  1207,  1210,  1213,  1217,
-    1221,  1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,
-    1258,  1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,
-    1286,  1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1311,
-    1318,  1326,  1329,  1332,  1335,  1336,  1339,  1342,  1346,  1349,
-    1353,  1355,  1358,  1362,  1365,  1368,  1373,  1374,  1376,  1379,
-    1382,  1384,  1385,  1387,  1390,  1393,  1399,  1402,  1403,  1411,
-    1414,  1419,  1420,  1423,  1424,  1426,  1428,  1430,  1436,  1442,
-    1448,  1450,  1456,  1462,  1472,  1474,  1480,  1481,  1483,  1485,
-    1491,  1493,  1495,  1501,  1507,  1509,  1513,  1517,  1522,  1524,
-    1526,  1528,  1530,  1533,  1535,  1539,  1543,  1545,  1548,  1550,
-    1554,  1556,  1558,  1560,  1562,  1564,  1566,  1568,  1570,  1572,
-    1574,  1576,  1579,  1581,  1583,  1585,  1588,  1589,  1592,  1595,
-    1597,  1602,  1603,  1605,  1608,  1612,  1617,  1620,  1623,  1625,
-    1628,  1630,  1633,  1639,  1645,  1653,  1660,  1662,  1665,  1668,
-    1672,  1674,  1677,  1680,  1685,  1688,  1693,  1694,  1699,  1702,
-    1704,  1706,  1708,  1709,  1712,  1718,  1724,  1738,  1740,  1742,
-    1746,  1750,  1753,  1757,  1761,  1764,  1769,  1771,  1778,  1788,
-    1789,  1801,  1803,  1807,  1811,  1815,  1817,  1819,  1825,  1828,
-    1834,  1835,  1837,  1839,  1843,  1844,  1846,  1848,  1850,  1852,
-    1853,  1860,  1863,  1865,  1868,  1873,  1876,  1880,  1884,  1888,
-    1893,  1899,  1905,  1911,  1918,  1920,  1922,  1924,  1928,  1929,
-    1935,  1936,  1938,  1940,  1943,  1950,  1952,  1956,  1957,  1959,
-    1964,  1966,  1968,  1970,  1972,  1975,  1977,  1980,  1983,  1985,
-    1989,  1992,  1996,  2000,  2003,  2008,  2013,  2017,  2026,  2030,
-    2033,  2035,  2038,  2045,  2054,  2058,  2061,  2065,  2069,  2074,
-    2079,  2083,  2085,  2087,  2089,  2094,  2101,  2105,  2108,  2112,
-    2116,  2121,  2126,  2130,  2133,  2135,  2138,  2141,  2143,  2147,
-    2150,  2154,  2158,  2161,  2166,  2171,  2175,  2182,  2191,  2195,
-    2198,  2200,  2203,  2206,  2209,  2213,  2217,  2220,  2225,  2230,
-    2234,  2241,  2250,  2254,  2257,  2259,  2262,  2265,  2267,  2269,
-    2272,  2276,  2280,  2283,  2288,  2295,  2304,  2306,  2309,  2312,
-    2314,  2317,  2320,  2324,  2328,  2330,  2335,  2340,  2344,  2350,
-    2359,  2363,  2366,  2370,  2372,  2378,  2384,  2391,  2398,  2400,
-    2403,  2406,  2408,  2411,  2414,  2418,  2422,  2424,  2429,  2434,
-    2438,  2444,  2453,  2457,  2459,  2462,  2464,  2467,  2474,  2480,
-    2487,  2495,  2503,  2505,  2508,  2511,  2513,  2516,  2519,  2523,
-    2527,  2529,  2534,  2539,  2543,  2552,  2556,  2558,  2560,  2563,
-    2565,  2567,  2570,  2574,  2577,  2581,  2584,  2588,  2592,  2595,
-    2600,  2604,  2607,  2611,  2614,  2619,  2623,  2626,  2633,  2640,
-    2647,  2655,  2657,  2660,  2662,  2664,  2666,  2669,  2673,  2676,
-    2680,  2683,  2687,  2691,  2696,  2699,  2703,  2708,  2711,  2717,
-    2723,  2730,  2737,  2738,  2740,  2741
+      87,    90,    98,   103,   105,   109,   110,   112,   114,   118,
+     120,   124,   132,   136,   144,   146,   148,   150,   153,   156,
+     159,   162,   165,   168,   173,   176,   181,   188,   190,   195,
+     200,   202,   204,   206,   208,   210,   212,   214,   219,   224,
+     226,   230,   234,   238,   240,   244,   248,   250,   254,   258,
+     260,   264,   268,   272,   276,   278,   282,   286,   288,   292,
+     294,   298,   300,   304,   306,   310,   312,   316,   318,   324,
+     329,   335,   337,   339,   343,   346,   347,   349,   351,   353,
+     355,   357,   359,   361,   363,   365,   367,   369,   371,   374,
+     380,   387,   395,   397,   401,   403,   407,   408,   410,   412,
+     414,   416,   418,   420,   422,   424,   426,   433,   438,   441,
+     449,   451,   455,   457,   460,   462,   465,   467,   470,   473,
+     479,   487,   493,   503,   509,   519,   521,   525,   527,   529,
+     533,   537,   540,   542,   545,   548,   549,   551,   554,   558,
+     559,   561,   564,   568,   572,   577,   578,   580,   582,   585,
+     591,   599,   606,   613,   618,   622,   627,   630,   634,   637,
+     641,   645,   649,   653,   659,   663,   667,   672,   674,   680,
+     687,   693,   700,   710,   721,   731,   742,   745,   747,   750,
+     753,   756,   758,   765,   774,   785,   798,   813,   814,   816,
+     817,   819,   821,   825,   830,   838,   839,   841,   845,   847,
+     851,   853,   855,   857,   861,   863,   865,   867,   871,   872,
+     874,   878,   883,   885,   889,   891,   893,   897,   901,   905,
+     909,   913,   916,   920,   927,   931,   935,   940,   942,   945,
+     948,   952,   958,   967,   975,   983,   989,   999,  1002,  1005,
+    1011,  1015,  1021,  1026,  1030,  1035,  1040,  1048,  1052,  1056,
+    1060,  1064,  1069,  1076,  1078,  1080,  1082,  1084,  1086,  1088,
+    1090,  1092,  1093,  1095,  1097,  1100,  1102,  1104,  1106,  1108,
+    1110,  1112,  1114,  1115,  1121,  1123,  1126,  1130,  1132,  1135,
+    1137,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
+    1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
+    1177,  1179,  1181,  1184,  1187,  1191,  1195,  1197,  1201,  1203,
+    1206,  1209,  1212,  1217,  1222,  1227,  1232,  1234,  1237,  1240,
+    1244,  1246,  1249,  1252,  1254,  1257,  1260,  1264,  1266,  1269,
+    1272,  1274,  1276,  1281,  1284,  1285,  1292,  1300,  1303,  1306,
+    1309,  1310,  1313,  1316,  1320,  1323,  1327,  1329,  1332,  1336,
+    1339,  1342,  1347,  1348,  1350,  1353,  1356,  1358,  1359,  1361,
+    1364,  1367,  1373,  1376,  1377,  1385,  1388,  1393,  1394,  1397,
+    1398,  1400,  1402,  1404,  1410,  1416,  1422,  1424,  1430,  1436,
+    1446,  1448,  1454,  1455,  1457,  1459,  1465,  1467,  1469,  1475,
+    1481,  1483,  1487,  1491,  1496,  1498,  1500,  1502,  1504,  1507,
+    1509,  1513,  1517,  1519,  1522,  1524,  1528,  1530,  1532,  1534,
+    1536,  1538,  1540,  1542,  1544,  1546,  1548,  1550,  1553,  1555,
+    1557,  1559,  1562,  1563,  1566,  1569,  1571,  1576,  1577,  1579,
+    1582,  1586,  1591,  1594,  1597,  1599,  1602,  1605,  1611,  1617,
+    1625,  1632,  1634,  1637,  1640,  1644,  1646,  1649,  1652,  1657,
+    1660,  1665,  1666,  1671,  1674,  1676,  1678,  1680,  1681,  1684,
+    1690,  1696,  1710,  1712,  1714,  1718,  1722,  1725,  1729,  1733,
+    1736,  1741,  1743,  1750,  1760,  1761,  1773,  1775,  1779,  1783,
+    1787,  1789,  1791,  1797,  1800,  1806,  1807,  1809,  1811,  1815,
+    1816,  1818,  1820,  1822,  1824,  1825,  1832,  1835,  1837,  1840,
+    1845,  1848,  1852,  1856,  1860,  1865,  1871,  1877,  1883,  1890,
+    1892,  1894,  1896,  1900,  1901,  1907,  1908,  1910,  1912,  1915,
+    1922,  1924,  1928,  1929,  1931,  1936,  1938,  1940,  1942,  1944,
+    1947,  1949,  1952,  1955,  1957,  1961,  1964,  1968,  1972,  1975,
+    1980,  1985,  1989,  1998,  2002,  2005,  2007,  2010,  2017,  2026,
+    2030,  2033,  2037,  2041,  2046,  2051,  2055,  2057,  2059,  2061,
+    2066,  2073,  2077,  2080,  2084,  2088,  2093,  2098,  2102,  2105,
+    2107,  2110,  2113,  2115,  2119,  2122,  2126,  2130,  2133,  2138,
+    2143,  2147,  2154,  2163,  2167,  2170,  2172,  2175,  2178,  2181,
+    2185,  2189,  2192,  2197,  2202,  2206,  2213,  2222,  2226,  2229,
+    2231,  2234,  2237,  2239,  2241,  2244,  2248,  2252,  2255,  2260,
+    2267,  2276,  2278,  2281,  2284,  2286,  2289,  2292,  2296,  2300,
+    2302,  2307,  2312,  2316,  2322,  2331,  2335,  2338,  2342,  2344,
+    2350,  2356,  2363,  2370,  2372,  2375,  2378,  2380,  2383,  2386,
+    2390,  2394,  2396,  2401,  2406,  2410,  2416,  2425,  2429,  2431,
+    2434,  2436,  2439,  2446,  2452,  2459,  2467,  2475,  2477,  2480,
+    2483,  2485,  2488,  2491,  2495,  2499,  2501,  2506,  2511,  2515,
+    2524,  2528,  2530,  2532,  2535,  2537,  2539,  2542,  2546,  2549,
+    2553,  2556,  2560,  2564,  2567,  2572,  2576,  2579,  2583,  2586,
+    2591,  2595,  2598,  2605,  2612,  2619,  2627,  2629,  2632,  2634,
+    2636,  2638,  2641,  2645,  2648,  2652,  2655,  2659,  2663,  2668,
+    2671,  2675,  2680,  2683,  2689,  2695,  2702,  2709,  2710,  2712,
+    2713
 };
 
@@ -747,268 +754,265 @@
      109,   275,   110,   114,   279,   372,   115,    -1,   143,   114,
      144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
-     164,    -1,   139,   117,   164,    -1,   111,   134,   164,   135,
-     112,   117,   164,    -1,   111,   134,   164,   116,   167,   135,
-     112,   117,   164,    -1,   147,    -1,   146,   116,   147,    -1,
-     139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
-     146,   135,   112,    -1,   139,    85,   147,    -1,   139,    85,
-     111,   134,   146,   135,   112,    -1,   143,    -1,   136,    -1,
-     141,    -1,    40,   151,    -1,   149,   151,    -1,   150,   151,
-      -1,    86,   148,    -1,    87,   148,    -1,    37,   148,    -1,
-      37,   109,   275,   110,    -1,    38,   109,   275,   116,   139,
-     110,    -1,    76,    -1,    76,   109,   276,   110,    -1,    76,
-     109,   145,   110,    -1,    66,   148,    -1,    66,   109,   275,
-     110,    -1,   118,    -1,   119,    -1,    94,    -1,   120,    -1,
-     121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   275,
-     110,   151,    -1,   109,   275,   110,   166,    -1,   151,    -1,
-     152,   118,   151,    -1,   152,   124,   151,    -1,   152,   125,
-     151,    -1,   152,    -1,   153,   120,   152,    -1,   153,   121,
-     152,    -1,   153,    -1,   154,    88,   153,    -1,   154,    89,
-     153,    -1,   154,    -1,   155,   126,   154,    -1,   155,   127,
-     154,    -1,   155,    90,   154,    -1,   155,    91,   154,    -1,
-     155,    -1,   156,    92,   155,    -1,   156,    93,   155,    -1,
-     156,    -1,   157,   119,   156,    -1,   157,    -1,   158,   128,
-     157,    -1,   158,    -1,   159,   129,   158,    -1,   159,    -1,
-     160,    94,   159,    -1,   160,    -1,   161,    95,   160,    -1,
-     161,    -1,   161,   130,   169,   117,   162,    -1,   161,   130,
-     117,   162,    -1,   161,   130,   169,   117,   166,    -1,   162,
-      -1,   162,    -1,   148,   131,   164,    -1,   148,   168,   164,
-      -1,   166,   373,    -1,    -1,   164,    -1,   111,   112,    -1,
-     111,   134,   164,   135,   112,    -1,   111,   134,   116,   167,
-     135,   112,    -1,   111,   134,   164,   116,   167,   135,   112,
-      -1,   165,    -1,   167,   116,   165,    -1,    97,    -1,    98,
-      -1,    99,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
-      -1,   104,    -1,   105,    -1,   106,    -1,   164,    -1,   169,
-     116,   164,    -1,    -1,   169,    -1,   172,    -1,   173,    -1,
-     177,    -1,   178,    -1,   190,    -1,   192,    -1,   193,    -1,
-     198,    -1,   128,   143,   114,   144,   115,   132,    -1,    72,
-     117,   312,   171,    -1,   114,   115,    -1,   114,   134,   134,
-     209,   174,   135,   115,    -1,   175,    -1,   174,   134,   175,
-      -1,   212,    -1,    40,   212,    -1,   308,    -1,   171,   135,
-      -1,   171,    -1,   176,   171,    -1,   170,   132,    -1,    41,
-     109,   169,   110,   171,    -1,    41,   109,   169,   110,   171,
-      42,   171,    -1,    43,   109,   169,   110,   183,    -1,    43,
-     109,   169,   110,   114,   134,   205,   184,   115,    -1,    53,
-     109,   169,   110,   183,    -1,    53,   109,   169,   110,   114,
-     134,   205,   186,   115,    -1,   163,    -1,   163,    96,   163,
-      -1,   310,    -1,   179,    -1,   180,   116,   179,    -1,    44,
-     180,   117,    -1,    45,   117,    -1,   181,    -1,   182,   181,
-      -1,   182,   171,    -1,    -1,   185,    -1,   182,   176,    -1,
-     185,   182,   176,    -1,    -1,   187,    -1,   182,   189,    -1,
-     182,   176,   188,    -1,   187,   182,   189,    -1,   187,   182,
-     176,   188,    -1,    -1,   189,    -1,    56,    -1,    56,   132,
-      -1,    47,   109,   169,   110,   171,    -1,    46,   171,    47,
-     109,   169,   110,   132,    -1,    48,   109,   134,   191,   110,
-     171,    -1,   170,   135,   132,   170,   132,   170,    -1,   212,
-     170,   132,   170,    -1,    51,    72,   132,    -1,    51,   118,
-     169,   132,    -1,    50,   132,    -1,    50,    72,   132,    -1,
-      49,   132,    -1,    49,    72,   132,    -1,    52,   170,   132,
-      -1,    61,   165,   132,    -1,    62,   165,   132,    -1,    62,
-     165,    63,   164,   132,    -1,    57,   173,   194,    -1,    57,
-     173,   196,    -1,    57,   173,   194,   196,    -1,   195,    -1,
-      58,   109,    96,   110,   173,    -1,   195,    58,   109,    96,
-     110,   173,    -1,    59,   109,    96,   110,   173,    -1,   195,
-      59,   109,    96,   110,   173,    -1,    58,   109,   134,   134,
-     197,   135,   110,   173,   135,    -1,   195,    58,   109,   134,
-     134,   197,   135,   110,   173,   135,    -1,    59,   109,   134,
-     134,   197,   135,   110,   173,   135,    -1,   195,    59,   109,
-     134,   134,   197,   135,   110,   173,   135,    -1,    60,   173,
-      -1,   225,    -1,   225,   309,    -1,   225,   357,    -1,   366,
-     139,    -1,   366,    -1,    64,   199,   109,   141,   110,   132,
-      -1,    64,   199,   109,   141,   117,   200,   110,   132,    -1,
-      64,   199,   109,   141,   117,   200,   117,   200,   110,   132,
-      -1,    64,   199,   109,   141,   117,   200,   117,   200,   117,
-     203,   110,   132,    -1,    64,   199,    51,   109,   141,   117,
-     117,   200,   117,   203,   117,   204,   110,   132,    -1,    -1,
-      11,    -1,    -1,   201,    -1,   202,    -1,   201,   116,   202,
-      -1,   141,   109,   163,   110,    -1,   111,   163,   112,   141,
-     109,   163,   110,    -1,    -1,   141,    -1,   203,   116,   141,
-      -1,   139,    -1,   204,   116,   139,    -1,   135,    -1,   206,
-      -1,   212,    -1,   206,   134,   212,    -1,   135,    -1,   208,
-      -1,   222,    -1,   208,   134,   222,    -1,    -1,   210,    -1,
-      29,   211,   132,    -1,   210,    29,   211,   132,    -1,   274,
-      -1,   211,   116,   274,    -1,   213,    -1,   222,    -1,   214,
-     135,   132,    -1,   219,   135,   132,    -1,   216,   135,   132,
-      -1,   293,   135,   132,    -1,   296,   135,   132,    -1,   215,
-     277,    -1,   231,   215,   277,    -1,   214,   135,   116,   134,
-     272,   277,    -1,   367,   272,   311,    -1,   370,   272,   311,
-      -1,   227,   370,   272,   311,    -1,   217,    -1,   227,   217,
-      -1,   231,   217,    -1,   231,   227,   217,    -1,   216,   135,
-     116,   134,   272,    -1,   111,   112,   272,   109,   134,   260,
-     135,   110,    -1,   370,   272,   109,   134,   260,   135,   110,
-      -1,   218,   272,   109,   134,   260,   135,   110,    -1,   111,
-     134,   262,   135,   112,    -1,   111,   134,   262,   135,   116,
-     134,   263,   135,   112,    -1,     3,   215,    -1,     3,   217,
-      -1,   219,   135,   116,   134,   139,    -1,     3,   225,   309,
-      -1,   220,   135,   116,   134,   309,    -1,   227,     3,   225,
-     309,    -1,   225,     3,   309,    -1,   225,     3,   227,   309,
-      -1,     3,   139,   131,   164,    -1,   221,   135,   116,   134,
-     139,   131,   164,    -1,   223,   135,   132,    -1,   220,   135,
-     132,    -1,   221,   135,   132,    -1,   240,   135,   132,    -1,
-     224,   309,   311,   277,    -1,   223,   116,   312,   309,   311,
-     277,    -1,   236,    -1,   240,    -1,   242,    -1,   283,    -1,
-     237,    -1,   241,    -1,   243,    -1,   284,    -1,    -1,   227,
-      -1,   228,    -1,   227,   228,    -1,   229,    -1,   314,    -1,
-      10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
-      -1,    13,   109,   230,   286,   110,    -1,   232,    -1,   227,
-     232,    -1,   231,   227,   232,    -1,   233,    -1,   232,   233,
-      -1,   234,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
-      -1,     8,    -1,     9,    -1,    69,    -1,    71,    -1,    16,
-      -1,    21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,
-      -1,    22,    -1,    23,    -1,    15,    -1,    25,    -1,    26,
-      -1,    27,    -1,    24,    -1,   237,    -1,   231,   237,    -1,
-     236,   233,    -1,   236,   233,   227,    -1,   236,   233,   237,
-      -1,   238,    -1,   226,   239,   226,    -1,   235,    -1,   227,
-     235,    -1,   238,   228,    -1,   238,   235,    -1,    28,   109,
-     276,   110,    -1,    28,   109,   169,   110,    -1,    78,   109,
-     276,   110,    -1,    78,   109,   169,   110,    -1,   241,    -1,
-     231,   241,    -1,   240,   233,    -1,   240,   233,   227,    -1,
-     244,    -1,   227,   244,    -1,   241,   228,    -1,   243,    -1,
-     231,   243,    -1,   242,   233,    -1,   242,   233,   227,    -1,
-      74,    -1,   227,    74,    -1,   243,   228,    -1,   245,    -1,
-     256,    -1,   247,   114,   248,   115,    -1,   247,   274,    -1,
-      -1,   247,   274,   246,   114,   248,   115,    -1,   247,   109,
-     292,   110,   114,   248,   115,    -1,   247,   285,    -1,    31,
-     312,    -1,    32,   312,    -1,    -1,   248,   249,    -1,   250,
-     132,    -1,    40,   250,   132,    -1,   251,   132,    -1,    40,
-     251,   132,    -1,   366,    -1,   366,   274,    -1,   250,   116,
-     274,    -1,   250,   116,    -1,   225,   252,    -1,   251,   116,
-     312,   252,    -1,    -1,   254,    -1,   318,   253,    -1,   331,
-     253,    -1,   357,    -1,    -1,   254,    -1,   117,   163,    -1,
-      30,   312,    -1,   255,   114,   258,   372,   115,    -1,   255,
-     274,    -1,    -1,   255,   274,   257,   114,   258,   372,   115,
-      -1,   274,   259,    -1,   258,   116,   274,   259,    -1,    -1,
-     131,   163,    -1,    -1,   261,    -1,   263,    -1,   262,    -1,
-     262,   135,   116,   134,   263,    -1,   263,   135,   116,   134,
-      96,    -1,   262,   135,   116,   134,    96,    -1,   267,    -1,
-     263,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
-     267,    -1,   262,   135,   116,   134,   263,   135,   116,   134,
-     267,    -1,   268,    -1,   263,   135,   116,   134,   268,    -1,
-      -1,   265,    -1,   266,    -1,   266,   135,   116,   134,    96,
-      -1,   270,    -1,   269,    -1,   266,   135,   116,   134,   270,
-      -1,   266,   135,   116,   134,   269,    -1,   269,    -1,   362,
-     272,   373,    -1,   370,   272,   373,    -1,   227,   370,   272,
-     373,    -1,   217,    -1,   270,    -1,   362,    -1,   370,    -1,
-     227,   370,    -1,   371,    -1,   224,   336,   373,    -1,   224,
-     340,   373,    -1,   224,    -1,   224,   351,    -1,   139,    -1,
-     271,   116,   139,    -1,   137,    -1,    74,    -1,    75,    -1,
-     138,    -1,    74,    -1,    75,    -1,   139,    -1,    74,    -1,
-      75,    -1,   366,    -1,   225,    -1,   225,   357,    -1,   366,
-      -1,   371,    -1,   225,    -1,   225,   345,    -1,    -1,   131,
-     278,    -1,   107,   278,    -1,   164,    -1,   114,   279,   372,
-     115,    -1,    -1,   278,    -1,   280,   278,    -1,   279,   116,
-     278,    -1,   279,   116,   280,   278,    -1,   281,   117,    -1,
-     274,   117,    -1,   282,    -1,   281,   282,    -1,    80,    -1,
-     113,   274,    -1,   111,   134,   164,   135,   112,    -1,   111,
-     134,   310,   135,   112,    -1,   111,   134,   163,    96,   163,
-     135,   112,    -1,   113,   111,   134,   146,   135,   112,    -1,
-     284,    -1,   231,   284,    -1,   283,   233,    -1,   283,   233,
-     227,    -1,   285,    -1,   227,   285,    -1,   284,   228,    -1,
-      75,   109,   292,   110,    -1,   287,   373,    -1,   286,   116,
-     287,   373,    -1,    -1,   289,   274,   288,   290,    -1,   225,
-     336,    -1,    33,    -1,    35,    -1,    34,    -1,    -1,   290,
-     291,    -1,   129,   274,   109,   292,   110,    -1,   129,   114,
-     134,   298,   115,    -1,   129,   109,   134,   286,   135,   110,
-     114,   134,   298,   115,   109,   292,   110,    -1,   276,    -1,
-     164,    -1,   292,   116,   276,    -1,   292,   116,   164,    -1,
-      33,   294,    -1,   232,    33,   294,    -1,   293,   116,   294,
-      -1,   295,   290,    -1,   295,   290,   131,   276,    -1,   274,
-      -1,   273,   109,   134,   286,   135,   110,    -1,    36,   274,
-     109,   134,   286,   135,   110,   114,   115,    -1,    -1,    36,
-     274,   109,   134,   286,   135,   110,   114,   297,   298,   115,
-      -1,   299,    -1,   298,   134,   299,    -1,   300,   135,   132,
-      -1,   301,   135,   132,    -1,   215,    -1,   217,    -1,   300,
-     135,   116,   134,   272,    -1,   225,   309,    -1,   301,   135,
-     116,   134,   309,    -1,    -1,   303,    -1,   305,    -1,   303,
-     134,   305,    -1,    -1,   303,    -1,   212,    -1,   307,    -1,
-     198,    -1,    -1,     5,    82,   306,   114,   304,   115,    -1,
-      40,   305,    -1,   308,    -1,   323,   173,    -1,   327,   134,
-     207,   173,    -1,   216,   173,    -1,   224,   323,   173,    -1,
-     227,   323,   173,    -1,   231,   323,   173,    -1,   231,   227,
-     323,   173,    -1,   224,   327,   134,   207,   173,    -1,   227,
-     327,   134,   207,   173,    -1,   231,   327,   134,   207,   173,
-      -1,   231,   227,   327,   134,   207,   173,    -1,   318,    -1,
-     331,    -1,   323,    -1,   163,   123,   163,    -1,    -1,    64,
-     109,   141,   110,   312,    -1,    -1,   313,    -1,   314,    -1,
-     313,   314,    -1,    39,   109,   109,   315,   110,   110,    -1,
-     316,    -1,   315,   116,   316,    -1,    -1,   317,    -1,   317,
-     109,   170,   110,    -1,   272,    -1,   234,    -1,   235,    -1,
-     228,    -1,   319,   312,    -1,   320,    -1,   321,   312,    -1,
-     322,   312,    -1,   137,    -1,   109,   319,   110,    -1,   149,
-     318,    -1,   149,   227,   318,    -1,   109,   320,   110,    -1,
-     319,   349,    -1,   109,   320,   110,   349,    -1,   109,   321,
-     110,   350,    -1,   109,   321,   110,    -1,   109,   320,   110,
-     109,   134,   264,   135,   110,    -1,   109,   322,   110,    -1,
-     324,   312,    -1,   325,    -1,   326,   312,    -1,   319,   109,
-     134,   264,   135,   110,    -1,   109,   325,   110,   109,   134,
-     264,   135,   110,    -1,   109,   324,   110,    -1,   149,   323,
-      -1,   149,   227,   323,    -1,   109,   325,   110,    -1,   109,
-     325,   110,   349,    -1,   109,   326,   110,   350,    -1,   109,
-     326,   110,    -1,   328,    -1,   329,    -1,   330,    -1,   319,
-     109,   271,   110,    -1,   109,   329,   110,   109,   271,   110,
-      -1,   109,   328,   110,    -1,   149,   327,    -1,   149,   227,
-     327,    -1,   109,   329,   110,    -1,   109,   329,   110,   349,
-      -1,   109,   330,   110,   350,    -1,   109,   330,   110,    -1,
-     332,   312,    -1,   333,    -1,   334,   312,    -1,   335,   312,
-      -1,   341,    -1,   109,   332,   110,    -1,   149,   331,    -1,
-     149,   227,   331,    -1,   109,   333,   110,    -1,   332,   349,
-      -1,   109,   333,   110,   349,    -1,   109,   334,   110,   350,
-      -1,   109,   334,   110,    -1,   332,   109,   134,   264,   135,
-     110,    -1,   109,   333,   110,   109,   134,   264,   135,   110,
-      -1,   109,   335,   110,    -1,   319,   312,    -1,   337,    -1,
-     338,   312,    -1,   339,   312,    -1,   149,   336,    -1,   149,
-     227,   336,    -1,   109,   337,   110,    -1,   319,   355,    -1,
-     109,   337,   110,   349,    -1,   109,   338,   110,   350,    -1,
-     109,   338,   110,    -1,   319,   109,   134,   264,   135,   110,
-      -1,   109,   337,   110,   109,   134,   264,   135,   110,    -1,
-     109,   339,   110,    -1,   341,   312,    -1,   342,    -1,   343,
-     312,    -1,   344,   312,    -1,    74,    -1,    75,    -1,   149,
-     340,    -1,   149,   227,   340,    -1,   109,   342,   110,    -1,
-     341,   355,    -1,   109,   342,   110,   355,    -1,   341,   109,
-     134,   264,   135,   110,    -1,   109,   342,   110,   109,   134,
-     264,   135,   110,    -1,   346,    -1,   347,   312,    -1,   348,
-     312,    -1,   149,    -1,   149,   227,    -1,   149,   345,    -1,
-     149,   227,   345,    -1,   109,   346,   110,    -1,   349,    -1,
-     109,   346,   110,   349,    -1,   109,   347,   110,   350,    -1,
-     109,   347,   110,    -1,   109,   134,   264,   135,   110,    -1,
-     109,   346,   110,   109,   134,   264,   135,   110,    -1,   109,
-     348,   110,    -1,   111,   112,    -1,   111,   112,   350,    -1,
-     350,    -1,   111,   134,   164,   135,   112,    -1,   111,   134,
-     118,   135,   112,    -1,   350,   111,   134,   164,   135,   112,
-      -1,   350,   111,   134,   118,   135,   112,    -1,   352,    -1,
-     353,   312,    -1,   354,   312,    -1,   149,    -1,   149,   227,
-      -1,   149,   351,    -1,   149,   227,   351,    -1,   109,   352,
-     110,    -1,   355,    -1,   109,   352,   110,   355,    -1,   109,
-     353,   110,   350,    -1,   109,   353,   110,    -1,   109,   134,
-     264,   135,   110,    -1,   109,   352,   110,   109,   134,   264,
-     135,   110,    -1,   109,   354,   110,    -1,   356,    -1,   356,
-     350,    -1,   350,    -1,   111,   112,    -1,   111,   134,   227,
-     118,   135,   112,    -1,   111,   134,   227,   135,   112,    -1,
-     111,   134,   227,   164,   135,   112,    -1,   111,   134,     7,
-     226,   164,   135,   112,    -1,   111,   134,   227,     7,   164,
-     135,   112,    -1,   358,    -1,   359,   312,    -1,   360,   312,
-      -1,   149,    -1,   149,   227,    -1,   149,   357,    -1,   149,
-     227,   357,    -1,   109,   358,   110,    -1,   349,    -1,   109,
-     358,   110,   349,    -1,   109,   359,   110,   350,    -1,   109,
-     359,   110,    -1,   109,   358,   110,   109,   134,   264,   135,
-     110,    -1,   109,   360,   110,    -1,   362,    -1,   370,    -1,
-     227,   370,    -1,   363,    -1,   364,    -1,   149,   225,    -1,
-     227,   149,   225,    -1,   149,   371,    -1,   227,   149,   371,
-      -1,   149,   361,    -1,   227,   149,   361,    -1,   111,   112,
-     225,    -1,   365,   225,    -1,   111,   112,   350,   225,    -1,
-     365,   350,   225,    -1,   350,   225,    -1,   111,   112,   363,
-      -1,   365,   363,    -1,   111,   112,   350,   363,    -1,   365,
-     350,   363,    -1,   350,   363,    -1,   111,   134,   227,   118,
-     135,   112,    -1,   111,   134,   227,   164,   135,   112,    -1,
-     111,   134,   231,   164,   135,   112,    -1,   111,   134,   231,
-     227,   164,   135,   112,    -1,   370,    -1,   227,   370,    -1,
-     367,    -1,   368,    -1,   369,    -1,   149,   225,    -1,   227,
-     149,   225,    -1,   149,   371,    -1,   227,   149,   371,    -1,
-     149,   366,    -1,   227,   149,   366,    -1,   111,   112,   225,
-      -1,   111,   112,   350,   225,    -1,   350,   225,    -1,   111,
-     112,   368,    -1,   111,   112,   350,   368,    -1,   350,   368,
-      -1,   111,   134,   263,   135,   112,    -1,   111,   112,   109,
-     260,   110,    -1,   370,   109,   134,   260,   135,   110,    -1,
-     218,   109,   134,   260,   135,   110,    -1,    -1,   116,    -1,
-      -1,   131,   164,    -1
+     164,    -1,   147,    -1,   146,   116,   147,    -1,   139,    -1,
+     139,   113,   147,    -1,   139,   113,   111,   134,   146,   135,
+     112,    -1,   139,    85,   147,    -1,   139,    85,   111,   134,
+     146,   135,   112,    -1,   143,    -1,   136,    -1,   141,    -1,
+      40,   151,    -1,   149,   151,    -1,   150,   151,    -1,    86,
+     148,    -1,    87,   148,    -1,    37,   148,    -1,    37,   109,
+     275,   110,    -1,    66,   148,    -1,    66,   109,   275,   110,
+      -1,    38,   109,   275,   116,   139,   110,    -1,    76,    -1,
+      76,   109,   145,   110,    -1,    76,   109,   276,   110,    -1,
+     117,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
+     122,    -1,   148,    -1,   109,   275,   110,   151,    -1,   109,
+     275,   110,   167,    -1,   151,    -1,   152,   117,   151,    -1,
+     152,   123,   151,    -1,   152,   124,   151,    -1,   152,    -1,
+     153,   119,   152,    -1,   153,   120,   152,    -1,   153,    -1,
+     154,    88,   153,    -1,   154,    89,   153,    -1,   154,    -1,
+     155,   125,   154,    -1,   155,   126,   154,    -1,   155,    90,
+     154,    -1,   155,    91,   154,    -1,   155,    -1,   156,    92,
+     155,    -1,   156,    93,   155,    -1,   156,    -1,   157,   118,
+     156,    -1,   157,    -1,   158,   127,   157,    -1,   158,    -1,
+     159,   128,   158,    -1,   159,    -1,   160,    94,   159,    -1,
+     160,    -1,   161,    95,   160,    -1,   161,    -1,   161,   129,
+     169,   130,   162,    -1,   161,   129,   130,   162,    -1,   161,
+     129,   169,   130,   167,    -1,   162,    -1,   162,    -1,   148,
+     166,   164,    -1,   167,   373,    -1,    -1,   164,    -1,   131,
+      -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,   101,
+      -1,   102,    -1,   103,    -1,   104,    -1,   105,    -1,   106,
+      -1,   111,   112,    -1,   111,   134,   164,   135,   112,    -1,
+     111,   134,   116,   168,   135,   112,    -1,   111,   134,   164,
+     116,   168,   135,   112,    -1,   165,    -1,   168,   116,   165,
+      -1,   164,    -1,   169,   116,   164,    -1,    -1,   169,    -1,
+     172,    -1,   173,    -1,   177,    -1,   178,    -1,   190,    -1,
+     192,    -1,   193,    -1,   198,    -1,   127,   143,   114,   144,
+     115,   132,    -1,    72,   130,   312,   171,    -1,   114,   115,
+      -1,   114,   134,   134,   209,   174,   135,   115,    -1,   175,
+      -1,   174,   134,   175,    -1,   212,    -1,    40,   212,    -1,
+     308,    -1,   171,   135,    -1,   171,    -1,   176,   171,    -1,
+     170,   132,    -1,    41,   109,   169,   110,   171,    -1,    41,
+     109,   169,   110,   171,    42,   171,    -1,    43,   109,   169,
+     110,   183,    -1,    43,   109,   169,   110,   114,   134,   205,
+     184,   115,    -1,    53,   109,   169,   110,   183,    -1,    53,
+     109,   169,   110,   114,   134,   205,   186,   115,    -1,   163,
+      -1,   163,    96,   163,    -1,   310,    -1,   179,    -1,   180,
+     116,   179,    -1,    44,   180,   130,    -1,    45,   130,    -1,
+     181,    -1,   182,   181,    -1,   182,   171,    -1,    -1,   185,
+      -1,   182,   176,    -1,   185,   182,   176,    -1,    -1,   187,
+      -1,   182,   189,    -1,   182,   176,   188,    -1,   187,   182,
+     189,    -1,   187,   182,   176,   188,    -1,    -1,   189,    -1,
+      56,    -1,    56,   132,    -1,    47,   109,   169,   110,   171,
+      -1,    46,   171,    47,   109,   169,   110,   132,    -1,    48,
+     109,   134,   191,   110,   171,    -1,   170,   135,   132,   170,
+     132,   170,    -1,   212,   170,   132,   170,    -1,    51,    72,
+     132,    -1,    51,   117,   169,   132,    -1,    50,   132,    -1,
+      50,    72,   132,    -1,    49,   132,    -1,    49,    72,   132,
+      -1,    52,   170,   132,    -1,    61,   165,   132,    -1,    62,
+     165,   132,    -1,    62,   165,    63,   164,   132,    -1,    57,
+     173,   194,    -1,    57,   173,   196,    -1,    57,   173,   194,
+     196,    -1,   195,    -1,    58,   109,    96,   110,   173,    -1,
+     195,    58,   109,    96,   110,   173,    -1,    59,   109,    96,
+     110,   173,    -1,   195,    59,   109,    96,   110,   173,    -1,
+      58,   109,   134,   134,   197,   135,   110,   173,   135,    -1,
+     195,    58,   109,   134,   134,   197,   135,   110,   173,   135,
+      -1,    59,   109,   134,   134,   197,   135,   110,   173,   135,
+      -1,   195,    59,   109,   134,   134,   197,   135,   110,   173,
+     135,    -1,    60,   173,    -1,   225,    -1,   225,   309,    -1,
+     225,   357,    -1,   366,   139,    -1,   366,    -1,    64,   199,
+     109,   141,   110,   132,    -1,    64,   199,   109,   141,   130,
+     200,   110,   132,    -1,    64,   199,   109,   141,   130,   200,
+     130,   200,   110,   132,    -1,    64,   199,   109,   141,   130,
+     200,   130,   200,   130,   203,   110,   132,    -1,    64,   199,
+      51,   109,   141,   130,   130,   200,   130,   203,   130,   204,
+     110,   132,    -1,    -1,    11,    -1,    -1,   201,    -1,   202,
+      -1,   201,   116,   202,    -1,   141,   109,   163,   110,    -1,
+     111,   163,   112,   141,   109,   163,   110,    -1,    -1,   141,
+      -1,   203,   116,   141,    -1,   139,    -1,   204,   116,   139,
+      -1,   135,    -1,   206,    -1,   212,    -1,   206,   134,   212,
+      -1,   135,    -1,   208,    -1,   222,    -1,   208,   134,   222,
+      -1,    -1,   210,    -1,    29,   211,   132,    -1,   210,    29,
+     211,   132,    -1,   274,    -1,   211,   116,   274,    -1,   213,
+      -1,   222,    -1,   214,   135,   132,    -1,   219,   135,   132,
+      -1,   216,   135,   132,    -1,   293,   135,   132,    -1,   296,
+     135,   132,    -1,   215,   277,    -1,   231,   215,   277,    -1,
+     214,   135,   116,   134,   272,   277,    -1,   367,   272,   311,
+      -1,   370,   272,   311,    -1,   227,   370,   272,   311,    -1,
+     217,    -1,   227,   217,    -1,   231,   217,    -1,   231,   227,
+     217,    -1,   216,   135,   116,   134,   272,    -1,   111,   112,
+     272,   109,   134,   260,   135,   110,    -1,   370,   272,   109,
+     134,   260,   135,   110,    -1,   218,   272,   109,   134,   260,
+     135,   110,    -1,   111,   134,   262,   135,   112,    -1,   111,
+     134,   262,   135,   116,   134,   263,   135,   112,    -1,     3,
+     215,    -1,     3,   217,    -1,   219,   135,   116,   134,   139,
+      -1,     3,   225,   309,    -1,   220,   135,   116,   134,   309,
+      -1,   227,     3,   225,   309,    -1,   225,     3,   309,    -1,
+     225,     3,   227,   309,    -1,     3,   139,   131,   164,    -1,
+     221,   135,   116,   134,   139,   131,   164,    -1,   223,   135,
+     132,    -1,   220,   135,   132,    -1,   221,   135,   132,    -1,
+     240,   135,   132,    -1,   224,   309,   311,   277,    -1,   223,
+     116,   312,   309,   311,   277,    -1,   236,    -1,   240,    -1,
+     242,    -1,   283,    -1,   237,    -1,   241,    -1,   243,    -1,
+     284,    -1,    -1,   227,    -1,   228,    -1,   227,   228,    -1,
+     229,    -1,   314,    -1,    10,    -1,    12,    -1,    11,    -1,
+      14,    -1,    67,    -1,    -1,    13,   109,   230,   286,   110,
+      -1,   232,    -1,   227,   232,    -1,   231,   227,   232,    -1,
+     233,    -1,   232,   233,    -1,   234,    -1,     5,    -1,     7,
+      -1,     4,    -1,     6,    -1,     8,    -1,     9,    -1,    69,
+      -1,    71,    -1,    16,    -1,    21,    -1,    20,    -1,    18,
+      -1,    19,    -1,    17,    -1,    22,    -1,    23,    -1,    15,
+      -1,    25,    -1,    26,    -1,    27,    -1,    24,    -1,   237,
+      -1,   231,   237,    -1,   236,   233,    -1,   236,   233,   227,
+      -1,   236,   233,   237,    -1,   238,    -1,   226,   239,   226,
+      -1,   235,    -1,   227,   235,    -1,   238,   228,    -1,   238,
+     235,    -1,    28,   109,   276,   110,    -1,    28,   109,   169,
+     110,    -1,    78,   109,   276,   110,    -1,    78,   109,   169,
+     110,    -1,   241,    -1,   231,   241,    -1,   240,   233,    -1,
+     240,   233,   227,    -1,   244,    -1,   227,   244,    -1,   241,
+     228,    -1,   243,    -1,   231,   243,    -1,   242,   233,    -1,
+     242,   233,   227,    -1,    74,    -1,   227,    74,    -1,   243,
+     228,    -1,   245,    -1,   256,    -1,   247,   114,   248,   115,
+      -1,   247,   274,    -1,    -1,   247,   274,   246,   114,   248,
+     115,    -1,   247,   109,   292,   110,   114,   248,   115,    -1,
+     247,   285,    -1,    31,   312,    -1,    32,   312,    -1,    -1,
+     248,   249,    -1,   250,   132,    -1,    40,   250,   132,    -1,
+     251,   132,    -1,    40,   251,   132,    -1,   366,    -1,   366,
+     274,    -1,   250,   116,   274,    -1,   250,   116,    -1,   225,
+     252,    -1,   251,   116,   312,   252,    -1,    -1,   254,    -1,
+     318,   253,    -1,   331,   253,    -1,   357,    -1,    -1,   254,
+      -1,   130,   163,    -1,    30,   312,    -1,   255,   114,   258,
+     372,   115,    -1,   255,   274,    -1,    -1,   255,   274,   257,
+     114,   258,   372,   115,    -1,   274,   259,    -1,   258,   116,
+     274,   259,    -1,    -1,   131,   163,    -1,    -1,   261,    -1,
+     263,    -1,   262,    -1,   262,   135,   116,   134,   263,    -1,
+     263,   135,   116,   134,    96,    -1,   262,   135,   116,   134,
+      96,    -1,   267,    -1,   263,   135,   116,   134,   267,    -1,
+     262,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
+     263,   135,   116,   134,   267,    -1,   268,    -1,   263,   135,
+     116,   134,   268,    -1,    -1,   265,    -1,   266,    -1,   266,
+     135,   116,   134,    96,    -1,   270,    -1,   269,    -1,   266,
+     135,   116,   134,   270,    -1,   266,   135,   116,   134,   269,
+      -1,   269,    -1,   362,   272,   373,    -1,   370,   272,   373,
+      -1,   227,   370,   272,   373,    -1,   217,    -1,   270,    -1,
+     362,    -1,   370,    -1,   227,   370,    -1,   371,    -1,   224,
+     336,   373,    -1,   224,   340,   373,    -1,   224,    -1,   224,
+     351,    -1,   139,    -1,   271,   116,   139,    -1,   137,    -1,
+      74,    -1,    75,    -1,   138,    -1,    74,    -1,    75,    -1,
+     139,    -1,    74,    -1,    75,    -1,   366,    -1,   225,    -1,
+     225,   357,    -1,   366,    -1,   371,    -1,   225,    -1,   225,
+     345,    -1,    -1,   131,   278,    -1,   107,   278,    -1,   164,
+      -1,   114,   279,   372,   115,    -1,    -1,   278,    -1,   280,
+     278,    -1,   279,   116,   278,    -1,   279,   116,   280,   278,
+      -1,   281,   130,    -1,   274,   130,    -1,   282,    -1,   281,
+     282,    -1,   113,   274,    -1,   111,   134,   164,   135,   112,
+      -1,   111,   134,   310,   135,   112,    -1,   111,   134,   163,
+      96,   163,   135,   112,    -1,   113,   111,   134,   146,   135,
+     112,    -1,   284,    -1,   231,   284,    -1,   283,   233,    -1,
+     283,   233,   227,    -1,   285,    -1,   227,   285,    -1,   284,
+     228,    -1,    75,   109,   292,   110,    -1,   287,   373,    -1,
+     286,   116,   287,   373,    -1,    -1,   289,   274,   288,   290,
+      -1,   225,   336,    -1,    33,    -1,    35,    -1,    34,    -1,
+      -1,   290,   291,    -1,   128,   274,   109,   292,   110,    -1,
+     128,   114,   134,   298,   115,    -1,   128,   109,   134,   286,
+     135,   110,   114,   134,   298,   115,   109,   292,   110,    -1,
+     276,    -1,   164,    -1,   292,   116,   276,    -1,   292,   116,
+     164,    -1,    33,   294,    -1,   232,    33,   294,    -1,   293,
+     116,   294,    -1,   295,   290,    -1,   295,   290,   131,   276,
+      -1,   274,    -1,   273,   109,   134,   286,   135,   110,    -1,
+      36,   274,   109,   134,   286,   135,   110,   114,   115,    -1,
+      -1,    36,   274,   109,   134,   286,   135,   110,   114,   297,
+     298,   115,    -1,   299,    -1,   298,   134,   299,    -1,   300,
+     135,   132,    -1,   301,   135,   132,    -1,   215,    -1,   217,
+      -1,   300,   135,   116,   134,   272,    -1,   225,   309,    -1,
+     301,   135,   116,   134,   309,    -1,    -1,   303,    -1,   305,
+      -1,   303,   134,   305,    -1,    -1,   303,    -1,   212,    -1,
+     307,    -1,   198,    -1,    -1,     5,    82,   306,   114,   304,
+     115,    -1,    40,   305,    -1,   308,    -1,   323,   173,    -1,
+     327,   134,   207,   173,    -1,   216,   173,    -1,   224,   323,
+     173,    -1,   227,   323,   173,    -1,   231,   323,   173,    -1,
+     231,   227,   323,   173,    -1,   224,   327,   134,   207,   173,
+      -1,   227,   327,   134,   207,   173,    -1,   231,   327,   134,
+     207,   173,    -1,   231,   227,   327,   134,   207,   173,    -1,
+     318,    -1,   331,    -1,   323,    -1,   163,   122,   163,    -1,
+      -1,    64,   109,   141,   110,   312,    -1,    -1,   313,    -1,
+     314,    -1,   313,   314,    -1,    39,   109,   109,   315,   110,
+     110,    -1,   316,    -1,   315,   116,   316,    -1,    -1,   317,
+      -1,   317,   109,   170,   110,    -1,   272,    -1,   234,    -1,
+     235,    -1,   228,    -1,   319,   312,    -1,   320,    -1,   321,
+     312,    -1,   322,   312,    -1,   137,    -1,   109,   319,   110,
+      -1,   149,   318,    -1,   149,   227,   318,    -1,   109,   320,
+     110,    -1,   319,   349,    -1,   109,   320,   110,   349,    -1,
+     109,   321,   110,   350,    -1,   109,   321,   110,    -1,   109,
+     320,   110,   109,   134,   264,   135,   110,    -1,   109,   322,
+     110,    -1,   324,   312,    -1,   325,    -1,   326,   312,    -1,
+     319,   109,   134,   264,   135,   110,    -1,   109,   325,   110,
+     109,   134,   264,   135,   110,    -1,   109,   324,   110,    -1,
+     149,   323,    -1,   149,   227,   323,    -1,   109,   325,   110,
+      -1,   109,   325,   110,   349,    -1,   109,   326,   110,   350,
+      -1,   109,   326,   110,    -1,   328,    -1,   329,    -1,   330,
+      -1,   319,   109,   271,   110,    -1,   109,   329,   110,   109,
+     271,   110,    -1,   109,   328,   110,    -1,   149,   327,    -1,
+     149,   227,   327,    -1,   109,   329,   110,    -1,   109,   329,
+     110,   349,    -1,   109,   330,   110,   350,    -1,   109,   330,
+     110,    -1,   332,   312,    -1,   333,    -1,   334,   312,    -1,
+     335,   312,    -1,   341,    -1,   109,   332,   110,    -1,   149,
+     331,    -1,   149,   227,   331,    -1,   109,   333,   110,    -1,
+     332,   349,    -1,   109,   333,   110,   349,    -1,   109,   334,
+     110,   350,    -1,   109,   334,   110,    -1,   332,   109,   134,
+     264,   135,   110,    -1,   109,   333,   110,   109,   134,   264,
+     135,   110,    -1,   109,   335,   110,    -1,   319,   312,    -1,
+     337,    -1,   338,   312,    -1,   339,   312,    -1,   149,   336,
+      -1,   149,   227,   336,    -1,   109,   337,   110,    -1,   319,
+     355,    -1,   109,   337,   110,   349,    -1,   109,   338,   110,
+     350,    -1,   109,   338,   110,    -1,   319,   109,   134,   264,
+     135,   110,    -1,   109,   337,   110,   109,   134,   264,   135,
+     110,    -1,   109,   339,   110,    -1,   341,   312,    -1,   342,
+      -1,   343,   312,    -1,   344,   312,    -1,    74,    -1,    75,
+      -1,   149,   340,    -1,   149,   227,   340,    -1,   109,   342,
+     110,    -1,   341,   355,    -1,   109,   342,   110,   355,    -1,
+     341,   109,   134,   264,   135,   110,    -1,   109,   342,   110,
+     109,   134,   264,   135,   110,    -1,   346,    -1,   347,   312,
+      -1,   348,   312,    -1,   149,    -1,   149,   227,    -1,   149,
+     345,    -1,   149,   227,   345,    -1,   109,   346,   110,    -1,
+     349,    -1,   109,   346,   110,   349,    -1,   109,   347,   110,
+     350,    -1,   109,   347,   110,    -1,   109,   134,   264,   135,
+     110,    -1,   109,   346,   110,   109,   134,   264,   135,   110,
+      -1,   109,   348,   110,    -1,   111,   112,    -1,   111,   112,
+     350,    -1,   350,    -1,   111,   134,   164,   135,   112,    -1,
+     111,   134,   117,   135,   112,    -1,   350,   111,   134,   164,
+     135,   112,    -1,   350,   111,   134,   117,   135,   112,    -1,
+     352,    -1,   353,   312,    -1,   354,   312,    -1,   149,    -1,
+     149,   227,    -1,   149,   351,    -1,   149,   227,   351,    -1,
+     109,   352,   110,    -1,   355,    -1,   109,   352,   110,   355,
+      -1,   109,   353,   110,   350,    -1,   109,   353,   110,    -1,
+     109,   134,   264,   135,   110,    -1,   109,   352,   110,   109,
+     134,   264,   135,   110,    -1,   109,   354,   110,    -1,   356,
+      -1,   356,   350,    -1,   350,    -1,   111,   112,    -1,   111,
+     134,   227,   117,   135,   112,    -1,   111,   134,   227,   135,
+     112,    -1,   111,   134,   227,   164,   135,   112,    -1,   111,
+     134,     7,   226,   164,   135,   112,    -1,   111,   134,   227,
+       7,   164,   135,   112,    -1,   358,    -1,   359,   312,    -1,
+     360,   312,    -1,   149,    -1,   149,   227,    -1,   149,   357,
+      -1,   149,   227,   357,    -1,   109,   358,   110,    -1,   349,
+      -1,   109,   358,   110,   349,    -1,   109,   359,   110,   350,
+      -1,   109,   359,   110,    -1,   109,   358,   110,   109,   134,
+     264,   135,   110,    -1,   109,   360,   110,    -1,   362,    -1,
+     370,    -1,   227,   370,    -1,   363,    -1,   364,    -1,   149,
+     225,    -1,   227,   149,   225,    -1,   149,   371,    -1,   227,
+     149,   371,    -1,   149,   361,    -1,   227,   149,   361,    -1,
+     111,   112,   225,    -1,   365,   225,    -1,   111,   112,   350,
+     225,    -1,   365,   350,   225,    -1,   350,   225,    -1,   111,
+     112,   363,    -1,   365,   363,    -1,   111,   112,   350,   363,
+      -1,   365,   350,   363,    -1,   350,   363,    -1,   111,   134,
+     227,   117,   135,   112,    -1,   111,   134,   227,   164,   135,
+     112,    -1,   111,   134,   231,   164,   135,   112,    -1,   111,
+     134,   231,   227,   164,   135,   112,    -1,   370,    -1,   227,
+     370,    -1,   367,    -1,   368,    -1,   369,    -1,   149,   225,
+      -1,   227,   149,   225,    -1,   149,   371,    -1,   227,   149,
+     371,    -1,   149,   366,    -1,   227,   149,   366,    -1,   111,
+     112,   225,    -1,   111,   112,   350,   225,    -1,   350,   225,
+      -1,   111,   112,   368,    -1,   111,   112,   350,   368,    -1,
+     350,   368,    -1,   111,   134,   263,   135,   112,    -1,   111,
+     112,   109,   260,   110,    -1,   370,   109,   134,   260,   135,
+     110,    -1,   218,   109,   134,   260,   135,   110,    -1,    -1,
+     116,    -1,    -1,   131,   164,    -1
 };
 
@@ -1016,80 +1020,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   290,   290,   296,   305,   306,   307,   311,   312,   313,
-     317,   318,   322,   323,   327,   328,   332,   333,   339,   341,
-     343,   345,   350,   351,   357,   361,   363,   364,   366,   367,
-     369,   371,   373,   381,   382,   388,   389,   390,   395,   397,
-     402,   403,   407,   411,   413,   415,   417,   422,   425,   427,
-     429,   431,   436,   438,   440,   442,   444,   446,   448,   450,
-     452,   454,   456,   463,   464,   466,   470,   471,   472,   473,
-     477,   478,   480,   485,   486,   488,   490,   495,   496,   498,
-     503,   504,   506,   511,   512,   514,   516,   518,   523,   524,
-     526,   531,   532,   537,   538,   543,   544,   549,   550,   555,
-     556,   561,   562,   564,   566,   571,   576,   577,   579,   581,
-     587,   588,   594,   596,   598,   600,   605,   606,   611,   612,
-     613,   614,   615,   616,   617,   618,   619,   620,   624,   625,
-     631,   632,   638,   639,   640,   641,   642,   643,   644,   645,
-     646,   656,   663,   665,   675,   676,   681,   683,   689,   691,
-     695,   696,   701,   706,   709,   711,   713,   722,   724,   735,
-     736,   738,   742,   743,   748,   749,   754,   755,   759,   764,
-     765,   769,   771,   777,   778,   782,   784,   786,   788,   794,
-     795,   799,   801,   806,   808,   810,   815,   817,   822,   824,
-     828,   831,   835,   838,   842,   844,   848,   850,   857,   859,
-     861,   870,   872,   874,   876,   878,   883,   885,   887,   889,
-     894,   907,   908,   913,   915,   920,   924,   926,   928,   930,
-     932,   938,   939,   945,   946,   950,   951,   956,   958,   964,
-     965,   967,   972,   974,   981,   983,   987,   988,   993,   995,
-     999,  1000,  1004,  1006,  1010,  1011,  1015,  1016,  1020,  1021,
-    1036,  1037,  1038,  1039,  1040,  1044,  1049,  1056,  1066,  1071,
-    1076,  1084,  1089,  1094,  1099,  1104,  1112,  1134,  1139,  1146,
-    1148,  1155,  1160,  1165,  1176,  1181,  1186,  1191,  1196,  1205,
-    1210,  1218,  1219,  1220,  1221,  1227,  1232,  1240,  1241,  1242,
-    1243,  1247,  1248,  1249,  1250,  1255,  1256,  1265,  1266,  1271,
-    1272,  1277,  1279,  1281,  1283,  1285,  1288,  1287,  1299,  1300,
-    1302,  1312,  1313,  1318,  1322,  1324,  1326,  1328,  1330,  1332,
-    1334,  1336,  1341,  1343,  1345,  1347,  1349,  1351,  1353,  1355,
-    1357,  1359,  1361,  1363,  1365,  1371,  1372,  1374,  1376,  1378,
-    1383,  1384,  1390,  1391,  1393,  1395,  1400,  1402,  1404,  1406,
-    1411,  1412,  1414,  1416,  1421,  1422,  1424,  1429,  1430,  1432,
-    1434,  1439,  1441,  1443,  1448,  1449,  1453,  1455,  1461,  1460,
-    1464,  1466,  1471,  1473,  1479,  1480,  1485,  1486,  1488,  1489,
-    1498,  1499,  1501,  1503,  1508,  1510,  1516,  1517,  1519,  1522,
-    1525,  1530,  1531,  1536,  1541,  1545,  1547,  1553,  1552,  1559,
-    1561,  1567,  1568,  1576,  1577,  1581,  1582,  1583,  1585,  1587,
-    1594,  1595,  1597,  1599,  1604,  1605,  1611,  1612,  1616,  1617,
-    1622,  1623,  1624,  1626,  1634,  1635,  1637,  1640,  1642,  1646,
-    1647,  1648,  1650,  1652,  1656,  1661,  1669,  1670,  1679,  1681,
-    1686,  1687,  1688,  1692,  1693,  1694,  1698,  1699,  1700,  1704,
-    1705,  1706,  1711,  1712,  1713,  1714,  1720,  1721,  1723,  1728,
-    1729,  1734,  1735,  1736,  1737,  1738,  1753,  1754,  1759,  1760,
-    1768,  1770,  1772,  1775,  1777,  1779,  1802,  1803,  1805,  1807,
-    1812,  1813,  1815,  1820,  1825,  1826,  1832,  1831,  1835,  1839,
-    1841,  1843,  1849,  1850,  1855,  1860,  1862,  1867,  1869,  1870,
-    1872,  1877,  1879,  1881,  1886,  1888,  1893,  1898,  1906,  1912,
-    1911,  1925,  1926,  1931,  1932,  1936,  1941,  1946,  1954,  1959,
-    1970,  1971,  1982,  1983,  1989,  1990,  1994,  1995,  1996,  1999,
-    1998,  2009,  2018,  2024,  2030,  2039,  2045,  2051,  2057,  2063,
-    2071,  2077,  2085,  2091,  2100,  2101,  2102,  2106,  2110,  2112,
-    2117,  2118,  2122,  2123,  2128,  2134,  2135,  2138,  2140,  2141,
-    2145,  2146,  2147,  2148,  2182,  2184,  2185,  2187,  2192,  2197,
-    2202,  2204,  2206,  2211,  2213,  2215,  2217,  2222,  2224,  2233,
-    2235,  2236,  2241,  2243,  2245,  2250,  2252,  2254,  2259,  2261,
-    2263,  2272,  2273,  2274,  2278,  2280,  2282,  2287,  2289,  2291,
-    2296,  2298,  2300,  2315,  2317,  2318,  2320,  2325,  2326,  2331,
-    2333,  2335,  2340,  2342,  2344,  2346,  2351,  2353,  2355,  2365,
-    2367,  2368,  2370,  2375,  2377,  2379,  2384,  2386,  2388,  2390,
-    2395,  2397,  2399,  2430,  2432,  2433,  2435,  2440,  2445,  2453,
-    2455,  2457,  2462,  2464,  2469,  2471,  2485,  2486,  2488,  2493,
-    2495,  2497,  2499,  2501,  2506,  2507,  2509,  2511,  2516,  2518,
-    2520,  2526,  2528,  2530,  2534,  2536,  2538,  2540,  2554,  2555,
-    2557,  2562,  2564,  2566,  2568,  2570,  2575,  2576,  2578,  2580,
-    2585,  2587,  2589,  2595,  2596,  2598,  2607,  2610,  2612,  2615,
-    2617,  2619,  2632,  2633,  2635,  2640,  2642,  2644,  2646,  2648,
-    2653,  2654,  2656,  2658,  2663,  2665,  2673,  2674,  2675,  2680,
-    2681,  2685,  2687,  2689,  2691,  2693,  2695,  2702,  2704,  2706,
-    2708,  2710,  2712,  2714,  2716,  2718,  2720,  2725,  2727,  2729,
-    2734,  2760,  2761,  2763,  2767,  2768,  2772,  2774,  2776,  2778,
-    2780,  2782,  2789,  2791,  2793,  2795,  2797,  2799,  2804,  2809,
-    2811,  2813,  2831,  2833,  2838,  2839
+       0,   298,   298,   304,   313,   314,   315,   319,   320,   321,
+     325,   326,   330,   331,   335,   336,   340,   341,   352,   354,
+     356,   358,   363,   364,   370,   374,   376,   377,   379,   380,
+     382,   384,   386,   395,   396,   402,   403,   407,   408,   412,
+     416,   418,   420,   422,   427,   430,   432,   434,   439,   452,
+     454,   456,   458,   460,   462,   464,   466,   468,   470,   472,
+     479,   480,   486,   487,   488,   489,   493,   494,   496,   501,
+     502,   504,   506,   511,   512,   514,   519,   520,   522,   527,
+     528,   530,   532,   534,   539,   540,   542,   547,   548,   553,
+     554,   559,   560,   565,   566,   571,   572,   577,   578,   581,
+     583,   588,   593,   594,   596,   602,   603,   607,   608,   609,
+     610,   611,   612,   613,   614,   615,   616,   617,   623,   625,
+     627,   629,   634,   635,   640,   641,   647,   648,   654,   655,
+     656,   657,   658,   659,   660,   661,   662,   672,   679,   681,
+     691,   692,   697,   699,   705,   707,   711,   712,   717,   722,
+     725,   727,   729,   739,   741,   752,   753,   755,   759,   761,
+     765,   766,   771,   772,   776,   781,   782,   786,   788,   794,
+     795,   799,   801,   803,   805,   811,   812,   816,   818,   823,
+     825,   827,   832,   834,   839,   841,   845,   848,   852,   855,
+     859,   861,   863,   865,   870,   872,   874,   879,   881,   883,
+     885,   887,   892,   894,   896,   898,   903,   915,   916,   921,
+     923,   928,   932,   934,   936,   938,   940,   946,   947,   953,
+     954,   958,   959,   964,   966,   972,   973,   975,   980,   982,
+     989,   991,   995,   996,  1001,  1003,  1007,  1008,  1012,  1014,
+    1018,  1019,  1023,  1024,  1028,  1029,  1044,  1045,  1046,  1047,
+    1048,  1052,  1057,  1064,  1074,  1079,  1084,  1092,  1097,  1102,
+    1107,  1112,  1120,  1142,  1147,  1154,  1156,  1163,  1168,  1173,
+    1184,  1189,  1194,  1199,  1204,  1213,  1218,  1226,  1227,  1228,
+    1229,  1235,  1240,  1248,  1249,  1250,  1251,  1255,  1256,  1257,
+    1258,  1263,  1264,  1273,  1274,  1279,  1280,  1285,  1287,  1289,
+    1291,  1293,  1296,  1295,  1307,  1308,  1310,  1320,  1321,  1326,
+    1330,  1332,  1334,  1336,  1338,  1340,  1342,  1344,  1349,  1351,
+    1353,  1355,  1357,  1359,  1361,  1363,  1365,  1367,  1369,  1371,
+    1373,  1379,  1380,  1382,  1384,  1386,  1391,  1392,  1398,  1399,
+    1401,  1403,  1408,  1410,  1412,  1414,  1419,  1420,  1422,  1424,
+    1429,  1430,  1432,  1437,  1438,  1440,  1442,  1447,  1449,  1451,
+    1456,  1457,  1461,  1463,  1469,  1468,  1472,  1474,  1479,  1481,
+    1487,  1488,  1493,  1494,  1496,  1497,  1506,  1507,  1509,  1511,
+    1516,  1518,  1524,  1525,  1527,  1530,  1533,  1538,  1539,  1544,
+    1549,  1553,  1555,  1561,  1560,  1567,  1569,  1575,  1576,  1584,
+    1585,  1589,  1590,  1591,  1593,  1595,  1602,  1603,  1605,  1607,
+    1612,  1613,  1619,  1620,  1624,  1625,  1630,  1631,  1632,  1634,
+    1642,  1643,  1645,  1648,  1650,  1654,  1655,  1656,  1658,  1660,
+    1664,  1669,  1677,  1678,  1687,  1689,  1694,  1695,  1696,  1700,
+    1701,  1702,  1706,  1707,  1708,  1712,  1713,  1714,  1719,  1720,
+    1721,  1722,  1728,  1729,  1731,  1736,  1737,  1742,  1743,  1744,
+    1745,  1746,  1761,  1762,  1767,  1768,  1774,  1776,  1779,  1781,
+    1783,  1806,  1807,  1809,  1811,  1816,  1817,  1819,  1824,  1829,
+    1830,  1836,  1835,  1839,  1843,  1845,  1847,  1853,  1854,  1859,
+    1864,  1866,  1871,  1873,  1874,  1876,  1881,  1883,  1885,  1890,
+    1892,  1897,  1902,  1910,  1916,  1915,  1929,  1930,  1935,  1936,
+    1940,  1945,  1950,  1958,  1963,  1974,  1975,  1986,  1987,  1993,
+    1994,  1998,  1999,  2000,  2003,  2002,  2013,  2022,  2028,  2034,
+    2043,  2049,  2055,  2061,  2067,  2075,  2081,  2089,  2095,  2104,
+    2105,  2106,  2110,  2114,  2116,  2121,  2122,  2126,  2127,  2132,
+    2138,  2139,  2142,  2144,  2145,  2149,  2150,  2151,  2152,  2186,
+    2188,  2189,  2191,  2196,  2201,  2206,  2208,  2210,  2215,  2217,
+    2219,  2221,  2226,  2228,  2237,  2239,  2240,  2245,  2247,  2249,
+    2254,  2256,  2258,  2263,  2265,  2267,  2276,  2277,  2278,  2282,
+    2284,  2286,  2291,  2293,  2295,  2300,  2302,  2304,  2319,  2321,
+    2322,  2324,  2329,  2330,  2335,  2337,  2339,  2344,  2346,  2348,
+    2350,  2355,  2357,  2359,  2369,  2371,  2372,  2374,  2379,  2381,
+    2383,  2388,  2390,  2392,  2394,  2399,  2401,  2403,  2434,  2436,
+    2437,  2439,  2444,  2449,  2457,  2459,  2461,  2466,  2468,  2473,
+    2475,  2489,  2490,  2492,  2497,  2499,  2501,  2503,  2505,  2510,
+    2511,  2513,  2515,  2520,  2522,  2524,  2530,  2532,  2534,  2538,
+    2540,  2542,  2544,  2558,  2559,  2561,  2566,  2568,  2570,  2572,
+    2574,  2579,  2580,  2582,  2584,  2589,  2591,  2593,  2599,  2600,
+    2602,  2611,  2614,  2616,  2619,  2621,  2623,  2636,  2637,  2639,
+    2644,  2646,  2648,  2650,  2652,  2657,  2658,  2660,  2662,  2667,
+    2669,  2677,  2678,  2679,  2684,  2685,  2689,  2691,  2693,  2695,
+    2697,  2699,  2706,  2708,  2710,  2712,  2714,  2716,  2718,  2720,
+    2722,  2724,  2729,  2731,  2733,  2738,  2764,  2765,  2767,  2771,
+    2772,  2776,  2778,  2780,  2782,  2784,  2786,  2793,  2795,  2797,
+    2799,  2801,  2803,  2808,  2813,  2815,  2817,  2835,  2837,  2842,
+    2843
 };
 #endif
@@ -1117,7 +1121,7 @@
   "DIVassign", "MODassign", "PLUSassign", "MINUSassign", "LSassign",
   "RSassign", "ANDassign", "ERassign", "ORassign", "ATassign", "THEN",
-  "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "':'", "'*'",
-  "'&'", "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'",
-  "'|'", "'?'", "'='", "';'", "$accept", "push", "pop", "constant",
+  "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "'*'", "'&'",
+  "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'", "'|'",
+  "'?'", "':'", "'='", "';'", "$accept", "push", "pop", "constant",
   "identifier", "no_01_identifier", "no_attr_identifier", "zero_one",
   "string_literal_list", "primary_expression", "postfix_expression",
@@ -1129,6 +1133,6 @@
   "logical_AND_expression", "logical_OR_expression",
   "conditional_expression", "constant_expression", "assignment_expression",
-  "assignment_expression_opt", "tuple", "tuple_expression_list",
-  "assignment_operator", "comma_expression", "comma_expression_opt",
+  "assignment_expression_opt", "assignment_operator", "tuple",
+  "tuple_expression_list", "comma_expression", "comma_expression_opt",
   "statement", "labeled_statement", "compound_statement",
   "block_item_list", "block_item", "statement_list",
@@ -1224,7 +1228,7 @@
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
-      41,    91,    93,    46,   123,   125,    44,    58,    42,    38,
-      43,    45,    33,   126,    47,    37,    60,    62,    94,   124,
-      63,    61,    59
+      41,    91,    93,    46,   123,   125,    44,    42,    38,    43,
+      45,    33,   126,    47,    37,    60,    62,    94,   124,    63,
+      58,    61,    59
 };
 # endif
@@ -1236,77 +1240,77 @@
      138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
      142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
-     143,   143,   143,   144,   144,   145,   145,   145,   145,   145,
-     146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
+     143,   143,   143,   144,   144,   145,   145,   146,   146,   147,
+     147,   147,   147,   147,   148,   148,   148,   148,   148,   148,
      148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
-     148,   148,   148,   149,   149,   149,   150,   150,   150,   150,
-     151,   151,   151,   152,   152,   152,   152,   153,   153,   153,
-     154,   154,   154,   155,   155,   155,   155,   155,   156,   156,
-     156,   157,   157,   158,   158,   159,   159,   160,   160,   161,
-     161,   162,   162,   162,   162,   163,   164,   164,   164,   164,
-     165,   165,   166,   166,   166,   166,   167,   167,   168,   168,
-     168,   168,   168,   168,   168,   168,   168,   168,   169,   169,
-     170,   170,   171,   171,   171,   171,   171,   171,   171,   171,
-     171,   172,   173,   173,   174,   174,   175,   175,   175,   175,
-     176,   176,   177,   178,   178,   178,   178,   178,   178,   179,
-     179,   179,   180,   180,   181,   181,   182,   182,   183,   184,
-     184,   185,   185,   186,   186,   187,   187,   187,   187,   188,
-     188,   189,   189,   190,   190,   190,   191,   191,   192,   192,
-     192,   192,   192,   192,   192,   192,   192,   192,   193,   193,
-     193,   194,   194,   194,   194,   194,   195,   195,   195,   195,
-     196,   197,   197,   197,   197,   197,   198,   198,   198,   198,
-     198,   199,   199,   200,   200,   201,   201,   202,   202,   203,
-     203,   203,   204,   204,   205,   205,   206,   206,   207,   207,
-     208,   208,   209,   209,   210,   210,   211,   211,   212,   212,
-     213,   213,   213,   213,   213,   214,   214,   214,   215,   215,
-     215,   216,   216,   216,   216,   216,   217,   217,   217,   218,
-     218,   219,   219,   219,   220,   220,   220,   220,   220,   221,
-     221,   222,   222,   222,   222,   223,   223,   224,   224,   224,
-     224,   225,   225,   225,   225,   226,   226,   227,   227,   228,
-     228,   229,   229,   229,   229,   229,   230,   229,   231,   231,
-     231,   232,   232,   233,   234,   234,   234,   234,   234,   234,
-     234,   234,   235,   235,   235,   235,   235,   235,   235,   235,
-     235,   235,   235,   235,   235,   236,   236,   236,   236,   236,
-     237,   237,   238,   238,   238,   238,   239,   239,   239,   239,
-     240,   240,   240,   240,   241,   241,   241,   242,   242,   242,
-     242,   243,   243,   243,   244,   244,   245,   245,   246,   245,
-     245,   245,   247,   247,   248,   248,   249,   249,   249,   249,
-     250,   250,   250,   250,   251,   251,   252,   252,   252,   252,
-     252,   253,   253,   254,   255,   256,   256,   257,   256,   258,
-     258,   259,   259,   260,   260,   261,   261,   261,   261,   261,
-     262,   262,   262,   262,   263,   263,   264,   264,   265,   265,
-     266,   266,   266,   266,   267,   267,   267,   267,   267,   268,
-     268,   268,   268,   268,   269,   269,   270,   270,   271,   271,
-     272,   272,   272,   273,   273,   273,   274,   274,   274,   275,
-     275,   275,   276,   276,   276,   276,   277,   277,   277,   278,
-     278,   279,   279,   279,   279,   279,   280,   280,   281,   281,
-     282,   282,   282,   282,   282,   282,   283,   283,   283,   283,
-     284,   284,   284,   285,   286,   286,   288,   287,   287,   289,
-     289,   289,   290,   290,   291,   291,   291,   292,   292,   292,
-     292,   293,   293,   293,   294,   294,   295,   295,   296,   297,
-     296,   298,   298,   299,   299,   300,   300,   300,   301,   301,
-     302,   302,   303,   303,   304,   304,   305,   305,   305,   306,
-     305,   305,   307,   307,   307,   308,   308,   308,   308,   308,
-     308,   308,   308,   308,   309,   309,   309,   310,   311,   311,
-     312,   312,   313,   313,   314,   315,   315,   316,   316,   316,
-     317,   317,   317,   317,   318,   318,   318,   318,   319,   319,
-     320,   320,   320,   321,   321,   321,   321,   322,   322,   323,
-     323,   323,   324,   324,   324,   325,   325,   325,   326,   326,
-     326,   327,   327,   327,   328,   328,   328,   329,   329,   329,
-     330,   330,   330,   331,   331,   331,   331,   332,   332,   333,
-     333,   333,   334,   334,   334,   334,   335,   335,   335,   336,
-     336,   336,   336,   337,   337,   337,   338,   338,   338,   338,
-     339,   339,   339,   340,   340,   340,   340,   341,   341,   342,
-     342,   342,   343,   343,   344,   344,   345,   345,   345,   346,
-     346,   346,   346,   346,   347,   347,   347,   347,   348,   348,
-     348,   349,   349,   349,   350,   350,   350,   350,   351,   351,
-     351,   352,   352,   352,   352,   352,   353,   353,   353,   353,
-     354,   354,   354,   355,   355,   355,   356,   356,   356,   356,
-     356,   356,   357,   357,   357,   358,   358,   358,   358,   358,
-     359,   359,   359,   359,   360,   360,   361,   361,   361,   362,
-     362,   363,   363,   363,   363,   363,   363,   364,   364,   364,
-     364,   364,   364,   364,   364,   364,   364,   365,   365,   365,
-     365,   366,   366,   366,   367,   367,   368,   368,   368,   368,
-     368,   368,   369,   369,   369,   369,   369,   369,   370,   371,
-     371,   371,   372,   372,   373,   373
+     149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
+     152,   152,   152,   153,   153,   153,   154,   154,   154,   155,
+     155,   155,   155,   155,   156,   156,   156,   157,   157,   158,
+     158,   159,   159,   160,   160,   161,   161,   162,   162,   162,
+     162,   163,   164,   164,   164,   165,   165,   166,   166,   166,
+     166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
+     167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   172,   173,   173,
+     174,   174,   175,   175,   175,   175,   176,   176,   177,   178,
+     178,   178,   178,   178,   178,   179,   179,   179,   180,   180,
+     181,   181,   182,   182,   183,   184,   184,   185,   185,   186,
+     186,   187,   187,   187,   187,   188,   188,   189,   189,   190,
+     190,   190,   191,   191,   192,   192,   192,   192,   192,   192,
+     192,   192,   192,   192,   193,   193,   193,   194,   194,   194,
+     194,   194,   195,   195,   195,   195,   196,   197,   197,   197,
+     197,   197,   198,   198,   198,   198,   198,   199,   199,   200,
+     200,   201,   201,   202,   202,   203,   203,   203,   204,   204,
+     205,   205,   206,   206,   207,   207,   208,   208,   209,   209,
+     210,   210,   211,   211,   212,   212,   213,   213,   213,   213,
+     213,   214,   214,   214,   215,   215,   215,   216,   216,   216,
+     216,   216,   217,   217,   217,   218,   218,   219,   219,   219,
+     220,   220,   220,   220,   220,   221,   221,   222,   222,   222,
+     222,   223,   223,   224,   224,   224,   224,   225,   225,   225,
+     225,   226,   226,   227,   227,   228,   228,   229,   229,   229,
+     229,   229,   230,   229,   231,   231,   231,   232,   232,   233,
+     234,   234,   234,   234,   234,   234,   234,   234,   235,   235,
+     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
+     235,   236,   236,   236,   236,   236,   237,   237,   238,   238,
+     238,   238,   239,   239,   239,   239,   240,   240,   240,   240,
+     241,   241,   241,   242,   242,   242,   242,   243,   243,   243,
+     244,   244,   245,   245,   246,   245,   245,   245,   247,   247,
+     248,   248,   249,   249,   249,   249,   250,   250,   250,   250,
+     251,   251,   252,   252,   252,   252,   252,   253,   253,   254,
+     255,   256,   256,   257,   256,   258,   258,   259,   259,   260,
+     260,   261,   261,   261,   261,   261,   262,   262,   262,   262,
+     263,   263,   264,   264,   265,   265,   266,   266,   266,   266,
+     267,   267,   267,   267,   267,   268,   268,   268,   268,   268,
+     269,   269,   270,   270,   271,   271,   272,   272,   272,   273,
+     273,   273,   274,   274,   274,   275,   275,   275,   276,   276,
+     276,   276,   277,   277,   277,   278,   278,   279,   279,   279,
+     279,   279,   280,   280,   281,   281,   282,   282,   282,   282,
+     282,   283,   283,   283,   283,   284,   284,   284,   285,   286,
+     286,   288,   287,   287,   289,   289,   289,   290,   290,   291,
+     291,   291,   292,   292,   292,   292,   293,   293,   293,   294,
+     294,   295,   295,   296,   297,   296,   298,   298,   299,   299,
+     300,   300,   300,   301,   301,   302,   302,   303,   303,   304,
+     304,   305,   305,   305,   306,   305,   305,   307,   307,   307,
+     308,   308,   308,   308,   308,   308,   308,   308,   308,   309,
+     309,   309,   310,   311,   311,   312,   312,   313,   313,   314,
+     315,   315,   316,   316,   316,   317,   317,   317,   317,   318,
+     318,   318,   318,   319,   319,   320,   320,   320,   321,   321,
+     321,   321,   322,   322,   323,   323,   323,   324,   324,   324,
+     325,   325,   325,   326,   326,   326,   327,   327,   327,   328,
+     328,   328,   329,   329,   329,   330,   330,   330,   331,   331,
+     331,   331,   332,   332,   333,   333,   333,   334,   334,   334,
+     334,   335,   335,   335,   336,   336,   336,   336,   337,   337,
+     337,   338,   338,   338,   338,   339,   339,   339,   340,   340,
+     340,   340,   341,   341,   342,   342,   342,   343,   343,   344,
+     344,   345,   345,   345,   346,   346,   346,   346,   346,   347,
+     347,   347,   347,   348,   348,   348,   349,   349,   349,   350,
+     350,   350,   350,   351,   351,   351,   352,   352,   352,   352,
+     352,   353,   353,   353,   353,   354,   354,   354,   355,   355,
+     355,   356,   356,   356,   356,   356,   356,   357,   357,   357,
+     358,   358,   358,   358,   358,   359,   359,   359,   359,   360,
+     360,   361,   361,   361,   362,   362,   363,   363,   363,   363,
+     363,   363,   364,   364,   364,   364,   364,   364,   364,   364,
+     364,   364,   365,   365,   365,   365,   366,   366,   366,   367,
+     367,   368,   368,   368,   368,   368,   368,   369,   369,   369,
+     369,   369,   369,   370,   371,   371,   371,   372,   372,   373,
+     373
 };
 
@@ -1317,77 +1321,77 @@
        1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
        3,     3,     1,     6,     4,     3,     7,     3,     7,     2,
-       2,     7,     4,     1,     3,     0,     1,     3,     7,     9,
-       1,     3,     1,     3,     7,     3,     7,     1,     1,     1,
-       2,     2,     2,     2,     2,     2,     4,     6,     1,     4,
-       4,     2,     4,     1,     1,     1,     1,     1,     1,     1,
-       1,     4,     4,     1,     3,     3,     3,     1,     3,     3,
-       1,     3,     3,     1,     3,     3,     3,     3,     1,     3,
-       3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
-       3,     1,     5,     4,     5,     1,     1,     3,     3,     2,
-       0,     1,     2,     5,     6,     7,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       0,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       6,     4,     2,     7,     1,     3,     1,     2,     1,     2,
-       1,     2,     2,     5,     7,     5,     9,     5,     9,     1,
-       3,     1,     1,     3,     3,     2,     1,     2,     2,     0,
-       1,     2,     3,     0,     1,     2,     3,     3,     4,     0,
-       1,     1,     2,     5,     7,     6,     6,     4,     3,     4,
-       2,     3,     2,     3,     3,     3,     3,     5,     3,     3,
-       4,     1,     5,     6,     5,     6,     9,    10,     9,    10,
-       2,     1,     2,     2,     2,     1,     6,     8,    10,    12,
-      14,     0,     1,     0,     1,     1,     3,     4,     7,     0,
-       1,     3,     1,     3,     1,     1,     1,     3,     1,     1,
-       1,     3,     0,     1,     3,     4,     1,     3,     1,     1,
-       3,     3,     3,     3,     3,     2,     3,     6,     3,     3,
-       4,     1,     2,     2,     3,     5,     8,     7,     7,     5,
-       9,     2,     2,     5,     3,     5,     4,     3,     4,     4,
-       7,     3,     3,     3,     3,     4,     6,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     1,     1,     2,     1,
-       1,     1,     1,     1,     1,     1,     0,     5,     1,     2,
-       3,     1,     2,     1,     1,     1,     1,     1,     1,     1,
+       2,     7,     4,     1,     3,     0,     1,     1,     3,     1,
+       3,     7,     3,     7,     1,     1,     1,     2,     2,     2,
+       2,     2,     2,     4,     2,     4,     6,     1,     4,     4,
+       1,     1,     1,     1,     1,     1,     1,     4,     4,     1,
+       3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
+       3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
+       3,     1,     3,     1,     3,     1,     3,     1,     5,     4,
+       5,     1,     1,     3,     2,     0,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     5,
+       6,     7,     1,     3,     1,     3,     0,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     6,     4,     2,     7,
+       1,     3,     1,     2,     1,     2,     1,     2,     2,     5,
+       7,     5,     9,     5,     9,     1,     3,     1,     1,     3,
+       3,     2,     1,     2,     2,     0,     1,     2,     3,     0,
+       1,     2,     3,     3,     4,     0,     1,     1,     2,     5,
+       7,     6,     6,     4,     3,     4,     2,     3,     2,     3,
+       3,     3,     3,     5,     3,     3,     4,     1,     5,     6,
+       5,     6,     9,    10,     9,    10,     2,     1,     2,     2,
+       2,     1,     6,     8,    10,    12,    14,     0,     1,     0,
+       1,     1,     3,     4,     7,     0,     1,     3,     1,     3,
+       1,     1,     1,     3,     1,     1,     1,     3,     0,     1,
+       3,     4,     1,     3,     1,     1,     3,     3,     3,     3,
+       3,     2,     3,     6,     3,     3,     4,     1,     2,     2,
+       3,     5,     8,     7,     7,     5,     9,     2,     2,     5,
+       3,     5,     4,     3,     4,     4,     7,     3,     3,     3,
+       3,     4,     6,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     1,     1,     2,     1,     1,     1,     1,     1,
+       1,     1,     0,     5,     1,     2,     3,     1,     2,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     2,     3,     3,
-       1,     3,     1,     2,     2,     2,     4,     4,     4,     4,
-       1,     2,     2,     3,     1,     2,     2,     1,     2,     2,
-       3,     1,     2,     2,     1,     1,     4,     2,     0,     6,
-       7,     2,     2,     2,     0,     2,     2,     3,     2,     3,
-       1,     2,     3,     2,     2,     4,     0,     1,     2,     2,
-       1,     0,     1,     2,     2,     5,     2,     0,     7,     2,
-       4,     0,     2,     0,     1,     1,     1,     5,     5,     5,
-       1,     5,     5,     9,     1,     5,     0,     1,     1,     5,
-       1,     1,     5,     5,     1,     3,     3,     4,     1,     1,
-       1,     1,     2,     1,     3,     3,     1,     2,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     1,     1,     1,     2,     0,     2,     2,     1,
-       4,     0,     1,     2,     3,     4,     2,     2,     1,     2,
-       1,     2,     5,     5,     7,     6,     1,     2,     2,     3,
-       1,     2,     2,     4,     2,     4,     0,     4,     2,     1,
-       1,     1,     0,     2,     5,     5,    13,     1,     1,     3,
-       3,     2,     3,     3,     2,     4,     1,     6,     9,     0,
-      11,     1,     3,     3,     3,     1,     1,     5,     2,     5,
-       0,     1,     1,     3,     0,     1,     1,     1,     1,     0,
-       6,     2,     1,     2,     4,     2,     3,     3,     3,     4,
-       5,     5,     5,     6,     1,     1,     1,     3,     0,     5,
-       0,     1,     1,     2,     6,     1,     3,     0,     1,     4,
-       1,     1,     1,     1,     2,     1,     2,     2,     1,     3,
-       2,     3,     3,     2,     4,     4,     3,     8,     3,     2,
-       1,     2,     6,     8,     3,     2,     3,     3,     4,     4,
-       3,     1,     1,     1,     4,     6,     3,     2,     3,     3,
-       4,     4,     3,     2,     1,     2,     2,     1,     3,     2,
-       3,     3,     2,     4,     4,     3,     6,     8,     3,     2,
-       1,     2,     2,     2,     3,     3,     2,     4,     4,     3,
-       6,     8,     3,     2,     1,     2,     2,     1,     1,     2,
-       3,     3,     2,     4,     6,     8,     1,     2,     2,     1,
-       2,     2,     3,     3,     1,     4,     4,     3,     5,     8,
-       3,     2,     3,     1,     5,     5,     6,     6,     1,     2,
-       2,     1,     2,     2,     3,     3,     1,     4,     4,     3,
-       5,     8,     3,     1,     2,     1,     2,     6,     5,     6,
-       7,     7,     1,     2,     2,     1,     2,     2,     3,     3,
-       1,     4,     4,     3,     8,     3,     1,     1,     2,     1,
-       1,     2,     3,     2,     3,     2,     3,     3,     2,     4,
-       3,     2,     3,     2,     4,     3,     2,     6,     6,     6,
-       7,     1,     2,     1,     1,     1,     2,     3,     2,     3,
-       2,     3,     3,     4,     2,     3,     4,     2,     5,     5,
-       6,     6,     0,     1,     0,     2
+       1,     1,     2,     2,     3,     3,     1,     3,     1,     2,
+       2,     2,     4,     4,     4,     4,     1,     2,     2,     3,
+       1,     2,     2,     1,     2,     2,     3,     1,     2,     2,
+       1,     1,     4,     2,     0,     6,     7,     2,     2,     2,
+       0,     2,     2,     3,     2,     3,     1,     2,     3,     2,
+       2,     4,     0,     1,     2,     2,     1,     0,     1,     2,
+       2,     5,     2,     0,     7,     2,     4,     0,     2,     0,
+       1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
+       1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
+       1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
+       3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
+       1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
+       3,     4,     2,     2,     1,     2,     2,     5,     5,     7,
+       6,     1,     2,     2,     3,     1,     2,     2,     4,     2,
+       4,     0,     4,     2,     1,     1,     1,     0,     2,     5,
+       5,    13,     1,     1,     3,     3,     2,     3,     3,     2,
+       4,     1,     6,     9,     0,    11,     1,     3,     3,     3,
+       1,     1,     5,     2,     5,     0,     1,     1,     3,     0,
+       1,     1,     1,     1,     0,     6,     2,     1,     2,     4,
+       2,     3,     3,     3,     4,     5,     5,     5,     6,     1,
+       1,     1,     3,     0,     5,     0,     1,     1,     2,     6,
+       1,     3,     0,     1,     4,     1,     1,     1,     1,     2,
+       1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
+       4,     3,     8,     3,     2,     1,     2,     6,     8,     3,
+       2,     3,     3,     4,     4,     3,     1,     1,     1,     4,
+       6,     3,     2,     3,     3,     4,     4,     3,     2,     1,
+       2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
+       3,     6,     8,     3,     2,     1,     2,     2,     2,     3,
+       3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
+       2,     2,     1,     1,     2,     3,     3,     2,     4,     6,
+       8,     1,     2,     2,     1,     2,     2,     3,     3,     1,
+       4,     4,     3,     5,     8,     3,     2,     3,     1,     5,
+       5,     6,     6,     1,     2,     2,     1,     2,     2,     3,
+       3,     1,     4,     4,     3,     5,     8,     3,     1,     2,
+       1,     2,     6,     5,     6,     7,     7,     1,     2,     2,
+       1,     2,     2,     3,     3,     1,     4,     4,     3,     8,
+       3,     1,     1,     2,     1,     1,     2,     3,     2,     3,
+       2,     3,     3,     2,     4,     3,     2,     3,     2,     4,
+       3,     2,     6,     6,     6,     7,     1,     2,     1,     1,
+       1,     2,     3,     2,     3,     2,     3,     3,     4,     2,
+       3,     4,     2,     5,     5,     6,     6,     0,     1,     0,
+       2
 };
 
@@ -1397,162 +1401,160 @@
 static const yytype_uint16 yydefact[] =
 {
-     295,   295,   316,   314,   317,   315,   318,   319,   301,   303,
-     302,     0,   304,   330,   322,   327,   325,   326,   324,   323,
-     328,   329,   334,   331,   332,   333,   550,   550,   550,     0,
-       0,     0,   295,   221,   305,   320,   321,     7,   361,     0,
-       8,    14,    15,    65,     0,     2,    63,    64,   568,     9,
-     295,   528,   526,   248,     3,   456,     3,   261,     0,     3,
-       3,     3,   249,     3,     0,     0,     0,   296,   297,   299,
-     295,   308,   311,   313,   342,   287,   335,   340,   288,   350,
-     289,   357,   354,   364,     0,     0,   365,   290,   476,   480,
-       3,     3,     0,     2,   522,   527,   532,   300,     0,     0,
-     550,   580,   550,     2,   591,   592,   593,   295,     0,   734,
-     735,     0,    12,     0,    13,   295,   271,   272,     0,   296,
-     291,   292,   293,   294,   529,   306,   394,   551,   552,   372,
-     373,    12,   447,   448,    11,   443,   446,     0,   506,   501,
-     492,   447,   448,     0,     0,   531,   222,     0,   295,     0,
-       0,     0,     0,     0,     0,     0,     0,   295,   295,     2,
-       0,   736,   296,   585,   597,   740,   733,   731,   738,     0,
-       0,     0,   255,     2,     0,   535,   441,   442,   440,     0,
-       0,     0,     0,   550,     0,   637,   638,     0,     0,   548,
-     544,   550,   565,   550,   550,   546,     2,   545,   550,   604,
-     550,   550,   607,     0,     0,     0,   295,   295,   314,   362,
-       2,   295,   262,   298,   309,   343,   355,   481,     0,     2,
-       0,   456,   263,   296,   336,   351,   358,   477,     0,     2,
-       0,   312,   337,   344,   345,     0,   352,   356,   359,   363,
-     448,   295,   374,   367,   371,     0,   396,   478,   482,     0,
-       0,     0,     1,   295,     2,   533,   579,   581,   295,     2,
-     744,   296,   747,   548,   548,     0,   296,     0,     0,   274,
-     550,   546,     2,   295,     0,     0,   295,   553,     2,   504,
-       2,   557,     0,     0,     0,     0,     0,     0,    18,    58,
-       4,     5,     6,    16,     0,     0,   295,     2,    66,    67,
-      68,    69,    48,    19,    49,    22,    47,    70,   295,     0,
-      73,    77,    80,    83,    88,    91,    93,    95,    97,    99,
-     101,   106,   498,   754,   454,   497,     0,   452,   453,     0,
-     569,   584,   587,   590,   596,   599,   602,   361,     0,     2,
-     742,     0,   295,   745,     2,    63,   295,     3,   428,     0,
-     436,   296,   295,   308,   335,   288,   350,   357,     3,     3,
-     410,   414,   424,   429,   476,   295,   430,   709,   710,   295,
-     431,   433,   295,     2,   586,   598,   732,     2,     2,   250,
-       2,   461,     0,   459,   458,   457,   142,     2,     2,   252,
-       2,     2,   251,     2,   282,     2,   283,     0,   281,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   570,   609,
-       0,   456,     2,   564,   573,   663,   566,   567,   536,   295,
-       2,   603,   612,   605,   606,     0,   277,   295,   295,   341,
-     296,     0,   296,     0,   295,   737,   741,   739,   537,   295,
-     548,   256,   264,   310,     0,     2,   538,   295,   502,   338,
-     339,   284,   353,   360,     0,   295,     0,   752,   401,     0,
-     479,   503,   253,   254,   523,   295,   438,     0,   295,   238,
-       0,     2,   240,     0,   296,     0,   258,     2,   259,   279,
-       0,     0,     2,   295,   548,   295,   489,   491,   490,     0,
-       0,   754,     0,   295,     0,   295,   493,   295,   563,   561,
-     562,   560,     0,   555,   558,     0,     0,   295,    55,   295,
-      70,    50,   295,    61,   295,   295,    53,    54,     2,   128,
-       0,     0,   450,     0,   449,   731,   112,   295,    17,     0,
-      29,    30,    35,     2,     0,    35,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,     0,     0,    51,    52,
+     291,   291,   312,   310,   313,   311,   314,   315,   297,   299,
+     298,     0,   300,   326,   318,   323,   321,   322,   320,   319,
+     324,   325,   330,   327,   328,   329,   545,   545,   545,     0,
+       0,     0,   291,   217,   301,   316,   317,     7,   357,     0,
+       8,    14,    15,     0,     2,    60,    61,   563,     9,   291,
+     523,   521,   244,     3,   452,     3,   257,     0,     3,     3,
+       3,   245,     3,     0,     0,     0,   292,   293,   295,   291,
+     304,   307,   309,   338,   283,   331,   336,   284,   346,   285,
+     353,   350,   360,     0,     0,   361,   286,   471,   475,     3,
+       3,     0,     2,   517,   522,   527,   296,     0,     0,   545,
+     575,   545,     2,   586,   587,   588,   291,     0,   729,   730,
+       0,    12,     0,    13,   291,   267,   268,     0,   292,   287,
+     288,   289,   290,   524,   302,   390,   546,   547,   368,   369,
+      12,   443,   444,    11,   439,   442,     0,   501,   496,   487,
+     443,   444,     0,     0,   526,   218,     0,   291,     0,     0,
+       0,     0,     0,     0,     0,     0,   291,   291,     2,     0,
+     731,   292,   580,   592,   735,   728,   726,   733,     0,     0,
+       0,   251,     2,     0,   530,   437,   438,   436,     0,     0,
+       0,     0,   545,     0,   632,   633,     0,     0,   543,   539,
+     545,   560,   545,   545,   541,     2,   540,   545,   599,   545,
+     545,   602,     0,     0,     0,   291,   291,   310,   358,     2,
+     291,   258,   294,   305,   339,   351,   476,     0,     2,     0,
+     452,   259,   292,   332,   347,   354,   472,     0,     2,     0,
+     308,   333,   340,   341,     0,   348,   352,   355,   359,   444,
+     291,   370,   363,   367,     0,   392,   473,   477,     0,     0,
+       0,     1,   291,     2,   528,   574,   576,   291,     2,   739,
+     292,   742,   543,   543,     0,   292,     0,     0,   270,   545,
+     541,     2,   291,     0,     0,   291,   548,     2,   499,     2,
+     552,     0,     0,     0,     0,     0,     0,    18,    57,     4,
+       5,     6,    16,     0,     0,   291,     2,    62,    63,    64,
+      65,    45,    19,    46,    22,    44,    66,   291,     0,    69,
+      73,    76,    79,    84,    87,    89,    91,    93,    95,    97,
+     102,   493,   749,   450,   492,     0,   448,   449,     0,   564,
+     579,   582,   585,   591,   594,   597,   357,     0,     2,   737,
+       0,   291,   740,     2,    60,   291,     3,   424,     0,   432,
+     292,   291,   304,   331,   284,   346,   353,     3,     3,   406,
+     410,   420,   425,   471,   291,   426,   704,   705,   291,   427,
+     429,   291,     2,   581,   593,   727,     2,     2,   246,     2,
+     457,     0,   455,   454,   453,   138,     2,     2,   248,     2,
+       2,   247,     2,   278,     2,   279,     0,   277,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   565,   604,     0,
+     452,     2,   559,   568,   658,   561,   562,   531,   291,     2,
+     598,   607,   600,   601,     0,   273,   291,   291,   337,   292,
+       0,   292,     0,   291,   732,   736,   734,   532,   291,   543,
+     252,   260,   306,     0,     2,   533,   291,   497,   334,   335,
+     280,   349,   356,     0,   291,     0,   747,   397,     0,   474,
+     498,   249,   250,   518,   291,   434,     0,   291,   234,     0,
+       2,   236,     0,   292,     0,   254,     2,   255,   275,     0,
+       0,     2,   291,   543,   291,   484,   486,   485,     0,     0,
+     749,     0,   291,     0,   291,   488,   291,   558,   556,   557,
+     555,     0,   550,   553,     0,     0,   291,    52,   291,    66,
+      47,   291,    54,   291,   291,    50,    51,     2,   124,     0,
+       0,   446,     0,   445,   726,   118,   291,    17,     0,    29,
+      30,    35,     2,     0,    35,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   107,     0,    48,    49,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     109,     2,   649,   455,   646,   550,   550,   654,   483,   295,
-       2,   588,   589,     0,   600,   601,     0,     2,   743,   746,
-     112,   295,     0,     2,   711,   296,   715,   706,   707,   713,
-       0,     2,     2,   671,   550,   754,   620,   550,   550,   754,
-     550,   634,   550,   550,   685,   437,   668,   550,   550,   676,
-     683,   295,   432,   296,     0,     0,   295,   721,   296,   726,
-     754,   718,   295,   723,   754,   295,   295,   295,     0,   112,
-       0,    18,     5,     2,     0,    19,     0,   462,   752,     0,
-       0,   468,   242,     0,   295,     0,     0,     0,   548,   572,
-     576,   578,   608,   611,   615,   618,   571,   610,     0,   285,
-     661,     0,   295,   278,     0,     0,     0,     0,   276,     2,
-       0,   260,   539,   295,     0,     0,   295,     2,   366,   386,
-     375,     0,     0,   380,   374,   753,     0,     0,   399,     0,
-     296,     3,   417,     3,   421,   420,   594,     0,   534,   295,
-      63,     3,   295,   436,   296,     3,   430,   431,     2,     0,
-       0,     0,   488,   307,   295,   484,   486,     3,     2,     2,
-       0,   505,     3,     0,   557,   130,     0,     0,   223,     0,
-       0,     0,     2,     0,     0,    36,     0,     0,   112,   295,
-      20,     0,    21,     0,   695,   700,   451,   692,   550,   550,
-       0,   110,     3,     2,    27,     2,     0,    33,     0,     2,
-      25,     0,   107,   108,    74,    75,    76,    78,    79,    81,
-      82,    86,    87,    84,    85,    89,    90,    92,    94,    96,
-      98,   100,     0,     0,   755,   295,     0,     0,     0,   650,
-     651,   647,   648,   500,   499,   295,     0,   295,   717,   295,
-     722,   296,   295,   665,   295,   295,   708,   664,     2,   295,
-       0,     0,     0,     0,     0,     0,     0,     0,   686,     0,
-     672,   623,   639,   673,     2,   619,   626,   434,   621,   622,
-     435,     2,   633,   642,   635,   636,   669,   670,   684,   712,
-     716,   714,   754,   269,     2,   748,     2,   425,   720,   725,
-     426,     0,   404,     3,     3,     3,     3,   456,     3,     0,
-       2,   471,   467,   753,     0,   463,   470,     2,   466,   469,
-       0,   295,   243,   265,     3,   273,   275,     0,   456,     2,
-     574,   575,     2,   613,   614,     0,   662,   540,     3,   347,
-     346,   349,   348,   295,   541,     0,   542,   374,     0,     0,
-     295,   295,     0,     0,   695,   384,   387,   391,   550,   391,
-     390,   383,   376,   550,   378,   381,   295,   401,   395,   105,
-     402,   752,     0,     0,   439,   241,     0,     0,     3,     2,
-     671,   432,     0,   530,     0,   754,   492,     0,   295,   295,
-     295,     0,   554,   556,   131,     0,     0,   216,     0,     0,
-       0,   224,   225,    56,     0,    62,   295,     0,    60,    59,
-       0,     2,   129,     0,     0,     0,   696,   697,   693,   694,
-     461,    71,    72,   111,   116,     3,   110,     0,     0,     0,
-      24,    35,     3,     0,    32,   103,     0,     3,   653,   657,
-     660,   652,     3,   595,     3,   719,   724,     2,    63,   295,
-       3,     3,   296,     0,     3,   625,   629,   632,   641,   675,
-     679,   682,   295,     3,   624,   640,   674,   295,   295,   427,
-     295,   295,   749,     0,     0,     0,     0,   257,     0,   105,
-       0,     3,     3,     0,   464,     0,   460,     0,     0,   246,
-     295,     0,     0,   130,     0,     0,     0,     0,     0,   130,
-       0,     0,   110,   110,    18,     2,     0,     0,     3,   132,
-     133,     2,   144,   134,   135,   136,   137,   138,   139,   146,
-     148,     0,     0,     0,   286,   295,   295,   550,     0,   543,
-     295,   377,   379,     0,   393,   696,   388,   392,   389,   382,
-     386,   369,   400,     0,   582,     2,   667,   666,     0,   672,
-       2,   485,   487,   507,     3,   515,   516,     0,     2,   511,
-       3,     3,     0,     0,   559,   223,     0,     0,     0,   223,
-       0,     0,     3,    37,   112,   699,   703,   705,   698,   752,
-     110,     0,     3,   664,    42,     3,    40,     3,    34,     0,
-       3,   102,   104,     0,     2,   655,   656,     0,     0,   295,
-       0,     0,     0,     3,   641,     0,     2,   627,   628,     2,
-     643,     2,   677,   678,     0,     0,    63,     0,     3,     3,
-       3,     3,   412,   411,   415,     2,     2,   751,   750,   113,
-       0,     0,     0,     0,     3,   465,     3,     0,   244,   147,
-       3,   296,   295,     0,     0,     0,     0,     2,     0,   192,
-       0,   190,     0,     0,     0,     0,     0,     0,     0,   550,
-     112,     0,   152,   149,   295,     0,     0,   268,   280,     3,
-       3,   549,   616,   370,   385,   398,   295,   267,   295,     0,
-     518,   495,   295,     0,     0,   494,   509,     0,     0,     0,
-     217,     0,   226,    57,   110,     0,     2,   701,   702,     0,
-     117,   114,     0,     0,     0,     0,     0,     0,    23,     0,
-     658,   295,   583,   266,   727,   728,   729,     0,   680,   295,
-     295,   295,     3,     3,     0,   688,     0,     0,     0,     0,
-     295,   295,     3,   547,   472,   473,     0,     0,   247,   296,
-       0,     0,     0,     0,   295,   193,   191,   188,     0,   194,
-       0,     0,     0,     0,   198,   201,   199,   195,     0,   196,
-     130,    35,   145,   143,   245,     0,     0,   419,   423,   422,
-       0,   512,     2,   513,     2,   514,   508,   295,   229,     0,
-     227,     0,   229,     3,   664,   295,    31,   115,     2,    45,
-       2,    43,    41,    28,   113,    26,     3,   730,     3,     3,
-       3,     0,     0,   687,   689,   630,   644,   270,     2,   409,
-       3,   408,     0,   475,   472,   130,     0,     0,   130,     3,
-       0,   130,   189,     0,     2,     2,   210,   200,     0,     0,
-       0,   141,     0,   577,   617,     2,     0,     0,     2,   230,
-       0,     0,   218,     0,     0,     0,     3,     0,     0,     0,
-       0,     0,     0,   690,   691,   295,     0,   474,   153,     0,
-       0,     2,   166,   130,   155,     0,   183,     0,   130,     0,
-       2,   157,     0,     2,     0,     2,     2,     2,   197,    32,
-     295,   517,   519,   510,     0,     0,     0,     0,   115,    38,
-       0,     3,     3,   659,   631,   645,   681,   413,   130,   159,
-     162,     0,   161,   165,     3,   168,   167,     0,   130,   185,
-     130,     3,     0,   295,     0,   295,     0,     2,     0,     2,
-     140,     2,   231,   232,     0,   228,   219,     0,   704,     0,
-       0,   154,     0,     0,   164,   234,   169,     2,   236,   184,
-       0,   187,   173,   202,     3,   211,   215,   204,     3,     0,
-     295,     0,   295,     0,     0,     0,    39,    46,    44,   160,
-     163,   130,     0,   170,   295,   130,   130,     0,   174,     0,
-       0,   695,   212,   213,   214,     0,   203,     3,   205,     3,
-     295,   220,   233,   150,   171,   156,   130,   237,   186,   181,
-     179,   175,   158,   130,     0,   696,     0,     0,     0,     0,
-     151,   172,   182,   176,   180,   179,   177,     3,     3,     0,
-       0,   496,   178,   206,   208,     3,     3,   207,   209
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   104,
+       2,   644,   451,   641,   545,   545,   649,   478,   291,     2,
+     583,   584,     0,   595,   596,     0,     2,   738,   741,   118,
+     291,     0,     2,   706,   292,   710,   701,   702,   708,     0,
+       2,     2,   666,   545,   749,   615,   545,   545,   749,   545,
+     629,   545,   545,   680,   433,   663,   545,   545,   671,   678,
+     291,   428,   292,     0,     0,   291,   716,   292,   721,   749,
+     713,   291,   718,   749,   291,   291,   291,     0,   118,     0,
+      18,     2,     0,    19,     0,   458,   747,     0,     0,   464,
+     238,     0,   291,     0,     0,     0,   543,   567,   571,   573,
+     603,   606,   610,   613,   566,   605,     0,   281,   656,     0,
+     291,   274,     0,     0,     0,     0,   272,     2,     0,   256,
+     534,   291,     0,     0,   291,     2,   362,   382,   371,     0,
+       0,   376,   370,   748,     0,     0,   395,     0,   292,     3,
+     413,     3,   417,   416,   589,     0,   529,   291,    60,     3,
+     291,   432,   292,     3,   426,   427,     2,     0,     0,     0,
+     483,   303,   291,   479,   481,     3,     2,     2,     0,   500,
+       3,     0,   552,   126,     0,     0,   219,     0,     0,     0,
+       0,    36,     0,     0,   118,   291,    20,     0,    21,     0,
+     690,   695,   447,   687,   545,   545,     0,   105,     3,     2,
+      27,     0,    33,     0,     2,    25,     0,   103,    70,    71,
+      72,    74,    75,    77,    78,    82,    83,    80,    81,    85,
+      86,    88,    90,    92,    94,    96,     0,     0,   750,   291,
+       0,     0,     0,   645,   646,   642,   643,   495,   494,   291,
+       0,   291,   712,   291,   717,   292,   291,   660,   291,   291,
+     703,   659,     2,   291,     0,     0,     0,     0,     0,     0,
+       0,     0,   681,     0,   667,   618,   634,   668,     2,   614,
+     621,   430,   616,   617,   431,     2,   628,   637,   630,   631,
+     664,   665,   679,   707,   711,   709,   749,   265,     2,   743,
+       2,   421,   715,   720,   422,     0,   400,     3,     3,     3,
+       3,   452,     3,     0,     2,   466,   463,   748,     0,   459,
+       2,   462,   465,     0,   291,   239,   261,     3,   269,   271,
+       0,   452,     2,   569,   570,     2,   608,   609,     0,   657,
+     535,     3,   343,   342,   345,   344,   291,   536,     0,   537,
+     370,     0,     0,   291,   291,     0,     0,   690,   380,   383,
+     387,   545,   387,   386,   379,   372,   545,   374,   377,   291,
+     397,   391,   101,   398,   747,     0,     0,   435,   237,     0,
+       0,     3,     2,   666,   428,     0,   525,     0,   749,   487,
+       0,   291,   291,   291,     0,   549,   551,   127,     0,     0,
+     212,     0,     0,     0,   220,   221,    53,     0,    55,    58,
+      59,     0,     2,   125,     0,     0,     0,   691,   692,   688,
+     689,   457,    67,    68,   106,   122,     3,   105,     0,     0,
+      24,    35,     3,     0,    32,    99,     0,     3,   648,   652,
+     655,   647,     3,   590,     3,   714,   719,     2,    60,   291,
+       3,     3,   292,     0,     3,   620,   624,   627,   636,   670,
+     674,   677,   291,     3,   619,   635,   669,   291,   291,   423,
+     291,   291,   744,     0,     0,     0,     0,   253,     0,   101,
+       0,     3,     3,     0,   460,     0,   456,     0,     0,   242,
+     291,     0,     0,   126,     0,     0,     0,     0,     0,   126,
+       0,     0,   105,   105,    18,     2,     0,     0,     3,   128,
+     129,     2,   140,   130,   131,   132,   133,   134,   135,   142,
+     144,     0,     0,     0,   282,   291,   291,   545,     0,   538,
+     291,   373,   375,     0,   389,   691,   384,   388,   385,   378,
+     382,   365,   396,     0,   577,     2,   662,   661,     0,   667,
+       2,   480,   482,   502,     3,   510,   511,     0,     2,   506,
+       3,     3,     0,     0,   554,   219,     0,     0,     0,   219,
+       0,     0,   118,   694,   698,   700,   693,   747,   105,     0,
+       3,   659,    39,     3,    37,    34,     0,     3,    98,   100,
+       0,     2,   650,   651,     0,     0,   291,     0,     0,     0,
+       3,   636,     0,     2,   622,   623,     2,   638,     2,   672,
+     673,     0,     0,    60,     0,     3,     3,     3,     3,   408,
+     407,   411,     2,     2,   746,   745,   119,     0,     0,     0,
+       0,     3,   461,     3,     0,   240,   143,     3,   292,   291,
+       0,     0,     0,     0,     2,     0,   188,     0,   186,     0,
+       0,     0,     0,     0,     0,     0,   545,   118,     0,   148,
+     145,   291,     0,     0,   264,   276,     3,     3,   544,   611,
+     366,   381,   394,   291,   263,   291,     0,   513,   490,   291,
+       0,     0,   489,   504,     0,     0,     0,   213,     0,   222,
+      56,     2,   696,   697,     0,   123,   120,     0,     0,     0,
+       0,     0,    23,     0,   653,   291,   578,   262,   722,   723,
+     724,     0,   675,   291,   291,   291,     3,     3,     0,   683,
+       0,     0,     0,     0,   291,   291,     3,   542,   119,   468,
+       0,     0,   243,   292,     0,     0,     0,     0,   291,   189,
+     187,   184,     0,   190,     0,     0,     0,     0,   194,   197,
+     195,   191,     0,   192,   126,    35,   141,   139,   241,     0,
+       0,   415,   419,   418,     0,   507,     2,   508,     2,   509,
+     503,   291,   225,     0,   223,     0,   225,   291,    31,   121,
+       2,    42,     2,    40,    38,    28,    26,     3,   725,     3,
+       3,     3,     0,     0,   682,   684,   625,   639,   266,     2,
+     405,     3,   404,     0,   470,   467,   126,     0,     0,   126,
+       3,     0,   126,   185,     0,     2,     2,   206,   196,     0,
+       0,     0,   137,     0,   572,   612,     2,     0,     0,     2,
+     226,     0,     0,   214,     0,     3,     0,     0,     0,     0,
+       0,     0,   685,   686,   291,     0,   469,   149,     0,     0,
+       2,   162,   126,   151,     0,   179,     0,   126,     0,     2,
+     153,     0,     2,     0,     2,     2,     2,   193,    32,   291,
+     512,   514,   505,     0,     0,     0,     0,     0,     3,     3,
+     654,   626,   640,   676,   409,   126,   155,   158,     0,   157,
+     161,     3,   164,   163,     0,   126,   181,   126,     3,     0,
+     291,     0,   291,     0,     2,     0,     2,   136,     2,   227,
+     228,     0,   224,   215,   699,     0,     0,   150,     0,     0,
+     160,   230,   165,     2,   232,   180,     0,   183,   169,   198,
+       3,   207,   211,   200,     3,     0,   291,     0,   291,     0,
+       0,     0,    43,    41,   156,   159,   126,     0,   166,   291,
+     126,   126,     0,   170,     0,     0,   690,   208,   209,   210,
+       0,   199,     3,   201,     3,   291,   216,   229,   146,   167,
+     152,   126,   233,   182,   177,   175,   171,   154,   126,     0,
+     691,     0,     0,     0,     0,   147,   168,   178,   172,   176,
+     175,   173,     3,     3,     0,     0,   491,   174,   202,   204,
+       3,     3,   203,   205
 };
 
@@ -1560,194 +1562,192 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   819,   469,   302,    48,   135,   136,   303,   304,   305,
-     306,   766,   767,  1145,  1146,   307,   382,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-    1040,   519,   984,   323,   985,   547,   954,  1067,  1543,  1069,
-    1070,  1071,  1072,  1544,  1073,  1074,  1460,  1461,  1422,  1423,
-    1424,  1522,  1523,  1527,  1528,  1563,  1564,  1075,  1380,  1076,
-    1077,  1314,  1315,  1316,  1504,  1078,   147,   960,   961,   962,
-    1400,  1484,  1496,  1497,   470,   471,   881,   882,  1048,    52,
-      53,    54,    55,    56,   348,   160,    59,    60,    61,    62,
-      63,   350,    65,    66,   266,    68,    69,   276,   352,   353,
-      72,    73,    74,    75,   120,    77,   206,   355,   121,    80,
-     122,    82,    83,   456,    84,   455,   690,   691,   692,   915,
-    1096,   916,    85,    86,   459,   457,   698,   861,   862,   358,
-     359,   701,   702,   703,   360,   361,   362,   363,   467,   341,
-     137,   138,   523,   325,   172,   647,   648,   649,   650,   651,
-      87,   123,    89,   490,   491,   946,   492,   279,   496,   326,
-      90,   139,   140,    91,  1337,  1118,  1119,  1120,  1121,    92,
-      93,   719,    94,   275,    95,    96,   189,  1042,   681,   413,
-     127,    97,   502,   503,   504,   190,   270,   192,   193,   194,
-     271,   100,   101,   102,   103,   104,   105,   106,   197,   198,
-     199,   200,   201,   831,   606,   607,   608,   609,   202,   611,
-     612,   613,   573,   574,   575,   576,   755,   107,   615,   616,
-     617,   618,   619,   620,   977,   757,   758,   759,   596,   366,
-     367,   368,   369,   327,   166,   109,   110,   111,   371,   696,
-     570
+      -1,   813,   468,   301,    47,   134,   135,   302,   303,   304,
+     305,   761,   762,  1133,  1134,   306,   381,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+    1030,   518,   975,   546,   322,   976,   947,  1057,  1518,  1059,
+    1060,  1061,  1062,  1519,  1063,  1064,  1437,  1438,  1401,  1402,
+    1403,  1497,  1498,  1502,  1503,  1538,  1539,  1065,  1361,  1066,
+    1067,  1298,  1299,  1300,  1480,  1068,   146,   953,   954,   955,
+    1381,  1461,  1472,  1473,   469,   470,   874,   875,  1038,    51,
+      52,    53,    54,    55,   347,   159,    58,    59,    60,    61,
+      62,   349,    64,    65,   265,    67,    68,   275,   351,   352,
+      71,    72,    73,    74,   119,    76,   205,   354,   120,    79,
+     121,    81,    82,   455,    83,   454,   688,   689,   690,   908,
+    1086,   909,    84,    85,   458,   456,   696,   855,   856,   857,
+     858,   699,   700,   701,   359,   360,   361,   362,   466,   340,
+     136,   137,   522,   324,   171,   645,   646,   647,   648,   649,
+      86,   122,    88,   489,   490,   939,   491,   278,   495,   325,
+      89,   138,   139,    90,  1321,  1108,  1109,  1110,  1111,    91,
+      92,   717,    93,   274,    94,    95,   188,  1032,   679,   412,
+     126,    96,   501,   502,   503,   189,   269,   191,   192,   193,
+     270,    99,   100,   101,   102,   103,   104,   105,   196,   197,
+     198,   199,   200,   825,   605,   606,   607,   608,   201,   610,
+     611,   612,   572,   573,   574,   575,   751,   106,   614,   615,
+     616,   617,   618,   619,   968,   753,   754,   755,   595,   365,
+     366,   367,   368,   326,   165,   108,   109,   110,   370,   694,
+     569
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1414
+#define YYPACT_NINF -1310
 static const yytype_int16 yypact[] =
 {
-    4857,  9883, -1414,    35, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414,   142, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414,    98,    98,    98,  1334,
-     684,   153,  7496,   290, -1414, -1414, -1414, -1414, -1414,   204,
-   -1414, -1414, -1414, -1414,   901,   229, -1414, -1414, -1414, -1414,
-    9565, -1414, -1414, -1414, -1414,   -15,   301, -1414,  1624, -1414,
-   -1414, -1414, -1414,   302,  1806,   471,   143,  7613, -1414, -1414,
-    9603,  1367, -1414, -1414, -1414,  1721,   510,  3394,  1032,  1137,
-    1721,  1303, -1414, -1414,  1174,  1520, -1414,  1721,  1532, -1414,
-     385, -1414,   421,   523, -1414, -1414, -1414, -1414,   460,   301,
-      98, -1414,    98, -1414, -1414, -1414, -1414, 10414,  1624, -1414,
-   -1414,  1624, -1414,   447, -1414, 10444, -1414, -1414,  2082, 10554,
-   -1414,   399,   399,   399, -1414, -1414, -1414,    98, -1414, -1414,
-   -1414,   544,   555,   575, -1414, -1414, -1414,   617, -1414, -1414,
-   -1414, -1414, -1414,   621,   629, -1414, -1414,    11,  9069,  3253,
-     578,   492,   499,   631,   635,   642,   647,  9853,  7015,   649,
-     656, -1414,  9713, -1414, -1414, -1414, -1414,   661, -1414,   193,
-    3453,  3453, -1414,   667,   251, -1414, -1414, -1414, -1414,   692,
-     327,   346,   368,    98,   673, -1414, -1414,  1806,  3136,   748,
-   -1414,    12, -1414,    98,    98,   301, -1414, -1414,    75, -1414,
-      98,    98, -1414,  3167,   711,   722,   399,  6806, -1414, -1414,
-     726,  9565, -1414, -1414,  1721, -1414, -1414, -1414,   301, -1414,
-    1624,   -15, -1414,  7963, -1414,   399,   399,   399,   301, -1414,
-    1334, -1414,  5769, -1414, -1414,   709,   399, -1414,   399, -1414,
-     204,  9069, -1414,   763, -1414,   684,   765,   399, -1414,  1334,
-     750,   766, -1414,  7496,   705, -1414, -1414, -1414,  9532, -1414,
-   -1414, 10864, -1414,   748,    63,  6244, 10554,  2082,  3167, -1414,
-      85, -1414, -1414, 10444,  1624,   804,  7644, -1414, -1414,   319,
-   -1414, 11778,   782,   851,  4657,   828,  4994, 11639, -1414,   839,
-   -1414, -1414, -1414, -1414, 11658, 11658,  8841,   844, -1414, -1414,
-   -1414, -1414, -1414, -1414,   869, -1414,   759,  2440,  9183,  4994,
-   -1414,   593,   571,   645,   313,   861,   842,   858,   843,   911,
-     -20, -1414, -1414,   876,   326, -1414,    83, -1414, -1414,  3253,
-   -1414, -1414,   139,   900, -1414,   422,   900,   905,   204, -1414,
-   -1414,   909, 10414, -1414,   912,   917,  9297, -1414, -1414,  1382,
-    2358,  8427,  6806,  1721, -1414,  1721,   399,   399, -1414, -1414,
-   -1414, -1414, -1414, -1414,   399, 10414,  1624, -1414, -1414, 10584,
-    1776, -1414, 10304, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-     936, 11446,  4994, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414,  2082, -1414,   836,
-     947,   962,   963,   923,   965,   970,   972,  3136, -1414, -1414,
-     959,   -15,   975, -1414, -1414,   978, -1414, -1414, -1414,  9532,
-   -1414, -1414, -1414, -1414, -1414,  3167, -1414,  9069,  9069, -1414,
-     399,  2082,  6926,  1624,  8543, -1414, -1414, -1414, -1414,  9532,
-      63, -1414, -1414,  1721,   301, -1414, -1414,  9532, -1414,  6689,
-   -1414, -1414,   399,   399,   271, 10023,   907,   977,   960,   988,
-     399, -1414, -1414, -1414, -1414, 10980, -1414,   500,  6556, -1414,
-     301,   990, -1414,  2082, 11860, 11504, -1414, -1414, -1414, -1414,
-     935,  3167, -1414,  8659,   748,  6228, -1414, -1414, -1414,  1482,
-     550,   876,   684,  7644,  1180, 10444, -1414,  7644, -1414, -1414,
-   -1414, -1414,   561, -1414,   997,   851,   -13,  8841, -1414, 10694,
-   -1414, -1414,  8841, -1414,  8955,  8841, -1414, -1414,   996, -1414,
-     585,  1003,   455,  1017, -1414, -1414,  9993,  6037, -1414,   419,
-   -1414, -1414, 11562, -1414,   469, 11562, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414,  6244,  6244, -1414, -1414,
-    4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,
-    4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  3735,  6244,
-   -1414,   326,  1049, -1414, -1414,    98,    98, -1414, -1414,  9069,
-   -1414, -1414,   978,   705, -1414,   978, 11581, -1414, -1414, -1414,
-    3645,  6037,  1016,  1018, -1414, 10554, -1414, -1414,   661, -1414,
-    1020,  1157,  1025,  2611,    95,   876, -1414,    98,    98,   876,
-     134, -1414,    98,    98,   978, -1414, -1414,    98,    98, -1414,
-     900, 10724,  1624, 12005,    69,   227, 10724, -1414, 10864, -1414,
-     876, -1414, 10414, -1414,   218,  8079,  8079,  8079,  1624, -1414,
-    5555,  1012,   260,   936,   778,  1021,  1024, -1414,  1026,  3453,
-     343, -1414,  1115,  1624,  8079,   705,  2082,   705,   748,   534,
-     900, -1414, -1414,   596,   900, -1414, -1414, -1414,   851, -1414,
-     900,   301, 10980, -1414,   687,  1042,   700,  1043, -1414,  1044,
-     301, -1414, -1414,  9532,   301,  1041, 10694,  1045, -1414,  2066,
-   -1414,   408,   416,   684, -1414,   684,  1047,  4994, -1414,   684,
-   12005, -1414, -1414,  1053, -1414, -1414, -1414,   705, -1414, 11933,
-     917, -1414,  8079,   489,  8427, -1414, -1414,   661,  1055,  1056,
-    1482,  3284, -1414, -1414,  7644, -1414, -1414,  1038, -1414, -1414,
-    1064, -1414,  1038,  1070, 11778,  6244,    93,  1051,   138,  1074,
-    1058,  1075,   844,  1069,  1077, -1414,  1079,  1081, 10133,  6775,
-   -1414,  6244, -1414,   455,  1974, -1414, -1414, -1414,    98,    98,
-    6104,  6244,  1076, -1414, -1414,   936,   707, -1414,  6244, -1414,
-   -1414,   677, -1414, -1414, -1414, -1414, -1414,   593,   593,   571,
-     571,   645,   645,   645,   645,   313,   313,   861,   842,   858,
-     843,   911,  4994,   847, -1414, 10980,  1083,  1084,  1088,  1049,
-   -1414, -1414, -1414, -1414, -1414, 10980,   717,  8079, -1414, 10414,
-   -1414,  7135,  9411, -1414, 10304,  7015, -1414, -1414,  1157, 10980,
-     945,  1089,  1090,  1095,  1096,  1099,  1100,  1105, -1414,  4392,
-    2611, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,   978, -1414,
-   -1414, -1414,   876, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414,  1112, -1414,  1113,  1118, -1414, -1414,   -15,  1076,  5555,
-   -1414, -1414, -1414, 11446,  1116, -1414, -1414, -1414, -1414, -1414,
-     684,  6369,  1201, -1414, -1414, -1414, -1414,  1103,   -15, -1414,
-   -1414,   978, -1414, -1414,   978,   126,   978, -1414, -1414, -1414,
-   -1414, -1414, -1414,  9743, -1414,   301, -1414, -1414,   438,   452,
-   10584,  7255,  2372,  4994,  2870, -1414, -1414,  1127,    39,  1127,
-   -1414,   684, -1414,    98, -1414, -1414, 10163,   960, -1414, -1414,
-   -1414,   977,  1143,  1131, -1414, -1414,  1150,  1153, -1414,   489,
-    1995, -1414,   363, -1414,  3284,   876, -1414,  1160,  7644, 10834,
-    9069,  1161, -1414, -1414,  1151,  1162,  1156, -1414,  4994,   120,
-     279,  1163, -1414,  1166,   705,  1166,  6037,  6244, -1414, -1414,
-    1166,  1165, -1414,  1176,  1182,  1185,  1974, -1414, -1414, -1414,
-   11446, -1414, -1414, -1414, -1414,  1168,  6244,  1188,   705,  5555,
-   -1414, 11562, -1414,   705, -1414, -1414,  6244, -1414,   614,   900,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414,   936,   917,  9297,
-   -1414, -1414,  7375,  1187, -1414,   758,   900, -1414,   785,   797,
-     900, -1414,   399,  5912, -1414, -1414, -1414, 10980, 10980, -1414,
-    8543,  8543, -1414,  1186,  1189,  1191,  1199, -1414,  1206,   439,
-     119,  1076, -1414,   705, -1414,  3453, -1414,  6244,   480, -1414,
-    6655,  1211,  1212, 11388,  1213,  1217,    -6,    58,   117,  6244,
-    1221,   301,  6244,  6244,  1215,  1222,   610,  1203, -1414, -1414,
-   -1414,  1218, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414,   684,  1226,  6244, -1414, 10980, 10980,    98,  1228, -1414,
-   10273, -1414, -1414,   864, -1414,  2870, -1414, -1414, -1414, -1414,
-    2066, -1414, -1414,  1230, -1414, -1414, -1414, -1414,  1231,  1995,
-   -1414, -1414,  1223, -1414,  1038, -1414, -1414,  2082,  1235, -1414,
-   -1414, -1414,   744,  1237, -1414,   138,  1245,  4994,  1232,   138,
-     138,  1250,  1246, -1414,  9993,   825,   900, -1414, -1414,  1026,
-    6244,  1251,  1168,   536,   161,  1261, -1414,  1246, -1414,  1254,
-    1261, -1414, -1414,  1257, -1414, -1414,   978,  1270,  1271,  6895,
-    1272,  1275,  1280, -1414, -1414,  1283, -1414, -1414,   978, -1414,
-   -1414, -1414, -1414,   978,  6244,  6244,   917,  1282, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-    4994,  4994,  1284,  1286,  1261, -1414, -1414,   684, -1414, -1414,
-   -1414,  5291, 10834,  6244,  6244,  1335,  6244, -1414,  1263, -1414,
-    1267, -1414,  1281,  6244,  1288,  6244,  1039,  1290,    28,    98,
-    5165,   856, -1414, -1414,  6369,  1287,   488, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, 11206, -1414,  8659,  1304,
-   -1414, -1414, 10834,   490,   498, -1414,  1301,  1306,   851,  1317,
-   -1414,   418, -1414, -1414,  6244,  1316, -1414, -1414,   978,  1314,
-   -1414, -1414,  1318,   589,   691,   705,  1320,  1322, -1414,  1329,
-   -1414, 10980, -1414, -1414, -1414, -1414, -1414,  1330, -1414, 10980,
-   10980, 10980, -1414, -1414,  1332, -1414,  1333,  1336,  1339,   517,
-    8195,  8311, -1414, -1414,   123, -1414,  1343,  1348, -1414,  8775,
-     755,   768,  1342,   770,  6525, -1414, -1414, -1414,   508, -1414,
-     777,  1352,  1353,   301,  1403,   933, -1414, -1414,  6244, -1414,
-   11388, 11562, -1414, -1414, -1414,  1359,  1364, -1414, -1414, -1414,
-    1363, -1414, -1414, -1414, -1414, -1414, -1414, 10834,   851,   273,
-   -1414,  1347,   851,  1168,   268, 10980, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414,  1365, -1414, -1414, -1414, -1414, -1414,
-   -1414,  1368,  1371, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-    1375, -1414,  1374, -1414, -1414, 11388,    91,  6244, 11388, -1414,
-    1385,  6244, -1414,   288,  1402,  1405, -1414, -1414,  1390,  1393,
-    1376, -1414,   882, -1414, -1414, -1414,  1624,  2082,  1388,   869,
-     884,  4994, -1414,   803,  1394,  6244, -1414,   705,   705,  1399,
-    1406,  1407,  1409, -1414, -1414,  8543,  1397, -1414,  1473,  4994,
-    1404, -1414, -1414, 11299, -1414,   811, -1414,  1395, 11388,  1401,
-   -1414, -1414,  1410, -1414,  1412, -1414,  1433,  1441, -1414,  1415,
-   10834, -1414, -1414, -1414,   851,   705,  1429,  1417,  1436, -1414,
-    1446,  1261,  1261, -1414, -1414, -1414, -1414, -1414, 11388,   278,
-   -1414,   910, -1414, -1414,  7730, -1414, -1414,  1435,  6244, -1414,
-    6244,  7730,   301, 10694,   301, 10694,  1462, -1414,  1463, -1414,
-   -1414,  1460,   869, -1414,   812, -1414, -1414,  6244, -1414,  1465,
-    1466, -1414,  4994,  4994, -1414, -1414,  1007,    37, -1414, -1414,
-    1447, -1414,  1007, -1414, -1414,  2485,   705, -1414, -1414,   301,
-   10694,   301, 10694,  1472,  1450,   705, -1414, -1414, -1414, -1414,
-   -1414, 11299,  1468,  1007,  7847,  6244, 11210,  1475,  1007,  1477,
-    2485,  2994, -1414, -1414, -1414,  1495, -1414, -1414, -1414, -1414,
-    9069, -1414, -1414, -1414, 11077, -1414, 11299, -1414, -1414,  1476,
-   10984, -1414, -1414, 11210,   301,  2994,   301,  1502,  1506,   813,
-   -1414, 11077, -1414, -1414, -1414, 10984, -1414, -1414, -1414,   301,
-     301, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414
+    7316,  8697, -1310,    16, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310,    22, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310,   101,   101,   101,  1152,
+     941,    64,  7548,   141, -1310, -1310, -1310, -1310, -1310,    87,
+   -1310, -1310, -1310,   868,   134, -1310, -1310, -1310, -1310,  9158,
+   -1310, -1310, -1310, -1310,   149,   144, -1310,  1337, -1310, -1310,
+   -1310, -1310,   139,   935,   260,   102,  2892, -1310, -1310,  9196,
+     790, -1310, -1310, -1310,   904,   293,  5512,   547,   778,   904,
+    1166, -1310, -1310,   554,   624, -1310,   904,  1343, -1310,   187,
+   -1310,   308,   336, -1310, -1310, -1310, -1310,   251,   144,   101,
+   -1310,   101, -1310, -1310, -1310, -1310,  8923,  1337, -1310, -1310,
+    1337, -1310,   337, -1310,  9043, -1310, -1310,  1053,  9381, -1310,
+    1729,  1729,  1729, -1310, -1310, -1310,   101, -1310, -1310, -1310,
+     410,   413,   418, -1310, -1310, -1310,   433, -1310, -1310, -1310,
+   -1310, -1310,   468,   477, -1310, -1310,    37,  8666,  2607,   742,
+     369,   496,   509,   523,   530,   535,  8584,  6836,   536,   546,
+   -1310,  9234, -1310, -1310, -1310, -1310,   561, -1310,   245,  4633,
+    4633, -1310,   562,   361, -1310, -1310, -1310, -1310,   574,   383,
+     408,   429,   101,   577, -1310, -1310,   935,  3015,   664, -1310,
+      86, -1310,   101,   101,   144, -1310, -1310,    89, -1310,   101,
+     101, -1310,  3541,   634,   653,  1729,  6748, -1310, -1310,   623,
+    9158, -1310, -1310,   904, -1310, -1310, -1310,   144, -1310,  1337,
+     149, -1310,  7737, -1310,  1729,  1729,  1729,   144, -1310,  1152,
+   -1310,  5996, -1310, -1310,   642,  1729, -1310,  1729, -1310,    87,
+    8666, -1310,   672, -1310,   941,   697,  1729, -1310,  1152,   699,
+     702, -1310,  7548,   567, -1310, -1310, -1310,  9125, -1310, -1310,
+    4167, -1310,   664,    10,  5116,  9381,  1053,  3541, -1310,    94,
+   -1310, -1310,  9043,  1337,   715, 10741, -1310, -1310,    11, -1310,
+   10483,   740,   772, 10231,   759, 10288, 10307, -1310,   763, -1310,
+   -1310, -1310, -1310, 10364, 10364,  8440,   765, -1310, -1310, -1310,
+   -1310, -1310, -1310,   799, -1310,   616,  2256,  8779, 10288, -1310,
+     475,   860,   810,   276,   913,   766,   767,   793,   832,    41,
+   -1310, -1310,   807,   704, -1310,   331, -1310, -1310,  2607, -1310,
+   -1310,   242,   835, -1310,   421,   835,   841,    87, -1310, -1310,
+     846,  8923, -1310,   847,   857,  8892, -1310, -1310,  1352,  2069,
+    8155,  6748,   904, -1310,   904,  1729,  1729, -1310, -1310, -1310,
+   -1310, -1310, -1310,  1729,  8923,  1337, -1310, -1310,  9419,  1457,
+   -1310,  7886, -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,
+   10098, 10288, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310,  1053, -1310,   928,   862,
+     891,   893,  1023,   916,   937,   951,  3015, -1310, -1310,   942,
+     149,   958, -1310, -1310,   970, -1310, -1310, -1310,  9125, -1310,
+   -1310, -1310, -1310, -1310,  3541, -1310,  8666,  8666, -1310,  1729,
+    1053,  6867,  1337,  8228, -1310, -1310, -1310, -1310,  9125,    10,
+   -1310, -1310,   904,   144, -1310, -1310,  9125, -1310,  6513, -1310,
+   -1310,  1729,  1729,   382,  5342,   969,   972,   960,  1031,  1729,
+   -1310, -1310, -1310, -1310,  9605, -1310,   450,  6629, -1310,   144,
+    1033, -1310,  1053, 10565, 10155, -1310, -1310, -1310, -1310,  1039,
+    3541, -1310,  8301,   664,  7432, -1310, -1310, -1310,   984,   626,
+     807,   941, 10741,   606,  9043, -1310, 10741, -1310, -1310, -1310,
+   -1310,   690, -1310,  1044,   772,   255,  8440, -1310,  9457, -1310,
+   -1310,  8440, -1310,  8553,  8440, -1310, -1310,  1042, -1310,   722,
+    1047,   818,  1048, -1310, -1310,  9310,  6479, -1310,   321, -1310,
+   -1310,  5116, -1310,   602,  5116, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310,  5116, -1310, -1310, 10288,
+   10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288,
+   10288, 10288, 10288, 10288, 10288, 10288, 10288,  2426,  5116, -1310,
+     704,   830, -1310, -1310,   101,   101, -1310, -1310,  8666, -1310,
+   -1310,   970,   567, -1310,   970, 10212, -1310, -1310, -1310,  4524,
+    6479,  1049,  1054, -1310,  9381, -1310, -1310,   561, -1310,  1056,
+     774,  1073,  2515,    95,   807, -1310,   101,   101,   807,    98,
+   -1310,   101,   101,   970, -1310, -1310,   101,   101, -1310,   835,
+    9490,  1337, 10710,   283,   326,  9490, -1310,  4167, -1310,   807,
+   -1310,  8923, -1310,    80,  7852,  7852,  7852,  1337, -1310,  4787,
+    1065,   875,   744,  1066,  1067, -1310,  1070,  4633,   333, -1310,
+    1134,  1337,  7852,   567,  1053,   567,   664,   494,   835, -1310,
+   -1310,   584,   835, -1310, -1310, -1310,   772, -1310,   835,   144,
+    9605, -1310,   737,  1083,   750,  1090, -1310,  1089,   144, -1310,
+   -1310,  9125,   144,  1088,  9457,  1092, -1310,  1677, -1310,   441,
+     448,   941, -1310,   941,  1091, 10288, -1310,   941, 10710, -1310,
+   -1310,  1098, -1310, -1310, -1310,   567, -1310, 10638,   857, -1310,
+    7852,   853,  8155, -1310, -1310,   561,  1095,  1097,   984,  3316,
+   -1310, -1310, 10741, -1310, -1310,  1099, -1310, -1310,  1105, -1310,
+    1099,  1111, 10483,  5116,    62,  1102,   167,  1113,  1121,  1129,
+    1130, -1310,  1131,  1132,  9348,  6598, -1310,  5116, -1310,   818,
+     978, -1310, -1310, -1310,   101,   101,  5540,  5116,  1135, -1310,
+   -1310,   757, -1310,  5116, -1310, -1310,   914, -1310, -1310, -1310,
+   -1310,   475,   475,   860,   860,   810,   810,   810,   810,   276,
+     276,   913,   766,   767,   793,   832, 10288,   282, -1310,  9605,
+    1136,  1137,  1140,   830, -1310, -1310, -1310, -1310, -1310,  9605,
+     779,  7852, -1310,  8923, -1310,  6955,  9005, -1310,  7886,  6836,
+   -1310, -1310,   774,  9605,  1063,  1142,  1143,  1145,  1146,  1147,
+    1148,  1154, -1310,  3759,  2515, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310,   970, -1310, -1310, -1310,   807, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310,  1156, -1310,  1159,  1160, -1310,
+   -1310,   149,  1135,  4787, -1310, -1310, -1310, 10098,  1157, -1310,
+   -1310, -1310, -1310,   941,  6225,  1247, -1310, -1310, -1310, -1310,
+    1150,   149, -1310, -1310,   970, -1310, -1310,   970,   137,   970,
+   -1310, -1310, -1310, -1310, -1310, -1310,  9272, -1310,   144, -1310,
+   -1310,   451,   452,  9419,  7074,  2178, 10288,  3429, -1310, -1310,
+    1149,    39,  1149, -1310,   941, -1310,   101, -1310, -1310,  8073,
+     960, -1310, -1310, -1310,   972,  1168,  1169, -1310, -1310,  1170,
+    1172, -1310,   853,  1305, -1310,   359, -1310,  3316,   807, -1310,
+    1177, 10741,  9528,  8666,  1180, -1310, -1310,  1175,  1182,  1164,
+   -1310, 10288,    56,   233,  1179, -1310,  1183,   567,  1183, -1310,
+   -1310,  1183,  1184, -1310,  1189,  1190,  1192,   978, -1310, -1310,
+   -1310, 10098, -1310, -1310, -1310, -1310,  1188,  5116,  1193,   567,
+   -1310,  5116, -1310,   567, -1310, -1310,  5116, -1310,   595,   835,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,   857,  8892,
+   -1310, -1310,  7193,  1196, -1310,   622,   835, -1310,   644,   649,
+     835, -1310,  1729,  4053, -1310, -1310, -1310,  9605,  9605, -1310,
+    8228,  8228, -1310,  1194,  1195,  1198,  1199, -1310,  1200,   531,
+      27,  1135, -1310,   567, -1310,  4633, -1310,  5116,   453, -1310,
+    6359,  1213,  1217, 10041,  1222,  1223,    43,    49,   106,  5116,
+    1228,   144,  5116,  5116,  1208,  1237,   142,  1218, -1310, -1310,
+   -1310,  1236, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310,   941,  1249,  5116, -1310,  9605,  9605,   101,  1252, -1310,
+    8810, -1310, -1310,   987, -1310,  3429, -1310, -1310, -1310, -1310,
+    1677, -1310, -1310,  1253, -1310, -1310, -1310, -1310,  1254,  1305,
+   -1310, -1310,  1239, -1310,  1099, -1310, -1310,  1053,  1258, -1310,
+   -1310, -1310,   806,  1262, -1310,   167,  1267, 10288,  1248,   167,
+     167,  1273,  9310,   693,   835, -1310, -1310,  1070,  5116,  1274,
+    1188,   208,   157,  1269, -1310, -1310,  1278,  1269, -1310, -1310,
+    1282, -1310, -1310,   970,  1286,  1288,  6717,  1287,  1289,  1291,
+   -1310, -1310,  1290, -1310, -1310,   970, -1310, -1310, -1310, -1310,
+     970,  5116,  5116,   857,  1292, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310, 10288, 10288,  1294,
+    1295,  1269, -1310, -1310,   941, -1310, -1310, -1310,  5073,  9528,
+    5116,  5116,  1370,  5116, -1310,  1298, -1310,  1299, -1310,  1302,
+    5116,  1306,  5116,  1123,  1307,    30,   101,  5821,  1435, -1310,
+   -1310,  6225,  1303,   456, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310,  9861, -1310,  8301,  1330, -1310, -1310,  9528,
+     463,   481, -1310,  1328,  1314,   772,  1341, -1310,   306, -1310,
+   -1310, -1310, -1310,   970,  1332, -1310, -1310,  1342,   753,   834,
+     567,  1345, -1310,  1350, -1310,  9605, -1310, -1310, -1310, -1310,
+   -1310,  1351, -1310,  9605,  9605,  9605, -1310, -1310,  1359, -1310,
+    1362,  1365,  1366,   557,  7925,  8040, -1310, -1310,   420, -1310,
+    1368,  1371, -1310,  8374,   815,   844,  1346,   866,  6094, -1310,
+   -1310, -1310,   485, -1310,   888,  1369,  1375,   144,  1417,  1051,
+   -1310, -1310,  5116, -1310, 10041,  5116, -1310, -1310, -1310,  1377,
+    1379, -1310, -1310, -1310,  1376, -1310, -1310, -1310, -1310, -1310,
+   -1310,  9528,   772,   195, -1310,  1353,   772,  9605, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310,  1384,  1388, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310,  1394, -1310,  1397, -1310, -1310, 10041,   217,  5116, 10041,
+   -1310,  1400,  5116, -1310,   289,  1421,  1423, -1310, -1310,  1403,
+    1415,  1393, -1310,  1001, -1310, -1310, -1310,  1337,  1053,  1412,
+     799,   323, 10288, -1310,   953, -1310,   567,   567,  1418,  1425,
+    1426,  1428, -1310, -1310,  8228,  1427, -1310,  1497, 10288,  1420,
+   -1310, -1310,  9953, -1310,   955, -1310,  1419, 10041,  1424, -1310,
+   -1310,  1442, -1310,  1445, -1310,  1461,  1462, -1310,  1430,  9528,
+   -1310, -1310, -1310,   772,   567,  1453,  1436,  1459,  1269,  1269,
+   -1310, -1310, -1310, -1310, -1310, 10041,   204, -1310,   370, -1310,
+   -1310,  3684, -1310, -1310,  1439,  5116, -1310,  5116,  3684,   144,
+    9457,   144,  9457,  1463, -1310,  1465, -1310, -1310,  1464,   799,
+   -1310,   968, -1310, -1310, -1310,  1460,  1466, -1310, 10288, 10288,
+   -1310, -1310,  1075,   122, -1310, -1310,  1444, -1310,  1075, -1310,
+   -1310,  2191,   567, -1310, -1310,   144,  9457,   144,  9457,  1472,
+    1450,   567, -1310, -1310, -1310, -1310,  9953,  1469,  1075,  7664,
+    5116,  9865,  1470,  1075,  1479,  2191,  3509, -1310, -1310, -1310,
+    1482, -1310, -1310, -1310, -1310,  8666, -1310, -1310, -1310,  9732,
+   -1310,  9953, -1310, -1310,  1468,  9644, -1310, -1310,  9865,   144,
+    3509,   144,  1484,  1486,   976, -1310,  9732, -1310, -1310, -1310,
+    9644, -1310, -1310, -1310,   144,   144, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310
 };
 
@@ -1755,29 +1755,29 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1414,  4377,  3077, -1414,  1645, -1414,   305,   958,   -11, -1414,
-     552,  -530,  -487,  -944,  -142,  3604,     0, -1414,  1277,   511,
-     529,   298,   549,  1057,  1060,  1054,  1062,  1065, -1414,  -211,
-    -327,  5116,  -961,  -725,  -952, -1414,  -200,  -594,   572, -1414,
-    1379, -1414,   397, -1413, -1414, -1414,   129, -1414, -1160,  -935,
-     246, -1414, -1414, -1414, -1414,    68, -1131, -1414, -1414, -1414,
-   -1414, -1414, -1414,   321, -1152,    33, -1414,  -696, -1414,   506,
-     296, -1414,   169, -1414,  -339, -1414, -1414, -1414,   558,  -728,
-   -1414, -1414,    19,  -974,   177,  2303, -1414, -1414, -1414,   -91,
-   -1414,   166,   269,  -194,  1705,  3615, -1414, -1414,    36,   224,
-     628,  -235,  1694, -1414,  1557, -1414, -1414,   200,  2163, -1414,
-    2278,   185, -1414, -1414, -1414,  -607, -1414,   956,   957,   545,
-     725,  -320, -1414, -1414, -1414,   950,   719,  -493, -1414,  -472,
-    -355,  1296, -1414, -1414,  -899,  -946,   440,   524,  1067,   168,
-   -1414,  1040,   317,  -281,  -198,  -141,   672,   781, -1414,  1005,
-   -1414,  2834,    55,  -450,   932, -1414, -1414,   712, -1414,  -228,
-   -1414,   104, -1414, -1414, -1414, -1285,   420, -1414, -1414, -1414,
-    1178, -1414,    31, -1414, -1414,  -862,   -94, -1364,  -152,  1641,
-   -1414,  3733, -1414,   927, -1414,  -170,   493,  -184,  -183,  -181,
-       7,   -42,   -36,   -33,  1610,     4,    10,    14,  -143,  -177,
-    -172,  -162,  -161,  -319,  -513,  -508,  -498,  -547,  -310,  -528,
-   -1414, -1414,  -511,  1101,  1102,  1110,  1575,  4802,  -565,  -560,
-    -559,  -541,  -551, -1414,  -506,  -744,  -736,  -732,  -593,  -267,
-    -227, -1414, -1414,   624,   294,   -85, -1414,  3753,    44,  -634,
-    -173
+   -1310,  4585,  3220, -1310,  1680, -1310,    79,   965,  -162, -1310,
+     542,  -525,  -472,  -928,   -58,  5006,     0, -1310,   115,   571,
+     588,   220,   578,  1041,  1045,  1037,  1040,  1043, -1310,   682,
+    -568,  4467,  -949, -1310,  -743,   627,  -136,  -680,   399, -1310,
+     364, -1310,   400, -1052, -1310, -1310,   143, -1310, -1280, -1058,
+     249, -1310, -1310, -1310, -1310,    74, -1199, -1310, -1310, -1310,
+   -1310, -1310, -1310,   317, -1213,    36, -1310,  -398, -1310,   501,
+     296, -1310,   175, -1310,  -322, -1310, -1310, -1310,   558,  -827,
+   -1310, -1310,    14,  -963,    60,  1949, -1310, -1310, -1310,   -66,
+   -1310,    19,  1219,  -202,  1852,  4238, -1310, -1310,    54,    75,
+     689,  -242,  1416, -1310,  1975, -1310, -1310,   158,  2131, -1310,
+    2701,  1038, -1310, -1310, -1310,  -621, -1310,   944,   946,   541,
+     713,  -254, -1310, -1310, -1310,   938,   714,  -169, -1310,  -117,
+    -134,  1167, -1310, -1310,  -857,  -878,   837,   910,  1055,    25,
+   -1310,   900,   597,   -39,  -190,  -145,   668,   773, -1310,   993,
+   -1310,  2728,  1561,  -434,   920, -1310, -1310,   708, -1310,  -238,
+   -1310,   241, -1310, -1310, -1310, -1226,   414, -1310, -1310, -1310,
+    1165, -1310,    35, -1310, -1310,  -830,  -111, -1309,  -151,  3288,
+   -1310,  3069, -1310,   921, -1310,  -170,   169,  -182,  -181,  -166,
+       7,   -35,   -33,   -32,   813,     2,    29,    44,  -122,  -165,
+    -164,  -158,  -153,  -314,  -519,  -491,  -490,  -538,  -301,  -501,
+   -1310, -1310,  -512,  1078,  1084,  1085,  2540,  5063,  -571,  -588,
+    -558,  -543,  -557, -1310,  -503,  -733,  -723,  -722,  -570,  -311,
+    -274, -1310, -1310,   240,   176,   -77, -1310,  3991,   136,  -632,
+    -222
 };
 
@@ -1785,757 +1785,739 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -526
+#define YYTABLE_NINF -521
 static const yytype_int16 yytable[] =
 {
-      50,   115,   151,   400,   401,   771,   402,    99,   152,   973,
-     403,   153,   429,   454,   874,   404,   756,   974,   408,  1080,
-     116,   975,   262,   441,   269,   405,   406,   744,   850,   384,
-     385,   605,    50,    51,  1142,   982,    70,   411,   833,    99,
-     610,   825,   826,   727,   149,   409,   499,   732,   154,  1150,
-      50,    31,  1398,   836,   155,  1462,   832,   163,   156,   843,
-     827,   800,   282,   145,   188,    51,  1208,   211,    70,   528,
-      50,   195,   343,   824,   218,   567,  1200,   228,    31,   597,
-     671,  -235,  -235,   400,   401,  1184,   402,   926,   821,   221,
-     403,  1318,   170,   822,   168,   404,   520,   737,   408,  1194,
-     680,  1217,  1218,   823,   738,   405,   406,   115,   684,   426,
-     568,   476,   478,  1550,    31,   115,   171,   124,   268,   273,
-     283,   254,   217,   412,    31,   409,  1209,   410,   715,  1462,
-    1210,  1182,  1183,  1561,    31,  1419,  1420,    31,   629,   244,
-    1565,   955,   633,   865,   866,   151,   675,   677,   308,   149,
-     412,   152,  -235,  1079,   153,  1481,   163,   115,   346,   168,
-    1319,   884,   211,   863,   863,   863,    64,   472,   973,   374,
-     722,   204,   477,    31,   217,   528,   974,    57,   117,  1260,
-     975,   853,   863,   920,   420,   854,   412,   188,   188,  1212,
-    1211,   154,   328,   578,   482,   163,   412,   155,    64,   579,
-      78,   156,   528,   268,   834,  1421,   602,   821,   528,    57,
-     956,    50,   822,   669,   731,  1190,   716,   217,   163,   938,
-     293,   205,   823,   211,    71,   151,   179,   674,   676,  1127,
-     444,   152,    78,   746,   153,  1213,  1087,   666,  -113,  -113,
-     863,   308,  1191,   841,   212,   602,  1263,   222,   580,   958,
-     412,   125,   216,    50,  -113,   437,    71,   589,   825,   826,
-      99,   273,   144,  1466,   667,  1026,   273,   268,   268,   836,
-     118,  1152,   506,   115,  1264,   163,   263,   827,   217,   264,
-     864,   864,   864,  1025,   464,   328,    51,   343,  1001,    70,
-    1013,   214,  1184,   610,   108,   108,   308,  1103,   804,   864,
-    1090,   146,  1343,   658,   216,   821,   113,   520,   308,   378,
-     822,   666,   520,   148,  1004,   520,   217,   437,   725,   161,
-     823,   217,  1199,  1508,   572,   379,   108,   477,   472,   149,
-    1200,   673,  1419,  1420,   448,   863,   374,   678,   667,   855,
-    -470,   157,   115,   856,   905,  1184,   346,   216,   472,   569,
-     603,   621,   168,   461,   597,   528,   472,   864,  1537,   597,
-    1539,  1466,  1080,   810,   108,   626,  1466,   388,   793,   626,
-     930,  -470,   115,  -470,  1492,   833,   260,  -470,  -113,   825,
-     826,   685,  1401,   389,   161,  1405,  1466,   579,   440,  1128,
-     599,  1182,  1183,  1466,   715,  1551,  1129,   268,   827,  -113,
-     442,  1191,  1430,   557,   558,   859,   217,   188,   216,     8,
-       9,    10,    11,    12,   374,   173,   850,   324,   183,    64,
-      43,   252,  1566,   876,   473,   268,   340,   308,   308,  1247,
-      57,   268,   837,  1251,   626,   571,   840,   412,    31,   559,
-     560,   343,   484,   391,    46,    47,   216,   443,   494,   501,
-     495,   216,   864,    78,   877,   115,   644,   857,    78,   392,
-     878,   860,   393,  1451,  1452,  1214,    34,  1170,  1172,  1184,
-    1138,   328,   328,   268,   203,   855,   431,    71,   394,  1110,
-     435,   268,   716,   626,   395,    50,   929,   217,   374,   721,
-    1200,   112,    99,    98,   736,   115,  1079,  1200,  1114,   499,
-     396,   249,    41,    42,  1148,  1259,   888,   308,   875,   115,
-     324,  1024,   308,  -291,   308,   308,  1457,   179,    51,   917,
-     610,    70,   754,  -521,   921,    98,   115,   346,  1341,   217,
-     763,   583,   923,   412,   630,  1342,   216,   150,   634,   328,
-     922,   112,   435,    98,  1026,   489,   919,   108,   924,    43,
-    1200,  -106,    41,    42,   921,  -106,   715,   191,   328,   466,
-      98,  1521,   886,    98,   753,   522,   412,  1526,   923,   254,
-    1091,   572,   572,    46,    47,   214,  1381,   161,   265,   308,
-     769,   995,  1006,    43,  1092,   473,  1094,   810,  1546,  1138,
-     626,   346,   472,  1553,   920,   621,  1197,  1097,   939,  1097,
-     602,   603,   331,   603,  1197,   473,  1332,    46,    47,   332,
-     706,   588,  1198,   473,  1334,   594,   707,   216,   935,    78,
-    1324,   626,  1333,   328,   751,  1024,   626,   812,   621,  1367,
-    1335,  1126,   626,  1368,   627,   626,   626,   626,   631,    78,
-    1382,   340,    98,   889,   716,   412,  -113,    78,  -113,   713,
-     217,    64,  -113,   -10,   626,    98,   268,   895,  1039,   216,
-     723,   112,    57,   343,  -444,   851,   724,  -113,  -113,  1037,
-     599,   733,    41,    42,   165,  1181,   810,   734,   217,  1029,
-     399,   191,   288,   217,  -445,    78,   115,   254,   330,   914,
-    1084,   553,   554,    41,    42,   750,   324,   324,   214,   231,
-    1348,   751,   929,   232,    98,   892,   236,   412,   238,    71,
-    1379,   550,   626,   940,   621,   247,    98,   551,   552,   515,
-     721,   721,  1122,  1154,   689,   412,   278,   959,   400,   401,
-     280,   402,  1044,   555,   556,   403,  1498,   118,   281,   165,
-     404,   333,   597,  1498,   408,   334,    98,   929,   115,   346,
-     405,   406,   335,   754,   754,   217,   112,   336,   141,   142,
-     480,   372,   489,   112,   324,   373,   489,    41,    42,   217,
-     377,   409,  1111,   113,    41,    42,   522,   112,   522,   108,
-     216,   522,   386,   324,   522,  1151,   973,  1429,    41,    42,
-     852,  1392,   994,   991,   974,   340,  1547,   899,   975,   572,
-    1249,   390,  1350,   751,   715,   398,   867,   626,   216,   626,
-     901,  1009,   410,   216,   626,   346,   751,   990,   603,   743,
-     427,   883,    98,   991,   739,   343,   740,  1003,  1174,   741,
-     603,   428,   747,   707,   764,   436,  1039,   743,   433,   770,
-     743,   451,   231,   604,   529,   530,   531,   443,   324,   473,
-     112,   812,   141,   142,  1245,   781,   782,   783,   784,   808,
-     579,    41,    42,  1292,  1293,  1375,   217,  1166,   532,   412,
-     533,   751,   534,   535,  1500,   473,  1501,  -368,  1376,  -397,
-    1378,   308,   462,    78,   751,   216,   751,  1383,   466,   870,
-     849,   505,   716,   751,  1169,   594,   602,   436,   463,   216,
-     191,   858,   501,   626,  1195,   704,  1171,   810,   602,    78,
-     115,   346,   914,  1447,   914,   713,   929,    70,   485,  1444,
-     524,  1467,  1514,  1571,   214,   666,   115,   751,  1515,   579,
-     917,  1548,   165,   293,  1256,  1370,   412,   509,   214,   940,
-     940,   529,   530,   531,   721,   254,   330,   412,   514,   115,
-     308,   528,   667,   561,   562,   689,   526,   919,    49,   114,
-     885,   563,   887,   751,   996,   532,   346,   533,  1115,   534,
-    1321,   716,   565,    37,   330,   412,   754,    40,    98,   929,
-     929,   231,   604,   236,    41,    42,   564,   114,   114,   705,
-      49,  1388,  1389,   489,   328,    43,   216,  1439,   991,  1533,
-    1444,  1445,    49,  1300,  1301,   566,  1303,   569,    49,   346,
-      44,   339,   934,  1308,  -441,  1310,    49,   340,   587,    46,
-      47,   694,    49,  1240,   590,    49,  1493,  1494,    49,    -3,
-     626,   626,   420,   662,   412,   214,     2,   208,     4,     5,
-       6,     7,   114,   114,   482,   330,   412,    64,   639,  1138,
-     308,  1419,  1420,   851,   834,   330,   602,   659,    57,     8,
-       9,    10,    11,    12,   777,   778,    49,   217,   668,    49,
-     143,   231,   660,   661,  1446,   663,    49,   713,  1005,   693,
-     664,    78,   665,   808,   779,   780,  1202,   670,    31,   259,
-     115,   697,  1459,   695,   820,   914,   604,  1311,  1312,  1313,
-     914,    35,   699,    36,  -239,    71,   735,    49,   748,   940,
-     785,   786,   704,   752,   959,    49,    34,   268,   959,   959,
-      49,  1349,  1351,  1352,   243,   246,  1116,   760,   813,   -12,
-     814,   524,   817,   524,   626,   343,   524,   828,   -13,   524,
-    -292,   872,   873,    43,   880,    49,    49,     8,     9,    10,
-      11,    12,   900,   902,   724,   907,   903,   910,   571,   346,
-     412,    49,   928,  -418,    -3,  1519,  1459,    46,    47,    49,
-    -525,   943,   808,   950,   964,   108,    31,  1425,    49,   340,
-     952,    49,   918,   957,   963,   965,   967,   968,   114,   969,
-     929,   970,   986,   998,   999,   689,   705,   216,  1000,  1015,
-    1016,   273,   115,   114,    34,  1017,  1018,   114,   929,  1019,
-    1020,    49,   114,   820,   604,  1021,   473,   489,  1117,   324,
-     115,   221,  1032,  -406,   308,    49,    49,    57,  -405,    37,
-    1081,  1046,    49,    40,  1083,   704,   443,  1339,   626,    49,
-      41,    42,   115,   108,   913,   704,   112,  1105,   141,   240,
-      78,    43,   112,  1104,   141,   142,   217,    41,    42,   704,
-      70,  1115,  1106,    41,    42,  1107,   818,   751,   602,  1131,
-    1113,  1123,  1124,  1125,    71,    46,    47,  1134,   849,  1130,
-     980,   929,   929,   241,  1140,   458,  1135,    49,   242,   728,
-     626,   626,  1136,  1144,   729,  1137,   743,  1164,  1144,   273,
-    1143,  1187,  1185,  1442,   308,  1186,  -293,    49,    49,  1188,
-     693,   820,  1559,     8,     9,    10,    11,    12,  1189,   705,
-    1203,  1204,  1206,   604,    49,   713,  1207,  1399,    49,   705,
-    1215,  1399,  1219,    -3,  1220,  1222,  1227,   115,  1232,   645,
-    1202,  1237,    31,   705,   108,  1235,   400,   401,  1144,   402,
-    1241,  1246,   494,   403,   217,    49,  1115,  1248,   404,   689,
-    1253,   408,  1254,  1261,  1250,    49,  1268,  1270,   405,   406,
-      34,     2,   208,     4,     5,     6,     7,  1265,   212,   222,
-    1272,  1273,  1302,    49,  1274,   666,   216,  1275,   409,    49,
-      64,    49,  1276,  1278,  1285,  1305,  1294,   268,  1295,  1306,
-     230,    57,  1323,   808,   713,  1093,   131,   918,   132,   133,
-     134,  1532,   667,  1307,  1330,   626,  1336,    41,    42,  1116,
-    1309,   646,  1317,  1338,    78,   214,   114,  1340,  1344,  1346,
-    1347,    49,  1353,  1482,  1354,   175,    35,   604,    36,    49,
-     115,  1355,  1357,    49,  1363,  1364,  1365,    49,    71,  1366,
-     114,  1377,   114,  1068,    37,  1373,   176,   177,    40,  1115,
-    1374,  1384,  1385,  1313,   115,    41,    42,   704,   704,  1393,
-     473,   115,   645,   115,  1394,   115,   442,  1395,   255,  1402,
-    1413,    57,  1405,  1414,   216,  -407,  1417,   114,   151,   340,
-     645,   373,   114,   645,   152,  1428,   108,   153,  1432,  1436,
-    1202,  1434,  1437,  1443,    78,  1531,  1448,  1202,  1438,  1453,
-     115,  1117,   115,  1368,  1116,  1458,  1454,  1455,   108,  1456,
-    1472,  1463,  1474,   443,   115,   704,   704,  1468,    71,  1476,
-    1531,  1531,   726,  1470,   730,  -294,   108,  1478,   163,  1485,
-     308,   114,     8,     9,    10,    11,    12,  1480,    49,  1486,
-     693,   705,   705,  1487,    37,  1531,  1488,    76,    40,    49,
-    1202,    49,   374,   511,  1441,    41,    42,  1499,  1144,  1144,
-    1144,    31,  1509,  1511,   418,  1513,    43,  1517,  1518,  1525,
-      49,  1540,  1541,  1545,   328,   548,   549,  1554,   918,    76,
-    1552,   720,   112,   918,   141,   142,    49,   438,   108,    34,
-      46,    47,   114,    41,    42,  1556,  1117,   446,  1562,   705,
-     705,    49,  1569,   114,    49,   114,  1570,  1116,  1221,   789,
-     787,  1322,  1520,   548,   788,  1205,   743,   224,   790,  1431,
-     473,   108,   791,  1572,   245,  1387,  1252,   473,  1403,  1226,
-    1502,    57,   908,   909,  1098,  1234,  1102,    49,    57,   931,
-     806,   114,  1139,   114,  1045,   879,   945,   114,  1112,   548,
-     164,   953,  1331,   718,    78,   114,     0,   126,   129,   130,
-       0,    78,   796,   797,   196,   521,  1328,   219,    49,    49,
-     229,   798,     0,     0,   871,     0,     0,     0,    71,     0,
-     473,     0,    49,     0,     0,    71,    37,     0,   176,   177,
-      40,    57,     0,   178,     0,    67,   119,    41,    42,  1117,
-       0,   704,  1144,  1144,   693,   354,     0,     0,     0,   704,
-     704,   704,     0,     0,    78,     2,   208,     4,     5,     6,
-       7,     0,     0,   925,   108,   927,     0,    67,     0,   458,
-       0,   256,  1505,   257,  1505,     0,     0,     0,    71,     0,
-    1483,     0,     0,   178,     0,   162,   178,     0,   108,   164,
-    1329,   215,     0,     0,     0,   108,   414,     0,     0,     0,
-       0,   234,   375,   422,     0,   223,    49,     0,     0,  1505,
-       0,  1505,     0,     0,     0,   704,     0,     0,    49,   450,
-      35,     0,    36,     0,     0,   705,  1068,     0,   164,     0,
-       0,     0,   178,   705,   705,   705,     0,     0,     0,   324,
-      76,  1534,   261,   215,     0,    76,     0,     0,   108,     0,
-    1542,   164,     0,   682,   397,     0,     0,   774,   775,   776,
-       0,   645,     0,   445,   416,   417,     0,     0,   114,   421,
-       0,   423,   424,     0,     0,   414,     0,     0,    37,   708,
-     176,   177,    40,     0,   329,     0,   215,     0,     0,    41,
-      42,    49,   261,   351,     0,   178,     0,     0,     0,   705,
-      49,     0,    49,     0,     0,     0,     0,     0,    37,   114,
-     185,   186,    40,     0,     0,   377,   521,     0,     0,    41,
-      42,   521,  1391,   407,   521,     0,     0,     0,     0,   577,
-      43,     0,    49,     0,     0,     0,     0,   581,   425,   224,
-     584,   430,   432,   646,     0,   187,   162,   215,     0,   178,
-    1049,     0,   114,     0,    46,    47,   178,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   449,   645,   375,
-       0,   452,     0,   453,     0,     0,   114,  1418,     0,   645,
-    1426,   114,   460,     0,     0,   215,     0,     0,    67,     0,
-     215,  1099,     0,   474,     0,     0,     0,     0,   898,     0,
-       0,     0,     0,   481,   414,   500,    76,     0,   422,     0,
-       0,   432,     0,     0,     8,     9,    10,    11,    12,     0,
-       0,   354,     0,     0,   178,  1465,    76,     0,     0,     0,
-    1469,   114,     0,     0,    76,     8,     9,    10,    11,    12,
-       0,   178,     0,    31,     0,   178,     0,   375,     0,     0,
-     646,     0,   354,   480,     0,     0,     0,     0,     0,     0,
-    1491,     0,     0,     0,    31,     0,     0,   981,     0,   114,
-     354,    34,    76,     0,     0,   215,     0,   261,     0,     0,
-     897,   595,     0,    49,     0,   414,     0,   623,    49,   904,
-       0,     0,    34,   906,     0,     0,     0,     0,    43,     0,
-     628,     0,     0,     0,   628,    49,     0,   261,   178,     0,
-       0,     0,     0,   753,   354,   412,     0,     0,     0,    43,
-       0,   997,    46,    47,     0,     0,     0,  1506,     0,  1506,
-       0,  1002,     0,     0,   939,     0,   602,     0,     0,     0,
-       0,     0,     0,    46,    47,  1014,  1560,     0,     0,     0,
-       0,  1049,  1560,     0,   474,     0,   215,     0,     0,     0,
-       0,     0,     0,  1560,  1506,     0,  1506,  1560,    37,   351,
-     185,   186,    40,   215,   474,     0,   577,   577,   354,    41,
-      42,     0,   474,     0,    37,   114,   185,   186,    40,     0,
-      43,     0,     0,    79,     0,    41,    42,     0,   215,     0,
-     700,     0,     0,   432,     0,   912,    43,   412,    49,     0,
-       0,     0,     0,   913,    46,    47,     0,     0,   714,     0,
-      67,   267,   354,   354,   354,    79,     0,     0,   432,     0,
-      46,    47,   432,     0,     0,     0,     0,     0,     0,     0,
-       0,   354,     0,     0,     0,     0,   801,   802,     0,     0,
-       0,   114,   114,   114,     0,     0,     0,     0,     0,   354,
-       0,   261,   351,   225,   890,   178,     0,  1298,   893,     0,
-      76,     0,     0,     0,     0,   835,     0,     0,   838,   839,
-       0,   842,     0,   844,   845,     0,     0,     0,   846,   847,
-       0,     0,     0,     0,     0,     0,    76,   178,     0,   354,
-       0,     0,     0,     0,     0,     0,     0,   799,    81,   645,
-       0,     0,     0,   178,  1089,     0,   548,     0,     0,   215,
-       0,     0,     0,     0,     0,   628,   811,     0,   178,     0,
-       0,     0,     0,    58,    58,     0,   354,     0,   830,     0,
-      81,     0,     0,     0,     0,     0,     0,   215,     0,     0,
-       0,   356,   215,  1179,  1180,     0,   595,   511,     0,     0,
-       0,   595,     0,     0,     0,    58,     0,   628,     0,     0,
-     351,   351,   351,     0,     0,     0,     0,     0,   226,     0,
-       0,     0,   354,     0,    49,    49,     0,     0,     0,   351,
-       0,     0,   354,     0,   354,   114,   114,     0,     0,   224,
-      58,     0,   354,    58,   577,     0,   354,   700,     0,   178,
-       0,  1229,  1230,     0,     0,     0,     0,     0,   474,     0,
-       0,     0,     0,     0,   215,     0,     0,     0,     0,   978,
-     979,     0,     0,   114,     0,     0,     0,     0,   215,     0,
-       0,     0,     0,     0,   474,     0,    79,   351,     0,     0,
-       0,    79,     0,     0,     0,     0,   944,     0,   500,   432,
-      37,     0,   185,   186,    40,     0,   357,     0,    76,     0,
-    1216,    41,    42,     0,    37,     0,   185,   186,    40,     0,
-       0,     0,    43,   261,   714,    41,    42,     0,     0,   976,
-       0,   349,     0,    49,   114,     0,    43,   601,   354,   602,
-       0,     0,     0,   114,     0,     0,    46,    47,     0,     0,
-       0,   912,     0,   412,     0,     0,     0,     0,    49,    49,
-      46,    47,     0,   414,     0,     0,     0,     0,     0,     0,
-     700,     0,     0,     0,     0,   215,     0,     0,     0,     0,
-     700,     0,   351,    49,   628,   225,     0,  1012,     0,   628,
-     811,     0,     0,   354,   700,     0,    58,     0,     0,     0,
-       0,    81,     0,     0,  1023,     0,    81,   536,   537,   538,
-     539,   540,   541,   542,   543,   544,   545,     0,   178,     0,
-       0,     0,     0,     0,     0,     0,    58,    37,     0,   185,
-     186,    40,     0,     0,  1100,     0,     0,  1356,    41,    42,
-       0,   546,     0,  1155,     0,  1358,  1359,  1360,     0,    43,
-       0,     0,    79,     0,   354,   354,    67,   354,   354,     0,
-    1167,     0,     0,     0,  1530,     0,   412,   356,     0,     0,
-       0,     0,    79,    46,    47,     0,     0,    76,   628,     0,
-      79,     0,     0,     0,     0,   261,   714,     0,     0,  1095,
-       0,     8,     9,    10,    11,    12,     0,     0,   356,     0,
-     226,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1406,   354,   354,     0,  1109,   356,     0,    79,     0,
-      31,     0,     0,   432,   119,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   414,     0,
-       0,   351,     0,     0,     0,     0,     0,     0,    34,     0,
-       0,     0,     0,    37,     0,   185,   186,    40,     0,     0,
-     356,     0,  1386,     0,    41,    42,     0,    81,     0,     0,
-       0,     0,     0,     0,     0,    43,   215,     0,     0,     0,
-    1257,     0,   357,     0,   595,     0,   354,    81,     0,     0,
-     601,     0,   602,     0,     0,    81,     0,   430,  1231,    46,
-      47,     0,   700,   700,     0,   351,   351,   349,     0,     0,
-       0,     0,     0,   357,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   356,  1201,     0,     0,     0,   224,
-       0,   357,     0,    81,     0,     0,     0,     0,     0,     0,
+      49,   114,   453,   428,   399,   400,   268,    98,   150,   766,
+     151,   152,   819,   973,   868,   115,   964,   407,   752,    63,
+     401,   402,   403,   358,   383,   384,   965,   966,   404,   261,
+     440,   827,    49,   405,   596,   604,    50,   410,   498,    98,
+     357,   740,   820,   148,  1070,   153,   830,  1069,   609,    49,
+     844,    63,   837,   948,    69,  1137,   162,   821,   725,   794,
+      56,   116,   730,   187,   826,   408,   210,   144,    50,    49,
+     194,   919,   154,   217,   409,    70,   227,  1187,    31,   342,
+     112,   815,   178,   220,   399,   400,    69,   155,   281,  1439,
+     628,   425,    56,  1302,   632,  1379,   669,   407,   123,   818,
+     401,   402,   403,  1204,  1205,  1181,   114,    70,   404,   816,
+     817,   475,   477,   405,   114,  1195,   678,   267,   272,   476,
+     505,  1197,  1443,  1177,   682,    31,   211,   923,    31,   221,
+     203,   124,   262,    31,    31,   263,   566,    31,   527,   493,
+      31,   213,   494,  1171,   527,   408,   282,   307,   148,  1178,
+     411,   150,   145,   151,   152,   162,   114,   345,    77,   519,
+    1439,   210,  1303,  1169,  1170,  1117,  -231,  -231,   373,    97,
+     567,   714,   964,   143,   720,  1196,   107,   107,  1199,  1245,
+     204,  1198,   965,   966,   913,   167,   187,   187,   153,   476,
+      77,   471,   949,  1458,   162,   253,   147,   411,   419,   815,
+     411,    97,   267,   481,   828,   411,   601,   835,   107,   601,
+      49,   568,   149,  1186,   287,   154,  1443,   162,    97,   527,
+     667,  1443,   210,  1200,   819,    41,    42,   816,   817,   443,
+     155,   150,   190,   151,   152,    97,   664,  -231,    97,  1484,
+     307,  1443,  1248,  1139,   439,   107,   156,  1077,  1443,   292,
+     167,   514,    49,  1016,   820,   182,   169,   830,   172,    98,
+     272,  1398,  1399,   202,   588,   272,   267,   267,   723,   821,
+    1249,    63,   114,  1512,   162,  1514,   472,   527,   951,  1080,
+     170,   991,   441,   327,   665,   656,  1015,   463,    50,   164,
+     672,   674,  1093,   815,   342,   307,  -287,   442,   483,   358,
+    1468,   609,  1526,   248,  1382,   500,    69,   307,   251,   596,
+     664,  1003,    56,   671,   596,   804,   357,    97,  -119,   676,
+    -119,   816,   817,   571,  -119,  1187,  1178,    70,   148,  1541,
+      97,  1400,   465,  1398,  1399,   373,  -516,   527,  1084,  -119,
+    -119,   114,   734,  1118,   819,   345,   436,  1171,   713,   602,
+     620,   579,   471,   411,   164,   398,   190,   853,   665,   898,
+     253,   377,   827,  1119,   625,   735,   556,   557,   625,  1201,
+     519,   114,   471,   178,   820,   519,   327,   378,   519,    97,
+     471,  1070,   831,  1116,  1069,   736,   834,   673,   675,   821,
+     629,    97,   358,   111,   633,   847,   267,  1171,   747,   848,
+     510,   558,   559,  1409,    41,    42,   187,   851,   436,   357,
+      77,   854,   986,   373,  1496,    77,  1325,  1169,  1170,   174,
+    1501,    97,   547,   548,   267,   213,   307,   307,   107,   844,
+     267,   787,   759,   625,   714,   479,  1326,   472,   849,  1423,
+    1521,   577,   850,   167,   870,  1528,   642,   578,   342,  1525,
+     435,  1157,  1159,  1424,   114,   729,   358,   472,  1428,  1429,
+     547,  1362,   254,   871,  1126,   472,   859,   860,   264,  1536,
+     447,   849,   267,   357,   742,  1100,  1540,   387,  1187,   330,
+     267,   598,   625,   877,    49,  1187,  1469,   373,   719,   460,
+     498,    98,   683,   388,   114,  1244,   547,    97,   578,   390,
+    1470,   711,   869,    63,   888,   881,   307,  1104,   114,  1135,
+    1014,   307,   435,   307,   307,   391,  1171,   910,   603,   -10,
+      50,   750,  -440,   609,   392,   114,   345,  -441,  1016,   996,
+     582,  -467,   411,  -467,   804,   523,  1187,  1434,    69,   798,
+     393,   931,   277,   879,    56,   394,   112,   164,   213,  1236,
+    -467,     2,   207,     4,     5,     6,     7,   914,   417,    70,
+     704,   395,   327,   327,   916,   912,   705,   914,   916,  1184,
+     571,   571,  1184,   915,   952,   190,    77,   279,   307,  1316,
+     917,   437,  1126,  1081,  1082,  1185,   280,   913,  1308,   625,
+     345,   445,   549,   714,   620,  1317,    77,  1318,   550,   551,
+     602,   747,   602,   882,    77,   411,   331,   760,  1360,  1276,
+    1277,   713,   765,  1319,  1474,   471,    35,  1363,    36,   332,
+     625,  1474,   804,  1014,  1019,   625,   111,   620,   140,   239,
+     327,   625,   994,   333,   625,   625,   625,    41,    42,   111,
+     334,   928,    77,  -102,   806,   335,   846,  -102,   371,   327,
+      41,    42,   625,    97,   267,   372,  1087,   603,  1087,   520,
+     107,   465,   861,   240,   768,   769,   770,   342,   241,  1348,
+     376,  1027,  1522,  1349,   111,   358,   876,   385,   111,    -3,
+     140,   141,  1408,   389,   114,    41,    42,   907,   596,    41,
+      42,  1074,   357,   885,   691,   411,   111,   442,   140,   141,
+     472,   528,   529,   530,  1141,  1112,   411,    41,    42,   397,
+     625,   933,   620,   764,   327,   726,  1101,  1234,   719,   719,
+     727,  1238,  1034,   399,   400,   531,   472,   532,   409,   533,
+     534,  1153,   878,   411,   880,   432,   721,   407,   244,   401,
+     402,   403,   722,   426,   114,   345,   523,   404,   523,   750,
+     750,   523,   405,  1156,   523,   601,   845,   500,  1158,   230,
+     601,   598,   427,   231,   711,  1476,   235,  1477,   237,   814,
+     713,   603,   964,   213,   450,   246,   775,   776,   777,   778,
+    1373,  -288,   965,   966,   927,   408,  -364,   213,     8,     9,
+      10,    11,    12,   571,     2,   207,     4,     5,     6,     7,
+     731,   625,  1241,   625,   411,   999,   732,   680,   625,   345,
+    1161,  -393,   602,   570,  1425,   411,   111,    31,   140,   141,
+    1523,    45,    46,   229,   602,   111,   342,    41,    42,   484,
+    1436,   461,   746,   706,   462,   714,    41,    42,   747,    77,
+       8,     9,    10,    11,    12,    34,    37,   892,   804,   504,
+      40,   253,   329,   747,   292,   864,   911,    41,    42,    35,
+     894,    36,   163,   806,  1330,    77,   747,   980,   508,    31,
+     520,   972,   513,   981,   307,   520,   195,   525,   520,   218,
+     213,   527,   228,   812,   562,   601,  1168,   814,   603,   993,
+    1182,    45,    46,    63,   563,   705,   625,    34,   554,   555,
+    1494,  1436,   230,   114,   345,   907,   111,   907,     2,   207,
+       4,     5,     6,     7,   714,   664,  1232,    41,    42,   114,
+     910,   564,   578,   711,   691,  1356,   565,   749,    69,   411,
+     142,   747,   933,   933,    56,    45,    46,   719,   568,   570,
+      37,   411,   114,   307,    40,  1332,   338,    45,    46,    70,
+    -437,    41,    42,   952,  1357,   586,  1105,   952,   952,   589,
+     747,   163,   932,   665,   601,    48,   113,   750,   912,    -3,
+      45,    46,   657,    35,   374,    36,  1359,    43,  1508,   552,
+     553,   814,   747,   242,   245,    45,    46,   638,     8,     9,
+      10,    11,    12,   603,   113,   113,  1227,    48,  1364,   345,
+     163,   658,  1106,   659,   747,   560,   561,    37,    48,   184,
+     185,    40,   713,   111,    48,   140,   141,    31,    41,    42,
+     625,   625,    48,   163,    41,    42,   661,  1126,    48,   984,
+     981,    48,    77,   890,    48,   444,  1121,   253,   329,   411,
+     307,   230,   897,   235,   186,    34,   899,   662,   113,   113,
+     107,   666,    45,    46,  1284,  1285,    37,  1287,  1132,   472,
+      40,   663,  1132,  1426,  1292,  1444,  1294,    41,    42,  1423,
+     668,   747,    48,  1323,  1083,    48,   911,   442,  1490,   327,
+     114,   258,    48,   692,  1491,   907,  1546,   749,   693,   411,
+     907,   695,   578,   718,  1189,    45,    46,   329,   411,   933,
+      56,    45,    46,   737,   215,   738,   603,   267,   739,  1369,
+    1370,   743,  1132,    48,   547,    70,  1418,   981,   107,  1398,
+    1399,    48,   625,   771,   772,    37,    48,   184,   185,    40,
+     342,   230,   419,   660,   411,   845,    41,    42,   779,   780,
+    1351,   374,   773,   774,   457,   697,   345,  -235,   481,   329,
+     411,    48,    48,   733,   744,   510,   215,   748,   756,   691,
+    1380,   807,   266,   873,  1380,   711,   808,    48,   811,  -289,
+      45,    46,   828,   329,   601,    48,     8,     9,    10,    11,
+      12,  1295,  1296,  1297,    48,   822,   867,    48,   272,   114,
+    1331,  1333,  1334,   893,   113,   -12,   -13,   866,    77,   215,
+     895,   896,   900,   220,   903,    31,   921,   114,  -414,   113,
+    -520,   307,   936,   113,   943,   722,   107,    48,   113,   374,
+     117,   945,  1404,   956,   130,   625,   131,   132,   133,   114,
+      63,    48,    48,    34,   950,    41,    42,   957,    48,   958,
+     959,   960,   961,  1105,   711,    48,   988,   989,   211,   221,
+     990,   977,  1005,  1006,   911,  1007,  1008,  1009,  1010,   911,
+     215,  1459,  1079,   213,  1011,    69,  1022,  1421,   160,  -402,
+    -401,    56,  1036,  1058,   625,   625,  1071,  1534,  1094,   906,
+     644,  1073,  1096,   272,  1097,  1095,    70,  1103,   307,  1106,
+    1113,   747,  1114,    48,  1115,  1120,  1122,   971,   215,  1123,
+    1124,   702,  1125,   215,  1128,  1131,  1151,   472,  1174,  1175,
+    1172,  1173,  1176,    48,    48,     8,     9,    10,    11,    12,
+     691,   114,  1190,   399,   400,   259,  1191,  1132,  1132,  1132,
+      48,  1193,  1194,   160,    48,  1105,   407,  1202,  1206,   401,
+     402,   403,  1189,   441,    31,   643,  -290,   404,    56,  1207,
+    1209,    -3,   405,     8,     9,    10,    11,    12,   442,  1214,
+     664,    48,  1219,    70,  1224,   107,   323,   493,  1222,    77,
+    1507,    48,    34,  1228,   703,   339,  1233,   922,   267,  1235,
+    1237,  1106,    31,  1240,   408,  1250,  1246,   107,   215,    48,
+    1252,   724,  1254,   728,   625,    48,  1256,    48,  1257,  1258,
+    1262,  1259,  1420,  1260,  1269,   107,  1278,  1279,   665,    37,
+      34,   175,   176,    40,   932,  1203,   601,  1286,  1307,   114,
+      41,    42,    45,    46,    37,   430,   175,   176,    40,   434,
+    1289,  1290,   113,  1105,  1291,    41,    42,    48,  1293,  1301,
+    1314,   114,  1192,  1320,  1322,    48,    77,  1328,   114,    48,
+     114,  1324,   114,    48,  1329,  1358,   113,  1335,   113,   323,
+     472,   372,  1336,  1338,   107,  1132,  1132,   472,   985,   215,
+     150,  1344,   151,   152,  1345,  1346,  1347,  1297,  1365,  1106,
+    1354,  1506,   214,  1355,  1366,  1383,   114,  1374,   114,  1375,
+    1376,   434,   233,   113,   488,  1189,  1392,   107,   113,   114,
+    1393,    56,  1189,  1460,  -403,  1506,  1506,   702,    56,  1396,
+    1407,   215,  1415,   162,   521,   307,    70,  1411,   472,  1413,
+     528,   529,   530,    70,  1416,  1417,   160,  1422,  1430,    37,
+    1506,   175,   176,    40,   214,  1431,  1432,   373,  1433,  1435,
+      41,    42,   865,  1349,   531,  1029,   532,   113,   533,  1305,
+    1440,  1445,  1449,  1189,    48,  1451,  1447,  1453,  1455,    56,
+     587,  1509,  1457,  1462,   593,    48,   376,    48,  1463,  1464,
+    1517,  1475,  1492,  1485,    70,  1487,  1500,   214,  1493,  1489,
+     703,  1515,  1516,   626,  1520,  1527,    48,   630,   922,  1529,
+     339,   918,  1531,   920,  1544,   107,  1545,   457,  1208,    77,
+    1537,   783,    48,   781,  1130,   784,    77,   113,   782,   785,
+    1058,  1306,  1495,  1410,  1547,  1368,    48,   107,   113,    48,
+     113,  1239,  1384,  1478,   107,  1088,   702,   216,   901,  1213,
+     902,  1221,   215,   922,  1092,   924,   702,   800,   214,  1127,
+    1035,   872,   938,  1315,   243,   323,   323,  1102,   790,   716,
+     702,   327,    48,   946,   791,   792,   113,    77,   113,     0,
+     215,  1367,   113,     0,     0,   215,     0,     0,  1138,     0,
+     113,     0,     0,   687,   479,   107,   214,     0,     0,   216,
+       0,   214,     0,    48,    48,     0,   117,     0,     0,     0,
+    1482,     0,  1482,     0,     0,     0,   499,    48,     0,   703,
+       0,     0,     0,  1372,     0,     0,     0,     0,     0,   703,
+       0,   488,     0,   323,     0,   488,     0,     0,     0,  1029,
+       0,     0,   216,   703,     0,   521,  1482,   521,  1482,     0,
+     521,     0,   323,   521,     0,     0,   215,   177,     0,     8,
+       9,    10,    11,    12,   339,     0,     0,     0,     0,    37,
+     215,   184,   185,    40,     0,  1397,     0,     0,  1405,     0,
+      41,    42,     0,     0,     0,     0,   214,   644,    31,     0,
+       0,     0,     0,  1039,     0,     0,     0,    48,     0,     0,
+       0,     0,     0,   216,     0,     0,   905,   177,   411,    48,
+     177,     0,     0,     0,    45,    46,    34,   323,     0,   922,
+       0,  1442,     0,     0,     0,     0,  1446,   906,   802,     0,
+       0,     0,     0,  1479,  1089,  1483,     0,     0,     0,     0,
+       0,   216,     0,     0,     0,     0,   216,     0,     0,     0,
+       0,     0,   643,     0,  1467,     0,   177,   891,   113,   843,
+       0,     0,     0,   215,   593,     0,     0,   214,     0,  1511,
+     852,  1513,    66,   118,   702,   702,     0,     0,     0,   922,
+     922,    48,     0,     0,   214,     0,     0,     0,     0,     0,
+      48,   644,    48,     0,     0,     0,     0,     0,     0,   113,
+       0,     0,     0,     0,    66,     0,     0,     0,     0,   214,
+       0,     0,     0,  1542,     0,  1543,     0,     0,     0,   177,
+       0,   161,    48,   687,     0,     0,     0,     0,  1550,  1551,
+       0,   216,   702,   702,     0,     0,     0,     0,  1535,     0,
+       0,   222,   113,     0,  1535,     0,     0,   703,   703,     0,
+       0,     0,     0,     0,     0,  1535,   643,     0,     0,  1535,
+       0,   488,     0,     0,   113,     0,     0,     0,   113,    57,
+      57,     0,     0,   177,     0,     0,   987,     0,   260,     0,
+     177,     0,     0,   339,     0,     0,   992,     0,     0,     0,
+       0,  1039,     0,     0,     0,    75,     0,     0,     0,     0,
+    1004,    57,     0,     0,     0,   703,   703,     0,     0,     0,
+       0,     0,   216,     0,     0,     0,     0,     0,   113,     0,
+     328,     0,     0,     0,     0,     0,     0,    75,   260,   350,
+     214,     0,     0,     0,     0,    57,     0,     0,    57,     0,
+       0,     0,   995,     0,     0,     0,     0,   802,   177,     0,
+       0,     0,     0,     0,   216,     0,   113,     0,   214,   406,
+     215,     0,     0,   214,   223,   177,     0,     0,     0,   177,
+      48,     0,     0,     0,   424,    48,     0,   429,   431,     0,
+    1312,     0,   161,     0,   922,     0,     0,     0,     0,     0,
+       0,     0,    48,     0,     0,     0,     0,     0,     0,     0,
+     922,     0,     0,   448,  1282,     0,     0,   451,     0,   452,
+       0,     0,   702,     0,     0,     0,     0,     0,   459,     0,
+     702,   702,   702,     0,    66,     0,   348,     0,     0,   473,
+       0,     0,   177,     0,   214,   802,     0,     0,     0,   480,
+       0,     0,   339,     0,     0,     0,     0,   431,   214,     0,
+       0,    78,   353,  1313,     0,     0,     0,     0,   687,     0,
+       0,    37,     0,   184,   185,    40,     0,     0,   499,   113,
+     922,   922,    41,    42,     0,   216,     0,     0,     0,     0,
+     488,  1107,   323,    78,   702,   703,     0,     0,     0,     0,
+       0,    57,    48,   703,   703,   703,     0,     0,   600,     0,
+     601,     0,     0,   216,  1166,  1167,    45,    46,   216,     0,
+       0,     0,     0,   260,     0,     0,     0,   594,     0,     0,
+     224,    57,     0,   622,     0,     0,   449,     0,     0,     0,
+       0,     0,     0,   113,   113,   113,   627,     0,   843,     0,
+     627,   214,     0,   260,     0,     0,   215,    75,     0,     0,
+       0,     0,    75,     0,     0,     0,     0,   703,     0,     0,
+       0,     0,  1216,  1217,     0,     0,     0,     0,     0,     0,
+      37,     0,   184,   185,    40,     0,     0,     0,     0,   216,
+       0,    41,    42,    37,     0,   184,   185,    40,     0,   177,
+     473,     0,     0,   216,    41,    42,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   350,     0,   905,   355,   411,
+     473,     0,     0,     0,     0,    45,    46,     0,   473,   687,
+    1505,   177,   411,     0,     0,     0,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,   698,   177,     0,   431,
+       0,   215,     0,     0,     0,     0,   223,     0,     0,     0,
+       0,   177,     0,     0,   712,     0,    66,     0,     0,     0,
+       0,   802,    48,    48,   431,     0,     0,     0,   431,     0,
+       0,   113,   113,   535,   536,   537,   538,   539,   540,   541,
+     542,   543,   544,     0,     0,     0,   216,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   260,   350,     0,
+       0,     0,   348,    78,     0,     0,     0,   545,    78,   113,
+       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   353,     0,
+       0,     0,   177,    75,     0,     0,     0,     0,   214,     0,
+       0,    75,  1337,   793,     0,     0,   339,     0,     0,     0,
+    1339,  1340,  1341,    57,     0,     0,     0,     0,     0,   353,
+       0,   627,   805,     0,     0,     0,    48,   113,  1107,     0,
+       0,     0,     0,     0,   824,     0,   113,   353,     0,    75,
+       0,     0,     0,   283,   284,     0,   285,     0,     0,     0,
+      48,    48,   594,     0,     0,   348,     0,   594,     0,     0,
+       0,     0,   224,   627,     0,     0,   350,   350,   350,     0,
+       0,     0,   286,     0,  1385,    48,     0,     0,   287,     0,
+       0,   353,   288,     0,   350,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,   698,     0,     0,     8,     9,    10,    11,    12,
+       0,     0,     0,   473,     0,   295,     0,   379,     0,   348,
+    1107,     0,     0,    45,    46,   297,   298,   299,   300,    78,
+       0,     0,     0,     0,    31,     0,   786,     0,     0,   473,
+       0,     0,   350,   216,   355,   353,     0,     0,     0,    78,
+       0,   937,     0,     0,   431,     0,   177,    78,     0,     0,
+       0,     0,    34,   348,   348,   348,     0,    37,     0,   184,
+     185,    40,     0,     0,     0,   355,   260,   712,    41,    42,
+       0,   348,   967,     0,   214,     0,     0,     0,     0,   353,
+     353,   353,     0,   355,     0,    78,     0,     8,     9,    10,
+      11,    12,     0,     0,   600,     0,   601,   353,     0,     0,
+       0,     0,    45,    46,     0,     0,     0,     0,  1107,     0,
+       0,   698,     0,     0,     0,   353,    31,     0,     0,     0,
+       0,   698,     0,   350,     0,   627,    75,   355,  1002,   348,
+     627,   805,     0,     0,     0,   698,     0,     0,     0,  1481,
+       0,  1481,     0,     0,    34,  1013,     0,     0,     0,    37,
+       0,     0,    75,    40,     0,   353,     0,     0,     0,     0,
+      41,    42,     0,     0,     0,     0,     0,     0,     0,   214,
+       0,    80,     0,     0,     0,  1481,     0,  1481,     0,     0,
+       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
+     353,   355,     0,     0,    45,    46,    66,     0,    87,     0,
+     413,     0,     0,    80,   323,     0,     0,   421,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   627,   216,
+     348,     0,     0,     0,     0,   260,   712,     0,   348,  1085,
+      87,     0,     0,     0,   353,   355,   355,   355,     0,     0,
+     225,     0,     0,     0,   353,     0,   353,     0,     0,     0,
+       0,   223,     0,   355,   353,  1099,     0,     0,   353,     0,
+       0,     0,     0,   431,   118,     0,     0,   226,     0,     0,
+       0,   355,     0,     0,     0,     0,     0,     0,     0,   413,
+       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    57,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    78,     0,
+       0,   355,     0,     0,   216,     0,     0,     0,     0,    75,
+       0,   594,     0,     0,     0,     0,     0,     0,   356,     0,
+       0,     0,     0,   576,   429,     0,     0,     0,     0,   698,
+     698,   580,   350,   350,   583,     0,   355,     0,     0,   353,
+       0,     0,     0,     0,     0,   363,     0,   177,     0,     0,
+       0,    57,  1188,     0,     0,   206,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+     355,     0,    26,    27,    28,     0,     0,   698,   698,     0,
+     355,    31,   355,     0,     0,     0,     0,   224,   413,     0,
+     355,     0,   421,     0,   355,     0,     0,     0,     0,     0,
+       0,     0,     0,    80,     0,     0,     0,     0,    80,    34,
+       0,    35,     0,    36,    37,     0,   208,    39,    40,   348,
+     348,     0,     0,     0,   627,    41,    42,     0,     0,     0,
+      87,     0,     0,     0,     0,    87,     0,     0,     0,    57,
+       0,     0,   353,   353,     0,   353,   353,     0,   712,     0,
+       0,    43,     0,   209,     0,    78,     0,     0,     0,    45,
+      46,     0,     0,     0,     0,    75,     0,     0,     0,   413,
+       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
+       0,     0,     0,     0,     0,   355,     0,     0,     0,     0,
+       0,  1283,     0,     0,     0,     0,     0,     0,     0,     0,
+     353,   353,   225,     0,    31,     0,     0,   177,     0,   260,
+       0,     0,     0,    66,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   698,     0,   712,     0,   226,
+       0,   118,    34,     0,     0,     0,     0,    37,     0,   184,
+     185,    40,     0,     0,     0,   127,   127,   127,    41,    42,
+       0,     0,     0,     0,     0,     0,     0,   698,     0,     0,
+     576,   576,     0,     0,     0,   698,   698,   698,     0,    80,
+       0,   353,     0,     0,   186,     0,   350,   350,     0,     0,
+       0,     0,    45,    46,   356,     0,     0,    57,    57,    80,
+    1188,     0,     0,     0,     0,     0,    87,    80,   355,   355,
+       0,   355,   355,     0,     0,     0,     0,     0,     0,     0,
+      57,   363,     0,     0,   223,   356,    87,     0,   127,     0,
+     127,    78,     0,   118,    87,     0,     0,     0,    57,   698,
+       0,     0,     0,   356,     0,    80,    75,     0,     0,     0,
+       0,     0,   363,     0,     0,   276,     0,   883,   353,     0,
+     353,   886,     0,     0,     0,     0,   355,   355,     0,     0,
+     363,     0,    87,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   348,   348,     0,     0,   356,     0,     0,
+     353,     0,    57,     0,     0,     0,     0,    57,   353,   353,
+     353,     0,     0,     0,     0,     0,   350,     0,     0,   353,
+     353,   127,     0,     0,   363,     0,     0,     0,     0,   127,
+       0,   127,   127,    75,     0,     0,   127,     0,   127,   127,
+      57,   118,     0,   168,     0,   173,     0,   355,   179,   180,
+     181,     0,   183,     0,     0,     0,     0,     0,     0,     0,
+       0,   356,     0,  1188,     0,     0,     0,   234,     0,     0,
+    1188,     0,   353,     0,     0,     0,     0,     0,     0,   249,
+     250,     0,     0,     0,   125,   128,   129,     0,   363,     0,
+     224,     0,     0,     0,     0,     0,     8,     9,    10,    11,
+      12,     0,     0,   576,     0,   356,   356,   356,   127,     0,
+       0,     0,    78,   348,     0,     0,     0,     0,     0,     0,
+       0,  1188,     0,   356,   355,    31,   355,     0,  1530,     0,
+       0,     0,   363,   363,   363,     0,     0,     0,    57,   353,
+       0,   356,     0,     0,     0,     0,     0,     0,     0,     0,
+     363,     0,    80,    34,     0,     0,   355,   255,    37,   256,
+      57,     0,    40,     0,   355,   355,   355,    57,   363,    41,
+      42,     0,     0,     0,     0,   355,   355,     0,    80,    87,
+       0,   356,     0,     0,     0,     0,    75,     0,     0,    78,
+       0,     0,     0,    75,     0,   718,     0,     0,     0,     0,
+       0,     0,     0,    45,    46,    87,     0,     0,   363,     8,
+       9,    10,    11,    12,     0,     0,   356,     0,    57,     0,
+       0,   413,     0,     0,     0,     0,     0,     0,   355,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
+     396,     0,     0,   363,    75,     0,     0,     0,     0,     0,
+     415,   416,     0,     0,     0,   420,     0,   422,   423,     0,
+     356,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+     356,    37,   356,   184,   185,    40,     0,   225,     0,     0,
+     356,     0,    41,    42,   356,     0,     0,   363,     0,     8,
+       9,    10,    11,    12,     0,   355,     0,   363,  1142,   363,
+       0,     0,     0,     0,   226,     0,     0,   363,   905,     0,
+     411,   363,     0,     0,     0,  1154,    45,    46,    31,     0,
+       0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
+       0,     0,     0,     0,   591,     0,   599,     0,     0,     0,
+       0,     0,    78,     0,     0,    80,    34,   623,   624,    78,
+      31,    37,     0,   184,   185,    40,     0,     0,     0,     0,
+       0,     0,    41,    42,     0,     0,     0,     0,     0,     0,
+       0,     0,    87,     0,     0,   356,     0,     0,    34,     0,
+       0,     0,     0,    37,     0,   184,   185,    40,  1505,     0,
+     411,     0,     0,   413,    41,    42,    45,    46,     0,     0,
+      78,     0,   363,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   127,   127,     0,     0,     0,     0,     0,
+     266,     0,     0,     0,     0,     0,     0,     0,    45,    46,
+       0,     0,     0,  1242,     0,     0,     0,     0,     0,     0,
+       0,     0,   127,     0,     0,   127,   127,     0,   127,     0,
+     127,   127,     0,     0,     0,   127,   127,     1,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,  -291,     0,    26,    27,    28,    29,   356,   356,
+      30,   356,   356,    31,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    76,     0,     0,     0,     0,     0,     0,    58,     0,
-     700,   700,     0,   354,     0,   354,     0,     0,   356,   356,
-     356,     0,     0,     0,     0,   357,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   356,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   354,     0,
-     349,     0,     0,     0,    88,   356,   354,   354,   354,   628,
-       0,     0,     0,     0,     0,     0,    79,   354,   354,     0,
-       0,  1503,     0,  1507,     0,     0,     0,     0,     0,     0,
-    1320,    76,     0,     0,   714,   178,    88,     0,     0,   357,
-       0,     0,    79,     0,     0,   356,     0,     0,     0,     0,
-       8,     9,    10,    11,    12,     0,     0,     0,  1536,     0,
-    1538,     0,     0,     0,   349,   215,     0,     0,     0,     0,
-       0,     0,   354,     0,   227,     0,     0,  1299,     0,    31,
-       0,     0,   356,   357,   357,   357,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   261,     0,     0,     0,    67,
-       0,     0,   357,  1567,     0,  1568,     0,    34,   349,   349,
-     349,   700,    37,   714,   185,   186,    40,   119,  1575,  1576,
-     357,     0,     0,    41,    42,     0,     0,   349,   356,     0,
-       0,    81,     0,     0,    43,     0,     0,     0,   356,     0,
-     356,     0,   354,     0,     0,   225,   700,     0,   356,   912,
-       0,   412,   356,     0,   700,   700,   700,    81,    46,    47,
-     357,     0,   364,   215,     0,   351,   351,     0,     0,     0,
-       0,     0,     0,     0,     8,     9,    10,    11,    12,  1201,
-       0,     0,     0,     0,     0,   349,     0,     0,     0,     0,
-       0,    76,     0,     0,     0,     0,     0,   357,    76,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-       0,   178,   119,     0,    79,     0,     0,     0,     0,     0,
-     700,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    34,     0,     0,     0,     0,    37,     0,   185,   186,
-      40,     0,     0,   357,   356,     0,     0,    41,    42,     0,
-       0,    76,     0,   357,     0,   357,     0,    88,    43,     0,
-     226,     0,    88,   357,     0,     0,     0,   357,     0,     0,
-       0,     0,     0,  1530,     0,   412,     0,     0,     0,     0,
-     349,     0,    46,    47,     0,     0,     0,     0,   349,     0,
-     351,     0,     0,     0,     0,     0,     0,     0,     0,   356,
-       0,   169,     0,   174,     0,     0,   180,   181,   182,     0,
-     184,     0,     0,     0,     0,   119,     8,     9,    10,    11,
-      12,     0,     0,     0,     0,   235,     0,     0,     0,    81,
-       0,     0,     0,     0,     0,     0,     0,   250,   251,  1201,
-       0,     0,     0,     0,     0,    31,  1201,     8,     9,    10,
-      11,    12,     0,     0,    58,     0,   227,     0,     0,   357,
-     356,   356,     0,   356,   356,     0,     0,     0,     0,     0,
-       0,     0,     0,    34,     0,     0,    31,     0,    37,     0,
-     185,   186,    40,    79,     0,     0,     0,     0,     0,    41,
-      42,     0,     0,     0,     0,     0,     0,     0,     0,  1201,
-      43,     0,     0,     0,    34,     0,  1555,     0,     0,    37,
-       0,   185,   186,    40,   357,   187,     0,     0,   356,   356,
-      41,    42,    58,    88,    46,    47,     0,     0,     0,     0,
-       0,    43,     0,     8,     9,    10,    11,    12,   364,   349,
-       0,     0,     0,    88,     0,     0,   267,     0,     0,     0,
-       0,    88,     0,     0,     0,    46,    47,     0,     0,     0,
-       0,     0,    31,     0,     8,     9,    10,    11,    12,   364,
-       0,     0,     0,     0,     0,   357,   357,     0,   357,   357,
-       0,     0,     0,     0,     0,     0,     0,   364,     0,    88,
-      34,     0,   356,    31,     0,    37,     0,     0,    81,    40,
-       0,     0,     0,   349,   349,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,    34,     0,    58,     0,     0,    37,     0,     0,     0,
-      40,   364,    44,   357,   357,   225,     0,    41,    42,     0,
-       0,    46,    47,     0,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,    79,     0,     0,
-       0,     0,     0,   720,     0,     0,     0,     0,     0,   356,
-       0,   356,    46,    47,     8,     9,    10,    11,    12,    13,
+       0,    80,     0,     0,     0,   363,   363,     0,   363,   363,
+       0,    34,     0,    35,     0,    36,     0,     0,    38,    39,
+       0,     0,  -291,     0,     0,     0,  1012,     0,    87,     8,
+       9,    10,    11,    12,     0,     0,   356,   356,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    44,   283,   284,    31,   285,
+       0,    45,    46,   363,   363,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   127,   127,   286,    34,     0,     0,     0,
+       0,   287,     0,     0,     0,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,   356,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   795,   796,     0,     0,     0,     0,   295,     0,
+     379,     0,     0,     0,   363,     0,   344,    46,   297,   298,
+     299,   300,     0,     0,     0,     0,     0,     0,     0,     0,
+     225,   829,     0,     0,   832,   833,     0,   836,     0,   838,
+     839,     0,     0,     0,   840,   841,     0,     0,     0,     0,
+       0,     0,    80,     0,     0,     0,     0,   226,     0,   925,
+       0,   926,     0,     0,   356,     0,   356,     0,   929,   930,
+       0,     0,     0,   935,     0,     0,     0,     0,     0,    87,
+       0,     0,     0,     0,     0,   940,     0,     0,     0,     0,
+     944,   363,     0,   363,     0,     0,   356,     0,     0,     0,
+       0,     0,     0,     0,   356,   356,   356,     0,     0,     0,
+       0,     0,     0,     0,     0,   356,   356,     0,   978,     0,
+     127,     0,     0,   363,     0,   127,     0,     0,     0,    80,
+       0,   363,   363,   363,     0,     0,     0,     0,     0,     0,
+       0,     0,   363,   363,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    87,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   356,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     166,     0,   969,   970,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   363,     0,   219,     0,     0,
+    1162,     0,     0,     8,     9,    10,    11,    12,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1023,  1024,  1025,
+    1026,     0,  1028,     0,     0,     0,     0,     0,     0,     0,
+     283,   284,    31,   285,     0,   356,     0,  1072,     0,     0,
+       0,     0,     0,     0,     0,   166,     0,     0,     0,   273,
+       0,  1078,     0,     0,     0,     0,     0,     0,     0,   286,
+      34,     0,   363,     0,     0,   287,     0,     0,     0,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,   166,   293,
+     294,     0,    80,     0,     0,     0,   127,     0,   369,    80,
+       0,  1098,   375,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   295,     0,   379,     0,     0,     0,     0,    87,
+    1163,    46,   297,   298,   299,   300,    87,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,  1129,    26,    27,    28,
+      80,   166,  1136,     0,  1090,     0,    31,  1140,     0,     0,
+       0,     0,  1144,   219,  1145,     0,     0,     0,  1147,     0,
+    1148,  1149,     0,     0,  1152,     0,     0,    87,     0,     0,
+       0,   166,     0,  1164,    34,     0,     0,     0,     0,     0,
+       0,   208,    39,     0,     0,     0,     0,     0,     0,     0,
+       0,  1179,  1180,     0,     0,     0,   375,     0,     0,     0,
+       0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   127,     0,     0,  1210,     0,
+       0,  1212,     0,     0,    45,    46,   524,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   166,     0,
+       0,     0,     0,     0,   212,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   232,     0,   236,     0,   238,     0,
+       0,     0,     0,     0,  1226,   247,     0,     0,     0,     0,
+    1230,  1231,     0,     0,     0,     0,   597,     0,     0,     0,
+       0,   621,     0,     0,     0,     0,     0,     0,     0,     0,
+    1247,     0,     0,  1251,     0,     0,   212,  1253,   236,   238,
+     247,     0,     0,     0,     0,  1218,     0,     0,     0,     0,
+    1261,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1268,     0,  1270,  1271,  1272,  1273,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
+       0,  1280,     0,  1281,     0,     0,     0,   173,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   166,   166,     0,
+       0,     0,     0,     0,   369,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1309,  1310,     0,     0,
+       0,     0,     0,     0,     0,   524,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     212,     0,   236,   238,   247,     0,     0,     0,     0,     0,
+       0,     0,     0,   715,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   166,  1342,  1343,     0,     0,
+       0,     0,     0,     0,  1304,     0,  1353,   524,   212,   524,
+       0,     0,   524,   212,   166,   524,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   369,   497,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,   592,     0,   600,   364,     0,     0,     0,     0,
-       0,     0,     0,    31,   356,   624,   625,   357,     0,     0,
-       0,     0,   356,   356,   356,     0,     0,     0,     0,     0,
-       0,     0,     0,   356,   356,     0,     0,     0,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,    79,     0,   364,
-     364,   364,     0,     0,     0,     0,     0,     0,     0,     0,
-     226,     0,     0,     0,     0,     0,     0,     0,   364,     0,
-     284,   285,     0,   286,     0,     0,     0,     0,     0,     0,
-       0,     0,    81,     0,    58,    58,   364,     0,   356,     0,
-       0,     0,     0,     0,   357,     0,   357,    88,     0,   287,
-       0,     0,     0,     0,     0,   288,     0,    58,     0,   289,
-       0,     0,   290,   291,   292,   293,    41,    42,     0,   294,
-     295,     0,     0,    88,     0,    58,   364,    43,     0,   357,
-       0,     0,     0,     0,     0,     0,     0,   357,   357,   357,
-       0,     0,   296,     0,   380,     0,     0,   381,   357,   357,
-       0,    46,    47,   298,   299,   300,   301,     0,   356,     0,
-       0,     0,    81,   364,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   349,   349,     0,     0,     0,     0,     0,
-       0,     0,    58,     0,     0,     0,     0,    58,     0,     0,
+      24,    25,  -291,     0,    26,    27,    28,  1388,     0,  1389,
+    1390,  1391,     0,    31,     0,     0,   212,     0,     0,   166,
+       0,  1395,     0,     0,     0,     0,     0,     0,     0,     0,
+    1406,   369,     0,     0,     0,   810,     0,     0,   212,     0,
+       0,    34,     0,   236,   238,     0,    37,     0,   336,   337,
+      40,   247,  -291,     0,     0,  1427,     0,    41,    42,     0,
+       0,   597,     0,     0,   321,     0,   597,     0,     0,     0,
+       0,     0,     0,     0,   346,   369,   369,   369,     0,   157,
+       0,     0,     0,   634,     0,   338,   382,   382,     0,     0,
+       0,    45,    46,   369,   212,     0,     0,     0,  1465,  1466,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   357,     0,     0,     0,    79,     0,   364,
-       0,     0,     0,     0,    79,     0,     0,     0,     0,   364,
-      58,   364,     0,     0,     0,     0,   227,     0,     0,   364,
-       0,     0,     0,   364,     0,     8,     9,    10,    11,    12,
+       0,  1471,   212,     0,     0,     0,     0,   212,  1471,   212,
+     283,   284,     0,   285,     0,   524,     0,   252,     0,     0,
+       0,     0,     0,     0,     0,     0,   212,   257,     0,   212,
+     212,     0,     0,     0,     0,     0,     0,   212,     0,   286,
+    1504,   369,     0,   934,  1510,   287,     0,   321,     0,   288,
+       0,   212,   289,   290,   291,   292,    41,    42,   212,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   478,  1532,     0,  1533,     0,   715,     0,     0,     0,
+       0,     0,   295,   157,   379,     0,     0,   380,     0,     0,
+      45,    46,   297,   298,   299,   300,     0,   386,     0,     0,
+       0,     0,  1548,  1549,     0,     0,     0,     0,     0,     0,
+    1552,  1553,     0,     0,     0,     0,     0,     0,     0,     0,
+     418,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   369,     0,   433,     0,   621,     0,     0,     0,
+     369,     0,     0,   438,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   446,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   283,   284,     0,   285,     0,     0,
+       0,     0,   212,     0,     0,     0,     0,     0,   464,     0,
+       0,     0,     0,   474,     0,     0,     0,   382,     0,     0,
+       0,     0,     0,   286,     0,     0,   482,     0,     0,   287,
+     212,     0,   492,   288,   496,   212,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
+       0,   526,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   715,   295,     0,   379,     0,
+       0,     0,     0,   757,    45,    46,   297,   298,   299,   300,
+     524,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   585,     0,     0,     0,     0,   590,     0,
+       0,     0,     0,     0,   166,     0,   212,     0,     0,     0,
+       0,   709,     0,     0,     0,     0,     0,     0,     0,     0,
+     212,     0,     0,     0,     0,     0,     0,   635,     0,     0,
+       0,   636,   637,     0,   639,     0,     0,     0,     0,     0,
+     497,   650,   651,     0,   652,   653,     0,   654,     0,   655,
+     741,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     597,     0,     0,   758,     0,     0,   585,     0,   741,     0,
+       0,   741,     0,     0,   670,     0,     0,     0,     0,     0,
+       0,   369,   369,   767,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   681,
+       0,   212,     0,     0,     0,   788,     0,     0,     0,     0,
+       0,     0,     0,   212,     0,   797,     0,     0,     0,     0,
+       0,     0,   346,     0,     0,   707,     0,   758,     0,     0,
+       0,   710,   212,     0,     0,     0,   464,     0,     0,     0,
+       0,   524,     0,     0,     0,     0,   206,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,   745,    26,    27,    28,   862,     0,     0,     0,
+       0,     0,    31,     0,   382,     0,     0,   763,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   715,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,   208,    39,     0,
+       0,     0,     0,   283,   284,   789,   285,     0,     0,     0,
+       0,     0,     0,     0,   799,     0,     0,     0,     0,     0,
+       0,   801,     0,     0,     0,   212,     0,   809,     0,   219,
+       0,     0,   286,     0,   209,     0,   823,     0,   287,     0,
+      45,    46,   288,     0,     0,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,   212,     0,     0,     0,     0,
+       0,     0,   758,     0,   963,     0,   715,     0,     0,   341,
+     364,     0,     0,     0,   974,   295,   863,   379,     0,     0,
+     982,     0,     0,    45,    46,   297,   298,   299,   300,     0,
+     212,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   212,     0,   414,     0,     0,     0,     0,     0,     0,
+     414,     0,   809,     0,     0,   369,   369,     0,     0,     0,
+     904,     0,  1000,  1001,   219,     0,   346,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   507,
+     346,   509,   512,     0,     0,     0,     0,     0,     0,   515,
+     516,   252,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   941,   942,   509,   509,     0,     0,     0,     0,     0,
+       0,     0,     0,   212,     0,     0,     0,     0,     0,     0,
+    1031,     0,   414,     0,   382,     0,     0,   212,     0,     0,
+       0,     0,     0,     0,   979,     0,     0,     0,     0,   983,
+       0,   509,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,   346,    26,    27,    28,     0,     0,     0,     0,     0,
+       0,    31,   684,     0,     0,   369,   414,   509,     0,     0,
+       0,     0,     0,     0,   414,   581,     0,   414,   584,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   364,    34,
+     321,     0,   613,  1017,     0,     0,    38,    39,     0,     0,
+    1018,     0,     0,     0,     0,     0,   212,     0,     0,     0,
+       0,   631,     0,  1020,   341,  1021,     0,     0,   382,     0,
+       0,   524,     0,   524,   974,     0,     0,     0,   741,  1033,
+       0,     0,     0,   685,     0,  1037,     0,   686,     0,    45,
+      46,   414,     0,     0,     0,   414,     0,  1075,     0,  1150,
+    1076,     0,     0,     0,     0,     0,     0,   524,     0,   524,
+    1165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   364,     0,     0,     0,
+       0,     0,   382,     0,  1183,     0,   166,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   974,
+     974,   212,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    1215,     0,   414,     0,     0,   364,     0,   590,     0,     0,
+       0,    31,     0,     0,     0,   509,   509,   509,   509,   509,
+     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
+     509,   509,   509,     0,     0,     0,     0,   283,   284,    34,
+     285,     0,  1146,     0,   414,     0,     0,     0,   341,   364,
+       0,     0,     0,     0,     0,   974,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   286,     0,     0,     0,
+       0,     0,   287,   862,     0,     0,   288,     0,     0,   289,
+     290,   291,   292,    41,    42,     0,   293,   294,  1266,  1267,
+       0,     0,     0,   414,   414,     0,     0,     0,     0,     0,
+     526,     0,     0,     0,     0,     0,  1211,     0,     0,   295,
+       0,   379,   803,   364,   971,     0,     0,    45,    46,   297,
+     298,   299,   300,   613,     0,   613,   613,     0,     0,     0,
+       0,     0,   613,     0,     0,     0,     0,     0,     0,     0,
+    1223,     0,   842,   364,     0,  1225,     0,     0,   364,     0,
+       0,     0,     0,  1229,     0,     0,     0,   364,   364,   364,
+       0,   509,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   364,     0,     0,     0,     0,
+     414,   884,     0,     0,   414,   887,  1255,     0,     0,     0,
+       0,   889,     0,     0,     0,     0,     0,     0,  1263,     0,
+       0,  1264,     0,  1265,     0,     0,     0,     0,     0,     0,
+     414,     0,     0,     0,     0,     0,     0,  1274,  1275,     0,
+       0,     0,   509,     0,     0,     0,     0,     0,   212,  1371,
+       0,     0,   741,   364,   613,     0,     0,     0,     0,  1288,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   509,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   341,   364,     0,
+       0,     0,   414,   414,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1327,     0,     0,     0,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,  -291,
+       0,    26,    27,    28,     0,     0,   414,     0,     0,     0,
+      31,     0,     0,     0,   364,     0,     0,     0,     0,     0,
+       0,   803,   364,     0,     0,   613,     0,   613,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   613,    34,     0,
+       0,     0,     0,    37,     0,   336,   337,    40,     0,  -291,
+       0,  1377,     0,  1378,    41,    42,     0,     0,     0,     0,
+       0,     0,   509,     0,     0,  1386,     0,  1387,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   338,     0,  1394,     0,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1412,  1414,     0,     0,     0,     0,     0,   509,     0,   803,
+       0,  1419,     0,     0,  1229,     0,   341,   364,   414,     0,
+     414,     0,     0,     0,   414,     0,     0,     0,     0,     0,
+       0,     0,   321,     0,     0,  1441,     0,     0,     0,     0,
+       0,     0,   509,     0,  1448,   613,   613,  1450,     0,  1452,
+    1454,  1456,     0,     0,     0,   509,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,  -291,     0,     0,     0,     0,     0,
+     414,     0,     0,     0,     0,    31,     0,     0,     0,  1486,
+       0,  1488,     0,  1229,     0,     0,   509,     0,     0,     0,
+       0,   414,  1143,     0,     0,     0,     0,     0,  1499,     0,
+       0,     0,   364,    34,     0,     0,     0,     0,   414,  1155,
+       0,   613,   613,  1160,  -291,     0,     0,     0,     0,     0,
+       0,     0,     0,   364,   364,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     1,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,   509,    26,    27,    28,    29,     0,     0,
+      30,   283,   284,    31,   285,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   414,     0,   414,     0,
+       0,     0,     0,   414,     0,     0,     0,     0,     0,     0,
+     286,    34,   613,    35,     0,    36,   287,     0,    38,    39,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,   509,   509,   803,   414,  1243,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   295,     0,  1055,     0,     0,     0,   364,
+       0,    45,    46,   297,   298,   299,   300,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  -126,     0,     1,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,  -295,     0,    26,    27,    28,     0,     0,
-       0,     0,   213,     0,    31,     0,     0,    79,     0,     0,
-       0,     0,   233,   357,   237,     0,   239,     0,     0,     0,
-       0,     0,     0,   248,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,    88,     0,    37,   349,   337,
-     338,    40,     0,  -295,     0,     0,     0,     0,    41,    42,
-       0,     0,     0,     0,   213,     0,   237,   239,   248,    43,
-       0,     0,    81,    58,     0,   364,     0,     0,     0,    81,
-       0,     0,     0,     0,   635,     0,   339,     0,     0,   128,
-     128,   128,     0,    46,    47,     0,     0,    58,     0,     0,
-       0,     0,   284,   285,    58,   286,     0,   213,   932,     0,
-     933,     0,     0,     0,     0,     0,     0,   936,   937,     0,
-       0,     0,   942,     0,     0,     0,     0,     0,     0,     0,
-     364,   287,    81,   167,   947,     0,     0,   288,     0,   951,
-       0,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-     220,   294,   295,     0,     0,     0,     0,    58,     0,    43,
-       0,     0,     0,   128,     0,   128,     0,     0,   213,   987,
-     237,   239,   248,     0,   296,     0,   380,     0,     0,     0,
-       0,     0,   792,    46,    47,   298,   299,   300,   301,     0,
-     277,   364,   364,     0,   364,   364,     0,     0,   167,     0,
-       0,     0,   274,     0,     0,     0,   213,     0,     0,     0,
-       0,   213,     0,     0,    88,     0,     0,     0,   508,     0,
-     510,   513,     0,     0,     0,     0,   498,     0,   516,   517,
-       0,   167,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   370,   510,   510,     0,   376,   128,     0,     0,   364,
-     364,     0,     0,     0,   128,     0,   128,   128,     0,     0,
-       0,   128,     0,   128,   128,     0,     0,     0,     0,     0,
-    1033,  1034,  1035,  1036,   213,  1038,     0,     0,     0,     0,
-     510,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1082,     0,     0,   167,     0,   213,     0,     0,     0,
-       0,   237,   239,     0,     0,  1088,   220,     0,     0,   248,
-       0,     0,     0,     0,     0,     0,   510,     0,     0,     0,
-       0,     0,     0,   364,   167,     0,     0,     0,     0,     0,
-       0,     0,     0,   128,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1108,     0,     0,     0,   376,
-       0,     0,   213,     0,     0,     0,   167,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   227,     0,     0,     0,
-     213,     0,     0,     0,     0,   213,     0,   213,     0,   525,
-       0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
-       0,   167,  1141,     0,   213,     0,     0,   213,   213,  1149,
-     364,     0,   364,     0,  1153,   213,     0,     0,     0,  1157,
-       0,  1158,     0,     0,     0,  1160,     0,  1161,  1162,   213,
-       0,  1165,     0,     0,     0,     0,   213,     0,     0,   598,
-    1177,     0,     0,     0,   622,   364,     0,     0,     0,     0,
-       0,     0,     0,   364,   364,   364,     0,     0,  1192,  1193,
-       0,     0,     0,     0,   364,   364,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
-       0,     0,     0,     0,     0,  1223,     0,     0,  1225,     0,
-       0,     0,     0,     0,   510,   510,   510,   510,   510,   510,
-     510,   510,   510,   510,   510,   510,   510,   510,   510,   510,
-     510,   510,     0,     0,     0,     0,     0,     0,     0,   364,
-     167,   167,     0,     0,     0,     0,     0,   370,     0,     0,
-       0,  1239,     0,     0,     0,     0,     0,  1243,  1244,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   525,  1255,
-     213,     0,     0,     0,     0,     0,     0,     0,     0,  1262,
-       0,     0,  1266,     0,  1267,     0,     0,  1269,     0,     0,
-       0,     0,     0,     0,     0,     0,   717,     0,   213,     0,
-    1277,     0,     0,   213,     0,     0,     0,     0,   167,   364,
-       0,     0,     0,  1284,     0,  1286,  1287,  1288,  1289,     0,
-     525,     0,   525,     0,     0,   525,     0,   167,   525,     0,
-       0,  1296,     0,  1297,     0,     0,     0,   174,     0,     0,
-     370,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
-       0,   510,     0,     0,     0,    88,  1325,  1326,   128,   128,
-       0,     0,     0,     0,     0,   213,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   213,
-       0,     0,   167,     0,     0,     0,     0,   128,     0,     0,
-     128,   128,     0,   128,   370,   128,   128,     0,   816,   498,
-     128,   128,     0,     0,     0,     0,     0,     0,    88,  1361,
-    1362,     0,     0,     0,   510,     0,     0,     0,     0,  1372,
-       0,     0,     0,     0,   598,     0,     0,     0,     0,   598,
-       0,     0,     0,     0,     0,     0,     0,     0,   370,   370,
-     370,     0,     0,     0,     0,     0,   510,     0,     0,  1022,
-       0,     0,     8,     9,    10,    11,    12,   370,     0,     0,
-       0,     0,     0,     0,   213,     0,     0,     0,     0,     0,
-    1404,     0,   158,     0,     0,     0,   213,     0,     0,   284,
-     285,    31,   286,  1409,     0,  1410,  1411,  1412,     0,   525,
-       0,     0,     0,     0,     0,   213,     0,  1416,     0,     0,
-       0,     0,     0,     0,     0,     0,  1427,     0,   287,    34,
-       0,     0,     0,     0,   288,   370,     0,   941,   289,     0,
-     253,   290,   291,   292,   293,    41,    42,     0,   294,   295,
-     258,     0,     0,  1450,     0,     0,    43,     0,     0,     0,
-       0,   128,   128,     0,     0,     0,     0,     0,     0,     0,
-       0,   296,   717,   380,     0,     0,     0,     0,     0,     0,
-     345,    47,   298,   299,   300,   301,     0,   510,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1489,  1490,
-       0,     0,     0,     0,     0,     0,   158,     0,     0,     0,
-       0,  1495,     0,     0,     0,     0,     0,     0,  1495,     0,
-     387,     0,     0,     0,     0,     0,     0,     0,     0,   213,
-     370,     0,   510,     0,   622,     0,     0,     0,   370,     0,
-       0,     0,     0,   419,     0,     0,     0,     0,     0,     0,
-       0,  1529,     0,     0,     0,  1535,     0,   434,     0,     0,
-       0,   213,     0,     0,     0,     0,   439,     0,     0,     0,
-     510,     0,     0,     0,     0,     0,   447,     0,     0,     0,
-       0,     0,     0,   510,  1557,     0,  1558,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   213,     0,     0,
-       0,   465,     0,     0,     0,     0,   475,     0,   213,     0,
-       0,     0,     0,     0,  1573,  1574,     0,     0,     0,   483,
-       0,   128,  1577,  1578,   510,   493,   128,   497,     0,     0,
-       0,     0,     0,     0,   717,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   527,     0,     0,     0,     0,   525,
+      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
+       0,    30,   283,   284,    31,  1040,  1041,     0,  1042,     0,
+     341,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,
+       0,     0,  1051,     0,     0,     0,  1052,  1053,   364,    33,
+       0,   286,    34,     0,    35,     0,    36,  1054,     0,    38,
+      39,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   284,   285,     0,   286,     0,     0,
-       0,     0,     0,   167,     0,     0,     0,     0,     0,     0,
-     213,     0,     0,     0,     0,     0,   586,     0,     0,   370,
-       0,   591,     0,   287,   213,     0,     0,     0,     0,   288,
-       0,   510,     0,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
-     636,    43,     0,     0,   637,   638,     0,   640,     0,     0,
-       0,     0,   598,     0,   652,   653,   507,   654,   655,     0,
-     656,     0,   657,     0,     0,    46,    47,   298,   299,   300,
-     301,     0,     0,   370,   370,     0,     0,     0,     0,   586,
-       0,     0,     0,     0,   510,   510,     0,   672,     0,     0,
+       0,     0,     0,     0,   295,     0,  1055,   364,   364,   172,
+       0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
+       0,     0,  1056,     0,     0,     0,     0,  -126,     0,     0,
+       0,     0,     1,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,   509,    26,
+      27,    28,    29,     0,     0,    30,   283,   284,    31,   285,
+       0,     0,     0,     0,   509,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   213,     0,     0,     0,
-     128,     0,   683,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   286,    34,     0,    35,     0,
+      36,   287,     0,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   364,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   295,     0,
+      44,     0,     0,     0,   509,   509,    45,    46,   297,   298,
+     299,   300,     0,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   283,   284,    31,   285,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,  -292,     0,     0,   414,   286,    34,     0,    35,     0,
+      36,   287,    31,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,   414,   414,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   525,     0,     0,     0,     0,   709,     0,
-       0,     0,     0,     0,   712,     0,     0,  -520,     0,   465,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      34,     0,     0,     0,     0,     0,     0,     0,   295,     0,
+     343,  -292,     0,   414,     0,   757,   344,    46,   297,   298,
+     299,   300,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,   283,   284,    31,   285,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,   286,    34,     0,    35,    31,    36,
+     287,     0,    38,    39,   288,     0,     0,   289,   290,   291,
+     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+       0,   111,     0,    38,    39,     0,     0,   295,     0,   962,
+       0,     0,    41,    42,   757,   344,    46,   297,   298,   299,
+     300,     2,   207,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-      29,     0,     0,    30,     0,   749,    31,    32,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     768,     0,   717,     0,   213,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,    34,     0,    35,     0,    36,    37,
-       0,    38,    39,    40,     0,     0,     0,     0,     0,     0,
-      41,    42,     0,     0,     0,     0,     0,     0,   795,     0,
-       0,    43,   128,     0,   220,     0,     0,   805,     0,   342,
-     365,     0,     0,     0,   807,     0,    44,     0,    45,     0,
-     815,     0,     0,     0,     0,    46,    47,     0,     0,   829,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   717,     0,   415,     0,     0,     0,     0,     0,     0,
-     415,     0,     0,     0,     0,   510,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     869,     0,     0,   510,     0,     0,     0,     0,     0,     0,
-       0,   284,   285,     0,   286,     0,     0,     0,     0,     0,
-       0,     0,     0,   370,   370,     0,     0,     0,     0,     0,
-       0,     0,   220,     0,     0,     0,   815,     0,     0,     0,
-     287,     0,     0,     0,   911,     0,   288,     0,     0,     0,
-     289,     0,   415,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,   253,   510,   510,     0,     0,
-       0,     0,     0,   296,     0,   948,   949,     0,     0,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,   966,
-       0,     0,     0,     0,     0,     0,   415,     0,     0,     0,
-       0,     0,     0,     0,   415,   582,     0,   415,   585,     0,
-     988,     0,   989,     0,     0,     0,   993,     0,   365,     0,
-       0,     0,   614,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   370,     0,
-     213,   632,     0,     0,   342,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,  -295,     0,    26,    27,    28,     0,     0,
-       0,   415,     0,     0,    31,   415,     0,     0,     0,     0,
-       0,  1027,     0,     0,     0,     0,     0,     0,  1028,     0,
-       0,     0,     0,     0,     0,     0,   525,     0,   525,     0,
-       0,  1030,    34,  1031,     0,     0,   365,    37,     0,   337,
-     338,    40,     0,  -295,     0,     0,     0,  1043,    41,    42,
-       0,     0,     0,     0,  1047,     0,     0,     0,     0,    43,
-       0,     0,     0,   525,   322,   525,  1085,     0,     0,  1086,
-       0,     0,     0,     0,   347,     0,   339,     0,     0,     0,
-       0,     0,   415,    46,    47,   365,   383,   383,     0,     0,
-       0,     0,     0,   167,   207,     2,   208,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,   415,     0,     0,     0,   342,   365,
-      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   591,     0,
-       0,     0,     0,     0,     0,     0,     0,   322,    34,     0,
-      35,     0,    36,     0,     0,   209,    39,     0,     0,     0,
-       0,     0,     0,   415,   415,     0,     0,     0,     0,     0,
-       0,   479,     0,     0,  1159,    43,     0,     0,     0,     0,
-       0,     0,   809,   365,     0,     0,     0,     0,     0,     0,
-       0,     0,   210,   614,     0,   614,   614,     0,     0,    46,
-      47,     0,   614,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   848,   365,     0,     0,     0,     0,   365,     0,
-       0,     0,     0,     0,     0,     0,     0,   365,   365,   365,
-       0,     0,   527,     0,     0,     0,     0,     0,  1224,     0,
-       0,     0,     0,     0,     0,     0,   365,     0,     0,     0,
-       0,   415,   891,     0,     0,   415,   894,     0,     0,     0,
-       0,     0,   896,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1236,     0,     0,     0,     0,  1238,     0,     0,
-       0,   415,     0,     0,     0,  1242,     0,   383,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   365,   614,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1271,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1279,     0,     0,  1280,     0,  1281,     0,
-     342,   365,     0,     0,     0,   415,   415,     0,     0,     0,
-       0,     0,  1290,  1291,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1304,     0,     0,     0,     0,     0,
-       0,   711,   284,   285,     0,   286,     0,     0,     0,     0,
-       0,   415,     0,     0,     0,     0,     0,     0,     0,   365,
-       0,     0,     0,     0,     0,     0,   809,   365,     0,     0,
-     614,   287,   614,     0,     0,     0,     0,   288,     0,     0,
-     745,   289,   614,  1345,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,   762,     0,     0,     0,     0,   745,    43,
-       0,   745,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   772,   773,   296,     0,   380,     0,     0,     0,
-       0,   761,     0,    46,    47,   298,   299,   300,   301,     0,
-       0,     0,     0,     0,     0,   794,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   803,     0,     0,     0,     0,
-       0,     0,   347,     0,     0,   809,     0,   762,     0,  1396,
-       0,  1397,   342,   365,   415,     0,   415,     0,     0,     0,
-     415,     0,     0,     0,     0,  1407,     0,  1408,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   614,   614,     0,     0,  1415,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   868,     0,     0,     0,
-       0,  1433,  1435,     0,     0,   383,     0,     0,   365,     0,
-       0,     0,  1440,     0,     0,  1242,     0,     0,   415,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,  -295,  1464,     0,
-     415,  1156,     0,     0,     0,     0,     0,  1471,    31,     0,
-    1473,   365,  1475,  1477,  1479,     0,     0,   415,  1168,     0,
-     614,   614,  1173,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   365,   365,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  -295,     0,     0,
-       0,     0,     0,     0,  1510,     0,  1512,     0,  1242,     0,
-       0,     0,     0,     0,     0,   762,     0,   972,     0,     0,
-       0,     0,     0,     0,  1524,     0,     0,   983,     0,     0,
-       0,     0,     0,     0,   992,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   415,     0,   415,     0,     0,
-       0,     0,   415,     0,     0,     0,     0,     0,     0,     0,
-       0,   614,     0,     0,     0,     0,     0,     0,     0,  1175,
-       0,     0,     8,     9,    10,    11,    12,  1010,  1011,     0,
-       0,   347,     0,     0,     0,     0,   809,   415,  1258,     0,
-       0,     0,     0,     0,     0,   347,     0,     0,     0,   284,
-     285,    31,   286,     0,     0,     0,     0,     0,     0,     0,
-       0,   365,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   287,    34,
-       0,     0,     0,     0,   288,  1041,     0,     0,   289,   383,
-       0,   290,   291,   292,   293,    41,    42,     0,   294,   295,
-       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   296,   342,   380,     0,     0,     0,   347,     0,     0,
-    1176,    47,   298,   299,   300,   301,     0,     0,     0,     0,
-     365,     2,   208,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,   322,    26,    27,    28,
-       0,     0,     0,     0,   284,   285,    31,   286,     0,     0,
-       0,     0,  1132,  1133,     0,     0,     0,     0,     0,     0,
-       0,     0,   365,   365,     0,     0,   383,     0,     0,     0,
-       0,     0,   983,   287,    34,  1147,    35,   745,    36,   288,
-       0,    38,    39,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,  1163,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,  1178,
-       0,   284,   285,     0,   286,     0,   296,     0,   344,     0,
-       0,     0,     0,   761,     0,   345,    47,   298,   299,   300,
-     301,   383,     0,  1196,     0,     0,     0,     0,     0,     0,
-     287,     0,     0,     0,     0,     0,   288,     0,   983,   983,
-     289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,  1228,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   296,     0,   380,     0,   365,   980,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
-       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+       0,     0,     0,     0,   283,   284,    31,   285,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,   983,     0,    26,    27,
-      28,    29,     0,     0,    30,     0,     0,    31,    32,     0,
-       0,     0,     0,     0,     0,   868,     0,     0,     0,     0,
-       0,   284,   285,     0,   286,     0,     0,     0,     0,     0,
-    1282,  1283,    33,     0,     0,    34,     0,    35,     0,    36,
-      37,     0,    38,    39,    40,     0,     0,   415,     0,     0,
-     287,    41,    42,     0,     0,     0,   288,     0,     0,     0,
-     289,     0,    43,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,   415,   415,     0,     0,     0,    44,    43,    45,
-       0,     0,     0,  -524,     0,     0,    46,    47,     0,     0,
-       0,     0,     0,   296,     0,   380,     0,   415,     0,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
-     983,     0,     1,     2,   208,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,    29,     0,     0,    30,   284,   285,    31,  1050,
-    1051,     0,  1052,     0,     0,  1053,  1054,  1055,  1056,  1057,
-    1058,  1059,  1060,     0,     0,     0,  1061,     0,     0,     0,
-    1062,  1063,     0,    33,  1390,   287,    34,   745,    35,     0,
-      36,  1064,     0,    38,    39,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
-    1065,     0,     0,   173,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     0,     0,     0,     0,  1066,     0,     0,
-       0,  -130,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1449,     0,     0,     0,     0,     0,     0,     1,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
-       0,    30,   284,   285,    31,   286,     8,     9,    10,    11,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,   286,    34,     0,    35,    31,    36,   287,
+       0,    38,    39,   288,     0,     0,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+       0,     0,    38,    39,     0,     0,   295,     0,   962,     0,
+       0,     0,     0,   757,    45,    46,   297,   298,   299,   300,
+       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
-      39,   289,     0,  1516,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,    34,     0,     0,     0,     0,   112,     0,
-      38,    39,     0,     0,   296,     0,  1065,     0,     0,    41,
-      42,     0,     0,    46,    47,   298,   299,   300,   301,     0,
-       0,     0,     0,     0,     0,     0,   322,  -130,     1,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
-       0,    30,   284,   285,    31,   286,     0,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,  -296,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,    31,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,    45,  -296,     0,     0,
-       0,     0,     0,    46,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+       0,     0,     0,   283,   284,    31,   285,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,   286,    34,     0,    35,    31,    36,   287,     0,
+      38,    39,   288,     0,     0,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,     0,     0,     0,     0,
+       0,   208,    39,     0,     0,   295,     0,   343,     0,     0,
+       0,     0,     0,   344,    46,   297,   298,   299,   300,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
-      38,    39,     0,     0,   296,     0,   971,     0,     0,     0,
-       0,   761,     0,   345,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
-     209,    39,     0,     0,   296,     0,   971,     0,     0,     0,
-       0,   761,     0,    46,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
+       0,     0,   283,   284,    31,   285,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
+       0,   286,    34,     0,    35,     0,    36,   287,     0,   208,
+      39,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,   344,     0,     0,     0,
-       0,     0,     0,   345,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   997,     0,     0,     0,
+       0,     0,   998,    46,   297,   298,   299,   300,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
+       0,   283,   284,    31,   285,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,   209,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
+     286,    34,     0,    35,     0,    36,   287,     0,    38,    39,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,  1007,     0,     0,     0,
-       0,     0,     0,  1008,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
+       0,     0,     0,   295,     0,   962,     0,     0,     0,     0,
+       0,   344,    46,   297,   298,   299,   300,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+     283,   284,    31,   285,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   286,
+      34,     0,    35,     0,    36,   287,     0,   208,    39,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,   971,     0,     0,     0,
-       0,     0,     0,   345,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,   209,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,   380,     0,     0,     0,
-       0,     0,     0,    46,    47,   298,   299,   300,   301,     1,
+       0,     0,   295,     0,   379,     0,     0,     0,     0,     0,
+      45,    46,   297,   298,   299,   300,  -515,     0,     0,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
@@ -2547,66 +2529,321 @@
       38,    39,    40,     0,     0,     0,     0,     0,     0,    41,
       42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      43,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    44,     0,    45,     0,     0,
-       0,     0,     0,     0,    46,    47,   207,     2,   208,     4,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    43,     0,    44,     0,     0,
+       0,     0,     0,    45,    46,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,    29,     0,     0,    30,     0,
+       0,    31,    32,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    33,     0,     0,    34,
+       0,    35,     0,    36,    37,     0,    38,    39,    40,     0,
+       0,     0,     0,     0,     0,    41,    42,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    43,     0,    44,     0,     0,     0,  -519,     0,    45,
+      46,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,    29,     0,     0,    30,     0,     0,    31,    32,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    33,     0,     0,    34,     0,    35,     0,    36,
+      37,     0,    38,    39,    40,     0,     0,     0,     0,     0,
+       0,    41,    42,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    43,     0,    44,
+       0,     0,     0,     0,     0,    45,    46,     1,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,    29,     0,     0,
+      30,     0,     0,    31,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,    35,     0,    36,     0,     0,    38,    39,
+       0,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,     0,     0,     0,    44,    31,     0,     0,     0,
+       0,    45,    46,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,    35,     0,    36,    37,
+       0,   208,    39,    40,     0,     0,     0,     0,     0,     0,
+      41,    42,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    43,     0,   209,     0,
+       0,     0,     0,     0,    45,    46,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
+       0,    31,     0,     0,     0,     0,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,     0,    26,    27,    28,    34,
+       0,    35,     0,    36,     0,    31,    38,    39,     0,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    34,     0,    26,    27,    28,     0,     0,
+      38,    39,  -399,   677,    31,     0,     0,     0,     0,    45,
+      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,   634,    36,   338,     0,    38,
+      39,     0,     0,    45,    46,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1350,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   677,     0,     0,     0,
+       0,     0,    45,    46,     2,   207,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,    34,     0,    35,
+       0,    36,    31,   684,    38,    39,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1352,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
+       0,   677,     0,     0,     0,     0,     0,    45,    46,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,   685,    26,    27,    28,  1091,     0,
+      45,    46,     0,     0,    31,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,   208,
+      39,     0,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,     0,   271,    31,     0,     0,
+       0,     0,    45,    46,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
+       0,     0,    38,    39,     0,     2,   207,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,     0,     0,     0,     0,   677,
+      31,     0,     0,     0,     0,    45,    46,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+      35,     0,    36,     0,     0,    38,    39,     0,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
+       0,     0,   592,    31,     0,     0,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,    35,     0,    36,     0,     0,   208,    39,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,   283,   284,    31,
+     285,     0,     0,     0,     0,   209,     0,     0,     0,     0,
+       0,    45,    46,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   286,    34,     0,     0,
+       0,     0,   287,     0,    38,    39,   288,     0,     0,   289,
+     290,   291,   292,    41,    42,     0,   293,   294,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   295,
+       0,   517,     0,     0,   172,     0,     0,    45,    46,   297,
+     298,   299,   300,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+     283,   284,    31,   285,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,   286,
+      34,     0,     0,    31,     0,   287,     0,    38,    39,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,     0,     0,     0,    37,     0,   336,   337,
+      40,     0,   295,   -35,   296,     0,     0,    41,    42,     0,
+      45,    46,   297,   298,   299,   300,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,   338,    26,    27,    28,     0,
+       0,    45,    46,   283,   284,    31,   285,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,   286,    34,     0,     0,    31,     0,   287,     0,
+      38,    39,   288,     0,     0,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,     0,     0,     0,   111,
+       0,    38,    39,     0,     0,   295,     0,   296,     0,     0,
+      41,    42,     0,    45,    46,   297,   298,   299,   300,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,    44,    26,
+      27,    28,     0,     0,    45,    46,   283,   284,    31,   285,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   286,    34,     0,     0,    31,
+     684,   287,     0,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,    38,    39,     0,     0,   295,     0,
+     158,     0,     0,     0,     0,     0,    45,    46,   297,   298,
+     299,   300,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,   685,    26,    27,    28,  1220,     0,    45,    46,   283,
+     284,    31,   285,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,   286,    34,
+       0,     0,    31,     0,   287,     0,    38,    39,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
+       0,   295,     0,   592,     0,     0,     0,     0,     0,    45,
+      46,   297,   298,   299,   300,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,   258,    26,    27,    28,     0,     0,
+      45,    46,   283,   284,    31,   285,     0,     0,     0,     0,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,   286,    34,    26,    27,    28,     0,   287,     0,    38,
+      39,   288,    31,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,   295,     0,   379,    38,    39,     0,
+       0,     0,    45,    46,   297,   298,   299,   300,   467,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,   158,    26,    27,    28,     0,     0,
+      45,    46,     0,     0,    31,     0,     0,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,    34,     0,    35,     0,    36,    31,     0,    38,
+      39,     0,     0,     0,     0,     0,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,    34,    26,    27,    28,     0,
+      37,     0,    38,    39,    40,    31,     0,     0,     0,    -3,
+       0,    41,    42,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,    34,    26,    27,    28,    43,    37,   158,
+      38,    39,    40,    31,     0,    45,    46,     0,     0,    41,
+      42,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,    34,    26,    27,    28,    43,    37,    44,   208,    39,
+      40,    31,     0,    45,    46,     0,     0,    41,    42,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,  -291,    34,
+      26,    27,    28,    43,    37,   271,   336,   337,    40,    31,
+       0,    45,    46,     0,     0,    41,    42,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,  -291,    34,    26,    27,
+      28,   634,     0,   338,    38,    39,     0,    31,  -291,    45,
+      46,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,    34,     0,     0,     0,   634,
+      31,   338,    38,    39,     0,     0,  -291,    45,    46,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,    34,    26,
+      27,    28,     0,     0,     0,   208,    39,     0,    31,   338,
+       0,     0,     0,     0,     0,    45,    46,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,    34,    26,    27,    28,
+       0,     0,   271,    38,    39,     0,    31,     0,    45,    46,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,    34,     0,     0,     0,     0,    31,
+     338,    38,    39,     0,     0,     0,    45,    46,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,    34,    26,    27,
+      28,     0,     0,     0,    38,    39,     0,    31,   685,     0,
+       0,     0,     0,     0,    45,    46,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+       0,   592,    38,    39,     0,     0,     0,    45,    46,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,    44,
+       0,     0,     0,     0,    31,    45,    46,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,    38,
+      39,   283,   284,     0,   285,  1041,     0,  1042,     0,     0,
+    1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,     0,
+    1524,  1051,     0,     0,     0,  1052,  1053,     0,    33,     0,
+     286,     0,     0,     0,     0,  -412,  1054,     0,     0,     0,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   295,     0,   379,     0,     0,   172,     0,
+       0,    45,    46,   297,   298,   299,   300,     0,     0,   283,
+     284,  1056,   285,  1041,     0,  1042,  -126,     0,  1043,  1044,
+    1045,  1046,  1047,  1048,  1049,  1050,     0,     0,     0,  1051,
+       0,     0,     0,  1052,  1053,     0,    33,     0,   286,     0,
+       0,     0,     0,     0,  1054,     0,     0,     0,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   295,     0,   379,     0,     0,   172,     0,     0,    45,
+      46,   297,   298,   299,   300,     0,     0,     0,     0,  1056,
+       0,     0,     0,     0,  -126,     2,   207,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
+      31,     0,   283,   284,     0,   285,  1041,     0,  1042,  1398,
+    1399,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,
+       0,  1524,  1051,     0,     0,     0,  1052,  1053,    34,    33,
+      35,   286,    36,     0,     0,    38,    39,  1054,     0,     0,
+       0,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,  1311,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   379,     0,     0,   172,
+       0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
+     283,   284,  1056,   285,  1041,     0,  1042,  1398,  1399,  1043,
+    1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,     0,     0,
+    1051,     0,     0,     0,  1052,  1053,     0,    33,     0,   286,
+       0,     0,     0,     0,     0,  1054,     0,     0,     0,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   295,     0,   379,     0,     0,   172,     0,     0,
+      45,    46,   297,   298,   299,   300,     0,     0,   283,   284,
+    1056,   285,  1041,     0,  1042,     0,     0,  1043,  1044,  1045,
+    1046,  1047,  1048,  1049,  1050,     0,     0,     0,  1051,     0,
+       0,     0,  1052,  1053,     0,    33,     0,   286,     0,     0,
+       0,     0,     0,  1054,     0,     0,     0,   288,     0,     0,
+     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,     0,     0,     0,     0,   283,   284,     0,   285,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     295,     0,   379,     0,     0,   172,     0,     0,    45,    46,
+     297,   298,   299,   300,   286,     0,     0,     0,  1056,     0,
+     640,     0,   140,   141,   288,     0,     0,   289,   290,   291,
+     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
+       0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   295,     0,   641,
+       0,   642,   380,     0,     0,    45,    46,   297,   298,   299,
+     300,   286,     0,     0,     0,     0,     0,   287,     0,     0,
+       0,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,   283,
+     284,     0,   285,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   379,     0,   283,   284,
+       0,   285,   708,    46,   297,   298,   299,   300,   286,     0,
+       0,     0,     0,     0,   287,     0,     0,     0,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,   286,   293,   294,
+       0,     0,     0,   287,     0,     0,     0,   288,     0,     0,
+     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,   295,     0,   379,     0,   283,   284,     0,   285,   344,
+      46,   297,   298,   299,   300,     0,     0,     0,     0,     0,
+     506,     0,     0,     0,   283,   284,     0,   285,    45,    46,
+     297,   298,   299,   300,   286,     0,     0,     0,     0,     0,
+     287,     0,     0,     0,   288,     0,     0,   289,   290,   291,
+     292,    41,    42,   286,   293,   294,     0,     0,     0,   287,
+       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,   295,     0,     0,
+       0,   283,   284,     0,   285,    45,    46,   297,   298,   299,
+     300,     0,     0,     0,     0,     0,   511,     0,     0,     0,
+       0,     0,     0,     0,    45,    46,   297,   298,   299,   300,
+     286,     0,     0,     0,     0,     0,   287,     0,     0,     0,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   514,     0,     0,     0,     0,     0,     0,
+       0,    45,    46,   297,   298,   299,   300,     2,   207,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,   486,   487,   488,
-      34,     0,    35,    31,    36,    37,     0,   209,    39,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,    44,     0,   210,     0,     0,     0,     0,     0,
-       0,    46,    47,     1,     2,   208,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,  -295,     0,
-      26,    27,    28,    29,     0,     0,    30,     0,     0,    31,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
-       0,    36,     0,     0,    38,    39,     0,     0,  -295,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    43,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    45,     0,     0,     0,     0,     0,     0,    46,    47,
-       1,     2,   208,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-      29,     0,     0,    30,     0,     0,    31,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
-       0,    38,    39,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    45,     0,
-       0,     0,     0,     0,     0,    46,    47,     2,   208,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+      25,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,    35,     0,    36,    37,     0,   209,    39,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    44,     0,   210,     0,     0,     0,     0,     0,
-       0,    46,    47,     2,   208,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,     0,     0,    31,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
-      36,     0,     0,    38,    39,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,  -403,
-     679,     0,     0,     0,     0,     0,     0,    46,    47,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      34,     0,    35,     0,    36,    37,     0,   175,   176,    40,
+       0,     0,     0,     0,     0,     0,    41,    42,   206,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
@@ -2614,391 +2851,27 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,    35,     0,    36,     0,     0,    38,
-      39,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
-       0,  1369,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   679,     0,     0,     0,
-       0,     0,     0,    46,    47,     2,   208,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
-      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
-      35,     0,    36,     0,     0,    38,    39,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    43,     0,  1371,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   679,     0,     0,     0,     0,     0,     0,    46,
-      47,     2,   208,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-       0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,   208,
+      39,   467,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,     0,     0,    31,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
-       0,   209,    39,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   272,     0,
-       0,     0,     0,     0,     0,    46,    47,     2,   208,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   679,     0,     0,     0,     0,     0,
-       0,    46,    47,     2,   208,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,     0,     0,    31,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
-      36,     0,     0,    38,    39,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     593,     0,     0,     0,     0,     0,     0,    46,    47,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,    35,     0,    36,     0,     0,   209,
-      39,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    43,
-       0,    26,    27,    28,     0,     0,     0,     0,   284,   285,
-      31,   286,     0,     0,     0,     0,   210,     0,     0,     0,
-       0,     0,     0,    46,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   287,    34,     0,
-       0,     0,     0,   288,     0,    38,    39,   289,     0,     0,
-     290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
-       0,     0,     0,     0,     0,    43,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     296,     0,   518,     0,     0,   173,     0,     0,     0,    46,
-      47,   298,   299,   300,   301,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,     0,     0,     0,   641,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,   -35,   742,     0,     0,     0,
-       0,     0,     0,    46,    47,   298,   299,   300,   301,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,   284,   285,    31,   286,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   287,    34,     0,     0,     0,
-       0,   288,     0,    38,    39,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
-     297,     0,     0,     0,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-     284,   285,    31,   286,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   287,
-      34,     0,     0,     0,     0,   288,     0,    38,    39,   289,
-       0,     0,   290,   291,   292,   293,    41,    42,     0,   294,
-     295,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   296,     0,   159,     0,     0,     0,     0,     0,
-       0,    46,    47,   298,   299,   300,   301,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-       0,     0,     0,     0,   284,   285,    31,   286,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   287,    34,     0,     0,     0,     0,   288,
-       0,    38,    39,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   296,     0,   593,     0,
-       0,     0,     0,     0,     0,    46,    47,   298,   299,   300,
-     301,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,     0,     0,     0,     0,   284,   285,
-      31,   286,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   287,    34,     0,
-       0,     0,     0,   288,     0,    38,    39,   289,     0,     0,
-     290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
-       0,     0,     0,     0,     0,    43,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     296,     0,   380,     0,     0,     0,     0,     0,     0,    46,
-      47,   298,   299,   300,   301,   468,     2,   208,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-       0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
-       0,    31,     0,     0,     0,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,    34,
-       0,    35,     0,    36,    31,     0,    38,    39,     0,     0,
-       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,    34,    26,    27,    28,     0,    37,     0,    38,
-      39,    40,    31,     0,     0,     0,    -3,     0,    41,    42,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     0,     0,    44,    37,   159,    38,    39,    40,
-       0,     0,     0,    46,    47,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    44,     0,    45,     0,     0,     0,     0,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,     0,     0,    37,     0,   209,    39,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,    37,     0,   337,   338,    40,
-       0,     0,    44,     0,   272,     0,    41,    42,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   635,     0,   339,     0,     0,     0,     0,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,     0,     0,    37,     0,   337,   338,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,   112,     0,    38,    39,     0,
-       0,     0,     0,     0,   339,     0,    41,    42,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    45,     0,     0,     0,     0,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,  -295,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,   686,     0,     0,     0,    38,    39,     0,
-       0,  -295,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     0,   635,     0,   339,     0,     0,     0,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   687,     0,     0,     0,   688,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,  -295,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,   686,     0,     0,     0,    38,    39,     0,
-       0,  -295,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     0,     0,     0,   339,     0,     0,     0,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   687,     0,     0,     0,  1101,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,   686,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-      34,     0,     0,    31,     0,     0,     0,    38,    39,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,   687,     0,     0,     0,  1233,     0,
-       0,    46,    47,     0,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   635,     0,   339,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,   259,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   159,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,   209,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,   272,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   339,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,   687,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   593,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,   209,    39,
-       0,     0,     0,     0,     0,    45,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    46,    47,     2,   208,     4,     5,     6,     7,
+       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
+       0,     0,    38,    39,     2,   207,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
       26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
-       0,   284,   285,     0,   286,  1051,     0,  1052,     0,     0,
-    1053,  1054,  1055,  1056,  1057,  1058,  1059,  1060,     0,     0,
-    1549,  1061,     0,     0,     0,  1062,  1063,    34,    33,    35,
-     287,    36,     0,     0,    38,    39,  1064,     0,     0,     0,
-     289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,     0,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,   485,   486,   487,    34,     0,    35,
+      31,    36,     0,     0,   208,    39,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    -416,     0,     0,   296,     0,   380,     0,     0,   173,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
-       0,     0,  1066,     0,   284,   285,  -130,   286,  1051,     0,
-    1052,     0,     0,  1053,  1054,  1055,  1056,  1057,  1058,  1059,
-    1060,     0,     0,     0,  1061,     0,     0,     0,  1062,  1063,
-       0,    33,     0,   287,     0,     0,     0,     0,     0,  1064,
-       0,     0,     0,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   296,     0,   380,     0,
-       0,   173,     0,     0,     0,    46,    47,   298,   299,   300,
-     301,     0,     0,     0,     0,  1066,     0,     0,     0,  -130,
-       2,   208,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,     0,     0,     0,     0,    31,     0,   284,   285,     0,
-     286,  1051,     0,  1052,  1419,  1420,  1053,  1054,  1055,  1056,
-    1057,  1058,  1059,  1060,     0,     0,  1549,  1061,     0,     0,
-       0,  1062,  1063,    34,    33,    35,   287,    36,     0,     0,
-      38,    39,  1064,     0,     0,     0,   289,     0,     0,   290,
-     291,   292,   293,    41,    42,     0,   294,   295,     0,     0,
-       0,     0,  1327,     0,    43,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   296,
-       0,   380,     0,     0,   173,     0,     0,     0,    46,    47,
-     298,   299,   300,   301,     0,     0,   284,   285,  1066,   286,
-    1051,     0,  1052,  1419,  1420,  1053,  1054,  1055,  1056,  1057,
-    1058,  1059,  1060,     0,     0,     0,  1061,     0,     0,     0,
-    1062,  1063,     0,    33,     0,   287,     0,     0,     0,     0,
-       0,  1064,     0,     0,     0,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
-     380,     0,     0,   173,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     0,     0,   284,   285,  1066,   286,  1051,
-       0,  1052,     0,     0,  1053,  1054,  1055,  1056,  1057,  1058,
-    1059,  1060,     0,     0,     0,  1061,     0,     0,     0,  1062,
-    1063,     0,    33,     0,   287,     0,     0,     0,     0,     0,
-    1064,     0,     0,     0,   289,     0,     0,   290,   291,   292,
-     293,    41,    42,     0,   294,   295,     0,     0,     0,     0,
-       0,     0,    43,   284,   285,     0,   286,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   296,     0,   380,
-       0,     0,   173,     0,     0,     0,    46,    47,   298,   299,
-     300,   301,   287,     0,     0,     0,  1066,     0,   641,     0,
-     141,   142,   289,     0,     0,   290,   642,   292,   293,    41,
-      42,     0,   294,   295,     0,     0,     0,     0,     0,     0,
-      43,   284,   285,     0,   286,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   296,     0,   643,     0,   644,
-     381,     0,     0,     0,    46,    47,   298,   299,   300,   301,
-     287,     0,     0,     0,     0,     0,   288,     0,     0,     0,
-     289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,   284,
-     285,     0,   286,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   296,     0,   380,     0,     0,   284,   285,
-       0,   286,   710,    47,   298,   299,   300,   301,   287,     0,
-       0,     0,     0,     0,   641,     0,     0,     0,   289,     0,
-       0,   290,   291,   292,   293,    41,    42,   287,   294,   295,
-       0,     0,     0,   288,     0,     0,    43,   289,     0,     0,
-     290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
-       0,   296,     0,   765,     0,    43,   284,   285,     0,   286,
-      46,    47,   298,   299,   300,   301,     0,     0,     0,     0,
-     296,     0,   380,     0,     0,   284,   285,     0,   286,   345,
-      47,   298,   299,   300,   301,   287,     0,     0,     0,     0,
-       0,   288,     0,     0,     0,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,   287,   294,   295,     0,     0,     0,
-     288,     0,     0,    43,   289,     0,     0,   290,   291,   292,
-     293,    41,    42,     0,   294,   295,     0,     0,   512,     0,
-       0,     0,    43,     0,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     0,     0,     0,     0,   515,     0,     0,
-       0,     0,     0,     0,     0,     0,    46,    47,   298,   299,
-     300,   301,     2,   208,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
-      37,     0,   176,   177,    40,     0,     0,     0,     0,     0,
-       0,    41,    42,   207,     2,   208,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
-      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
-       0,    36,     0,     0,   209,    39,   468,     2,   208,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,    35,     0,    36,     0,     0,    38,    39,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,    35,     0,    36,     0,     0,   209,
-      39
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,     0,     0,     0,    38,    39
 };
 
 #define yypact_value_is_default(yystate) \
-  ((yystate) == (-1414))
+  ((yystate) == (-1310))
 
 #define yytable_value_is_error(yytable_value) \
@@ -3007,706 +2880,700 @@
 static const yytype_int16 yycheck[] =
 {
-       0,     1,    44,   187,   187,   535,   187,     0,    44,   753,
-     187,    44,   206,   241,   648,   187,   522,   753,   188,   881,
-       1,   753,   107,   221,   118,   187,   187,   514,   621,   170,
-     171,   350,    32,     0,   986,   760,     0,   189,   603,    32,
-     350,   601,   601,   493,    44,   188,   281,   497,    44,   993,
-      50,    39,  1337,   604,    44,  1419,   603,    50,    44,   610,
-     601,   572,    51,    32,    64,    32,    72,    67,    32,    82,
-      70,    64,   157,   601,    67,    95,  1050,    70,    39,   346,
-     419,    44,    45,   267,   267,  1031,   267,   694,   601,    70,
-     267,    63,   107,   601,    50,   267,   296,   110,   268,  1043,
-     439,  1062,  1063,   601,   117,   267,   267,   107,   447,   203,
-     130,   263,   264,  1526,    39,   115,   131,    82,   118,   119,
-     109,   109,    67,   111,    39,   268,   132,    64,   483,  1493,
-      72,  1030,  1031,  1546,    39,    44,    45,    39,   365,    84,
-    1553,   735,   369,   636,   637,   187,   427,   428,   148,   149,
-     111,   187,   115,   881,   187,  1440,   149,   157,   158,   115,
-     132,   654,   162,   635,   636,   637,     0,   258,   912,   162,
-     489,    28,   109,    39,   119,    82,   912,     0,     1,  1140,
-     912,   112,   654,   689,   109,   116,   111,   187,   188,    72,
-     132,   187,   148,   110,   109,   188,   111,   187,    32,   116,
-       0,   187,    82,   203,   109,   114,   111,   720,    82,    32,
-     117,   211,   720,   411,   495,    96,   483,   162,   211,   712,
-      82,    78,   720,   223,     0,   267,    58,   427,   428,   109,
-     223,   267,    32,   514,   267,   118,   110,   407,   115,   116,
-     712,   241,   123,   109,    67,   111,    85,    70,   109,   111,
-     111,   109,    67,   253,   131,   211,    32,   342,   818,   818,
-     253,   261,   109,  1423,   407,   830,   266,   267,   268,   820,
-       1,   996,   283,   273,   113,   268,   108,   818,   223,   111,
-     635,   636,   637,   830,   253,   241,   253,   372,   799,   253,
-     818,    67,  1238,   603,     0,     1,   296,   931,   579,   654,
-     907,    11,  1254,   397,   119,   818,     1,   507,   308,   116,
-     818,   481,   512,   109,   807,   515,   261,   273,   491,    50,
-     818,   266,  1050,  1475,   324,   132,    32,   109,   419,   329,
-    1304,   425,    44,    45,   230,   807,   329,   431,   481,   112,
-      80,   112,   342,   116,   683,  1291,   346,   162,   439,   131,
-     350,   351,   308,   249,   621,    82,   447,   712,  1510,   626,
-    1512,  1521,  1224,   590,    70,   365,  1526,   116,   568,   369,
-     697,   111,   372,   113,    96,   940,   107,   117,   110,   939,
-     939,   110,   109,   132,   115,   117,  1546,   116,   220,   110,
-     346,  1290,  1291,  1553,   749,  1526,   117,   397,   939,   131,
-     223,   123,   114,    90,    91,   632,   351,   407,   223,    10,
-      11,    12,    13,    14,   407,   114,  1009,   148,   116,   253,
-      94,     0,  1553,    80,   258,   425,   157,   427,   428,  1125,
-     253,   431,   605,  1129,   434,   109,   609,   111,    39,   126,
-     127,   526,   274,   116,   118,   119,   261,   223,   129,   281,
-     131,   266,   807,   253,   111,   455,   113,   630,   258,   132,
-     117,   634,   116,  1407,  1408,  1059,    67,  1018,  1019,  1415,
-     976,   427,   428,   473,     3,   112,   207,   253,   132,   116,
-     211,   481,   749,   483,   116,   485,   697,   432,   481,   489,
-    1464,    72,   485,     0,   505,   495,  1224,  1471,   948,   734,
-     132,   116,    83,    84,   991,  1139,   658,   507,   649,   509,
-     241,   830,   512,     3,   514,   515,  1415,   349,   485,   689,
-     830,   485,   522,     0,   116,    32,   526,   527,   110,   474,
-     111,   109,   116,   111,   366,   117,   351,    44,   370,   495,
-     132,    72,   273,    50,  1109,   276,   689,   253,   132,    94,
-    1524,   112,    83,    84,   116,   116,   911,    64,   514,   254,
-      67,  1496,   656,    70,   109,   296,   111,  1502,   116,   109,
-     132,   571,   572,   118,   119,   351,  1304,   308,   131,   579,
-     111,   792,   809,    94,   132,   419,   913,   814,  1523,  1095,
-     590,   591,   683,  1528,  1100,   595,   116,   917,   109,   919,
-     111,   601,   110,   603,   116,   439,   116,   118,   119,   110,
-     110,   342,   132,   447,   116,   346,   116,   432,   709,   419,
-     132,   621,   132,   579,   116,   944,   626,   591,   628,   112,
-     132,   958,   632,   116,   365,   635,   636,   637,   369,   439,
-     132,   372,   149,   109,   911,   111,   110,   447,   112,   483,
-     595,   485,   116,   109,   654,   162,   656,   668,   869,   474,
-     110,    72,   485,   748,   109,   621,   116,   131,   132,   867,
-     626,   110,    83,    84,    50,  1030,   903,   116,   623,   852,
-     187,   188,    72,   628,   109,   485,   686,   109,   110,   689,
-     888,   120,   121,    83,    84,   110,   427,   428,   474,    71,
-     111,   116,   913,    75,   211,   109,    78,   111,    80,   485,
-    1304,   118,   712,   713,   714,    87,   223,   124,   125,   109,
-     720,   721,   950,   109,   455,   111,   109,   738,   912,   912,
-     109,   912,   873,    88,    89,   912,  1464,   468,   109,   115,
-     912,   110,  1009,  1471,   914,   110,   253,   958,   748,   749,
-     912,   912,   110,   753,   754,   700,    72,   110,    74,    75,
-     267,   112,   493,    72,   495,   109,   497,    83,    84,   714,
-     109,   914,   945,   468,    83,    84,   507,    72,   509,   485,
-     595,   512,   115,   514,   515,   996,  1530,  1381,    83,    84,
-     622,  1321,   115,   116,  1530,   526,  1524,   110,  1530,   799,
-    1127,   109,   111,   116,  1159,   132,   638,   807,   623,   809,
-     110,   811,    64,   628,   814,   815,   116,   110,   818,   514,
-     109,   653,   329,   116,   507,   910,   509,   110,  1022,   512,
-     830,   109,   515,   116,   529,   211,  1047,   532,   112,   534,
-     535,   132,   214,   350,    85,    86,    87,   623,   579,   683,
-      72,   815,    74,    75,   110,   557,   558,   559,   560,   590,
-     116,    83,    84,  1190,  1191,   110,   811,   109,   109,   111,
-     111,   116,   113,   114,  1468,   709,  1470,   114,   110,   114,
-     110,   881,   132,   683,   116,   700,   116,   110,   583,   111,
-     621,   109,  1159,   116,   109,   626,   111,   273,   132,   714,
-     407,   632,   734,   903,  1045,   465,   109,  1134,   111,   709,
-     910,   911,   912,   110,   914,   749,  1127,   881,   114,   116,
-     296,   110,   110,   110,   700,  1095,   926,   116,   116,   116,
-    1100,  1525,   308,    82,   109,  1290,   111,   109,   714,   939,
-     940,    85,    86,    87,   944,   109,   110,   111,   109,   949,
-     950,    82,  1095,    92,    93,   686,   112,  1100,     0,     1,
-     655,   119,   657,   116,   117,   109,   966,   111,   949,   113,
-     114,  1238,   129,    72,   110,   111,   976,    76,   485,  1190,
-    1191,   353,   489,   355,    83,    84,   128,    29,    30,   465,
-      32,    58,    59,   724,   950,    94,   811,   115,   116,  1505,
-     116,   117,    44,  1203,  1204,    94,  1206,   131,    50,  1009,
-     109,   111,   707,  1213,   109,  1215,    58,   748,   109,   118,
-     119,   114,    64,  1117,   112,    67,   116,   117,    70,   112,
-    1030,  1031,   109,   110,   111,   811,     4,     5,     6,     7,
-       8,     9,    84,    85,   109,   110,   111,   881,   112,  1555,
-    1050,    44,    45,  1009,   109,   110,   111,   110,   881,    10,
-      11,    12,    13,    14,   553,   554,   108,  1012,   109,   111,
-      30,   443,   110,   110,  1401,   110,   118,   911,   809,   455,
-     110,   881,   110,   814,   555,   556,  1050,   112,    39,   111,
-    1090,   131,  1419,   116,   601,  1095,   603,    58,    59,    60,
-    1100,    69,   114,    71,   114,   881,   109,   149,   112,  1109,
-     561,   562,   672,   110,  1125,   157,    67,  1117,  1129,  1130,
-     162,  1263,  1264,  1265,    84,    85,   949,   110,   112,   117,
-     112,   507,   112,   509,  1134,  1220,   512,   112,   117,   515,
-       3,   117,   116,    94,    29,   187,   188,    10,    11,    12,
-      13,    14,   110,   110,   116,   114,   112,   112,   109,  1159,
-     111,   203,   115,   110,   132,  1492,  1493,   118,   119,   211,
-     115,   115,   903,   109,   116,   881,    39,  1377,   220,   910,
-     110,   223,   689,   132,   110,   110,   117,   110,   230,   110,
-    1401,   110,   116,   110,   110,   926,   672,  1012,   110,   110,
-     110,  1201,  1202,   245,    67,   110,   110,   249,  1419,   110,
-     110,   253,   254,   720,   721,   110,  1050,   948,   949,   950,
-    1220,  1202,   110,   110,  1224,   267,   268,  1050,   110,    72,
-      29,   115,   274,    76,   131,   795,  1012,  1248,  1238,   281,
-      83,    84,  1242,   949,   117,   805,    72,   116,    74,    75,
-    1050,    94,    72,   110,    74,    75,  1201,    83,    84,   819,
-    1224,  1242,   112,    83,    84,   112,   109,   116,   111,   964,
-     110,   110,   110,   117,  1050,   118,   119,   112,  1009,   116,
-     114,  1492,  1493,   109,   116,   245,   110,   329,   114,   109,
-    1290,  1291,   110,   988,   114,   110,   991,   110,   993,  1299,
-     112,   110,   116,  1397,  1304,   116,     3,   349,   350,   110,
-     686,   818,  1540,    10,    11,    12,    13,    14,   112,   795,
-     109,   109,   109,   830,   366,  1159,   109,  1338,   370,   805,
-     109,  1342,   117,   115,   112,   132,   110,  1337,   110,   381,
-    1304,   110,    39,   819,  1050,   115,  1530,  1530,  1043,  1530,
-     115,   114,   129,  1530,  1299,   397,  1337,   112,  1530,  1090,
-     110,  1531,   116,   112,   132,   407,   112,   110,  1530,  1530,
-      67,     4,     5,     6,     7,     8,     9,   116,  1201,  1202,
-     110,   110,    47,   425,   112,  1555,  1201,   112,  1531,   431,
-    1224,   433,   112,   110,   112,   132,   112,  1397,   112,   132,
-      33,  1224,   115,  1134,  1238,   912,    72,   914,    74,    75,
-      76,  1505,  1555,   132,   110,  1415,   115,    83,    84,  1242,
-     132,   381,   132,   117,  1224,  1201,   468,   110,   112,   115,
-     112,   473,   112,  1444,   112,    56,    69,   944,    71,   481,
-    1440,   112,   112,   485,   112,   112,   110,   489,  1224,   110,
-     492,   109,   494,   881,    72,   112,    74,    75,    76,  1440,
-     112,   109,   109,    60,  1464,    83,    84,  1027,  1028,   110,
-    1304,  1471,   514,  1473,   110,  1475,  1299,   114,    99,   132,
-     112,  1304,   117,   112,  1299,   110,   112,   529,  1530,  1220,
-     532,   109,   534,   535,  1530,   110,  1202,  1530,    96,   109,
-    1464,    96,   109,   115,  1304,  1505,   112,  1471,   132,   110,
-    1510,  1242,  1512,   116,  1337,    42,   110,   110,  1224,   110,
-     110,   117,   110,  1299,  1524,  1085,  1086,   132,  1304,    96,
-    1530,  1531,   492,   132,   494,     3,  1242,    96,  1531,   110,
-    1540,   583,    10,    11,    12,    13,    14,   132,   590,   132,
-     926,  1027,  1028,   117,    72,  1555,   110,     0,    76,   601,
-    1524,   603,  1555,   286,  1396,    83,    84,   132,  1263,  1264,
-    1265,    39,   110,   110,   195,   115,    94,   112,   112,   132,
-     622,   109,   132,   115,  1540,   308,   309,   110,  1095,    32,
-     115,   109,    72,  1100,    74,    75,   638,   218,  1304,    67,
-     118,   119,   644,    83,    84,   110,  1337,   228,   132,  1085,
-    1086,   653,   110,   655,   656,   657,   110,  1440,  1066,   565,
-     563,  1224,  1493,   346,   564,  1053,  1321,    70,   566,  1383,
-    1464,  1337,   567,  1565,   114,  1314,  1130,  1471,  1342,  1081,
-    1471,  1464,   686,   686,   919,  1100,   927,   689,  1471,   699,
-     583,   693,   980,   695,   873,   650,   724,   699,   946,   382,
-      50,   734,  1242,   485,  1464,   707,    -1,    26,    27,    28,
-      -1,  1471,   571,   571,    64,   296,  1236,    67,   720,   721,
-      70,   571,    -1,    -1,   644,    -1,    -1,    -1,  1464,    -1,
-    1524,    -1,   734,    -1,    -1,  1471,    72,    -1,    74,    75,
-      76,  1524,    -1,    58,    -1,     0,     1,    83,    84,  1440,
-      -1,  1271,  1407,  1408,  1090,   158,    -1,    -1,    -1,  1279,
-    1280,  1281,    -1,    -1,  1524,     4,     5,     6,     7,     8,
-       9,    -1,    -1,   693,  1440,   695,    -1,    32,    -1,   699,
-      -1,   100,  1473,   102,  1475,    -1,    -1,    -1,  1524,    -1,
-    1445,    -1,    -1,   108,    -1,    50,   111,    -1,  1464,   149,
-    1236,    67,    -1,    -1,    -1,  1471,   191,    -1,    -1,    -1,
-      -1,    77,   162,   198,    -1,    70,   818,    -1,    -1,  1510,
-      -1,  1512,    -1,    -1,    -1,  1345,    -1,    -1,   830,   232,
-      69,    -1,    71,    -1,    -1,  1271,  1224,    -1,   188,    -1,
-      -1,    -1,   157,  1279,  1280,  1281,    -1,    -1,    -1,  1540,
-     253,  1506,   107,   119,    -1,   258,    -1,    -1,  1524,    -1,
-    1515,   211,    -1,   444,   183,    -1,    -1,   550,   551,   552,
-      -1,   873,    -1,   223,   193,   194,    -1,    -1,   880,   198,
-      -1,   200,   201,    -1,    -1,   270,    -1,    -1,    72,   470,
-      74,    75,    76,    -1,   149,    -1,   162,    -1,    -1,    83,
-      84,   903,   157,   158,    -1,   220,    -1,    -1,    -1,  1345,
-     912,    -1,   914,    -1,    -1,    -1,    -1,    -1,    72,   921,
-      74,    75,    76,    -1,    -1,   109,   507,    -1,    -1,    83,
-      84,   512,  1320,   188,   515,    -1,    -1,    -1,    -1,   324,
-      94,    -1,   944,    -1,    -1,    -1,    -1,   332,   203,   352,
-     335,   206,   207,   873,    -1,   109,   211,   223,    -1,   274,
-     880,    -1,   964,    -1,   118,   119,   281,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   232,   980,   329,
-      -1,   236,    -1,   238,    -1,    -1,   988,  1375,    -1,   991,
-    1378,   993,   247,    -1,    -1,   261,    -1,    -1,   253,    -1,
-     266,   921,    -1,   258,    -1,    -1,    -1,    -1,   672,    -1,
-      -1,    -1,    -1,   268,   399,   281,   419,    -1,   403,    -1,
-      -1,   276,    -1,    -1,    10,    11,    12,    13,    14,    -1,
-      -1,   434,    -1,    -1,   349,  1423,   439,    -1,    -1,    -1,
-    1428,  1043,    -1,    -1,   447,    10,    11,    12,    13,    14,
-      -1,   366,    -1,    39,    -1,   370,    -1,   407,    -1,    -1,
-     980,    -1,   465,  1530,    -1,    -1,    -1,    -1,    -1,    -1,
-    1458,    -1,    -1,    -1,    39,    -1,    -1,   760,    -1,  1081,
-     483,    67,   485,    -1,    -1,   351,    -1,   342,    -1,    -1,
-     671,   346,    -1,  1095,    -1,   480,    -1,   352,  1100,   680,
-      -1,    -1,    67,   684,    -1,    -1,    -1,    -1,    94,    -1,
-     365,    -1,    -1,    -1,   369,  1117,    -1,   372,   433,    -1,
-      -1,    -1,    -1,   109,   527,   111,    -1,    -1,    -1,    94,
-      -1,   795,   118,   119,    -1,    -1,    -1,  1473,    -1,  1475,
-      -1,   805,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   819,  1544,    -1,    -1,    -1,
-      -1,  1081,  1550,    -1,   419,    -1,   432,    -1,    -1,    -1,
-      -1,    -1,    -1,  1561,  1510,    -1,  1512,  1565,    72,   434,
-      74,    75,    76,   449,   439,    -1,   571,   572,   591,    83,
-      84,    -1,   447,    -1,    72,  1197,    74,    75,    76,    -1,
-      94,    -1,    -1,     0,    -1,    83,    84,    -1,   474,    -1,
-     465,    -1,    -1,   468,    -1,   109,    94,   111,  1220,    -1,
-      -1,    -1,    -1,   117,   118,   119,    -1,    -1,   483,    -1,
-     485,   109,   635,   636,   637,    32,    -1,    -1,   493,    -1,
-     118,   119,   497,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   654,    -1,    -1,    -1,    -1,   575,   576,    -1,    -1,
-      -1,  1263,  1264,  1265,    -1,    -1,    -1,    -1,    -1,   672,
-      -1,   526,   527,    70,   659,   590,    -1,  1197,   663,    -1,
-     683,    -1,    -1,    -1,    -1,   604,    -1,    -1,   607,   608,
-      -1,   610,    -1,   612,   613,    -1,    -1,    -1,   617,   618,
-      -1,    -1,    -1,    -1,    -1,    -1,   709,   622,    -1,   712,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   572,     0,  1321,
-      -1,    -1,    -1,   638,   905,    -1,  1009,    -1,    -1,   595,
-      -1,    -1,    -1,    -1,    -1,   590,   591,    -1,   653,    -1,
-      -1,    -1,    -1,     0,     1,    -1,   749,    -1,   603,    -1,
-      32,    -1,    -1,    -1,    -1,    -1,    -1,   623,    -1,    -1,
-      -1,   158,   628,  1027,  1028,    -1,   621,  1050,    -1,    -1,
-      -1,   626,    -1,    -1,    -1,    32,    -1,   632,    -1,    -1,
-     635,   636,   637,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-      -1,    -1,   795,    -1,  1396,  1397,    -1,    -1,    -1,   654,
-      -1,    -1,   805,    -1,   807,  1407,  1408,    -1,    -1,   812,
-      67,    -1,   815,    70,   799,    -1,   819,   672,    -1,   734,
-      -1,  1085,  1086,    -1,    -1,    -1,    -1,    -1,   683,    -1,
-      -1,    -1,    -1,    -1,   700,    -1,    -1,    -1,    -1,   758,
-     759,    -1,    -1,  1445,    -1,    -1,    -1,    -1,   714,    -1,
-      -1,    -1,    -1,    -1,   709,    -1,   253,   712,    -1,    -1,
-      -1,   258,    -1,    -1,    -1,    -1,   721,    -1,   734,   724,
-      72,    -1,    74,    75,    76,    -1,   158,    -1,   881,    -1,
-    1061,    83,    84,    -1,    72,    -1,    74,    75,    76,    -1,
-      -1,    -1,    94,   748,   749,    83,    84,    -1,    -1,   754,
-      -1,   158,    -1,  1505,  1506,    -1,    94,   109,   911,   111,
-      -1,    -1,    -1,  1515,    -1,    -1,   118,   119,    -1,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,  1530,  1531,
-     118,   119,    -1,   918,    -1,    -1,    -1,    -1,    -1,    -1,
-     795,    -1,    -1,    -1,    -1,   811,    -1,    -1,    -1,    -1,
-     805,    -1,   807,  1555,   809,   352,    -1,   812,    -1,   814,
-     815,    -1,    -1,   966,   819,    -1,   223,    -1,    -1,    -1,
-      -1,   253,    -1,    -1,   829,    -1,   258,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,    -1,   903,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   253,    72,    -1,    74,
-      75,    76,    -1,    -1,   923,    -1,    -1,  1271,    83,    84,
-      -1,   131,    -1,   998,    -1,  1279,  1280,  1281,    -1,    94,
-      -1,    -1,   419,    -1,  1027,  1028,   881,  1030,  1031,    -1,
-    1015,    -1,    -1,    -1,   109,    -1,   111,   434,    -1,    -1,
-      -1,    -1,   439,   118,   119,    -1,    -1,  1050,   903,    -1,
-     447,    -1,    -1,    -1,    -1,   910,   911,    -1,    -1,   914,
-      -1,    10,    11,    12,    13,    14,    -1,    -1,   465,    -1,
-     352,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1345,  1085,  1086,    -1,   940,   483,    -1,   485,    -1,
-      39,    -1,    -1,   948,   949,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1093,    -1,
-      -1,   966,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
-     527,    -1,  1313,    -1,    83,    84,    -1,   419,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,  1012,    -1,    -1,    -1,
-    1135,    -1,   434,    -1,  1009,    -1,  1159,   439,    -1,    -1,
-     109,    -1,   111,    -1,    -1,   447,    -1,  1022,  1087,   118,
-     119,    -1,  1027,  1028,    -1,  1030,  1031,   434,    -1,    -1,
-      -1,    -1,    -1,   465,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   591,  1050,    -1,    -1,    -1,  1202,
-      -1,   483,    -1,   485,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,     1,   240,   205,   186,   186,   117,     0,    43,   534,
+      43,    43,   600,   756,   646,     1,   749,   187,   521,     0,
+     186,   186,   186,   157,   169,   170,   749,   749,   186,   106,
+     220,   602,    32,   186,   345,   349,     0,   188,   280,    32,
+     157,   513,   600,    43,   874,    43,   603,   874,   349,    49,
+     620,    32,   609,   733,     0,   983,    49,   600,   492,   571,
+       0,     1,   496,    63,   602,   187,    66,    32,    32,    69,
+      63,   692,    43,    66,    64,     0,    69,  1040,    39,   156,
+       1,   600,    57,    69,   266,   266,    32,    43,    51,  1398,
+     364,   202,    32,    63,   368,  1321,   418,   267,    82,   600,
+     266,   266,   266,  1052,  1053,  1033,   106,    32,   266,   600,
+     600,   262,   263,   266,   114,    72,   438,   117,   118,   109,
+     282,    72,  1402,    96,   446,    39,    66,   695,    39,    69,
+      28,   109,   107,    39,    39,   110,    95,    39,    82,   128,
+      39,    66,   131,  1021,    82,   267,   109,   147,   148,   122,
+     111,   186,    11,   186,   186,   148,   156,   157,     0,   295,
+    1469,   161,   132,  1020,  1021,   109,    44,    45,   161,     0,
+     129,   482,   905,   109,   488,   132,     0,     1,    72,  1128,
+      78,   132,   905,   905,   687,    49,   186,   187,   186,   109,
+      32,   257,   130,  1419,   187,   109,   109,   111,   109,   718,
+     111,    32,   202,   109,   109,   111,   111,   109,    32,   111,
+     210,   131,    43,  1040,    72,   186,  1496,   210,    49,    82,
+     410,  1501,   222,   117,   812,    83,    84,   718,   718,   222,
+     186,   266,    63,   266,   266,    66,   406,   115,    69,  1452,
+     240,  1521,    85,   986,   219,    69,   112,   110,  1528,    82,
+     114,   109,   252,   824,   812,   116,   107,   814,   114,   252,
+     260,    44,    45,     3,   341,   265,   266,   267,   490,   812,
+     113,   252,   272,  1486,   267,  1488,   257,    82,   111,   900,
+     131,   793,   222,   147,   406,   396,   824,   252,   252,    49,
+     426,   427,   924,   812,   371,   295,     3,   222,   273,   433,
+      96,   602,  1501,   116,   109,   280,   252,   307,     0,   620,
+     480,   812,   252,   424,   625,   589,   433,   148,   110,   430,
+     112,   812,   812,   323,   116,  1288,   122,   252,   328,  1528,
+     161,   114,   253,    44,    45,   328,     0,    82,   906,   131,
+     132,   341,   504,   110,   932,   345,   210,  1225,   482,   349,
+     350,   109,   418,   111,   114,   186,   187,   631,   480,   681,
+     109,   116,   933,   130,   364,   110,    90,    91,   368,  1049,
+     506,   371,   438,   348,   932,   511,   240,   132,   514,   210,
+     446,  1211,   604,   951,  1211,   130,   608,   426,   427,   932,
+     365,   222,   526,    72,   369,   112,   396,  1275,   116,   116,
+     285,   125,   126,   114,    83,    84,   406,   629,   272,   526,
+     252,   633,   130,   406,  1472,   257,   110,  1274,  1275,    55,
+    1478,   252,   307,   308,   424,   350,   426,   427,   252,   999,
+     430,   567,   111,   433,   745,   266,   130,   418,   112,   116,
+    1498,   110,   116,   307,   111,  1503,   113,   116,   525,  1501,
+     210,  1008,  1009,   130,   454,   494,   590,   438,  1386,  1387,
+     345,  1288,    98,   130,   967,   446,   635,   636,   131,  1521,
+     229,   112,   472,   590,   513,   116,  1528,   116,  1441,   110,
+     480,   345,   482,   652,   484,  1448,   116,   480,   488,   248,
+     732,   484,   110,   132,   494,  1127,   381,   328,   116,   116,
+     130,   482,   647,   484,   666,   656,   506,   941,   508,   981,
+     824,   511,   272,   513,   514,   132,  1394,   687,   349,   109,
+     484,   521,   109,   824,   116,   525,   526,   109,  1099,   803,
+     109,   111,   111,   113,   808,   295,  1499,  1394,   484,   578,
+     132,   710,   109,   654,   484,   116,   467,   307,   473,  1117,
+     130,     4,     5,     6,     7,     8,     9,   116,   194,   484,
+     110,   132,   426,   427,   116,   687,   116,   116,   116,   116,
+     570,   571,   116,   132,   736,   406,   418,   109,   578,   116,
+     132,   217,  1085,   132,   132,   132,   109,  1090,   132,   589,
+     590,   227,   117,   904,   594,   132,   438,   116,   123,   124,
+     600,   116,   602,   109,   446,   111,   110,   528,  1288,  1177,
+    1178,   745,   533,   132,  1441,   681,    69,   132,    71,   110,
+     620,  1448,   896,   937,   846,   625,    72,   627,    74,    75,
+     494,   631,   801,   110,   634,   635,   636,    83,    84,    72,
+     110,   707,   484,   112,   590,   110,   621,   116,   112,   513,
+      83,    84,   652,   484,   654,   109,   910,   488,   912,   295,
+     484,   582,   637,   109,   549,   550,   551,   744,   114,   112,
+     109,   861,  1499,   116,    72,   809,   651,   115,    72,   132,
+      74,    75,  1362,   109,   684,    83,    84,   687,   999,    83,
+      84,   881,   809,   109,   454,   111,    72,   622,    74,    75,
+     681,    85,    86,    87,   109,   943,   111,    83,    84,   132,
+     710,   711,   712,   111,   578,   109,   938,  1115,   718,   719,
+     114,  1119,   867,   905,   905,   109,   707,   111,    64,   113,
+     114,   109,   653,   111,   655,   112,   110,   907,   114,   905,
+     905,   905,   116,   109,   744,   745,   506,   905,   508,   749,
+     750,   511,   905,   109,   514,   111,   620,   732,   109,    70,
+     111,   625,   109,    74,   745,  1445,    77,  1447,    79,   600,
+     904,   602,  1505,   698,   132,    86,   556,   557,   558,   559,
+    1305,     3,  1505,  1505,   705,   907,   114,   712,    10,    11,
+      12,    13,    14,   793,     4,     5,     6,     7,     8,     9,
+     110,   801,   109,   803,   111,   805,   116,   443,   808,   809,
+    1012,   114,   812,   109,  1382,   111,    72,    39,    74,    75,
+    1500,   117,   118,    33,   824,    72,   903,    83,    84,   114,
+    1398,   132,   110,   469,   132,  1146,    83,    84,   116,   681,
+      10,    11,    12,    13,    14,    67,    72,   110,  1122,   109,
+      76,   109,   110,   116,    82,   111,   687,    83,    84,    69,
+     110,    71,    49,   809,   111,   707,   116,   110,   109,    39,
+     506,   756,   109,   116,   874,   511,    63,   112,   514,    66,
+     805,    82,    69,   109,   118,   111,  1020,   718,   719,   110,
+    1035,   117,   118,   874,   127,   116,   896,    67,    88,    89,
+    1468,  1469,   213,   903,   904,   905,    72,   907,     4,     5,
+       6,     7,     8,     9,  1225,  1085,   110,    83,    84,   919,
+    1090,   128,   116,   904,   684,   110,    94,   109,   874,   111,
+      30,   116,   932,   933,   874,   117,   118,   937,   131,   109,
+      72,   111,   942,   943,    76,   111,   111,   117,   118,   874,
+     109,    83,    84,  1115,   110,   109,   942,  1119,  1120,   112,
+     116,   148,   109,  1085,   111,     0,     1,   967,  1090,   112,
+     117,   118,   110,    69,   161,    71,   110,   109,  1481,   119,
+     120,   812,   116,    83,    84,   117,   118,   112,    10,    11,
+      12,    13,    14,   824,    29,    30,  1107,    32,   110,   999,
+     187,   110,   942,   110,   116,    92,    93,    72,    43,    74,
+      75,    76,  1146,    72,    49,    74,    75,    39,    83,    84,
+    1020,  1021,    57,   210,    83,    84,   110,  1530,    63,   115,
+     116,    66,   874,   669,    69,   222,   957,   109,   110,   111,
+    1040,   352,   678,   354,   109,    67,   682,   110,    83,    84,
+     874,   109,   117,   118,  1190,  1191,    72,  1193,   979,  1040,
+      76,   110,   983,   110,  1200,   110,  1202,    83,    84,   116,
+     112,   116,   107,  1235,   905,   110,   907,  1002,   110,   943,
+    1080,   111,   117,   114,   116,  1085,   110,   109,   116,   111,
+    1090,   131,   116,   109,  1040,   117,   118,   110,   111,  1099,
+    1040,   117,   118,   506,    66,   508,   937,  1107,   511,    58,
+      59,   514,  1033,   148,   999,  1040,   115,   116,   942,    44,
+      45,   156,  1122,   552,   553,    72,   161,    74,    75,    76,
+    1207,   442,   109,   110,   111,   999,    83,    84,   560,   561,
+    1274,   328,   554,   555,   244,   114,  1146,   114,   109,   110,
+     111,   186,   187,   109,   112,  1040,   118,   110,   110,   919,
+    1322,   112,   109,    29,  1326,  1146,   112,   202,   112,     3,
+     117,   118,   109,   110,   111,   210,    10,    11,    12,    13,
+      14,    58,    59,    60,   219,   112,   116,   222,  1188,  1189,
+    1248,  1249,  1250,   110,   229,   130,   130,   130,  1040,   161,
+     110,   112,   114,  1189,   112,    39,   115,  1207,   110,   244,
+     115,  1211,   115,   248,   109,   116,  1040,   252,   253,   406,
+       1,   110,  1358,   110,    72,  1225,    74,    75,    76,  1229,
+    1211,   266,   267,    67,   132,    83,    84,   116,   273,   110,
+     110,   110,   110,  1229,  1225,   280,   110,   110,  1188,  1189,
+     110,   116,   110,   110,  1085,   110,   110,   110,   110,  1090,
+     222,  1423,   898,  1188,   110,  1211,   110,  1378,    49,   110,
+     110,  1211,   115,   874,  1274,  1275,    29,  1515,   110,   130,
+     380,   131,   112,  1283,   112,   116,  1211,   110,  1288,  1229,
+     110,   116,   110,   328,   130,   116,   112,   114,   260,   110,
+     110,   464,   110,   265,   116,   112,   110,  1288,   110,   110,
+     116,   116,   112,   348,   349,    10,    11,    12,    13,    14,
+    1080,  1321,   109,  1505,  1505,   106,   109,  1248,  1249,  1250,
+     365,   109,   109,   114,   369,  1321,  1506,   109,   130,  1505,
+    1505,  1505,  1288,  1283,    39,   380,     3,  1505,  1288,   112,
+     132,   115,  1505,    10,    11,    12,    13,    14,  1283,   110,
+    1530,   396,   110,  1288,   110,  1189,   147,   128,   115,  1211,
+    1481,   406,    67,   115,   464,   156,   114,   695,  1378,   112,
+     132,  1321,    39,   110,  1506,   116,   112,  1211,   350,   424,
+     112,   491,   110,   493,  1394,   430,   110,   432,   110,   112,
+     110,   112,  1377,   112,   112,  1229,   112,   112,  1530,    72,
+      67,    74,    75,    76,   109,  1051,   111,    47,   115,  1419,
+      83,    84,   117,   118,    72,   206,    74,    75,    76,   210,
+     132,   132,   467,  1419,   132,    83,    84,   472,   132,   132,
+     110,  1441,  1043,   115,   130,   480,  1288,   115,  1448,   484,
+    1450,   110,  1452,   488,   112,   109,   491,   112,   493,   240,
+    1441,   109,   112,   112,  1288,  1386,  1387,  1448,   786,   431,
+    1505,   112,  1505,  1505,   112,   110,   110,    60,   109,  1419,
+     112,  1481,    66,   112,   109,   132,  1486,   110,  1488,   110,
+     114,   272,    76,   528,   275,  1441,   112,  1321,   533,  1499,
+     112,  1441,  1448,  1424,   110,  1505,  1506,   670,  1448,   112,
+     110,   473,   109,  1506,   295,  1515,  1441,    96,  1499,    96,
+      85,    86,    87,  1448,   109,   132,   307,   115,   110,    72,
+    1530,    74,    75,    76,   118,   110,   110,  1530,   110,    42,
+      83,    84,   642,   116,   109,   863,   111,   582,   113,   114,
+     130,   132,   110,  1499,   589,   110,   132,    96,    96,  1499,
+     341,  1482,   132,   110,   345,   600,   109,   602,   132,   110,
+    1491,   132,   112,   110,  1499,   110,   132,   161,   112,   115,
+     670,   109,   132,   364,   115,   115,   621,   368,   906,   110,
+     371,   691,   110,   693,   110,  1419,   110,   697,  1056,  1441,
+     132,   564,   637,   562,   977,   565,  1448,   642,   563,   566,
+    1211,  1211,  1469,  1364,  1540,  1298,   651,  1441,   653,   654,
+     655,  1120,  1326,  1448,  1448,   912,   789,    66,   684,  1071,
+     684,  1090,   594,   951,   920,   697,   799,   582,   222,   971,
+     867,   648,   722,  1229,    83,   426,   427,   939,   570,   484,
+     813,  1515,   687,   732,   570,   570,   691,  1499,   693,    -1,
+     622,  1297,   697,    -1,    -1,   627,    -1,    -1,   986,    -1,
+     705,    -1,    -1,   454,  1505,  1499,   260,    -1,    -1,   118,
+      -1,   265,    -1,   718,   719,    -1,   467,    -1,    -1,    -1,
+    1450,    -1,  1452,    -1,    -1,    -1,   280,   732,    -1,   789,
+      -1,    -1,    -1,  1304,    -1,    -1,    -1,    -1,    -1,   799,
+      -1,   492,    -1,   494,    -1,   496,    -1,    -1,    -1,  1037,
+      -1,    -1,   161,   813,    -1,   506,  1486,   508,  1488,    -1,
+     511,    -1,   513,   514,    -1,    -1,   698,    57,    -1,    10,
+      11,    12,    13,    14,   525,    -1,    -1,    -1,    -1,    72,
+     712,    74,    75,    76,    -1,  1356,    -1,    -1,  1359,    -1,
+      83,    84,    -1,    -1,    -1,    -1,   350,   867,    39,    -1,
+      -1,    -1,    -1,   873,    -1,    -1,    -1,   812,    -1,    -1,
+      -1,    -1,    -1,   222,    -1,    -1,   109,   107,   111,   824,
+     110,    -1,    -1,    -1,   117,   118,    67,   578,    -1,  1117,
+      -1,  1402,    -1,    -1,    -1,    -1,  1407,   130,   589,    -1,
+      -1,    -1,    -1,  1449,   914,  1451,    -1,    -1,    -1,    -1,
+      -1,   260,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,
+      -1,    -1,   867,    -1,  1435,    -1,   156,   670,   873,   620,
+      -1,    -1,    -1,   805,   625,    -1,    -1,   431,    -1,  1485,
+     631,  1487,     0,     1,  1017,  1018,    -1,    -1,    -1,  1177,
+    1178,   896,    -1,    -1,   448,    -1,    -1,    -1,    -1,    -1,
+     905,   971,   907,    -1,    -1,    -1,    -1,    -1,    -1,   914,
+      -1,    -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,   473,
+      -1,    -1,    -1,  1529,    -1,  1531,    -1,    -1,    -1,   219,
+      -1,    49,   937,   684,    -1,    -1,    -1,    -1,  1544,  1545,
+      -1,   350,  1075,  1076,    -1,    -1,    -1,    -1,  1519,    -1,
+      -1,    69,   957,    -1,  1525,    -1,    -1,  1017,  1018,    -1,
+      -1,    -1,    -1,    -1,    -1,  1536,   971,    -1,    -1,  1540,
+      -1,   722,    -1,    -1,   979,    -1,    -1,    -1,   983,     0,
+       1,    -1,    -1,   273,    -1,    -1,   789,    -1,   106,    -1,
+     280,    -1,    -1,   744,    -1,    -1,   799,    -1,    -1,    -1,
+      -1,  1071,    -1,    -1,    -1,     0,    -1,    -1,    -1,    -1,
+     813,    32,    -1,    -1,    -1,  1075,  1076,    -1,    -1,    -1,
+      -1,    -1,   431,    -1,    -1,    -1,    -1,    -1,  1033,    -1,
+     148,    -1,    -1,    -1,    -1,    -1,    -1,    32,   156,   157,
+     594,    -1,    -1,    -1,    -1,    66,    -1,    -1,    69,    -1,
+      -1,    -1,   803,    -1,    -1,    -1,    -1,   808,   348,    -1,
+      -1,    -1,    -1,    -1,   473,    -1,  1071,    -1,   622,   187,
+    1002,    -1,    -1,   627,    69,   365,    -1,    -1,    -1,   369,
+    1085,    -1,    -1,    -1,   202,  1090,    -1,   205,   206,    -1,
+    1223,    -1,   210,    -1,  1382,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1398,    -1,    -1,   231,  1184,    -1,    -1,   235,    -1,   237,
+      -1,    -1,  1255,    -1,    -1,    -1,    -1,    -1,   246,    -1,
+    1263,  1264,  1265,    -1,   252,    -1,   157,    -1,    -1,   257,
+      -1,    -1,   432,    -1,   698,   896,    -1,    -1,    -1,   267,
+      -1,    -1,   903,    -1,    -1,    -1,    -1,   275,   712,    -1,
+      -1,     0,   157,  1223,    -1,    -1,    -1,    -1,   919,    -1,
+      -1,    72,    -1,    74,    75,    76,    -1,    -1,   732,  1184,
+    1468,  1469,    83,    84,    -1,   594,    -1,    -1,    -1,    -1,
+     941,   942,   943,    32,  1327,  1255,    -1,    -1,    -1,    -1,
+      -1,   222,  1207,  1263,  1264,  1265,    -1,    -1,   109,    -1,
+     111,    -1,    -1,   622,  1017,  1018,   117,   118,   627,    -1,
+      -1,    -1,    -1,   341,    -1,    -1,    -1,   345,    -1,    -1,
+      69,   252,    -1,   351,    -1,    -1,   231,    -1,    -1,    -1,
+      -1,    -1,    -1,  1248,  1249,  1250,   364,    -1,   999,    -1,
+     368,   805,    -1,   371,    -1,    -1,  1188,   252,    -1,    -1,
+      -1,    -1,   257,    -1,    -1,    -1,    -1,  1327,    -1,    -1,
+      -1,    -1,  1075,  1076,    -1,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   698,
+      -1,    83,    84,    72,    -1,    74,    75,    76,    -1,   589,
+     418,    -1,    -1,   712,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   433,    -1,   109,   157,   111,
+     438,    -1,    -1,    -1,    -1,   117,   118,    -1,   446,  1080,
+     109,   621,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
+      -1,    -1,    -1,    -1,    -1,    -1,   464,   637,    -1,   467,
+      -1,  1283,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,
+      -1,   651,    -1,    -1,   482,    -1,   484,    -1,    -1,    -1,
+      -1,  1122,  1377,  1378,   492,    -1,    -1,    -1,   496,    -1,
+      -1,  1386,  1387,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,    -1,    -1,    -1,   805,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   525,   526,    -1,
+      -1,    -1,   433,   252,    -1,    -1,    -1,   131,   257,  1424,
+      -1,    -1,    -1,   418,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,
+      -1,    -1,   732,   438,    -1,    -1,    -1,    -1,  1002,    -1,
+      -1,   446,  1255,   571,    -1,    -1,  1207,    -1,    -1,    -1,
+    1263,  1264,  1265,   484,    -1,    -1,    -1,    -1,    -1,   464,
+      -1,   589,   590,    -1,    -1,    -1,  1481,  1482,  1229,    -1,
+      -1,    -1,    -1,    -1,   602,    -1,  1491,   482,    -1,   484,
+      -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
+    1505,  1506,   620,    -1,    -1,   526,    -1,   625,    -1,    -1,
+      -1,    -1,   351,   631,    -1,    -1,   634,   635,   636,    -1,
+      -1,    -1,    66,    -1,  1327,  1530,    -1,    -1,    72,    -1,
+      -1,   526,    76,    -1,   652,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   670,    -1,    -1,    10,    11,    12,    13,    14,
+      -1,    -1,    -1,   681,    -1,   109,    -1,   111,    -1,   590,
+    1321,    -1,    -1,   117,   118,   119,   120,   121,   122,   418,
+      -1,    -1,    -1,    -1,    39,    -1,   130,    -1,    -1,   707,
+      -1,    -1,   710,  1002,   433,   590,    -1,    -1,    -1,   438,
+      -1,   719,    -1,    -1,   722,    -1,   896,   446,    -1,    -1,
+      -1,    -1,    67,   634,   635,   636,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    -1,   464,   744,   745,    83,    84,
+      -1,   652,   750,    -1,  1188,    -1,    -1,    -1,    -1,   634,
+     635,   636,    -1,   482,    -1,   484,    -1,    10,    11,    12,
+      13,    14,    -1,    -1,   109,    -1,   111,   652,    -1,    -1,
+      -1,    -1,   117,   118,    -1,    -1,    -1,    -1,  1419,    -1,
+      -1,   789,    -1,    -1,    -1,   670,    39,    -1,    -1,    -1,
+      -1,   799,    -1,   801,    -1,   803,   681,   526,   806,   710,
+     808,   809,    -1,    -1,    -1,   813,    -1,    -1,    -1,  1450,
+      -1,  1452,    -1,    -1,    67,   823,    -1,    -1,    -1,    72,
+      -1,    -1,   707,    76,    -1,   710,    -1,    -1,    -1,    -1,
+      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1283,
+      -1,     0,    -1,    -1,    -1,  1486,    -1,  1488,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
+     745,   590,    -1,    -1,   117,   118,   874,    -1,     0,    -1,
+     190,    -1,    -1,    32,  1515,    -1,    -1,   197,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   896,  1188,
+     801,    -1,    -1,    -1,    -1,   903,   904,    -1,   809,   907,
+      32,    -1,    -1,    -1,   789,   634,   635,   636,    -1,    -1,
+      69,    -1,    -1,    -1,   799,    -1,   801,    -1,    -1,    -1,
+      -1,   806,    -1,   652,   809,   933,    -1,    -1,   813,    -1,
+      -1,    -1,    -1,   941,   942,    -1,    -1,    69,    -1,    -1,
+      -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   269,
+      -1,    -1,   681,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   874,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   707,    -1,
+      -1,   710,    -1,    -1,  1283,    -1,    -1,    -1,    -1,   874,
+      -1,   999,    -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,
+      -1,    -1,    -1,   323,  1012,    -1,    -1,    -1,    -1,  1017,
+    1018,   331,  1020,  1021,   334,    -1,   745,    -1,    -1,   904,
+      -1,    -1,    -1,    -1,    -1,   157,    -1,  1207,    -1,    -1,
+      -1,   942,  1040,    -1,    -1,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+     789,    -1,    30,    31,    32,    -1,    -1,  1075,  1076,    -1,
+     799,    39,   801,    -1,    -1,    -1,    -1,   806,   398,    -1,
+     809,    -1,   402,    -1,   813,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   252,    -1,    -1,    -1,    -1,   257,    67,
+      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,  1020,
+    1021,    -1,    -1,    -1,  1122,    83,    84,    -1,    -1,    -1,
+     252,    -1,    -1,    -1,    -1,   257,    -1,    -1,    -1,  1040,
+      -1,    -1,  1017,  1018,    -1,  1020,  1021,    -1,  1146,    -1,
+      -1,   109,    -1,   111,    -1,   874,    -1,    -1,    -1,   117,
+     118,    -1,    -1,    -1,    -1,  1040,    -1,    -1,    -1,   479,
+      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
+      -1,    -1,    -1,    -1,    -1,   904,    -1,    -1,    -1,    -1,
+      -1,  1189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1075,  1076,   351,    -1,    39,    -1,    -1,  1377,    -1,  1207,
+      -1,    -1,    -1,  1211,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1223,    -1,  1225,    -1,   351,
+      -1,  1229,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    -1,    26,    27,    28,    83,    84,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1255,    -1,    -1,
+     570,   571,    -1,    -1,    -1,  1263,  1264,  1265,    -1,   418,
+      -1,  1146,    -1,    -1,   109,    -1,  1274,  1275,    -1,    -1,
+      -1,    -1,   117,   118,   433,    -1,    -1,  1188,  1189,   438,
+    1288,    -1,    -1,    -1,    -1,    -1,   418,   446,  1017,  1018,
+      -1,  1020,  1021,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1211,   433,    -1,    -1,  1189,   464,   438,    -1,    99,    -1,
+     101,  1040,    -1,  1321,   446,    -1,    -1,    -1,  1229,  1327,
+      -1,    -1,    -1,   482,    -1,   484,  1211,    -1,    -1,    -1,
+      -1,    -1,   464,    -1,    -1,   126,    -1,   657,  1223,    -1,
+    1225,   661,    -1,    -1,    -1,    -1,  1075,  1076,    -1,    -1,
+     482,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1274,  1275,    -1,    -1,   526,    -1,    -1,
+    1255,    -1,  1283,    -1,    -1,    -1,    -1,  1288,  1263,  1264,
+    1265,    -1,    -1,    -1,    -1,    -1,  1394,    -1,    -1,  1274,
+    1275,   182,    -1,    -1,   526,    -1,    -1,    -1,    -1,   190,
+      -1,   192,   193,  1288,    -1,    -1,   197,    -1,   199,   200,
+    1321,  1419,    -1,    53,    -1,    55,    -1,  1146,    58,    59,
+      60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   590,    -1,  1441,    -1,    -1,    -1,    77,    -1,    -1,
+    1448,    -1,  1327,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    -1,    -1,    -1,    26,    27,    28,    -1,   590,    -1,
+    1189,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
+      14,    -1,    -1,   793,    -1,   634,   635,   636,   269,    -1,
+      -1,    -1,  1211,  1394,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1499,    -1,   652,  1223,    39,  1225,    -1,  1506,    -1,
+      -1,    -1,   634,   635,   636,    -1,    -1,    -1,  1419,  1394,
+      -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     652,    -1,   681,    67,    -1,    -1,  1255,    99,    72,   101,
+    1441,    -1,    76,    -1,  1263,  1264,  1265,  1448,   670,    83,
+      84,    -1,    -1,    -1,    -1,  1274,  1275,    -1,   707,   681,
+      -1,   710,    -1,    -1,    -1,    -1,  1441,    -1,    -1,  1288,
+      -1,    -1,    -1,  1448,    -1,   109,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   117,   118,   707,    -1,    -1,   710,    10,
+      11,    12,    13,    14,    -1,    -1,   745,    -1,  1499,    -1,
+      -1,   911,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
+     182,    -1,    -1,   745,  1499,    -1,    -1,    -1,    -1,    -1,
+     192,   193,    -1,    -1,    -1,   197,    -1,   199,   200,    -1,
+     789,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+     799,    72,   801,    74,    75,    76,    -1,   806,    -1,    -1,
+     809,    -1,    83,    84,   813,    -1,    -1,   789,    -1,    10,
+      11,    12,    13,    14,    -1,  1394,    -1,   799,   988,   801,
+      -1,    -1,    -1,    -1,   806,    -1,    -1,   809,   109,    -1,
+     111,   813,    -1,    -1,    -1,  1005,   117,   118,    39,    -1,
+      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   344,    -1,   346,    -1,    -1,    -1,
+      -1,    -1,  1441,    -1,    -1,   874,    67,   357,   358,  1448,
+      39,    72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,
+      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   874,    -1,    -1,   904,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    72,    -1,    74,    75,    76,   109,    -1,
+     111,    -1,    -1,  1083,    83,    84,   117,   118,    -1,    -1,
+    1499,    -1,   904,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   574,   575,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,
+      -1,    -1,    -1,  1123,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   603,    -1,    -1,   606,   607,    -1,   609,    -1,
+     611,   612,    -1,    -1,    -1,   616,   617,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    -1,    30,    31,    32,    33,  1017,  1018,
+      36,  1020,  1021,    39,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1224,    -1,    -1,    -1,    -1,    -1,    -1,   485,    -1,
-    1085,  1086,    -1,  1236,    -1,  1238,    -1,    -1,   635,   636,
-     637,    -1,    -1,    -1,    -1,   527,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1271,    -1,
-     527,    -1,    -1,    -1,     0,   672,  1279,  1280,  1281,  1134,
-      -1,    -1,    -1,    -1,    -1,    -1,   683,  1290,  1291,    -1,
-      -1,  1472,    -1,  1474,    -1,    -1,    -1,    -1,    -1,    -1,
-    1219,  1304,    -1,    -1,  1159,  1220,    32,    -1,    -1,   591,
-      -1,    -1,   709,    -1,    -1,   712,    -1,    -1,    -1,    -1,
-      10,    11,    12,    13,    14,    -1,    -1,    -1,  1509,    -1,
-    1511,    -1,    -1,    -1,   591,  1201,    -1,    -1,    -1,    -1,
-      -1,    -1,  1345,    -1,    70,    -1,    -1,  1202,    -1,    39,
-      -1,    -1,   749,   635,   636,   637,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1220,    -1,    -1,    -1,  1224,
-      -1,    -1,   654,  1554,    -1,  1556,    -1,    67,   635,   636,
-     637,  1236,    72,  1238,    74,    75,    76,  1242,  1569,  1570,
-     672,    -1,    -1,    83,    84,    -1,    -1,   654,   795,    -1,
-      -1,   683,    -1,    -1,    94,    -1,    -1,    -1,   805,    -1,
-     807,    -1,  1415,    -1,    -1,   812,  1271,    -1,   815,   109,
-      -1,   111,   819,    -1,  1279,  1280,  1281,   709,   118,   119,
-     712,    -1,   158,  1299,    -1,  1290,  1291,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,  1304,
-      -1,    -1,    -1,    -1,    -1,   712,    -1,    -1,    -1,    -1,
-      -1,  1464,    -1,    -1,    -1,    -1,    -1,   749,  1471,    -1,
-      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1396,  1337,    -1,   881,    -1,    -1,    -1,    -1,    -1,
-    1345,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
-      76,    -1,    -1,   795,   911,    -1,    -1,    83,    84,    -1,
-      -1,  1524,    -1,   805,    -1,   807,    -1,   253,    94,    -1,
-     812,    -1,   258,   815,    -1,    -1,    -1,   819,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
-     807,    -1,   118,   119,    -1,    -1,    -1,    -1,   815,    -1,
-    1415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   966,
-      -1,    54,    -1,    56,    -1,    -1,    59,    60,    61,    -1,
-      63,    -1,    -1,    -1,    -1,  1440,    10,    11,    12,    13,
-      14,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,   881,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,  1464,
-      -1,    -1,    -1,    -1,    -1,    39,  1471,    10,    11,    12,
-      13,    14,    -1,    -1,   881,    -1,   352,    -1,    -1,   911,
-    1027,  1028,    -1,  1030,  1031,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    67,    -1,    -1,    39,    -1,    72,    -1,
-      74,    75,    76,  1050,    -1,    -1,    -1,    -1,    -1,    83,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1524,
-      94,    -1,    -1,    -1,    67,    -1,  1531,    -1,    -1,    72,
-      -1,    74,    75,    76,   966,   109,    -1,    -1,  1085,  1086,
-      83,    84,   949,   419,   118,   119,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    10,    11,    12,    13,    14,   434,   966,
-      -1,    -1,    -1,   439,    -1,    -1,   109,    -1,    -1,    -1,
-      -1,   447,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    10,    11,    12,    13,    14,   465,
-      -1,    -1,    -1,    -1,    -1,  1027,  1028,    -1,  1030,  1031,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   483,    -1,   485,
-      67,    -1,  1159,    39,    -1,    72,    -1,    -1,  1050,    76,
-      -1,    -1,    -1,  1030,  1031,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    67,    -1,  1050,    -1,    -1,    72,    -1,    -1,    -1,
-      76,   527,   109,  1085,  1086,  1202,    -1,    83,    84,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1224,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,  1236,
-      -1,  1238,   118,   119,    10,    11,    12,    13,    14,    15,
+      -1,  1040,    -1,    -1,    -1,  1017,  1018,    -1,  1020,  1021,
+      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
+      -1,    -1,    78,    -1,    -1,    -1,     7,    -1,  1040,    10,
+      11,    12,    13,    14,    -1,    -1,  1075,  1076,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   111,    37,    38,    39,    40,
+      -1,   117,   118,  1075,  1076,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   754,   755,    66,    67,    -1,    -1,    -1,
+      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,  1146,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   574,   575,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,  1146,    -1,   117,   118,   119,   120,
+     121,   122,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1189,   603,    -1,    -1,   606,   607,    -1,   609,    -1,   611,
+     612,    -1,    -1,    -1,   616,   617,    -1,    -1,    -1,    -1,
+      -1,    -1,  1211,    -1,    -1,    -1,    -1,  1189,    -1,   699,
+      -1,   701,    -1,    -1,  1223,    -1,  1225,    -1,   708,   709,
+      -1,    -1,    -1,   713,    -1,    -1,    -1,    -1,    -1,  1211,
+      -1,    -1,    -1,    -1,    -1,   725,    -1,    -1,    -1,    -1,
+     730,  1223,    -1,  1225,    -1,    -1,  1255,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1263,  1264,  1265,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1274,  1275,    -1,   758,    -1,
+     911,    -1,    -1,  1255,    -1,   916,    -1,    -1,    -1,  1288,
+      -1,  1263,  1264,  1265,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1274,  1275,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1288,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      49,    -1,   754,   755,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1327,    -1,    66,    -1,    -1,
+       7,    -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   857,   858,   859,
+     860,    -1,   862,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    -1,  1394,    -1,   877,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,   118,
+      -1,   891,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
+      67,    -1,  1394,    -1,    -1,    72,    -1,    -1,    -1,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,   147,    86,
+      87,    -1,  1441,    -1,    -1,    -1,  1077,    -1,   157,  1448,
+      -1,   931,   161,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,  1441,
+     117,   118,   119,   120,   121,   122,  1448,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,   976,    30,    31,    32,
+    1499,   210,   982,    -1,   916,    -1,    39,   987,    -1,    -1,
+      -1,    -1,   992,   222,   994,    -1,    -1,    -1,   998,    -1,
+    1000,  1001,    -1,    -1,  1004,    -1,    -1,  1499,    -1,    -1,
+      -1,   240,    -1,  1013,    67,    -1,    -1,    -1,    -1,    -1,
+      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1031,  1032,    -1,    -1,    -1,   265,    -1,    -1,    -1,
+      -1,    -1,    -1,   272,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1206,    -1,    -1,  1058,    -1,
+      -1,  1061,    -1,    -1,   117,   118,   295,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,
+      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    76,    -1,    78,    -1,    80,    -1,
+      -1,    -1,    -1,    -1,  1104,    87,    -1,    -1,    -1,    -1,
+    1110,  1111,    -1,    -1,    -1,    -1,   345,    -1,    -1,    -1,
+      -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1130,    -1,    -1,  1133,    -1,    -1,   118,  1137,   120,   121,
+     122,    -1,    -1,    -1,    -1,  1077,    -1,    -1,    -1,    -1,
+    1150,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1163,    -1,  1165,  1166,  1167,  1168,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   161,
+      -1,  1181,    -1,  1183,    -1,    -1,    -1,  1187,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   426,   427,    -1,
+      -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1216,  1217,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   454,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     222,    -1,   224,   225,   226,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   482,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   494,  1266,  1267,    -1,    -1,
+      -1,    -1,    -1,    -1,  1206,    -1,  1276,   506,   260,   508,
+      -1,    -1,   511,   265,   513,   514,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   526,   280,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,   345,    -1,   347,   591,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,  1271,   358,   359,  1159,    -1,    -1,
-      -1,    -1,  1279,  1280,  1281,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,  1304,    -1,   635,
-     636,   637,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1202,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,
-      37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1224,    -1,  1201,  1202,   672,    -1,  1345,    -1,
-      -1,    -1,    -1,    -1,  1236,    -1,  1238,   683,    -1,    66,
-      -1,    -1,    -1,    -1,    -1,    72,    -1,  1224,    -1,    76,
-      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
-      87,    -1,    -1,   709,    -1,  1242,   712,    94,    -1,  1271,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1279,  1280,  1281,
-      -1,    -1,   109,    -1,   111,    -1,    -1,   114,  1290,  1291,
-      -1,   118,   119,   120,   121,   122,   123,    -1,  1415,    -1,
-      -1,    -1,  1304,   749,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1299,    -1,    -1,    -1,    -1,  1304,    -1,    -1,
+      26,    27,    28,    -1,    30,    31,    32,  1337,    -1,  1339,
+    1340,  1341,    -1,    39,    -1,    -1,   328,    -1,    -1,   578,
+      -1,  1351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1360,   590,    -1,    -1,    -1,   594,    -1,    -1,   350,    -1,
+      -1,    67,    -1,   355,   356,    -1,    72,    -1,    74,    75,
+      76,   363,    78,    -1,    -1,  1385,    -1,    83,    84,    -1,
+      -1,   620,    -1,    -1,   147,    -1,   625,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   157,   634,   635,   636,    -1,    44,
+      -1,    -1,    -1,   109,    -1,   111,   169,   170,    -1,    -1,
+      -1,   117,   118,   652,   406,    -1,    -1,    -1,  1428,  1429,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1345,    -1,    -1,    -1,  1464,    -1,   795,
-      -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,    -1,   805,
-    1337,   807,    -1,    -1,    -1,    -1,   812,    -1,    -1,   815,
-      -1,    -1,    -1,   819,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    67,    -1,    39,    -1,    -1,  1524,    -1,    -1,
-      -1,    -1,    77,  1415,    79,    -1,    81,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    -1,   881,    -1,    72,  1415,    74,
-      75,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,
-      -1,    -1,    -1,    -1,   119,    -1,   121,   122,   123,    94,
-      -1,    -1,  1464,  1440,    -1,   911,    -1,    -1,    -1,  1471,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    26,
-      27,    28,    -1,   118,   119,    -1,    -1,  1464,    -1,    -1,
-      -1,    -1,    37,    38,  1471,    40,    -1,   162,   701,    -1,
-     703,    -1,    -1,    -1,    -1,    -1,    -1,   710,   711,    -1,
-      -1,    -1,   715,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     966,    66,  1524,    50,   727,    -1,    -1,    72,    -1,   732,
-      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      67,    86,    87,    -1,    -1,    -1,    -1,  1524,    -1,    94,
-      -1,    -1,    -1,   100,    -1,   102,    -1,    -1,   223,   762,
-     225,   226,   227,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,   123,    -1,
-     127,  1027,  1028,    -1,  1030,  1031,    -1,    -1,   115,    -1,
-      -1,    -1,   119,    -1,    -1,    -1,   261,    -1,    -1,    -1,
-      -1,   266,    -1,    -1,  1050,    -1,    -1,    -1,   284,    -1,
-     286,   287,    -1,    -1,    -1,    -1,   281,    -1,   294,   295,
-      -1,   148,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   158,   308,   309,    -1,   162,   183,    -1,    -1,  1085,
-    1086,    -1,    -1,    -1,   191,    -1,   193,   194,    -1,    -1,
-      -1,   198,    -1,   200,   201,    -1,    -1,    -1,    -1,    -1,
-     863,   864,   865,   866,   329,   868,    -1,    -1,    -1,    -1,
-     346,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   884,    -1,    -1,   211,    -1,   351,    -1,    -1,    -1,
-      -1,   356,   357,    -1,    -1,   898,   223,    -1,    -1,   364,
-      -1,    -1,    -1,    -1,    -1,    -1,   382,    -1,    -1,    -1,
-      -1,    -1,    -1,  1159,   241,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   270,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   938,    -1,    -1,    -1,   266,
-      -1,    -1,   407,    -1,    -1,    -1,   273,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1202,    -1,    -1,    -1,
-     425,    -1,    -1,    -1,    -1,   430,    -1,   432,    -1,   296,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1224,    -1,
-      -1,   308,   985,    -1,   449,    -1,    -1,   452,   453,   992,
-    1236,    -1,  1238,    -1,   997,   460,    -1,    -1,    -1,  1002,
-      -1,  1004,    -1,    -1,    -1,  1008,    -1,  1010,  1011,   474,
-      -1,  1014,    -1,    -1,    -1,    -1,   481,    -1,    -1,   346,
-    1023,    -1,    -1,    -1,   351,  1271,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1279,  1280,  1281,    -1,    -1,  1041,  1042,
-      -1,    -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1304,    -1,
-      -1,    -1,    -1,    -1,    -1,  1068,    -1,    -1,  1071,    -1,
-      -1,    -1,    -1,    -1,   550,   551,   552,   553,   554,   555,
-     556,   557,   558,   559,   560,   561,   562,   563,   564,   565,
-     566,   567,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1345,
-     427,   428,    -1,    -1,    -1,    -1,    -1,   434,    -1,    -1,
-      -1,  1114,    -1,    -1,    -1,    -1,    -1,  1120,  1121,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   455,  1132,
-     595,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1142,
-      -1,    -1,  1145,    -1,  1147,    -1,    -1,  1150,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   483,    -1,   623,    -1,
-    1163,    -1,    -1,   628,    -1,    -1,    -1,    -1,   495,  1415,
-      -1,    -1,    -1,  1176,    -1,  1178,  1179,  1180,  1181,    -1,
-     507,    -1,   509,    -1,    -1,   512,    -1,   514,   515,    -1,
-      -1,  1194,    -1,  1196,    -1,    -1,    -1,  1200,    -1,    -1,
-     527,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1464,    -1,
-      -1,   697,    -1,    -1,    -1,  1471,  1229,  1230,   575,   576,
-      -1,    -1,    -1,    -1,    -1,   700,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   714,
-      -1,    -1,   579,    -1,    -1,    -1,    -1,   604,    -1,    -1,
-     607,   608,    -1,   610,   591,   612,   613,    -1,   595,   734,
-     617,   618,    -1,    -1,    -1,    -1,    -1,    -1,  1524,  1282,
-    1283,    -1,    -1,    -1,   760,    -1,    -1,    -1,    -1,  1292,
-      -1,    -1,    -1,    -1,   621,    -1,    -1,    -1,    -1,   626,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,
-     637,    -1,    -1,    -1,    -1,    -1,   792,    -1,    -1,     7,
-      -1,    -1,    10,    11,    12,    13,    14,   654,    -1,    -1,
-      -1,    -1,    -1,    -1,   799,    -1,    -1,    -1,    -1,    -1,
-    1343,    -1,    45,    -1,    -1,    -1,   811,    -1,    -1,    37,
-      38,    39,    40,  1356,    -1,  1358,  1359,  1360,    -1,   686,
-      -1,    -1,    -1,    -1,    -1,   830,    -1,  1370,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1379,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    72,   712,    -1,   714,    76,    -1,
-      93,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-     103,    -1,    -1,  1406,    -1,    -1,    94,    -1,    -1,    -1,
-      -1,   758,   759,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,   749,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,   119,   120,   121,   122,   123,    -1,   913,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1451,  1452,
-      -1,    -1,    -1,    -1,    -1,    -1,   159,    -1,    -1,    -1,
-      -1,  1464,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,
-     173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   944,
-     807,    -1,   958,    -1,   811,    -1,    -1,    -1,   815,    -1,
-      -1,    -1,    -1,   196,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1504,    -1,    -1,    -1,  1508,    -1,   210,    -1,    -1,
-      -1,   976,    -1,    -1,    -1,    -1,   219,    -1,    -1,    -1,
-     996,    -1,    -1,    -1,    -1,    -1,   229,    -1,    -1,    -1,
-      -1,    -1,    -1,  1009,  1537,    -1,  1539,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1012,    -1,    -1,
-      -1,   254,    -1,    -1,    -1,    -1,   259,    -1,  1023,    -1,
-      -1,    -1,    -1,    -1,  1567,  1568,    -1,    -1,    -1,   272,
-      -1,   918,  1575,  1576,  1050,   278,   923,   280,    -1,    -1,
-      -1,    -1,    -1,    -1,   911,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   297,    -1,    -1,    -1,    -1,   926,
+      -1,  1441,   424,    -1,    -1,    -1,    -1,   429,  1448,   431,
+      37,    38,    -1,    40,    -1,   684,    -1,    92,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   448,   102,    -1,   451,
+     452,    -1,    -1,    -1,    -1,    -1,    -1,   459,    -1,    66,
+    1480,   710,    -1,   712,  1484,    72,    -1,   240,    -1,    76,
+      -1,   473,    79,    80,    81,    82,    83,    84,   480,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   264,  1512,    -1,  1514,    -1,   745,    -1,    -1,    -1,
+      -1,    -1,   109,   158,   111,    -1,    -1,   114,    -1,    -1,
+     117,   118,   119,   120,   121,   122,    -1,   172,    -1,    -1,
+      -1,    -1,  1542,  1543,    -1,    -1,    -1,    -1,    -1,    -1,
+    1550,  1551,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     195,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   801,    -1,   209,    -1,   805,    -1,    -1,    -1,
+     809,    -1,    -1,   218,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   228,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,
+      -1,    -1,   594,    -1,    -1,    -1,    -1,    -1,   253,    -1,
+      -1,    -1,    -1,   258,    -1,    -1,    -1,   380,    -1,    -1,
+      -1,    -1,    -1,    66,    -1,    -1,   271,    -1,    -1,    72,
+     622,    -1,   277,    76,   279,   627,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
+      -1,   296,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   904,   109,    -1,   111,    -1,
+      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
+     919,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   338,    -1,    -1,    -1,    -1,   343,    -1,
+      -1,    -1,    -1,    -1,   943,    -1,   698,    -1,    -1,    -1,
+      -1,   474,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     712,    -1,    -1,    -1,    -1,    -1,    -1,   372,    -1,    -1,
+      -1,   376,   377,    -1,   379,    -1,    -1,    -1,    -1,    -1,
+     732,   386,   387,    -1,   389,   390,    -1,   392,    -1,   394,
+     513,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     999,    -1,    -1,   526,    -1,    -1,   411,    -1,   531,    -1,
+      -1,   534,    -1,    -1,   419,    -1,    -1,    -1,    -1,    -1,
+      -1,  1020,  1021,   546,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   444,
+      -1,   793,    -1,    -1,    -1,   568,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   805,    -1,   578,    -1,    -1,    -1,    -1,
+      -1,    -1,   585,    -1,    -1,   470,    -1,   590,    -1,    -1,
+      -1,   476,   824,    -1,    -1,    -1,   481,    -1,    -1,    -1,
+      -1,  1080,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,   517,    30,    31,    32,   639,    -1,    -1,    -1,
+      -1,    -1,    39,    -1,   647,    -1,    -1,   532,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,
-      -1,    -1,    -1,   950,    -1,    -1,    -1,    -1,    -1,    -1,
-    1095,    -1,    -1,    -1,    -1,    -1,   339,    -1,    -1,   966,
-      -1,   344,    -1,    66,  1109,    -1,    -1,    -1,    -1,    72,
-      -1,  1127,    -1,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-     373,    94,    -1,    -1,   377,   378,    -1,   380,    -1,    -1,
-      -1,    -1,  1009,    -1,   387,   388,   109,   390,   391,    -1,
-     393,    -1,   395,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    -1,    -1,  1030,  1031,    -1,    -1,    -1,    -1,   412,
-      -1,    -1,    -1,    -1,  1190,  1191,    -1,   420,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1146,    -1,    -1,
+      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
+      -1,    -1,    -1,    37,    38,   570,    40,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,    -1,
+      -1,   586,    -1,    -1,    -1,   937,    -1,   592,    -1,  1188,
+      -1,    -1,    66,    -1,   111,    -1,   601,    -1,    72,    -1,
+     117,   118,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,   967,    -1,    -1,    -1,    -1,
+      -1,    -1,   745,    -1,   747,    -1,  1225,    -1,    -1,   156,
+     157,    -1,    -1,    -1,   757,   109,   641,   111,    -1,    -1,
+     763,    -1,    -1,   117,   118,   119,   120,   121,   122,    -1,
+    1002,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1013,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,
+     197,    -1,   677,    -1,    -1,  1274,  1275,    -1,    -1,    -1,
+     685,    -1,   805,   806,  1283,    -1,   809,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   283,
+     823,   285,   286,    -1,    -1,    -1,    -1,    -1,    -1,   293,
+     294,   716,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   726,   727,   307,   308,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1085,    -1,    -1,    -1,    -1,    -1,    -1,
+     863,    -1,   269,    -1,   867,    -1,    -1,  1099,    -1,    -1,
+      -1,    -1,    -1,    -1,   759,    -1,    -1,    -1,    -1,   764,
+      -1,   345,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,   904,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
+      -1,    39,    40,    -1,    -1,  1394,   323,   381,    -1,    -1,
+      -1,    -1,    -1,    -1,   331,   332,    -1,   334,   335,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   345,    67,
+     943,    -1,   349,   828,    -1,    -1,    74,    75,    -1,    -1,
+     835,    -1,    -1,    -1,    -1,    -1,  1188,    -1,    -1,    -1,
+      -1,   368,    -1,   848,   371,   850,    -1,    -1,   971,    -1,
+      -1,  1450,    -1,  1452,   977,    -1,    -1,    -1,   981,   864,
+      -1,    -1,    -1,   111,    -1,   870,    -1,   115,    -1,   117,
+     118,   398,    -1,    -1,    -1,   402,    -1,   882,    -1,  1002,
+     885,    -1,    -1,    -1,    -1,    -1,    -1,  1486,    -1,  1488,
+    1013,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,
+      -1,    -1,  1035,    -1,  1037,    -1,  1515,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1052,
+    1053,  1283,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    1073,    -1,   479,    -1,    -1,   482,    -1,   962,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,   549,   550,   551,   552,   553,
+     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
+     564,   565,   566,    -1,    -1,    -1,    -1,    37,    38,    67,
+      40,    -1,   997,    -1,   521,    -1,    -1,    -1,   525,   526,
+      -1,    -1,    -1,    -1,    -1,  1128,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
+      -1,    -1,    72,  1146,    -1,    -1,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    -1,    86,    87,  1161,  1162,
+      -1,    -1,    -1,   570,   571,    -1,    -1,    -1,    -1,    -1,
+    1055,    -1,    -1,    -1,    -1,    -1,  1061,    -1,    -1,   109,
+      -1,   111,   589,   590,   114,    -1,    -1,   117,   118,   119,
+     120,   121,   122,   600,    -1,   602,   603,    -1,    -1,    -1,
+      -1,    -1,   609,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1095,    -1,   619,   620,    -1,  1100,    -1,    -1,   625,    -1,
+      -1,    -1,    -1,  1108,    -1,    -1,    -1,   634,   635,   636,
+      -1,   695,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   652,    -1,    -1,    -1,    -1,
+     657,   658,    -1,    -1,   661,   662,  1141,    -1,    -1,    -1,
+      -1,   668,    -1,    -1,    -1,    -1,    -1,    -1,  1153,    -1,
+      -1,  1156,    -1,  1158,    -1,    -1,    -1,    -1,    -1,    -1,
+     687,    -1,    -1,    -1,    -1,    -1,    -1,  1172,  1173,    -1,
+      -1,    -1,   756,    -1,    -1,    -1,    -1,    -1,  1530,  1302,
+      -1,    -1,  1305,   710,   711,    -1,    -1,    -1,    -1,  1194,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1201,    -1,    -1,    -1,
-    1087,    -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   786,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   744,   745,    -1,
+      -1,    -1,   749,   750,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1241,    -1,    -1,    -1,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      -1,    30,    31,    32,    -1,    -1,   793,    -1,    -1,    -1,
+      39,    -1,    -1,    -1,   801,    -1,    -1,    -1,    -1,    -1,
+      -1,   808,   809,    -1,    -1,   812,    -1,   814,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   824,    67,    -1,
+      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    78,
+      -1,  1316,    -1,  1318,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,   906,    -1,    -1,  1330,    -1,  1332,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1090,    -1,    -1,    -1,    -1,   471,    -1,
-      -1,    -1,    -1,    -1,   477,    -1,    -1,     0,    -1,   482,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      33,    -1,    -1,    36,    -1,   518,    39,    40,    -1,    -1,
+      -1,    -1,   111,    -1,  1349,    -1,    -1,    -1,   117,   118,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     533,    -1,  1159,    -1,  1299,    -1,    -1,    -1,    -1,    -1,
-      -1,    64,    -1,    -1,    67,    -1,    69,    -1,    71,    72,
-      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
-      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,   571,    -1,
-      -1,    94,  1219,    -1,  1201,    -1,    -1,   580,    -1,   157,
-     158,    -1,    -1,    -1,   587,    -1,   109,    -1,   111,    -1,
-     593,    -1,    -1,    -1,    -1,   118,   119,    -1,    -1,   602,
+    1365,  1366,    -1,    -1,    -1,    -1,    -1,   951,    -1,   896,
+      -1,  1376,    -1,    -1,  1379,    -1,   903,   904,   905,    -1,
+     907,    -1,    -1,    -1,   911,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1515,    -1,    -1,  1400,    -1,    -1,    -1,    -1,
+      -1,    -1,   986,    -1,  1409,   932,   933,  1412,    -1,  1414,
+    1415,  1416,    -1,    -1,    -1,   999,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,
+     967,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,  1454,
+      -1,  1456,    -1,  1458,    -1,    -1,  1040,    -1,    -1,    -1,
+      -1,   988,   989,    -1,    -1,    -1,    -1,    -1,  1473,    -1,
+      -1,    -1,   999,    67,    -1,    -1,    -1,    -1,  1005,  1006,
+      -1,  1008,  1009,  1010,    78,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1020,  1021,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,  1117,    30,    31,    32,    33,    -1,    -1,
+      36,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1083,    -1,  1085,    -1,
+      -1,    -1,    -1,  1090,    -1,    -1,    -1,    -1,    -1,    -1,
+      66,    67,  1099,    69,    -1,    71,    72,    -1,    74,    75,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,  1177,  1178,  1122,  1123,  1124,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1238,    -1,   191,    -1,    -1,    -1,    -1,    -1,    -1,
-     198,    -1,    -1,    -1,    -1,  1401,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     643,    -1,    -1,  1419,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1299,    -1,    -1,    -1,   679,    -1,    -1,    -1,
-      66,    -1,    -1,    -1,   687,    -1,    72,    -1,    -1,    -1,
-      76,    -1,   270,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,   718,  1492,  1493,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   728,   729,    -1,    -1,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,   742,
-      -1,    -1,    -1,    -1,    -1,    -1,   324,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   332,   333,    -1,   335,   336,    -1,
-     763,    -1,   765,    -1,    -1,    -1,   769,    -1,   346,    -1,
-      -1,    -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1415,    -1,
-    1555,   369,    -1,    -1,   372,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    -1,    30,    31,    32,    -1,    -1,
-      -1,   399,    -1,    -1,    39,   403,    -1,    -1,    -1,    -1,
-      -1,   834,    -1,    -1,    -1,    -1,    -1,    -1,   841,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1473,    -1,  1475,    -1,
-      -1,   854,    67,   856,    -1,    -1,   434,    72,    -1,    74,
-      75,    76,    -1,    78,    -1,    -1,    -1,   870,    83,    84,
-      -1,    -1,    -1,    -1,   877,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,  1510,   148,  1512,   889,    -1,    -1,   892,
-      -1,    -1,    -1,    -1,   158,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,   480,   118,   119,   483,   170,   171,    -1,    -1,
-      -1,    -1,    -1,  1540,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,   522,    -1,    -1,    -1,   526,   527,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   971,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   241,    67,    -1,
-      69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,   571,   572,    -1,    -1,    -1,    -1,    -1,
-      -1,   265,    -1,    -1,  1007,    94,    -1,    -1,    -1,    -1,
-      -1,    -1,   590,   591,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,   601,    -1,   603,   604,    -1,    -1,   118,
-     119,    -1,   610,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   620,   621,    -1,    -1,    -1,    -1,   626,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,   637,
-      -1,    -1,  1065,    -1,    -1,    -1,    -1,    -1,  1071,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,    -1,    -1,
-      -1,   659,   660,    -1,    -1,   663,   664,    -1,    -1,    -1,
-      -1,    -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1105,    -1,    -1,    -1,    -1,  1110,    -1,    -1,
-      -1,   689,    -1,    -1,    -1,  1118,    -1,   381,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   712,   713,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1166,    -1,    -1,  1169,    -1,  1171,    -1,
-     748,   749,    -1,    -1,    -1,   753,   754,    -1,    -1,    -1,
-      -1,    -1,  1185,  1186,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1207,    -1,    -1,    -1,    -1,    -1,
-      -1,   475,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
-      -1,   799,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   807,
-      -1,    -1,    -1,    -1,    -1,    -1,   814,   815,    -1,    -1,
-     818,    66,   820,    -1,    -1,    -1,    -1,    72,    -1,    -1,
-     514,    76,   830,  1256,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,   527,    -1,    -1,    -1,    -1,   532,    94,
-      -1,   535,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   546,   547,   109,    -1,   111,    -1,    -1,    -1,
-      -1,   116,    -1,   118,   119,   120,   121,   122,   123,    -1,
-      -1,    -1,    -1,    -1,    -1,   569,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,
-      -1,    -1,   586,    -1,    -1,   903,    -1,   591,    -1,  1332,
-      -1,  1334,   910,   911,   912,    -1,   914,    -1,    -1,    -1,
-     918,    -1,    -1,    -1,    -1,  1348,    -1,  1350,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   939,   940,    -1,    -1,  1368,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   640,    -1,    -1,    -1,
-      -1,  1384,  1385,    -1,    -1,   649,    -1,    -1,   966,    -1,
-      -1,    -1,  1395,    -1,    -1,  1398,    -1,    -1,   976,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,  1421,    -1,
-     998,   999,    -1,    -1,    -1,    -1,    -1,  1430,    39,    -1,
-    1433,  1009,  1435,  1436,  1437,    -1,    -1,  1015,  1016,    -1,
-    1018,  1019,  1020,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1030,  1031,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,  1477,    -1,  1479,    -1,  1481,    -1,
-      -1,    -1,    -1,    -1,    -1,   749,    -1,   751,    -1,    -1,
-      -1,    -1,    -1,    -1,  1497,    -1,    -1,   761,    -1,    -1,
-      -1,    -1,    -1,    -1,   768,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1093,    -1,  1095,    -1,    -1,
-      -1,    -1,  1100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,
-      -1,    -1,    10,    11,    12,    13,    14,   811,   812,    -1,
-      -1,   815,    -1,    -1,    -1,    -1,  1134,  1135,  1136,    -1,
-      -1,    -1,    -1,    -1,    -1,   829,    -1,    -1,    -1,    37,
-      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    72,   869,    -1,    -1,    76,   873,
-      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,  1220,   111,    -1,    -1,    -1,   911,    -1,    -1,
-     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
-    1238,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,   950,    30,    31,    32,
-      -1,    -1,    -1,    -1,    37,    38,    39,    40,    -1,    -1,
-      -1,    -1,   966,   967,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1290,  1291,    -1,    -1,   980,    -1,    -1,    -1,
-      -1,    -1,   986,    66,    67,   989,    69,   991,    71,    72,
-      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,  1012,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1023,
-      -1,    37,    38,    -1,    40,    -1,   109,    -1,   111,    -1,
-      -1,    -1,    -1,   116,    -1,   118,   119,   120,   121,   122,
-     123,  1045,    -1,  1047,    -1,    -1,    -1,    -1,    -1,    -1,
-      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,  1062,  1063,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,  1083,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,  1415,   114,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
-      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,  1140,    -1,    30,    31,
-      32,    33,    -1,    -1,    36,    -1,    -1,    39,    40,    -1,
-      -1,    -1,    -1,    -1,    -1,  1159,    -1,    -1,    -1,    -1,
-      -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
-    1174,  1175,    64,    -1,    -1,    67,    -1,    69,    -1,    71,
-      72,    -1,    74,    75,    76,    -1,    -1,  1505,    -1,    -1,
-      66,    83,    84,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      76,    -1,    94,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,  1530,  1531,    -1,    -1,    -1,   109,    94,   111,
-      -1,    -1,    -1,   115,    -1,    -1,   118,   119,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,  1555,    -1,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
-    1254,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
-      41,    -1,    43,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-      61,    62,    -1,    64,  1318,    66,    67,  1321,    69,    -1,
-      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    -1,    -1,    -1,    -1,   128,    -1,    -1,
-      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1405,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,  1146,
+      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   132,    -1,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
-      -1,    36,    37,    38,    39,    40,    10,    11,    12,    13,
+      -1,    36,    37,    38,    39,    40,    41,    -1,    43,    -1,
+    1207,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
+      -1,    -1,    57,    -1,    -1,    -1,    61,    62,  1225,    64,
+      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
+      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,  1274,  1275,   114,
+      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
+      -1,    -1,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,  1382,    30,
+      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
+      -1,    -1,    -1,    -1,  1398,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1394,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,  1468,  1469,   117,   118,   119,   120,
+     121,   122,    -1,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    -1,    -1,  1481,    66,    67,    -1,    69,    -1,
+      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,  1505,  1506,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    78,    -1,  1530,    -1,   116,   117,   118,   119,   120,
+     121,   122,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    66,    67,    -1,    69,    39,    71,
+      72,    -1,    74,    75,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+      -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,   111,
+      -1,    -1,    83,    84,   116,   117,   118,   119,   120,   121,
+     122,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    -1,    -1,    37,    38,    39,    40,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    66,    67,    -1,    69,    39,    71,    72,
+      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
+      -1,    -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,
+      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
-      75,    76,    -1,  1487,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,
-      74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    83,
-      84,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1540,   132,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
-      -1,    36,    37,    38,    39,    40,    -1,    -1,    -1,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    39,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    78,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,   116,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,   116,    -1,   118,   119,   120,   121,   122,   123,     4,
+      -1,    -1,    -1,    37,    38,    39,    40,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    66,    67,    -1,    69,    39,    71,    72,    -1,
+      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
+      -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,
+      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
@@ -3717,44 +3584,32 @@
       -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,   117,   118,   119,   120,   121,   122,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
+      -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      66,    67,    -1,    69,    -1,    71,    72,    -1,    74,    75,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
+      -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
+      67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     3,
+      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
+     117,   118,   119,   120,   121,   122,     0,    -1,    -1,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
@@ -3766,65 +3621,320 @@
       74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
-      -1,    -1,    -1,    -1,   118,   119,     3,     4,     5,     6,
+      -1,    -1,    -1,   117,   118,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,
+      -1,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,    67,
+      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
+      -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,   115,    -1,   117,
+     118,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    33,    -1,    -1,    36,    -1,    -1,    39,    40,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    64,    -1,    -1,    67,    -1,    69,    -1,    71,
+      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
+      -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+      -1,    -1,    -1,    -1,    -1,   117,   118,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    33,    -1,    -1,
+      36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
+      -1,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,
+      -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,
+      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
+      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    67,
+      -1,    69,    -1,    71,    -1,    39,    74,    75,    -1,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    67,    -1,    30,    31,    32,    -1,    -1,
+      74,    75,   110,   111,    39,    -1,    -1,    -1,    -1,   117,
+     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    69,   109,    71,   111,    -1,    74,
+      75,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
+      -1,    -1,   117,   118,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    67,    -1,    69,
+      -1,    71,    39,    40,    74,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,   111,    30,    31,    32,   115,    -1,
+     117,   118,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
+      75,    -1,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,
+      -1,    -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
+      -1,    -1,    74,    75,    -1,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,   111,
+      39,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      69,    -1,    71,    -1,    -1,    74,    75,    -1,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
+      -1,    -1,   111,    39,    -1,    -1,    -1,    -1,   117,   118,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,
+      40,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
+      -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,   119,
+     120,   121,   122,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,
+      67,    -1,    -1,    39,    -1,    72,    -1,    74,    75,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
+      76,    -1,   109,   110,   111,    -1,    -1,    83,    84,    -1,
+     117,   118,   119,   120,   121,   122,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,   111,    30,    31,    32,    -1,
+      -1,   117,   118,    37,    38,    39,    40,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    66,    67,    -1,    -1,    39,    -1,    72,    -1,
+      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,
+      -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,
+      83,    84,    -1,   117,   118,   119,   120,   121,   122,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,   111,    30,
+      31,    32,    -1,    -1,   117,   118,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
+      40,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
+     121,   122,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,   111,    30,    31,    32,   115,    -1,   117,   118,    37,
+      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
+      -1,    -1,    39,    -1,    72,    -1,    74,    75,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
+     118,   119,   120,   121,   122,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
+     117,   118,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    66,    67,    30,    31,    32,    -1,    72,    -1,    74,
+      75,    76,    39,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,
+      -1,    -1,   117,   118,   119,   120,   121,   122,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
+     117,   118,    -1,    -1,    39,    -1,    -1,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    67,    -1,    69,    -1,    71,    39,    -1,    74,
+      75,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    67,    30,    31,    32,    -1,
+      72,    -1,    74,    75,    76,    39,    -1,    -1,    -1,   114,
+      -1,    83,    84,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    67,    30,    31,    32,   109,    72,   111,
+      74,    75,    76,    39,    -1,   117,   118,    -1,    -1,    83,
+      84,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    67,    30,    31,    32,   109,    72,   111,    74,    75,
+      76,    39,    -1,   117,   118,    -1,    -1,    83,    84,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    67,
+      30,    31,    32,   109,    72,   111,    74,    75,    76,    39,
+      -1,   117,   118,    -1,    -1,    83,    84,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    67,    30,    31,
+      32,   109,    -1,   111,    74,    75,    -1,    39,    78,   117,
+     118,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    67,    -1,    -1,    -1,   109,
+      39,   111,    74,    75,    -1,    -1,    78,   117,   118,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    67,    30,
+      31,    32,    -1,    -1,    -1,    74,    75,    -1,    39,   111,
+      -1,    -1,    -1,    -1,    -1,   117,   118,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    67,    30,    31,    32,
+      -1,    -1,   111,    74,    75,    -1,    39,    -1,   117,   118,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    67,    -1,    -1,    -1,    -1,    39,
+     111,    74,    75,    -1,    -1,    -1,   117,   118,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    67,    30,    31,
+      32,    -1,    -1,    -1,    74,    75,    -1,    39,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
+      -1,   111,    74,    75,    -1,    -1,    -1,   117,   118,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,   111,
+      -1,    -1,    -1,    -1,    39,   117,   118,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
+      75,    37,    38,    -1,    40,    41,    -1,    43,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
+      56,    57,    -1,    -1,    -1,    61,    62,    -1,    64,    -1,
+      66,    -1,    -1,    -1,    -1,   110,    72,    -1,    -1,    -1,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,
+      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    37,
+      38,   127,    40,    41,    -1,    43,   132,    -1,    46,    47,
+      48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
+      -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,
+      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,
+     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,
+      -1,    -1,    -1,    -1,   132,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
+      39,    -1,    37,    38,    -1,    40,    41,    -1,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
+      -1,    56,    57,    -1,    -1,    -1,    61,    62,    67,    64,
+      69,    66,    71,    -1,    -1,    74,    75,    72,    -1,    -1,
+      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    96,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
+      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
+      37,    38,   127,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    -1,    -1,    -1,
+      57,    -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,
+     117,   118,   119,   120,   121,   122,    -1,    -1,    37,    38,
+     127,    40,    41,    -1,    43,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,
+      -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,
+     119,   120,   121,   122,    66,    -1,    -1,    -1,   127,    -1,
+      72,    -1,    74,    75,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
+      -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+      -1,   113,   114,    -1,    -1,   117,   118,   119,   120,   121,
+     122,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    37,
+      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    37,    38,
+      -1,    40,   117,   118,   119,   120,   121,   122,    66,    -1,
+      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,   109,    -1,   111,    -1,    37,    38,    -1,    40,   117,
+     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,    -1,    -1,    37,    38,    -1,    40,   117,   118,
+     119,   120,   121,   122,    66,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    66,    86,    87,    -1,    -1,    -1,    72,
+      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,    -1,
+      -1,    37,    38,    -1,    40,   117,   118,   119,   120,   121,
+     122,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
+      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    33,    34,    35,
-      67,    -1,    69,    39,    71,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
-      30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,    39,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
-      -1,    71,    -1,    -1,    74,    75,    -1,    -1,    78,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
-      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,   119,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
-      71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,     4,
+      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
@@ -3834,386 +3944,22 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,    -1,    96,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-     119,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
+      75,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
-      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,   119,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
-      71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
-      75,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    94,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,
-      39,    40,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
-     119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,   110,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
-      -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    -1,    -1,    -1,    37,    38,    39,    40,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
-      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,
-      39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-     119,   120,   121,   122,   123,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    67,
-      -1,    69,    -1,    71,    39,    -1,    74,    75,    -1,    -1,
-      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    67,    30,    31,    32,    -1,    72,    -1,    74,
-      75,    76,    39,    -1,    -1,    -1,   114,    -1,    83,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    -1,    -1,   109,    72,   111,    74,    75,    76,
-      -1,    -1,    -1,   118,   119,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,   109,    -1,   111,    -1,    83,    84,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    83,    84,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    40,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    40,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    40,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      67,    -1,    -1,    39,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
+      -1,    -1,    74,    75,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
       30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
-      -1,    37,    38,    -1,    40,    41,    -1,    43,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
-      56,    57,    -1,    -1,    -1,    61,    62,    67,    64,    69,
-      66,    71,    -1,    -1,    74,    75,    72,    -1,    -1,    -1,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    33,    34,    35,    67,    -1,    69,
+      39,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     110,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
-      -1,    -1,   128,    -1,    37,    38,   132,    40,    41,    -1,
-      43,    -1,    -1,    46,    47,    48,    49,    50,    51,    52,
-      53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,
-      -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,
-      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
-      -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    -1,    -1,    -1,    -1,   128,    -1,    -1,    -1,   132,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    -1,    -1,    -1,    -1,    39,    -1,    37,    38,    -1,
-      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    -1,    -1,    56,    57,    -1,    -1,
-      -1,    61,    62,    67,    64,    69,    66,    71,    -1,    -1,
-      74,    75,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
-      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
-      -1,    -1,    96,    -1,    94,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-      -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,
-     120,   121,   122,   123,    -1,    -1,    37,    38,   128,    40,
-      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-      61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
-      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    -1,    -1,    37,    38,   128,    40,    41,
-      -1,    43,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,
-      62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
-      -1,    -1,    94,    37,    38,    -1,    40,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
-      -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
-     122,   123,    66,    -1,    -1,    -1,   128,    -1,    72,    -1,
-      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
-      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
-      94,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,   113,
-     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
-      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    37,
-      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,    38,
-      -1,    40,   118,   119,   120,   121,   122,   123,    66,    -1,
-      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-      -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
-      -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,    40,
-     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,    37,    38,    -1,    40,   118,
-     119,   120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,
-      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    66,    86,    87,    -1,    -1,    -1,
-      72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,
-      -1,    -1,    94,    -1,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
-     122,   123,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
-      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    84,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
-      -1,    71,    -1,    -1,    74,    75,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
-      75
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    -1,    -1,    74,    75
 };
 
@@ -4226,101 +3972,100 @@
       22,    23,    24,    25,    26,    27,    30,    31,    32,    33,
       36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
-      76,    83,    84,    94,   109,   111,   118,   119,   137,   140,
-     149,   198,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     231,   232,   233,   234,   235,   236,   237,   238,   240,   241,
-     242,   243,   244,   245,   247,   255,   256,   283,   284,   285,
-     293,   296,   302,   303,   305,   307,   308,   314,   319,   323,
-     324,   325,   326,   327,   328,   329,   330,   350,   367,   368,
-     369,   370,    72,   139,   140,   149,   215,   217,   225,   227,
-     237,   241,   243,   284,    82,   109,   312,   313,   314,   312,
-     312,    72,    74,    75,    76,   138,   139,   273,   274,   294,
-     295,    74,    75,   274,   109,   305,    11,   199,   109,   149,
-     319,   324,   325,   326,   328,   329,   330,   112,   134,   111,
-     218,   225,   227,   323,   327,   366,   367,   370,   371,   135,
-     107,   131,   277,   114,   135,   173,    74,    75,   137,   272,
-     135,   135,   135,   116,   135,    74,    75,   109,   149,   309,
-     318,   319,   320,   321,   322,   323,   327,   331,   332,   333,
-     334,   335,   341,     3,    28,    78,   239,     3,     5,    74,
-     111,   149,   217,   228,   232,   235,   244,   285,   323,   327,
-     370,   215,   217,   227,   237,   241,   243,   284,   323,   327,
-      33,   233,   233,   228,   235,   135,   233,   228,   233,   228,
-      75,   109,   114,   274,   285,   114,   274,   233,   228,   116,
-     135,   135,     0,   134,   109,   173,   312,   312,   134,   111,
-     225,   227,   368,   272,   272,   131,   227,   109,   149,   309,
-     319,   323,   111,   149,   370,   306,   230,   314,   109,   290,
-     109,   109,    51,   109,    37,    38,    40,    66,    72,    76,
-      79,    80,    81,    82,    86,    87,   109,   111,   120,   121,
-     122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   164,   166,   225,   276,   292,   366,   371,   227,
-     110,   110,   110,   110,   110,   110,   110,    74,    75,   111,
-     225,   272,   350,   368,   111,   118,   149,   164,   217,   218,
-     224,   227,   231,   232,   237,   240,   241,   243,   262,   263,
-     267,   268,   269,   270,   284,   350,   362,   363,   364,   365,
-     370,   371,   112,   109,   323,   327,   370,   109,   116,   132,
-     111,   114,   149,   164,   278,   278,   115,   134,   116,   132,
-     109,   116,   132,   116,   132,   116,   132,   312,   132,   319,
-     320,   321,   322,   332,   333,   334,   335,   227,   318,   331,
-      64,   311,   111,   312,   349,   350,   312,   312,   173,   134,
-     109,   312,   349,   312,   312,   227,   309,   109,   109,   226,
-     227,   225,   227,   112,   134,   225,   366,   371,   173,   134,
-     272,   277,   217,   232,   323,   327,   173,   134,   294,   227,
-     237,   132,   227,   227,   292,   248,   246,   258,   274,   257,
-     227,   294,   132,   132,   305,   134,   139,   271,     3,   135,
-     207,   208,   222,   224,   227,   134,   311,   109,   311,   164,
-     319,   227,   109,   134,   272,   114,    33,    34,    35,   225,
-     286,   287,   289,   134,   129,   131,   291,   134,   228,   234,
-     235,   272,   315,   316,   317,   109,   141,   109,   148,   109,
-     148,   151,   109,   148,   109,   109,   148,   148,   111,   164,
-     169,   173,   225,   275,   366,   370,   112,   134,    82,    85,
-      86,    87,   109,   111,   113,   114,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   131,   168,   151,   151,
-     118,   124,   125,   120,   121,    88,    89,    90,    91,   126,
-     127,    92,    93,   119,   128,   129,    94,    95,   130,   131,
-     373,   109,   149,   345,   346,   347,   348,   349,   110,   116,
-     109,   349,   350,   109,   349,   350,   134,   109,   225,   368,
-     112,   134,   135,   111,   225,   227,   361,   362,   370,   371,
-     135,   109,   111,   149,   319,   336,   337,   338,   339,   340,
-     341,   342,   343,   344,   350,   351,   352,   353,   354,   355,
-     356,   149,   370,   227,   135,   135,   149,   225,   227,   363,
-     272,   225,   350,   363,   272,   109,   134,   134,   134,   112,
-     134,    72,    80,   111,   113,   140,   274,   278,   279,   280,
-     281,   282,   134,   134,   134,   134,   134,   134,   309,   110,
-     110,   110,   110,   110,   110,   110,   318,   331,   109,   277,
-     112,   207,   134,   309,   169,   276,   169,   276,   309,   111,
-     207,   311,   173,   134,   207,   110,    40,   111,   115,   225,
-     249,   250,   251,   366,   114,   116,   372,   131,   259,   114,
-     227,   264,   265,   266,   269,   270,   110,   116,   173,   134,
-     118,   164,   134,   224,   227,   263,   362,   370,   303,   304,
-     109,   149,   336,   110,   116,   373,   274,   286,   109,   114,
-     274,   276,   286,   110,   116,   109,   141,   110,   117,   275,
-     275,   275,   111,   139,   145,   164,   276,   275,   112,   134,
-     110,   116,   110,   109,   149,   349,   357,   358,   359,   360,
-     110,   116,   164,   111,   139,   111,   144,   145,   134,   111,
-     139,   144,   164,   164,   151,   151,   151,   152,   152,   153,
-     153,   154,   154,   154,   154,   155,   155,   156,   157,   158,
-     159,   160,   117,   169,   164,   134,   346,   347,   348,   227,
-     345,   312,   312,   164,   276,   134,   271,   134,   225,   350,
-     363,   227,   231,   112,   112,   134,   370,   112,   109,   134,
-     319,   337,   338,   339,   342,   352,   353,   354,   112,   134,
-     227,   336,   340,   351,   109,   312,   355,   373,   312,   312,
-     373,   109,   312,   355,   312,   312,   312,   312,   350,   225,
-     361,   371,   272,   112,   116,   112,   116,   373,   225,   363,
-     373,   260,   261,   262,   263,   260,   260,   272,   164,   134,
-     111,   274,   117,   116,   372,   278,    80,   111,   117,   282,
-      29,   209,   210,   272,   260,   139,   309,   139,   311,   109,
-     349,   350,   109,   349,   350,   141,   350,   173,   264,   110,
-     110,   110,   110,   112,   173,   207,   173,   114,   250,   251,
-     112,   134,   109,   117,   149,   252,   254,   318,   319,   331,
-     357,   116,   132,   116,   132,   274,   248,   274,   115,   162,
-     163,   258,   135,   135,   139,   222,   135,   135,   260,   109,
-     149,   370,   135,   115,   227,   287,   288,   135,   134,   134,
-     109,   135,   110,   316,   169,   170,   117,   132,   111,   141,
-     200,   201,   202,   110,   116,   110,   134,   117,   110,   110,
-     110,   111,   164,   358,   359,   360,   227,   357,   312,   312,
-     114,   151,   166,   164,   165,   167,   116,   135,   134,   134,
-     110,   116,   164,   134,   115,   162,   117,   264,   110,   110,
-     110,   345,   264,   110,   260,   225,   363,   111,   118,   149,
+      76,    83,    84,   109,   111,   117,   118,   137,   140,   149,
+     198,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   231,
+     232,   233,   234,   235,   236,   237,   238,   240,   241,   242,
+     243,   244,   245,   247,   255,   256,   283,   284,   285,   293,
+     296,   302,   303,   305,   307,   308,   314,   319,   323,   324,
+     325,   326,   327,   328,   329,   330,   350,   367,   368,   369,
+     370,    72,   139,   140,   149,   215,   217,   225,   227,   237,
+     241,   243,   284,    82,   109,   312,   313,   314,   312,   312,
+      72,    74,    75,    76,   138,   139,   273,   274,   294,   295,
+      74,    75,   274,   109,   305,    11,   199,   109,   149,   319,
+     324,   325,   326,   328,   329,   330,   112,   134,   111,   218,
+     225,   227,   323,   327,   366,   367,   370,   371,   135,   107,
+     131,   277,   114,   135,   173,    74,    75,   137,   272,   135,
+     135,   135,   116,   135,    74,    75,   109,   149,   309,   318,
+     319,   320,   321,   322,   323,   327,   331,   332,   333,   334,
+     335,   341,     3,    28,    78,   239,     3,     5,    74,   111,
+     149,   217,   228,   232,   235,   244,   285,   323,   327,   370,
+     215,   217,   227,   237,   241,   243,   284,   323,   327,    33,
+     233,   233,   228,   235,   135,   233,   228,   233,   228,    75,
+     109,   114,   274,   285,   114,   274,   233,   228,   116,   135,
+     135,     0,   134,   109,   173,   312,   312,   134,   111,   225,
+     227,   368,   272,   272,   131,   227,   109,   149,   309,   319,
+     323,   111,   149,   370,   306,   230,   314,   109,   290,   109,
+     109,    51,   109,    37,    38,    40,    66,    72,    76,    79,
+      80,    81,    82,    86,    87,   109,   111,   119,   120,   121,
+     122,   136,   140,   141,   142,   143,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   164,   167,   225,   276,   292,   366,   371,   227,   110,
+     110,   110,   110,   110,   110,   110,    74,    75,   111,   225,
+     272,   350,   368,   111,   117,   149,   164,   217,   218,   224,
+     227,   231,   232,   237,   240,   241,   243,   262,   263,   267,
+     268,   269,   270,   284,   350,   362,   363,   364,   365,   370,
+     371,   112,   109,   323,   327,   370,   109,   116,   132,   111,
+     114,   149,   164,   278,   278,   115,   134,   116,   132,   109,
+     116,   132,   116,   132,   116,   132,   312,   132,   319,   320,
+     321,   322,   332,   333,   334,   335,   227,   318,   331,    64,
+     311,   111,   312,   349,   350,   312,   312,   173,   134,   109,
+     312,   349,   312,   312,   227,   309,   109,   109,   226,   227,
+     225,   227,   112,   134,   225,   366,   371,   173,   134,   272,
+     277,   217,   232,   323,   327,   173,   134,   294,   227,   237,
+     132,   227,   227,   292,   248,   246,   258,   274,   257,   227,
+     294,   132,   132,   305,   134,   139,   271,     3,   135,   207,
+     208,   222,   224,   227,   134,   311,   109,   311,   164,   319,
+     227,   109,   134,   272,   114,    33,    34,    35,   225,   286,
+     287,   289,   134,   128,   131,   291,   134,   228,   234,   235,
+     272,   315,   316,   317,   109,   141,   109,   148,   109,   148,
+     151,   109,   148,   109,   109,   148,   148,   111,   164,   169,
+     173,   225,   275,   366,   370,   112,   134,    82,    85,    86,
+      87,   109,   111,   113,   114,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   131,   166,   151,   151,   117,
+     123,   124,   119,   120,    88,    89,    90,    91,   125,   126,
+      92,    93,   118,   127,   128,    94,    95,   129,   131,   373,
+     109,   149,   345,   346,   347,   348,   349,   110,   116,   109,
+     349,   350,   109,   349,   350,   134,   109,   225,   368,   112,
+     134,   135,   111,   225,   227,   361,   362,   370,   371,   135,
+     109,   111,   149,   319,   336,   337,   338,   339,   340,   341,
+     342,   343,   344,   350,   351,   352,   353,   354,   355,   356,
+     149,   370,   227,   135,   135,   149,   225,   227,   363,   272,
+     225,   350,   363,   272,   109,   134,   134,   134,   112,   134,
+      72,   111,   113,   140,   274,   278,   279,   280,   281,   282,
+     134,   134,   134,   134,   134,   134,   309,   110,   110,   110,
+     110,   110,   110,   110,   318,   331,   109,   277,   112,   207,
+     134,   309,   169,   276,   169,   276,   309,   111,   207,   311,
+     173,   134,   207,   110,    40,   111,   115,   225,   249,   250,
+     251,   366,   114,   116,   372,   131,   259,   114,   227,   264,
+     265,   266,   269,   270,   110,   116,   173,   134,   117,   164,
+     134,   224,   227,   263,   362,   370,   303,   304,   109,   149,
+     336,   110,   116,   373,   274,   286,   109,   114,   274,   276,
+     286,   110,   116,   109,   141,   110,   130,   275,   275,   275,
+     145,   164,   276,   275,   112,   134,   110,   116,   110,   109,
+     149,   349,   357,   358,   359,   360,   110,   116,   164,   111,
+     139,   144,   145,   134,   111,   139,   144,   164,   151,   151,
+     151,   152,   152,   153,   153,   154,   154,   154,   154,   155,
+     155,   156,   157,   158,   159,   160,   130,   169,   164,   134,
+     346,   347,   348,   227,   345,   312,   312,   164,   276,   134,
+     271,   134,   225,   350,   363,   227,   231,   112,   112,   134,
+     370,   112,   109,   134,   319,   337,   338,   339,   342,   352,
+     353,   354,   112,   134,   227,   336,   340,   351,   109,   312,
+     355,   373,   312,   312,   373,   109,   312,   355,   312,   312,
+     312,   312,   350,   225,   361,   371,   272,   112,   116,   112,
+     116,   373,   225,   363,   373,   260,   261,   262,   263,   260,
+     260,   272,   164,   134,   111,   274,   130,   116,   372,   278,
+     111,   130,   282,    29,   209,   210,   272,   260,   139,   309,
+     139,   311,   109,   349,   350,   109,   349,   350,   141,   350,
+     173,   264,   110,   110,   110,   110,   112,   173,   207,   173,
+     114,   250,   251,   112,   134,   109,   130,   149,   252,   254,
+     318,   319,   331,   357,   116,   132,   116,   132,   274,   248,
+     274,   115,   162,   163,   258,   135,   135,   139,   222,   135,
+     135,   260,   109,   149,   370,   135,   115,   227,   287,   288,
+     135,   134,   134,   109,   135,   110,   316,   169,   170,   130,
+     132,   111,   141,   200,   201,   202,   110,   116,   110,   110,
+     110,   110,   111,   164,   358,   359,   360,   227,   357,   312,
+     312,   114,   151,   167,   164,   165,   168,   116,   135,   134,
+     110,   116,   164,   134,   115,   162,   130,   264,   110,   110,
+     110,   345,   264,   110,   260,   225,   363,   111,   117,   149,
      164,   164,   227,   342,   264,   110,   110,   110,   110,   110,
      110,   110,     7,   227,   336,   340,   351,   134,   134,   373,
@@ -4328,5 +4073,5 @@
      163,   164,   310,   134,   278,   280,   115,   134,   211,   274,
       40,    41,    43,    46,    47,    48,    49,    50,    51,    52,
-      53,    57,    61,    62,    72,   111,   128,   170,   171,   172,
+      53,    57,    61,    62,    72,   111,   127,   170,   171,   172,
      173,   174,   175,   177,   178,   190,   192,   193,   198,   212,
      308,    29,   135,   131,   277,   134,   134,   110,   135,   173,
@@ -4334,50 +4079,49 @@
      312,   115,   259,   372,   110,   116,   112,   112,   135,   227,
      116,   373,   290,   110,   286,   215,   217,   225,   298,   299,
-     300,   301,   292,   110,   110,   117,   163,   109,   110,   117,
-     116,   139,   164,   164,   112,   110,   110,   110,   357,   279,
-     116,   135,   167,   112,   139,   146,   147,   164,   145,   135,
-     146,   162,   166,   135,   109,   349,   350,   135,   135,   134,
-     135,   135,   135,   164,   110,   135,   109,   349,   350,   109,
-     355,   109,   355,   350,   226,     7,   118,   135,   164,   264,
-     264,   263,   267,   267,   268,   116,   116,   110,   110,   112,
-      96,   123,   135,   135,   146,   278,   164,   116,   132,   212,
-     216,   227,   231,   109,   109,   171,   109,   109,    72,   132,
-      72,   132,    72,   118,   170,   109,   173,   165,   165,   117,
-     112,   143,   132,   135,   134,   135,   211,   110,   164,   264,
-     264,   312,   110,   115,   252,   115,   134,   110,   134,   135,
-     309,   115,   134,   135,   135,   110,   114,   200,   112,   163,
-     132,   200,   202,   110,   116,   135,   109,   349,   350,   372,
-     165,   112,   135,    85,   113,   116,   135,   135,   112,   135,
-     110,   134,   110,   110,   112,   112,   112,   135,   110,   134,
-     134,   134,   164,   164,   135,   112,   135,   135,   135,   135,
-     134,   134,   163,   163,   112,   112,   135,   135,   274,   227,
-     169,   169,    47,   169,   134,   132,   132,   132,   169,   132,
-     169,    58,    59,    60,   194,   195,   196,   132,    63,   132,
-     312,   114,   175,   115,   132,   135,   135,    96,   269,   270,
-     110,   299,   116,   132,   116,   132,   115,   297,   117,   141,
-     110,   110,   117,   167,   112,   134,   115,   112,   111,   147,
-     111,   147,   147,   112,   112,   112,   264,   112,   264,   264,
-     264,   135,   135,   112,   112,   110,   110,   112,   116,    96,
-     263,    96,   135,   112,   112,   110,   110,   109,   110,   170,
-     191,   212,   132,   110,   109,   109,   173,   196,    58,    59,
-     164,   171,   144,   110,   110,   114,   134,   134,   298,   141,
-     203,   109,   132,   203,   135,   117,   264,   134,   134,   135,
-     135,   135,   135,   112,   112,   134,   135,   112,   171,    44,
-      45,   114,   181,   182,   183,   169,   171,   135,   110,   170,
-     114,   183,    96,   134,    96,   134,   109,   109,   132,   115,
-     134,   272,   309,   115,   116,   117,   163,   110,   112,   164,
-     135,   146,   146,   110,   110,   110,   110,   267,    42,   163,
-     179,   180,   310,   117,   134,   171,   181,   110,   132,   171,
-     132,   134,   110,   134,   110,   134,    96,   134,    96,   134,
-     132,   298,   141,   139,   204,   110,   132,   117,   110,   135,
-     135,   171,    96,   116,   117,   135,   205,   206,   212,   132,
-     170,   170,   205,   173,   197,   225,   366,   173,   197,   110,
-     134,   110,   134,   115,   110,   116,   164,   112,   112,   163,
-     179,   182,   184,   185,   134,   132,   182,   186,   187,   135,
-     109,   149,   309,   357,   139,   135,   173,   197,   173,   197,
-     109,   132,   139,   171,   176,   115,   182,   212,   170,    56,
-     176,   189,   115,   182,   110,   227,   110,   135,   135,   292,
-     171,   176,   132,   188,   189,   176,   189,   173,   173,   110,
-     110,   110,   188,   135,   135,   173,   173,   135,   135
+     300,   301,   292,   110,   110,   130,   163,   109,   110,   130,
+     116,   139,   112,   110,   110,   110,   357,   279,   116,   135,
+     168,   112,   139,   146,   147,   145,   135,   146,   162,   167,
+     135,   109,   349,   350,   135,   135,   134,   135,   135,   135,
+     164,   110,   135,   109,   349,   350,   109,   355,   109,   355,
+     350,   226,     7,   117,   135,   164,   264,   264,   263,   267,
+     267,   268,   116,   116,   110,   110,   112,    96,   122,   135,
+     135,   146,   278,   164,   116,   132,   212,   216,   227,   231,
+     109,   109,   171,   109,   109,    72,   132,    72,   132,    72,
+     117,   170,   109,   173,   165,   165,   130,   112,   143,   132,
+     135,   134,   135,   211,   110,   164,   264,   264,   312,   110,
+     115,   252,   115,   134,   110,   134,   135,   309,   115,   134,
+     135,   135,   110,   114,   200,   112,   163,   132,   200,   202,
+     110,   109,   349,   350,   372,   165,   112,   135,    85,   113,
+     116,   135,   112,   135,   110,   134,   110,   110,   112,   112,
+     112,   135,   110,   134,   134,   134,   164,   164,   135,   112,
+     135,   135,   135,   135,   134,   134,   163,   163,   112,   112,
+     135,   135,   274,   227,   169,   169,    47,   169,   134,   132,
+     132,   132,   169,   132,   169,    58,    59,    60,   194,   195,
+     196,   132,    63,   132,   312,   114,   175,   115,   132,   135,
+     135,    96,   269,   270,   110,   299,   116,   132,   116,   132,
+     115,   297,   130,   141,   110,   110,   130,   134,   115,   112,
+     111,   147,   111,   147,   147,   112,   112,   264,   112,   264,
+     264,   264,   135,   135,   112,   112,   110,   110,   112,   116,
+      96,   263,    96,   135,   112,   112,   110,   110,   109,   110,
+     170,   191,   212,   132,   110,   109,   109,   173,   196,    58,
+      59,   164,   171,   144,   110,   110,   114,   134,   134,   298,
+     141,   203,   109,   132,   203,   264,   134,   134,   135,   135,
+     135,   135,   112,   112,   134,   135,   112,   171,    44,    45,
+     114,   181,   182,   183,   169,   171,   135,   110,   170,   114,
+     183,    96,   134,    96,   134,   109,   109,   132,   115,   134,
+     272,   309,   115,   116,   130,   163,   110,   135,   146,   146,
+     110,   110,   110,   110,   267,    42,   163,   179,   180,   310,
+     130,   134,   171,   181,   110,   132,   171,   132,   134,   110,
+     134,   110,   134,    96,   134,    96,   134,   132,   298,   141,
+     139,   204,   110,   132,   110,   135,   135,   171,    96,   116,
+     130,   135,   205,   206,   212,   132,   170,   170,   205,   173,
+     197,   225,   366,   173,   197,   110,   134,   110,   134,   115,
+     110,   116,   112,   112,   163,   179,   182,   184,   185,   134,
+     132,   182,   186,   187,   135,   109,   149,   309,   357,   139,
+     135,   173,   197,   173,   197,   109,   132,   139,   171,   176,
+     115,   182,   212,   170,    56,   176,   189,   115,   182,   110,
+     227,   110,   135,   135,   292,   171,   176,   132,   188,   189,
+     176,   189,   173,   173,   110,   110,   110,   188,   135,   135,
+     173,   173,   135,   135
 };
 
@@ -5216,5 +4960,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 290 "parser.yy"
+#line 298 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -5225,5 +4969,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 296 "parser.yy"
+#line 304 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -5234,6 +4978,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 305 "parser.yy"
-    { (yyval.constant) = makeConstant( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
+#line 313 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5241,6 +4985,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 306 "parser.yy"
-    { (yyval.constant) = makeConstant( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
+#line 314 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5248,6 +4992,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 307 "parser.yy"
-    { (yyval.constant) = makeConstant( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
+#line 315 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5255,6 +4999,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 332 "parser.yy"
-    { (yyval.constant) = makeConstantStr( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
+#line 340 "parser.yy"
+    { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -5262,6 +5006,10 @@
 
 /* Line 1806 of yacc.c  */
-#line 333 "parser.yy"
-    { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
+#line 342 "parser.yy"
+    {
+			appendStr( (yyvsp[(1) - (2)].constant)->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) );
+			delete (yyvsp[(2) - (2)].tok);									// allocated by lexer
+			(yyval.constant) = (yyvsp[(1) - (2)].constant);
+		}
     break;
 
@@ -5269,6 +5017,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 340 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
+#line 353 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5276,6 +5024,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 342 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
+#line 355 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5283,5 +5031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 344 "parser.yy"
+#line 357 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5290,6 +5038,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 346 "parser.yy"
-    { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
+#line 359 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     break;
 
@@ -5297,6 +5045,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 356 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
+#line 369 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
 
@@ -5304,6 +5052,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 358 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
+#line 371 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5311,6 +5059,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 362 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
+#line 375 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5318,6 +5066,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 365 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
+#line 378 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5325,6 +5073,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 368 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
+#line 381 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5332,6 +5080,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 370 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
+#line 383 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5339,6 +5087,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 372 "parser.yy"
-    { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
+#line 385 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     break;
 
@@ -5346,8 +5094,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 374 "parser.yy"
+#line 387 "parser.yy"
     {
-			Token fn; fn.str = new std::string( "?{}" ); // location undefined
-			(yyval.en) = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) );
+			Token fn;
+			fn.str = new std::string( "?{}" ); // location undefined
+			(yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_last( (yyvsp[(3) - (4)].en) ) ) );
 		}
     break;
@@ -5356,6 +5105,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 383 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
+#line 397 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
 
@@ -5363,20 +5112,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 388 "parser.yy"
+#line 402 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 37:
-
-/* Line 1806 of yacc.c  */
-#line 391 "parser.yy"
-    { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
-    break;
-
   case 38:
 
 /* Line 1806 of yacc.c  */
-#line 396 "parser.yy"
-    { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
+#line 408 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
 
@@ -5384,6 +5126,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 398 "parser.yy"
-    { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
+#line 413 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
+    break;
+
+  case 40:
+
+/* Line 1806 of yacc.c  */
+#line 417 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5391,6 +5140,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 403 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+#line 419 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
@@ -5398,6 +5147,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 408 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
+#line 421 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5405,13 +5154,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 412 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 44:
-
-/* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
+#line 423 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
@@ -5419,6 +5161,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 416 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
+#line 431 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
@@ -5426,6 +5168,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
+#line 433 "parser.yy"
+    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
+    break;
+
+  case 47:
+
+/* Line 1806 of yacc.c  */
+#line 435 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
 
@@ -5433,6 +5182,17 @@
 
 /* Line 1806 of yacc.c  */
-#line 426 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
+#line 440 "parser.yy"
+    {
+			switch ( (yyvsp[(1) - (2)].op) ) {
+			  case OperKinds::AddressOf:
+				(yyval.en) = new ExpressionNode( build_addressOf( (yyvsp[(2) - (2)].en) ) );
+				break;
+			  case OperKinds::PointTo:
+				(yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) );
+				break;
+			  default:
+				assert( false );
+			}
+		}
     break;
 
@@ -5440,6 +5200,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
+#line 453 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5447,6 +5207,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
+#line 455 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5454,6 +5214,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
+#line 457 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5461,6 +5221,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 437 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
+#line 459 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5468,6 +5228,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 439 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
+#line 461 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
@@ -5475,6 +5235,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 441 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
+#line 463 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5482,6 +5242,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 443 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
+#line 465 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
@@ -5489,6 +5249,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 445 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
+#line 467 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
 
@@ -5496,6 +5256,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 447 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
+#line 469 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
     break;
 
@@ -5503,6 +5263,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 449 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
+#line 471 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5510,6 +5270,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 451 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
+#line 473 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
@@ -5517,6 +5277,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 453 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
+#line 479 "parser.yy"
+    { (yyval.op) = OperKinds::PointTo; }
     break;
 
@@ -5524,6 +5284,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 455 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
+#line 480 "parser.yy"
+    { (yyval.op) = OperKinds::AddressOf; }
     break;
 
@@ -5531,6 +5291,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 457 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
+#line 486 "parser.yy"
+    { (yyval.op) = OperKinds::UnPlus; }
     break;
 
@@ -5538,6 +5298,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 463 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::PointTo ); }
+#line 487 "parser.yy"
+    { (yyval.op) = OperKinds::UnMinus; }
     break;
 
@@ -5545,6 +5305,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 464 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
+#line 488 "parser.yy"
+    { (yyval.op) = OperKinds::Neg; }
     break;
 
@@ -5552,13 +5312,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::And ); }
-    break;
-
-  case 66:
-
-/* Line 1806 of yacc.c  */
-#line 470 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
+#line 489 "parser.yy"
+    { (yyval.op) = OperKinds::BitNeg; }
     break;
 
@@ -5566,6 +5319,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 471 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
+#line 495 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -5573,13 +5326,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 472 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::Neg ); }
-    break;
-
-  case 69:
-
-/* Line 1806 of yacc.c  */
-#line 473 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
+#line 497 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 70:
+
+/* Line 1806 of yacc.c  */
+#line 503 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5587,6 +5340,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 479 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
+#line 505 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5594,6 +5347,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 481 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
+#line 507 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5601,6 +5354,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 487 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 513 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5608,13 +5361,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 489 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 76:
-
-/* Line 1806 of yacc.c  */
-#line 491 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 515 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 77:
+
+/* Line 1806 of yacc.c  */
+#line 521 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5622,13 +5375,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 497 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 79:
-
-/* Line 1806 of yacc.c  */
-#line 499 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 523 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 80:
+
+/* Line 1806 of yacc.c  */
+#line 529 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5636,6 +5389,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 505 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 531 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5643,13 +5396,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 507 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 84:
-
-/* Line 1806 of yacc.c  */
-#line 513 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 533 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 83:
+
+/* Line 1806 of yacc.c  */
+#line 535 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5657,6 +5410,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 515 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 541 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5664,20 +5417,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 517 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 87:
-
-/* Line 1806 of yacc.c  */
-#line 519 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 89:
-
-/* Line 1806 of yacc.c  */
-#line 525 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 543 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 88:
+
+/* Line 1806 of yacc.c  */
+#line 549 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5685,6 +5431,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 527 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 555 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5692,6 +5438,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 533 "parser.yy"
-    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 561 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5699,6 +5445,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 539 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 567 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
     break;
 
@@ -5706,6 +5452,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 545 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 573 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
     break;
 
@@ -5713,6 +5459,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 551 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 579 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
+    break;
+
+  case 99:
+
+/* Line 1806 of yacc.c  */
+#line 582 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -5720,13 +5473,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 557 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 102:
-
-/* Line 1806 of yacc.c  */
-#line 563 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
+#line 584 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
 
@@ -5734,6 +5480,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 565 "parser.yy"
-    { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
+#line 595 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5741,6 +5487,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 567 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
+#line 597 "parser.yy"
+    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 105:
+
+/* Line 1806 of yacc.c  */
+#line 602 "parser.yy"
+    { (yyval.en) = nullptr; }
     break;
 
@@ -5748,6 +5501,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 578 "parser.yy"
-    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 607 "parser.yy"
+    { (yyval.op) = OperKinds::Assign; }
     break;
 
@@ -5755,6 +5508,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 580 "parser.yy"
-    { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 608 "parser.yy"
+    { (yyval.op) = OperKinds::MulAssn; }
     break;
 
@@ -5762,6 +5515,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 582 "parser.yy"
-    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
+#line 609 "parser.yy"
+    { (yyval.op) = OperKinds::DivAssn; }
     break;
 
@@ -5769,6 +5522,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 587 "parser.yy"
-    { (yyval.en) = new NullExprNode; }
+#line 610 "parser.yy"
+    { (yyval.op) = OperKinds::ModAssn; }
+    break;
+
+  case 111:
+
+/* Line 1806 of yacc.c  */
+#line 611 "parser.yy"
+    { (yyval.op) = OperKinds::PlusAssn; }
     break;
 
@@ -5776,6 +5536,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 595 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
+#line 612 "parser.yy"
+    { (yyval.op) = OperKinds::MinusAssn; }
     break;
 
@@ -5783,6 +5543,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 597 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
+#line 613 "parser.yy"
+    { (yyval.op) = OperKinds::LSAssn; }
     break;
 
@@ -5790,6 +5550,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 599 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
+#line 614 "parser.yy"
+    { (yyval.op) = OperKinds::RSAssn; }
     break;
 
@@ -5797,6 +5557,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 601 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
+#line 615 "parser.yy"
+    { (yyval.op) = OperKinds::AndAssn; }
+    break;
+
+  case 116:
+
+/* Line 1806 of yacc.c  */
+#line 616 "parser.yy"
+    { (yyval.op) = OperKinds::ERAssn; }
     break;
 
@@ -5804,6 +5571,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 607 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+#line 617 "parser.yy"
+    { (yyval.op) = OperKinds::OrAssn; }
     break;
 
@@ -5811,6 +5578,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
+#line 624 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple() ); }
     break;
 
@@ -5818,6 +5585,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 612 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
+#line 626 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
     break;
 
@@ -5825,6 +5592,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 613 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
+#line 628 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
 
@@ -5832,13 +5599,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 614 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
-    break;
-
-  case 122:
-
-/* Line 1806 of yacc.c  */
-#line 615 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
+#line 630 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
 
@@ -5846,13 +5606,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 616 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
-    break;
-
-  case 124:
-
-/* Line 1806 of yacc.c  */
-#line 617 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
+#line 636 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
 
@@ -5860,6 +5613,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 618 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
+#line 642 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5867,20 +5620,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 619 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
-    break;
-
-  case 127:
-
-/* Line 1806 of yacc.c  */
-#line 620 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
-    break;
-
-  case 129:
-
-/* Line 1806 of yacc.c  */
-#line 626 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
+#line 647 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -5888,30 +5627,23 @@
 
 /* Line 1806 of yacc.c  */
-#line 631 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 134:
-
-/* Line 1806 of yacc.c  */
-#line 640 "parser.yy"
+#line 656 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
 
-  case 140:
-
-/* Line 1806 of yacc.c  */
-#line 647 "parser.yy"
+  case 136:
+
+/* Line 1806 of yacc.c  */
+#line 663 "parser.yy"
     {
-			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
-			(yyval.sn) = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),
-				(ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ), 0 );
+			Token fn;
+			fn.str = new std::string( "^?{}" ); // location undefined
+			(yyval.sn) = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_last( (yyvsp[(4) - (6)].en) ) ) ) ) );
 		}
     break;
 
-  case 141:
-
-/* Line 1806 of yacc.c  */
-#line 657 "parser.yy"
+  case 137:
+
+/* Line 1806 of yacc.c  */
+#line 673 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5919,9 +5651,30 @@
     break;
 
+  case 138:
+
+/* Line 1806 of yacc.c  */
+#line 680 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
+    break;
+
+  case 139:
+
+/* Line 1806 of yacc.c  */
+#line 687 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
+    break;
+
+  case 141:
+
+/* Line 1806 of yacc.c  */
+#line 693 "parser.yy"
+    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
+    break;
+
   case 142:
 
 /* Line 1806 of yacc.c  */
-#line 664 "parser.yy"
-    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
+#line 698 "parser.yy"
+    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
@@ -5929,28 +5682,7 @@
 
 /* Line 1806 of yacc.c  */
-#line 671 "parser.yy"
-    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
-    break;
-
-  case 145:
-
-/* Line 1806 of yacc.c  */
-#line 677 "parser.yy"
-    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
-    break;
-
-  case 146:
-
-/* Line 1806 of yacc.c  */
-#line 682 "parser.yy"
-    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
-    break;
-
-  case 147:
-
-/* Line 1806 of yacc.c  */
-#line 684 "parser.yy"
+#line 700 "parser.yy"
     {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			(yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) );
@@ -5958,9 +5690,37 @@
     break;
 
+  case 144:
+
+/* Line 1806 of yacc.c  */
+#line 706 "parser.yy"
+    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
+    break;
+
+  case 147:
+
+/* Line 1806 of yacc.c  */
+#line 713 "parser.yy"
+    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
+    break;
+
   case 148:
 
 /* Line 1806 of yacc.c  */
-#line 690 "parser.yy"
-    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
+#line 718 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
+    break;
+
+  case 149:
+
+/* Line 1806 of yacc.c  */
+#line 724 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
+    break;
+
+  case 150:
+
+/* Line 1806 of yacc.c  */
+#line 726 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
     break;
 
@@ -5968,6 +5728,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 697 "parser.yy"
-    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
+#line 728 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
 
@@ -5975,48 +5735,45 @@
 
 /* Line 1806 of yacc.c  */
-#line 702 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
-    break;
-
-  case 153:
-
-/* Line 1806 of yacc.c  */
-#line 708 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 154:
-
-/* Line 1806 of yacc.c  */
-#line 710 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
-    break;
-
-  case 155:
-
-/* Line 1806 of yacc.c  */
-#line 712 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 156:
-
-/* Line 1806 of yacc.c  */
-#line 714 "parser.yy"
+#line 730 "parser.yy"
     {
-			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
+			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
 			// The semantics of the declaration list is changed to include associated initialization, which is performed
 			// *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
 			// statement around the switch.  Statements after the initial declaration list can never be executed, and
-			// therefore, are removed from the grammar even though C allows it. Change also applies to choose statement.
-			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
+			// therefore, are removed from the grammar even though C allows it. The change also applies to choose
+			// statement.
+			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
 		}
     break;
 
-  case 157:
-
-/* Line 1806 of yacc.c  */
-#line 723 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
+  case 153:
+
+/* Line 1806 of yacc.c  */
+#line 740 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
+    break;
+
+  case 154:
+
+/* Line 1806 of yacc.c  */
+#line 742 "parser.yy"
+    {
+			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
+			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
+		}
+    break;
+
+  case 155:
+
+/* Line 1806 of yacc.c  */
+#line 752 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
+    break;
+
+  case 156:
+
+/* Line 1806 of yacc.c  */
+#line 754 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -6024,336 +5781,315 @@
 
 /* Line 1806 of yacc.c  */
-#line 725 "parser.yy"
+#line 759 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
+    break;
+
+  case 159:
+
+/* Line 1806 of yacc.c  */
+#line 761 "parser.yy"
+    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
+    break;
+
+  case 160:
+
+/* Line 1806 of yacc.c  */
+#line 765 "parser.yy"
+    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
+    break;
+
+  case 161:
+
+/* Line 1806 of yacc.c  */
+#line 766 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_default() ); }
+    break;
+
+  case 163:
+
+/* Line 1806 of yacc.c  */
+#line 772 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
+    break;
+
+  case 164:
+
+/* Line 1806 of yacc.c  */
+#line 776 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
+    break;
+
+  case 165:
+
+/* Line 1806 of yacc.c  */
+#line 781 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 167:
+
+/* Line 1806 of yacc.c  */
+#line 787 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
+    break;
+
+  case 168:
+
+/* Line 1806 of yacc.c  */
+#line 789 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
+    break;
+
+  case 169:
+
+/* Line 1806 of yacc.c  */
+#line 794 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 171:
+
+/* Line 1806 of yacc.c  */
+#line 800 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
+    break;
+
+  case 172:
+
+/* Line 1806 of yacc.c  */
+#line 802 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
+    break;
+
+  case 173:
+
+/* Line 1806 of yacc.c  */
+#line 804 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
+    break;
+
+  case 174:
+
+/* Line 1806 of yacc.c  */
+#line 806 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
+    break;
+
+  case 175:
+
+/* Line 1806 of yacc.c  */
+#line 811 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Break ) ); }
+    break;
+
+  case 177:
+
+/* Line 1806 of yacc.c  */
+#line 817 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 178:
+
+/* Line 1806 of yacc.c  */
+#line 819 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 179:
+
+/* Line 1806 of yacc.c  */
+#line 824 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
+    break;
+
+  case 180:
+
+/* Line 1806 of yacc.c  */
+#line 826 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
+    break;
+
+  case 181:
+
+/* Line 1806 of yacc.c  */
+#line 828 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
+    break;
+
+  case 182:
+
+/* Line 1806 of yacc.c  */
+#line 833 "parser.yy"
+    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
+    break;
+
+  case 183:
+
+/* Line 1806 of yacc.c  */
+#line 835 "parser.yy"
+    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
+    break;
+
+  case 184:
+
+/* Line 1806 of yacc.c  */
+#line 840 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
+    break;
+
+  case 185:
+
+/* Line 1806 of yacc.c  */
+#line 844 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
+    break;
+
+  case 186:
+
+/* Line 1806 of yacc.c  */
+#line 847 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Continue ) ); }
+    break;
+
+  case 187:
+
+/* Line 1806 of yacc.c  */
+#line 851 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); delete (yyvsp[(2) - (3)].tok); }
+    break;
+
+  case 188:
+
+/* Line 1806 of yacc.c  */
+#line 854 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Break ) ); }
+    break;
+
+  case 189:
+
+/* Line 1806 of yacc.c  */
+#line 858 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); delete (yyvsp[(2) - (3)].tok); }
+    break;
+
+  case 190:
+
+/* Line 1806 of yacc.c  */
+#line 860 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
+    break;
+
+  case 191:
+
+/* Line 1806 of yacc.c  */
+#line 862 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
+    break;
+
+  case 192:
+
+/* Line 1806 of yacc.c  */
+#line 864 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
+    break;
+
+  case 193:
+
+/* Line 1806 of yacc.c  */
+#line 866 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
+    break;
+
+  case 194:
+
+/* Line 1806 of yacc.c  */
+#line 871 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
+    break;
+
+  case 195:
+
+/* Line 1806 of yacc.c  */
+#line 873 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
+    break;
+
+  case 196:
+
+/* Line 1806 of yacc.c  */
+#line 875 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
+    break;
+
+  case 198:
+
+/* Line 1806 of yacc.c  */
+#line 882 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
+    break;
+
+  case 199:
+
+/* Line 1806 of yacc.c  */
+#line 884 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
+    break;
+
+  case 200:
+
+/* Line 1806 of yacc.c  */
+#line 886 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
+    break;
+
+  case 201:
+
+/* Line 1806 of yacc.c  */
+#line 888 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
+    break;
+
+  case 202:
+
+/* Line 1806 of yacc.c  */
+#line 893 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
+    break;
+
+  case 203:
+
+/* Line 1806 of yacc.c  */
+#line 895 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
+    break;
+
+  case 204:
+
+/* Line 1806 of yacc.c  */
+#line 897 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
+    break;
+
+  case 205:
+
+/* Line 1806 of yacc.c  */
+#line 899 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
+    break;
+
+  case 206:
+
+/* Line 1806 of yacc.c  */
+#line 904 "parser.yy"
     {
-			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
-			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
+			(yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
 		}
     break;
 
-  case 159:
-
-/* Line 1806 of yacc.c  */
-#line 735 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].en); }
-    break;
-
-  case 160:
-
-/* Line 1806 of yacc.c  */
-#line 737 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 163:
-
-/* Line 1806 of yacc.c  */
-#line 744 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 164:
-
-/* Line 1806 of yacc.c  */
-#line 748 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
-    break;
-
-  case 165:
-
-/* Line 1806 of yacc.c  */
-#line 749 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
-    break;
-
-  case 167:
-
-/* Line 1806 of yacc.c  */
-#line 755 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
-    break;
-
-  case 168:
-
-/* Line 1806 of yacc.c  */
-#line 759 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
-    break;
-
-  case 169:
-
-/* Line 1806 of yacc.c  */
-#line 764 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 171:
-
-/* Line 1806 of yacc.c  */
-#line 770 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
-    break;
-
-  case 172:
-
-/* Line 1806 of yacc.c  */
-#line 772 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
-    break;
-
-  case 173:
-
-/* Line 1806 of yacc.c  */
-#line 777 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 175:
-
-/* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
-    break;
-
-  case 176:
-
-/* Line 1806 of yacc.c  */
-#line 785 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
-    break;
-
-  case 177:
-
-/* Line 1806 of yacc.c  */
-#line 787 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
-    break;
-
-  case 178:
-
-/* Line 1806 of yacc.c  */
-#line 789 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
-    break;
-
-  case 179:
-
-/* Line 1806 of yacc.c  */
-#line 794 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
-    break;
-
-  case 181:
-
-/* Line 1806 of yacc.c  */
-#line 800 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 182:
-
-/* Line 1806 of yacc.c  */
-#line 802 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 183:
-
-/* Line 1806 of yacc.c  */
-#line 807 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 184:
-
-/* Line 1806 of yacc.c  */
-#line 809 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
-    break;
-
-  case 185:
-
-/* Line 1806 of yacc.c  */
-#line 811 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
-    break;
-
-  case 186:
-
-/* Line 1806 of yacc.c  */
-#line 816 "parser.yy"
-    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
-    break;
-
-  case 187:
-
-/* Line 1806 of yacc.c  */
-#line 818 "parser.yy"
-    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
-    break;
-
-  case 188:
-
-/* Line 1806 of yacc.c  */
-#line 823 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 189:
-
-/* Line 1806 of yacc.c  */
-#line 827 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 190:
-
-/* Line 1806 of yacc.c  */
-#line 830 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
-    break;
-
-  case 191:
-
-/* Line 1806 of yacc.c  */
-#line 834 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 192:
-
-/* Line 1806 of yacc.c  */
-#line 837 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
-    break;
-
-  case 193:
-
-/* Line 1806 of yacc.c  */
-#line 841 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 194:
-
-/* Line 1806 of yacc.c  */
-#line 843 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
-    break;
-
-  case 195:
-
-/* Line 1806 of yacc.c  */
-#line 845 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
-    break;
-
-  case 196:
-
-/* Line 1806 of yacc.c  */
-#line 849 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
-    break;
-
-  case 197:
-
-/* Line 1806 of yacc.c  */
-#line 851 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
-    break;
-
-  case 198:
-
-/* Line 1806 of yacc.c  */
-#line 858 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
-    break;
-
-  case 199:
-
-/* Line 1806 of yacc.c  */
-#line 860 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
-    break;
-
-  case 200:
-
-/* Line 1806 of yacc.c  */
-#line 862 "parser.yy"
-    {
-			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
-			(yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (4)].sn),*(yyvsp[(3) - (4)].pn) ))));
-		}
-    break;
-
-  case 202:
-
-/* Line 1806 of yacc.c  */
-#line 873 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
-    break;
-
-  case 203:
-
-/* Line 1806 of yacc.c  */
-#line 875 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
-    break;
-
-  case 204:
-
-/* Line 1806 of yacc.c  */
-#line 877 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
-    break;
-
-  case 205:
-
-/* Line 1806 of yacc.c  */
-#line 879 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
-    break;
-
-  case 206:
-
-/* Line 1806 of yacc.c  */
-#line 884 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
-  case 207:
-
-/* Line 1806 of yacc.c  */
-#line 886 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
   case 208:
 
 /* Line 1806 of yacc.c  */
-#line 888 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
-  case 209:
-
-/* Line 1806 of yacc.c  */
-#line 890 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 210:
-
-/* Line 1806 of yacc.c  */
-#line 895 "parser.yy"
-    {
-			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
-			std::cout << "Just created a finally node" << std::endl;
-		}
-    break;
-
-  case 212:
-
-/* Line 1806 of yacc.c  */
-#line 909 "parser.yy"
+#line 917 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6362,15 +6098,15 @@
     break;
 
-  case 213:
-
-/* Line 1806 of yacc.c  */
-#line 914 "parser.yy"
+  case 209:
+
+/* Line 1806 of yacc.c  */
+#line 922 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 214:
-
-/* Line 1806 of yacc.c  */
-#line 916 "parser.yy"
+  case 210:
+
+/* Line 1806 of yacc.c  */
+#line 924 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6379,9 +6115,37 @@
     break;
 
+  case 212:
+
+/* Line 1806 of yacc.c  */
+#line 933 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
+    break;
+
+  case 213:
+
+/* Line 1806 of yacc.c  */
+#line 935 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
+    break;
+
+  case 214:
+
+/* Line 1806 of yacc.c  */
+#line 937 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
+    break;
+
+  case 215:
+
+/* Line 1806 of yacc.c  */
+#line 939 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); }
+    break;
+
   case 216:
 
 /* Line 1806 of yacc.c  */
-#line 925 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
+#line 941 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); }
     break;
 
@@ -6389,6 +6153,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 927 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
+#line 946 "parser.yy"
+    { (yyval.flag) = false; }
     break;
 
@@ -6396,6 +6160,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 929 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
+#line 948 "parser.yy"
+    { (yyval.flag) = true; }
     break;
 
@@ -6403,20 +6167,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 931 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
-    break;
-
-  case 220:
-
-/* Line 1806 of yacc.c  */
-#line 933 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
-    break;
-
-  case 221:
-
-/* Line 1806 of yacc.c  */
-#line 938 "parser.yy"
-    { (yyval.flag) = false; }
+#line 953 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -6424,6 +6174,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 940 "parser.yy"
-    { (yyval.flag) = true; }
+#line 960 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
 
@@ -6431,5 +6181,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 945 "parser.yy"
+#line 965 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
+    break;
+
+  case 224:
+
+/* Line 1806 of yacc.c  */
+#line 967 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
+    break;
+
+  case 225:
+
+/* Line 1806 of yacc.c  */
+#line 972 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6438,6 +6202,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 952 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+#line 974 "parser.yy"
+    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
 
@@ -6445,6 +6209,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 957 "parser.yy"
-    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
+#line 976 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
 
@@ -6452,6 +6216,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 959 "parser.yy"
-    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
+#line 981 "parser.yy"
+    { (yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -6459,6 +6223,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 964 "parser.yy"
-    { (yyval.constant) = 0; }
+#line 983 "parser.yy"
+    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) ); }
     break;
 
@@ -6466,20 +6230,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 966 "parser.yy"
-    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
-    break;
-
-  case 231:
-
-/* Line 1806 of yacc.c  */
-#line 968 "parser.yy"
-    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
-    break;
-
-  case 232:
-
-/* Line 1806 of yacc.c  */
-#line 973 "parser.yy"
-    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
+#line 990 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -6487,6 +6237,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 975 "parser.yy"
-    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
+#line 997 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
@@ -6494,5 +6244,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 982 "parser.yy"
+#line 1002 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6501,40 +6251,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 989 "parser.yy"
+#line 1009 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 238:
-
-/* Line 1806 of yacc.c  */
-#line 994 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 241:
-
-/* Line 1806 of yacc.c  */
-#line 1001 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 246:
-
-/* Line 1806 of yacc.c  */
-#line 1015 "parser.yy"
+  case 242:
+
+/* Line 1806 of yacc.c  */
+#line 1023 "parser.yy"
     {}
     break;
 
-  case 247:
-
-/* Line 1806 of yacc.c  */
-#line 1016 "parser.yy"
+  case 243:
+
+/* Line 1806 of yacc.c  */
+#line 1024 "parser.yy"
     {}
     break;
 
-  case 255:
-
-/* Line 1806 of yacc.c  */
-#line 1045 "parser.yy"
+  case 251:
+
+/* Line 1806 of yacc.c  */
+#line 1053 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6543,8 +6279,8 @@
     break;
 
-  case 256:
-
-/* Line 1806 of yacc.c  */
-#line 1052 "parser.yy"
+  case 252:
+
+/* Line 1806 of yacc.c  */
+#line 1060 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6553,8 +6289,8 @@
     break;
 
-  case 257:
-
-/* Line 1806 of yacc.c  */
-#line 1057 "parser.yy"
+  case 253:
+
+/* Line 1806 of yacc.c  */
+#line 1065 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6563,8 +6299,8 @@
     break;
 
-  case 258:
-
-/* Line 1806 of yacc.c  */
-#line 1067 "parser.yy"
+  case 254:
+
+/* Line 1806 of yacc.c  */
+#line 1075 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6573,8 +6309,8 @@
     break;
 
-  case 259:
-
-/* Line 1806 of yacc.c  */
-#line 1072 "parser.yy"
+  case 255:
+
+/* Line 1806 of yacc.c  */
+#line 1080 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6583,8 +6319,8 @@
     break;
 
-  case 260:
-
-/* Line 1806 of yacc.c  */
-#line 1077 "parser.yy"
+  case 256:
+
+/* Line 1806 of yacc.c  */
+#line 1085 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6593,8 +6329,8 @@
     break;
 
-  case 261:
-
-/* Line 1806 of yacc.c  */
-#line 1085 "parser.yy"
+  case 257:
+
+/* Line 1806 of yacc.c  */
+#line 1093 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6603,8 +6339,8 @@
     break;
 
-  case 262:
-
-/* Line 1806 of yacc.c  */
-#line 1090 "parser.yy"
+  case 258:
+
+/* Line 1806 of yacc.c  */
+#line 1098 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6613,8 +6349,8 @@
     break;
 
-  case 263:
-
-/* Line 1806 of yacc.c  */
-#line 1095 "parser.yy"
+  case 259:
+
+/* Line 1806 of yacc.c  */
+#line 1103 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6623,8 +6359,8 @@
     break;
 
-  case 264:
-
-/* Line 1806 of yacc.c  */
-#line 1100 "parser.yy"
+  case 260:
+
+/* Line 1806 of yacc.c  */
+#line 1108 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6633,8 +6369,8 @@
     break;
 
-  case 265:
-
-/* Line 1806 of yacc.c  */
-#line 1105 "parser.yy"
+  case 261:
+
+/* Line 1806 of yacc.c  */
+#line 1113 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6643,8 +6379,8 @@
     break;
 
-  case 266:
-
-/* Line 1806 of yacc.c  */
-#line 1113 "parser.yy"
+  case 262:
+
+/* Line 1806 of yacc.c  */
+#line 1121 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6652,8 +6388,8 @@
     break;
 
-  case 267:
-
-/* Line 1806 of yacc.c  */
-#line 1136 "parser.yy"
+  case 263:
+
+/* Line 1806 of yacc.c  */
+#line 1144 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6661,8 +6397,8 @@
     break;
 
-  case 268:
-
-/* Line 1806 of yacc.c  */
-#line 1140 "parser.yy"
+  case 264:
+
+/* Line 1806 of yacc.c  */
+#line 1148 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6670,22 +6406,22 @@
     break;
 
-  case 269:
-
-/* Line 1806 of yacc.c  */
-#line 1147 "parser.yy"
+  case 265:
+
+/* Line 1806 of yacc.c  */
+#line 1155 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 270:
-
-/* Line 1806 of yacc.c  */
-#line 1151 "parser.yy"
+  case 266:
+
+/* Line 1806 of yacc.c  */
+#line 1159 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
 
-  case 271:
-
-/* Line 1806 of yacc.c  */
-#line 1156 "parser.yy"
+  case 267:
+
+/* Line 1806 of yacc.c  */
+#line 1164 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6694,8 +6430,8 @@
     break;
 
-  case 272:
-
-/* Line 1806 of yacc.c  */
-#line 1161 "parser.yy"
+  case 268:
+
+/* Line 1806 of yacc.c  */
+#line 1169 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6704,8 +6440,8 @@
     break;
 
-  case 273:
-
-/* Line 1806 of yacc.c  */
-#line 1166 "parser.yy"
+  case 269:
+
+/* Line 1806 of yacc.c  */
+#line 1174 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6714,8 +6450,8 @@
     break;
 
-  case 274:
-
-/* Line 1806 of yacc.c  */
-#line 1177 "parser.yy"
+  case 270:
+
+/* Line 1806 of yacc.c  */
+#line 1185 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6724,8 +6460,8 @@
     break;
 
-  case 275:
-
-/* Line 1806 of yacc.c  */
-#line 1182 "parser.yy"
+  case 271:
+
+/* Line 1806 of yacc.c  */
+#line 1190 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6734,8 +6470,8 @@
     break;
 
-  case 276:
-
-/* Line 1806 of yacc.c  */
-#line 1187 "parser.yy"
+  case 272:
+
+/* Line 1806 of yacc.c  */
+#line 1195 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6744,8 +6480,8 @@
     break;
 
-  case 277:
-
-/* Line 1806 of yacc.c  */
-#line 1192 "parser.yy"
+  case 273:
+
+/* Line 1806 of yacc.c  */
+#line 1200 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6754,8 +6490,8 @@
     break;
 
-  case 278:
-
-/* Line 1806 of yacc.c  */
-#line 1197 "parser.yy"
+  case 274:
+
+/* Line 1806 of yacc.c  */
+#line 1205 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6764,8 +6500,8 @@
     break;
 
-  case 279:
-
-/* Line 1806 of yacc.c  */
-#line 1206 "parser.yy"
+  case 275:
+
+/* Line 1806 of yacc.c  */
+#line 1214 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6774,8 +6510,8 @@
     break;
 
-  case 280:
-
-/* Line 1806 of yacc.c  */
-#line 1211 "parser.yy"
+  case 276:
+
+/* Line 1806 of yacc.c  */
+#line 1219 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6784,8 +6520,8 @@
     break;
 
-  case 285:
-
-/* Line 1806 of yacc.c  */
-#line 1228 "parser.yy"
+  case 281:
+
+/* Line 1806 of yacc.c  */
+#line 1236 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6794,8 +6530,8 @@
     break;
 
-  case 286:
-
-/* Line 1806 of yacc.c  */
-#line 1233 "parser.yy"
+  case 282:
+
+/* Line 1806 of yacc.c  */
+#line 1241 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6804,16 +6540,44 @@
     break;
 
-  case 295:
-
-/* Line 1806 of yacc.c  */
-#line 1255 "parser.yy"
+  case 291:
+
+/* Line 1806 of yacc.c  */
+#line 1263 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
+  case 294:
+
+/* Line 1806 of yacc.c  */
+#line 1275 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 297:
+
+/* Line 1806 of yacc.c  */
+#line 1286 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+    break;
+
   case 298:
 
 /* Line 1806 of yacc.c  */
-#line 1267 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+#line 1288 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
+    break;
+
+  case 299:
+
+/* Line 1806 of yacc.c  */
+#line 1290 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
+    break;
+
+  case 300:
+
+/* Line 1806 of yacc.c  */
+#line 1292 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
 
@@ -6821,6 +6585,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1278 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+#line 1294 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
 
@@ -6828,33 +6592,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1280 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
-    break;
-
-  case 303:
-
-/* Line 1806 of yacc.c  */
-#line 1282 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
-    break;
-
-  case 304:
-
-/* Line 1806 of yacc.c  */
-#line 1284 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
-    break;
-
-  case 305:
-
-/* Line 1806 of yacc.c  */
-#line 1286 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
-    break;
-
-  case 306:
-
-/* Line 1806 of yacc.c  */
-#line 1288 "parser.yy"
+#line 1296 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6862,8 +6598,8 @@
     break;
 
-  case 307:
-
-/* Line 1806 of yacc.c  */
-#line 1292 "parser.yy"
+  case 303:
+
+/* Line 1806 of yacc.c  */
+#line 1300 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6872,292 +6608,278 @@
     break;
 
-  case 309:
-
-/* Line 1806 of yacc.c  */
-#line 1301 "parser.yy"
+  case 305:
+
+/* Line 1806 of yacc.c  */
+#line 1309 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
+  case 306:
+
+/* Line 1806 of yacc.c  */
+#line 1311 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 308:
+
+/* Line 1806 of yacc.c  */
+#line 1322 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 310:
 
 /* Line 1806 of yacc.c  */
-#line 1303 "parser.yy"
+#line 1331 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
+    break;
+
+  case 311:
+
+/* Line 1806 of yacc.c  */
+#line 1333 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
+    break;
+
+  case 312:
+
+/* Line 1806 of yacc.c  */
+#line 1335 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
+    break;
+
+  case 313:
+
+/* Line 1806 of yacc.c  */
+#line 1337 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
+    break;
+
+  case 314:
+
+/* Line 1806 of yacc.c  */
+#line 1339 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+    break;
+
+  case 315:
+
+/* Line 1806 of yacc.c  */
+#line 1341 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
+    break;
+
+  case 316:
+
+/* Line 1806 of yacc.c  */
+#line 1343 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+    break;
+
+  case 317:
+
+/* Line 1806 of yacc.c  */
+#line 1345 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
+    break;
+
+  case 318:
+
+/* Line 1806 of yacc.c  */
+#line 1350 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
+    break;
+
+  case 319:
+
+/* Line 1806 of yacc.c  */
+#line 1352 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
+    break;
+
+  case 320:
+
+/* Line 1806 of yacc.c  */
+#line 1354 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
+    break;
+
+  case 321:
+
+/* Line 1806 of yacc.c  */
+#line 1356 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
+    break;
+
+  case 322:
+
+/* Line 1806 of yacc.c  */
+#line 1358 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
+    break;
+
+  case 323:
+
+/* Line 1806 of yacc.c  */
+#line 1360 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
+    break;
+
+  case 324:
+
+/* Line 1806 of yacc.c  */
+#line 1362 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
+    break;
+
+  case 325:
+
+/* Line 1806 of yacc.c  */
+#line 1364 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
+    break;
+
+  case 326:
+
+/* Line 1806 of yacc.c  */
+#line 1366 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
+    break;
+
+  case 327:
+
+/* Line 1806 of yacc.c  */
+#line 1368 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
+    break;
+
+  case 328:
+
+/* Line 1806 of yacc.c  */
+#line 1370 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
+    break;
+
+  case 329:
+
+/* Line 1806 of yacc.c  */
+#line 1372 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
+    break;
+
+  case 330:
+
+/* Line 1806 of yacc.c  */
+#line 1374 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
+    break;
+
+  case 332:
+
+/* Line 1806 of yacc.c  */
+#line 1381 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1383 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 334:
+
+/* Line 1806 of yacc.c  */
+#line 1385 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 312:
-
-/* Line 1806 of yacc.c  */
-#line 1314 "parser.yy"
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1387 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1393 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 339:
+
+/* Line 1806 of yacc.c  */
+#line 1400 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1402 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 314:
-
-/* Line 1806 of yacc.c  */
-#line 1323 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
-    break;
-
-  case 315:
-
-/* Line 1806 of yacc.c  */
-#line 1325 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
-    break;
-
-  case 316:
-
-/* Line 1806 of yacc.c  */
-#line 1327 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
-    break;
-
-  case 317:
-
-/* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
-    break;
-
-  case 318:
-
-/* Line 1806 of yacc.c  */
-#line 1331 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
-    break;
-
-  case 319:
-
-/* Line 1806 of yacc.c  */
-#line 1333 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
-    break;
-
-  case 320:
-
-/* Line 1806 of yacc.c  */
-#line 1335 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
-    break;
-
-  case 321:
-
-/* Line 1806 of yacc.c  */
-#line 1337 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
-    break;
-
-  case 322:
-
-/* Line 1806 of yacc.c  */
-#line 1342 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
-    break;
-
-  case 323:
-
-/* Line 1806 of yacc.c  */
-#line 1344 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
-    break;
-
-  case 324:
-
-/* Line 1806 of yacc.c  */
-#line 1346 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
-    break;
-
-  case 325:
-
-/* Line 1806 of yacc.c  */
-#line 1348 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
-    break;
-
-  case 326:
-
-/* Line 1806 of yacc.c  */
-#line 1350 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
-    break;
-
-  case 327:
-
-/* Line 1806 of yacc.c  */
-#line 1352 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
-    break;
-
-  case 328:
-
-/* Line 1806 of yacc.c  */
-#line 1354 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
-    break;
-
-  case 329:
-
-/* Line 1806 of yacc.c  */
-#line 1356 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
-    break;
-
-  case 330:
-
-/* Line 1806 of yacc.c  */
-#line 1358 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
-    break;
-
-  case 331:
-
-/* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
-    break;
-
-  case 332:
-
-/* Line 1806 of yacc.c  */
-#line 1362 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
-    break;
-
-  case 333:
-
-/* Line 1806 of yacc.c  */
-#line 1364 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
-    break;
-
-  case 334:
-
-/* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
-    break;
-
-  case 336:
-
-/* Line 1806 of yacc.c  */
-#line 1373 "parser.yy"
+  case 341:
+
+/* Line 1806 of yacc.c  */
+#line 1404 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1409 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
+    break;
+
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1411 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 344:
+
+/* Line 1806 of yacc.c  */
+#line 1413 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1415 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1421 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1375 "parser.yy"
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1423 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 338:
-
-/* Line 1806 of yacc.c  */
-#line 1377 "parser.yy"
+  case 349:
+
+/* Line 1806 of yacc.c  */
+#line 1425 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 339:
-
-/* Line 1806 of yacc.c  */
-#line 1379 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1385 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1392 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 344:
-
-/* Line 1806 of yacc.c  */
-#line 1394 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1396 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 346:
-
-/* Line 1806 of yacc.c  */
-#line 1401 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
-    break;
-
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 348:
-
-/* Line 1806 of yacc.c  */
-#line 1405 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 349:
-
-/* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
-    break;
-
   case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1413 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 352:
-
-/* Line 1806 of yacc.c  */
-#line 1415 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 353:
-
-/* Line 1806 of yacc.c  */
-#line 1417 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 355:
-
-/* Line 1806 of yacc.c  */
-#line 1423 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1425 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 358:
 
 /* Line 1806 of yacc.c  */
@@ -7166,5 +6888,5 @@
     break;
 
-  case 359:
+  case 352:
 
 /* Line 1806 of yacc.c  */
@@ -7173,23 +6895,51 @@
     break;
 
-  case 360:
-
-/* Line 1806 of yacc.c  */
-#line 1435 "parser.yy"
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1439 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1441 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 356:
+
+/* Line 1806 of yacc.c  */
+#line 1443 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 361:
-
-/* Line 1806 of yacc.c  */
-#line 1440 "parser.yy"
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1448 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
 
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1450 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1452 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 362:
 
 /* Line 1806 of yacc.c  */
-#line 1442 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+#line 1462 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
     break;
 
@@ -7197,19 +6947,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1444 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 366:
-
-/* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
-    break;
-
-  case 367:
-
-/* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+#line 1464 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7218,9 +6954,37 @@
     break;
 
+  case 364:
+
+/* Line 1806 of yacc.c  */
+#line 1469 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+    break;
+
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1471 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
+    break;
+
+  case 366:
+
+/* Line 1806 of yacc.c  */
+#line 1473 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
+    break;
+
+  case 367:
+
+/* Line 1806 of yacc.c  */
+#line 1475 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
+    break;
+
   case 368:
 
 /* Line 1806 of yacc.c  */
-#line 1461 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+#line 1480 "parser.yy"
+    { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
 
@@ -7228,6 +6992,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1463 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
+#line 1482 "parser.yy"
+    { (yyval.aggKey) = DeclarationNode::Union; }
     break;
 
@@ -7235,6 +6999,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1465 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
+#line 1487 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -7242,13 +7006,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1467 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 372:
-
-/* Line 1806 of yacc.c  */
-#line 1472 "parser.yy"
-    { (yyval.aggKey) = DeclarationNode::Struct; }
+#line 1489 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7256,13 +7013,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1474 "parser.yy"
-    { (yyval.aggKey) = DeclarationNode::Union; }
-    break;
-
-  case 374:
-
-/* Line 1806 of yacc.c  */
-#line 1479 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1495 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
 
@@ -7270,21 +7020,7 @@
 
 /* Line 1806 of yacc.c  */
-#line 1481 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 377:
-
-/* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
-    break;
-
-  case 379:
-
-/* Line 1806 of yacc.c  */
-#line 1490 "parser.yy"
+#line 1498 "parser.yy"
     {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			(yyval.decl) = (yyvsp[(2) - (3)].decl);
@@ -7292,9 +7028,37 @@
     break;
 
+  case 377:
+
+/* Line 1806 of yacc.c  */
+#line 1508 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
+    break;
+
+  case 378:
+
+/* Line 1806 of yacc.c  */
+#line 1510 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
+    break;
+
+  case 379:
+
+/* Line 1806 of yacc.c  */
+#line 1512 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
+    break;
+
+  case 380:
+
+/* Line 1806 of yacc.c  */
+#line 1517 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
   case 381:
 
 /* Line 1806 of yacc.c  */
-#line 1500 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
+#line 1519 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
 
@@ -7302,6 +7066,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1502 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
+#line 1524 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
 
@@ -7309,6 +7073,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1504 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
+#line 1526 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
 
@@ -7316,6 +7080,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1509 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+#line 1529 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
@@ -7323,13 +7087,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1511 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
-    break;
-
-  case 386:
-
-/* Line 1806 of yacc.c  */
-#line 1516 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
+#line 1532 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
@@ -7337,6 +7094,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1518 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
+#line 1538 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -7344,6 +7101,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1521 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+#line 1540 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
@@ -7351,6 +7108,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1524 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+#line 1545 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
@@ -7358,6 +7115,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1530 "parser.yy"
-    { (yyval.en) = 0; }
+#line 1554 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
 
@@ -7365,26 +7122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1532 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].en); }
-    break;
-
-  case 393:
-
-/* Line 1806 of yacc.c  */
-#line 1537 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
-    break;
-
-  case 395:
-
-/* Line 1806 of yacc.c  */
-#line 1546 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 396:
-
-/* Line 1806 of yacc.c  */
-#line 1548 "parser.yy"
+#line 1556 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7393,9 +7129,37 @@
     break;
 
+  case 393:
+
+/* Line 1806 of yacc.c  */
+#line 1561 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+    break;
+
+  case 394:
+
+/* Line 1806 of yacc.c  */
+#line 1563 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
+    break;
+
+  case 395:
+
+/* Line 1806 of yacc.c  */
+#line 1568 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
+    break;
+
+  case 396:
+
+/* Line 1806 of yacc.c  */
+#line 1570 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
   case 397:
 
 /* Line 1806 of yacc.c  */
-#line 1553 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+#line 1575 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -7403,6 +7167,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1555 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
+#line 1577 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
@@ -7410,27 +7174,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1560 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 400:
-
-/* Line 1806 of yacc.c  */
-#line 1562 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
-  case 401:
-
-/* Line 1806 of yacc.c  */
-#line 1567 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 402:
-
-/* Line 1806 of yacc.c  */
-#line 1569 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
+#line 1584 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -7438,6 +7181,20 @@
 
 /* Line 1806 of yacc.c  */
-#line 1576 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1592 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 404:
+
+/* Line 1806 of yacc.c  */
+#line 1594 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 405:
+
+/* Line 1806 of yacc.c  */
+#line 1596 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
@@ -7445,44 +7202,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1584 "parser.yy"
+#line 1604 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
   case 408:
-
-/* Line 1806 of yacc.c  */
-#line 1586 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 409:
-
-/* Line 1806 of yacc.c  */
-#line 1588 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1596 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1598 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 413:
-
-/* Line 1806 of yacc.c  */
-#line 1600 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
-    break;
-
-  case 415:
 
 /* Line 1806 of yacc.c  */
@@ -7491,16 +7213,51 @@
     break;
 
-  case 416:
-
-/* Line 1806 of yacc.c  */
-#line 1611 "parser.yy"
+  case 409:
+
+/* Line 1806 of yacc.c  */
+#line 1608 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
+    break;
+
+  case 411:
+
+/* Line 1806 of yacc.c  */
+#line 1614 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 412:
+
+/* Line 1806 of yacc.c  */
+#line 1619 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
+  case 415:
+
+/* Line 1806 of yacc.c  */
+#line 1626 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 418:
+
+/* Line 1806 of yacc.c  */
+#line 1633 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
   case 419:
 
 /* Line 1806 of yacc.c  */
-#line 1618 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+#line 1635 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 421:
+
+/* Line 1806 of yacc.c  */
+#line 1644 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -7508,6 +7265,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1625 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+#line 1647 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -7515,40 +7272,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 1627 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 425:
-
-/* Line 1806 of yacc.c  */
-#line 1636 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 426:
-
-/* Line 1806 of yacc.c  */
-#line 1639 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 427:
-
-/* Line 1806 of yacc.c  */
-#line 1641 "parser.yy"
+#line 1649 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
 
-  case 432:
-
-/* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
+  case 428:
+
+/* Line 1806 of yacc.c  */
+#line 1659 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 434:
-
-/* Line 1806 of yacc.c  */
-#line 1657 "parser.yy"
+  case 430:
+
+/* Line 1806 of yacc.c  */
+#line 1665 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7557,8 +7293,8 @@
     break;
 
-  case 435:
-
-/* Line 1806 of yacc.c  */
-#line 1662 "parser.yy"
+  case 431:
+
+/* Line 1806 of yacc.c  */
+#line 1670 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7567,33 +7303,26 @@
     break;
 
-  case 437:
-
-/* Line 1806 of yacc.c  */
-#line 1671 "parser.yy"
+  case 433:
+
+/* Line 1806 of yacc.c  */
+#line 1679 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 438:
-
-/* Line 1806 of yacc.c  */
-#line 1680 "parser.yy"
+  case 434:
+
+/* Line 1806 of yacc.c  */
+#line 1688 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 439:
-
-/* Line 1806 of yacc.c  */
-#line 1682 "parser.yy"
+  case 435:
+
+/* Line 1806 of yacc.c  */
+#line 1690 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 451:
-
-/* Line 1806 of yacc.c  */
-#line 1707 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 455:
+  case 447:
 
 /* Line 1806 of yacc.c  */
@@ -7602,30 +7331,58 @@
     break;
 
+  case 451:
+
+/* Line 1806 of yacc.c  */
+#line 1723 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 452:
+
+/* Line 1806 of yacc.c  */
+#line 1728 "parser.yy"
+    { (yyval.in) = 0; }
+    break;
+
+  case 453:
+
+/* Line 1806 of yacc.c  */
+#line 1730 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in); }
+    break;
+
+  case 454:
+
+/* Line 1806 of yacc.c  */
+#line 1732 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
+    break;
+
+  case 455:
+
+/* Line 1806 of yacc.c  */
+#line 1736 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
+    break;
+
   case 456:
 
 /* Line 1806 of yacc.c  */
-#line 1720 "parser.yy"
+#line 1737 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
+    break;
+
+  case 457:
+
+/* Line 1806 of yacc.c  */
+#line 1742 "parser.yy"
     { (yyval.in) = 0; }
     break;
 
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1722 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in); }
-    break;
-
-  case 458:
-
-/* Line 1806 of yacc.c  */
-#line 1724 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
-    break;
-
   case 459:
 
 /* Line 1806 of yacc.c  */
-#line 1728 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
+#line 1744 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
 
@@ -7633,6 +7390,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1729 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
+#line 1745 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
     break;
 
@@ -7640,6 +7397,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1734 "parser.yy"
-    { (yyval.in) = 0; }
+#line 1747 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
@@ -7647,13 +7404,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1736 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
-    break;
-
-  case 464:
-
-/* Line 1806 of yacc.c  */
-#line 1737 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
+#line 1763 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     break;
 
@@ -7661,6 +7411,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1739 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
+#line 1769 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 466:
+
+/* Line 1806 of yacc.c  */
+#line 1775 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
     break;
 
@@ -7668,6 +7425,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1755 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
+#line 1778 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
+    break;
+
+  case 468:
+
+/* Line 1806 of yacc.c  */
+#line 1780 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
 
@@ -7675,6 +7439,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1761 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
+#line 1782 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
     break;
 
@@ -7682,13 +7446,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1769 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
-  case 471:
-
-/* Line 1806 of yacc.c  */
-#line 1771 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
+#line 1784 "parser.yy"
+    { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
 
@@ -7696,6 +7453,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1774 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
+#line 1808 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
@@ -7703,6 +7460,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1776 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
+#line 1810 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7710,13 +7467,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1778 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
-    break;
-
-  case 475:
-
-/* Line 1806 of yacc.c  */
-#line 1780 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
+#line 1812 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 476:
+
+/* Line 1806 of yacc.c  */
+#line 1818 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
@@ -7724,6 +7481,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1804 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+#line 1820 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7731,13 +7488,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1806 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 479:
-
-/* Line 1806 of yacc.c  */
-#line 1808 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+#line 1825 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 480:
+
+/* Line 1806 of yacc.c  */
+#line 1831 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
@@ -7745,6 +7502,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1814 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+#line 1836 "parser.yy"
+    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
 
@@ -7752,13 +7509,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1816 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 483:
-
-/* Line 1806 of yacc.c  */
-#line 1821 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+#line 1838 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 484:
+
+/* Line 1806 of yacc.c  */
+#line 1844 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Type; }
     break;
 
@@ -7766,6 +7523,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
+#line 1846 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
@@ -7773,6 +7530,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1832 "parser.yy"
-    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
+#line 1848 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
 
@@ -7780,6 +7537,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1834 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
+#line 1853 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 488:
+
+/* Line 1806 of yacc.c  */
+#line 1855 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7787,40 +7551,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1840 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Type; }
-    break;
-
-  case 490:
-
-/* Line 1806 of yacc.c  */
-#line 1842 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Ftype; }
-    break;
-
-  case 491:
-
-/* Line 1806 of yacc.c  */
-#line 1844 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Dtype; }
-    break;
-
-  case 492:
-
-/* Line 1806 of yacc.c  */
-#line 1849 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 493:
-
-/* Line 1806 of yacc.c  */
-#line 1851 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 494:
-
-/* Line 1806 of yacc.c  */
-#line 1856 "parser.yy"
+#line 1860 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7829,9 +7558,37 @@
     break;
 
+  case 490:
+
+/* Line 1806 of yacc.c  */
+#line 1865 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
+    break;
+
+  case 491:
+
+/* Line 1806 of yacc.c  */
+#line 1867 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 492:
+
+/* Line 1806 of yacc.c  */
+#line 1872 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
+    break;
+
+  case 494:
+
+/* Line 1806 of yacc.c  */
+#line 1875 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
+    break;
+
   case 495:
 
 /* Line 1806 of yacc.c  */
-#line 1861 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
+#line 1877 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
 
@@ -7839,6 +7596,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1863 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1882 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7846,6 +7603,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1868 "parser.yy"
-    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
+#line 1884 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 498:
+
+/* Line 1806 of yacc.c  */
+#line 1886 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
@@ -7853,6 +7617,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1871 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
+#line 1891 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7860,6 +7624,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1873 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
+#line 1893 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -7867,40 +7631,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1878 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 502:
-
-/* Line 1806 of yacc.c  */
-#line 1880 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 503:
-
-/* Line 1806 of yacc.c  */
-#line 1882 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 504:
-
-/* Line 1806 of yacc.c  */
-#line 1887 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 505:
-
-/* Line 1806 of yacc.c  */
-#line 1889 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 506:
-
-/* Line 1806 of yacc.c  */
-#line 1894 "parser.yy"
+#line 1898 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7909,8 +7638,8 @@
     break;
 
-  case 507:
-
-/* Line 1806 of yacc.c  */
-#line 1899 "parser.yy"
+  case 502:
+
+/* Line 1806 of yacc.c  */
+#line 1903 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7919,8 +7648,8 @@
     break;
 
-  case 508:
-
-/* Line 1806 of yacc.c  */
-#line 1907 "parser.yy"
+  case 503:
+
+/* Line 1806 of yacc.c  */
+#line 1911 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7929,8 +7658,8 @@
     break;
 
-  case 509:
-
-/* Line 1806 of yacc.c  */
-#line 1912 "parser.yy"
+  case 504:
+
+/* Line 1806 of yacc.c  */
+#line 1916 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7939,8 +7668,8 @@
     break;
 
-  case 510:
-
-/* Line 1806 of yacc.c  */
-#line 1917 "parser.yy"
+  case 505:
+
+/* Line 1806 of yacc.c  */
+#line 1921 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7950,15 +7679,15 @@
     break;
 
-  case 512:
-
-/* Line 1806 of yacc.c  */
-#line 1927 "parser.yy"
+  case 507:
+
+/* Line 1806 of yacc.c  */
+#line 1931 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 515:
-
-/* Line 1806 of yacc.c  */
-#line 1937 "parser.yy"
+  case 510:
+
+/* Line 1806 of yacc.c  */
+#line 1941 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7967,8 +7696,8 @@
     break;
 
-  case 516:
-
-/* Line 1806 of yacc.c  */
-#line 1942 "parser.yy"
+  case 511:
+
+/* Line 1806 of yacc.c  */
+#line 1946 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7977,8 +7706,8 @@
     break;
 
-  case 517:
-
-/* Line 1806 of yacc.c  */
-#line 1947 "parser.yy"
+  case 512:
+
+/* Line 1806 of yacc.c  */
+#line 1951 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7987,8 +7716,8 @@
     break;
 
-  case 518:
-
-/* Line 1806 of yacc.c  */
-#line 1955 "parser.yy"
+  case 513:
+
+/* Line 1806 of yacc.c  */
+#line 1959 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7997,8 +7726,8 @@
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 1960 "parser.yy"
+  case 514:
+
+/* Line 1806 of yacc.c  */
+#line 1964 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -8007,15 +7736,15 @@
     break;
 
-  case 520:
-
-/* Line 1806 of yacc.c  */
-#line 1970 "parser.yy"
+  case 515:
+
+/* Line 1806 of yacc.c  */
+#line 1974 "parser.yy"
     {}
     break;
 
-  case 521:
-
-/* Line 1806 of yacc.c  */
-#line 1972 "parser.yy"
+  case 516:
+
+/* Line 1806 of yacc.c  */
+#line 1976 "parser.yy"
     {
 			if ( theTree ) {
@@ -8027,9 +7756,23 @@
     break;
 
+  case 518:
+
+/* Line 1806 of yacc.c  */
+#line 1988 "parser.yy"
+    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
+    break;
+
+  case 519:
+
+/* Line 1806 of yacc.c  */
+#line 1993 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
   case 523:
 
 /* Line 1806 of yacc.c  */
-#line 1984 "parser.yy"
-    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
+#line 2001 "parser.yy"
+    {}
     break;
 
@@ -8037,19 +7780,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1989 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 528:
-
-/* Line 1806 of yacc.c  */
-#line 1997 "parser.yy"
-    {}
-    break;
-
-  case 529:
-
-/* Line 1806 of yacc.c  */
-#line 1999 "parser.yy"
+#line 2003 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -8058,8 +7787,8 @@
     break;
 
-  case 530:
-
-/* Line 1806 of yacc.c  */
-#line 2004 "parser.yy"
+  case 525:
+
+/* Line 1806 of yacc.c  */
+#line 2008 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -8069,10 +7798,10 @@
     break;
 
-  case 531:
-
-/* Line 1806 of yacc.c  */
-#line 2010 "parser.yy"
+  case 526:
+
+/* Line 1806 of yacc.c  */
+#line 2014 "parser.yy"
     {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			(yyval.decl) = (yyvsp[(2) - (2)].decl);
@@ -8080,8 +7809,8 @@
     break;
 
-  case 533:
-
-/* Line 1806 of yacc.c  */
-#line 2025 "parser.yy"
+  case 528:
+
+/* Line 1806 of yacc.c  */
+#line 2029 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8091,8 +7820,8 @@
     break;
 
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2031 "parser.yy"
+  case 529:
+
+/* Line 1806 of yacc.c  */
+#line 2035 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8102,8 +7831,8 @@
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2040 "parser.yy"
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 2044 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8113,8 +7842,8 @@
     break;
 
-  case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2046 "parser.yy"
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 2050 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8124,8 +7853,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2052 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2056 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8135,8 +7864,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2058 "parser.yy"
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2062 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8146,8 +7875,8 @@
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2064 "parser.yy"
+  case 534:
+
+/* Line 1806 of yacc.c  */
+#line 2068 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8157,8 +7886,8 @@
     break;
 
-  case 540:
-
-/* Line 1806 of yacc.c  */
-#line 2072 "parser.yy"
+  case 535:
+
+/* Line 1806 of yacc.c  */
+#line 2076 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8168,8 +7897,8 @@
     break;
 
-  case 541:
-
-/* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2082 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8179,8 +7908,8 @@
     break;
 
-  case 542:
-
-/* Line 1806 of yacc.c  */
-#line 2086 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2090 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8190,8 +7919,8 @@
     break;
 
-  case 543:
-
-/* Line 1806 of yacc.c  */
-#line 2092 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2096 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8201,44 +7930,72 @@
     break;
 
-  case 547:
-
-/* Line 1806 of yacc.c  */
-#line 2107 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 550:
-
-/* Line 1806 of yacc.c  */
-#line 2117 "parser.yy"
+  case 542:
+
+/* Line 1806 of yacc.c  */
+#line 2111 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 545:
+
+/* Line 1806 of yacc.c  */
+#line 2121 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 553:
-
-/* Line 1806 of yacc.c  */
-#line 2124 "parser.yy"
+  case 548:
+
+/* Line 1806 of yacc.c  */
+#line 2128 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 554:
-
-/* Line 1806 of yacc.c  */
-#line 2130 "parser.yy"
+  case 549:
+
+/* Line 1806 of yacc.c  */
+#line 2134 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 560:
-
-/* Line 1806 of yacc.c  */
-#line 2145 "parser.yy"
+  case 555:
+
+/* Line 1806 of yacc.c  */
+#line 2149 "parser.yy"
     {}
     break;
 
+  case 556:
+
+/* Line 1806 of yacc.c  */
+#line 2150 "parser.yy"
+    {}
+    break;
+
+  case 557:
+
+/* Line 1806 of yacc.c  */
+#line 2151 "parser.yy"
+    {}
+    break;
+
+  case 558:
+
+/* Line 1806 of yacc.c  */
+#line 2152 "parser.yy"
+    {}
+    break;
+
+  case 559:
+
+/* Line 1806 of yacc.c  */
+#line 2187 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 561:
 
 /* Line 1806 of yacc.c  */
-#line 2146 "parser.yy"
-    {}
+#line 2190 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -8246,6 +8003,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2147 "parser.yy"
-    {}
+#line 2192 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -8253,33 +8010,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2148 "parser.yy"
-    {}
-    break;
-
-  case 564:
-
-/* Line 1806 of yacc.c  */
-#line 2183 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 566:
-
-/* Line 1806 of yacc.c  */
-#line 2186 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 567:
-
-/* Line 1806 of yacc.c  */
-#line 2188 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 568:
-
-/* Line 1806 of yacc.c  */
-#line 2193 "parser.yy"
+#line 2197 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8288,428 +8017,428 @@
     break;
 
+  case 564:
+
+/* Line 1806 of yacc.c  */
+#line 2202 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2207 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2209 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 567:
+
+/* Line 1806 of yacc.c  */
+#line 2211 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 568:
+
+/* Line 1806 of yacc.c  */
+#line 2216 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 569:
 
 /* Line 1806 of yacc.c  */
-#line 2198 "parser.yy"
+#line 2218 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2220 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2222 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2203 "parser.yy"
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2227 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2229 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2238 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2241 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2246 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2248 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2250 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2255 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2205 "parser.yy"
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2257 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2207 "parser.yy"
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2259 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2212 "parser.yy"
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2264 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2266 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2268 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2283 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2285 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
+    break;
+
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2287 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2292 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2294 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2296 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2301 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2303 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2305 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2320 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2323 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2325 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2331 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2336 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2338 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2340 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2345 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2214 "parser.yy"
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2347 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2216 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2349 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2218 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2351 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2223 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2356 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2358 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2225 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2360 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2234 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2370 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2237 "parser.yy"
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2373 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2242 "parser.yy"
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2375 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2380 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2382 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2384 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2389 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2391 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2393 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2395 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2400 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2244 "parser.yy"
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2402 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2246 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2404 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2251 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2253 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 587:
-
-/* Line 1806 of yacc.c  */
-#line 2255 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 588:
-
-/* Line 1806 of yacc.c  */
-#line 2260 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2262 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2264 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2279 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2281 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
-    break;
-
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2283 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2288 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2290 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2292 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2297 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2299 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 602:
-
-/* Line 1806 of yacc.c  */
-#line 2301 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2316 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2435 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2319 "parser.yy"
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2438 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2321 "parser.yy"
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2440 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2327 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2332 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2334 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2336 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2341 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2343 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2345 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 615:
-
-/* Line 1806 of yacc.c  */
-#line 2347 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2352 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2354 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2356 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2366 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2369 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2371 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2376 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2378 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2385 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2387 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2389 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 629:
-
-/* Line 1806 of yacc.c  */
-#line 2391 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2396 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2398 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
   case 632:
 
 /* Line 1806 of yacc.c  */
-#line 2400 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 633:
-
-/* Line 1806 of yacc.c  */
-#line 2431 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2434 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 636:
-
-/* Line 1806 of yacc.c  */
-#line 2436 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 637:
-
-/* Line 1806 of yacc.c  */
-#line 2441 "parser.yy"
+#line 2445 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8718,8 +8447,8 @@
     break;
 
-  case 638:
-
-/* Line 1806 of yacc.c  */
-#line 2446 "parser.yy"
+  case 633:
+
+/* Line 1806 of yacc.c  */
+#line 2450 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8728,432 +8457,418 @@
     break;
 
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2458 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2460 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 636:
+
+/* Line 1806 of yacc.c  */
+#line 2462 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 637:
+
+/* Line 1806 of yacc.c  */
+#line 2467 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 638:
+
+/* Line 1806 of yacc.c  */
+#line 2469 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
   case 639:
 
 /* Line 1806 of yacc.c  */
-#line 2454 "parser.yy"
+#line 2474 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 640:
+
+/* Line 1806 of yacc.c  */
+#line 2476 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2491 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 643:
+
+/* Line 1806 of yacc.c  */
+#line 2493 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2498 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2500 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2502 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2456 "parser.yy"
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2504 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2458 "parser.yy"
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2506 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 642:
-
-/* Line 1806 of yacc.c  */
-#line 2463 "parser.yy"
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2512 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2514 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2516 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2521 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2523 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2525 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2531 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2533 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2539 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
+    break;
+
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2541 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
+    break;
+
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2543 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
+    break;
+
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2545 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
+    break;
+
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2560 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2562 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2567 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2569 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2571 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2573 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2575 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2581 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2583 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2585 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2590 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2592 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2594 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2601 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2465 "parser.yy"
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2612 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2615 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2617 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
+    break;
+
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2620 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2622 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
+    break;
+
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2624 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
+    break;
+
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2638 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2640 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2645 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2647 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2649 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2651 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2653 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2659 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2470 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2472 "parser.yy"
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2661 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2663 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2668 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2487 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 649:
-
-/* Line 1806 of yacc.c  */
-#line 2494 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2496 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2498 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2502 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2670 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2510 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2512 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 658:
-
-/* Line 1806 of yacc.c  */
-#line 2517 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2519 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2521 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2527 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2529 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2535 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
-    break;
-
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2537 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
-    break;
-
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2539 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
-    break;
-
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
-    break;
-
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2556 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2558 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 671:
-
-/* Line 1806 of yacc.c  */
-#line 2563 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2565 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2567 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2569 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2571 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2577 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 678:
-
-/* Line 1806 of yacc.c  */
-#line 2579 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2581 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 680:
-
-/* Line 1806 of yacc.c  */
-#line 2586 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2588 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2597 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2608 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 687:
-
-/* Line 1806 of yacc.c  */
-#line 2611 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2613 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
-    break;
-
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2616 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2618 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
-    break;
-
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2620 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
-    break;
-
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2634 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2636 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 695:
-
-/* Line 1806 of yacc.c  */
-#line 2641 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2643 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2645 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2647 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2649 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 702:
-
-/* Line 1806 of yacc.c  */
-#line 2657 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
   case 703:
 
 /* Line 1806 of yacc.c  */
-#line 2659 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 704:
-
-/* Line 1806 of yacc.c  */
-#line 2664 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 705:
-
-/* Line 1806 of yacc.c  */
-#line 2666 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2676 "parser.yy"
+#line 2680 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2686 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2688 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 713:
+  case 706:
 
 /* Line 1806 of yacc.c  */
@@ -9162,5 +8877,5 @@
     break;
 
-  case 714:
+  case 707:
 
 /* Line 1806 of yacc.c  */
@@ -9169,5 +8884,5 @@
     break;
 
-  case 715:
+  case 708:
 
 /* Line 1806 of yacc.c  */
@@ -9176,5 +8891,5 @@
     break;
 
-  case 716:
+  case 709:
 
 /* Line 1806 of yacc.c  */
@@ -9183,47 +8898,47 @@
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2703 "parser.yy"
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2698 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2700 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2707 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2705 "parser.yy"
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2709 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2707 "parser.yy"
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2711 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2709 "parser.yy"
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2713 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2711 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2713 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 723:
+  case 716:
 
 /* Line 1806 of yacc.c  */
@@ -9232,9 +8947,58 @@
     break;
 
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2717 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2719 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2721 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2723 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2725 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2730 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2732 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
   case 724:
 
 /* Line 1806 of yacc.c  */
-#line 2717 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+#line 2737 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
 
@@ -9242,13 +9006,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2719 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2721 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+#line 2739 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
 
@@ -9256,51 +9013,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2726 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 728:
-
-/* Line 1806 of yacc.c  */
-#line 2728 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 729:
-
-/* Line 1806 of yacc.c  */
-#line 2733 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
-    break;
-
-  case 730:
-
-/* Line 1806 of yacc.c  */
-#line 2735 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
-    break;
-
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2762 "parser.yy"
+#line 2766 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2773 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 737:
-
-/* Line 1806 of yacc.c  */
-#line 2775 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 738:
+  case 731:
 
 /* Line 1806 of yacc.c  */
@@ -9309,5 +9024,5 @@
     break;
 
-  case 739:
+  case 732:
 
 /* Line 1806 of yacc.c  */
@@ -9316,5 +9031,5 @@
     break;
 
-  case 740:
+  case 733:
 
 /* Line 1806 of yacc.c  */
@@ -9323,5 +9038,5 @@
     break;
 
-  case 741:
+  case 734:
 
 /* Line 1806 of yacc.c  */
@@ -9330,9 +9045,58 @@
     break;
 
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2785 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2787 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2794 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2796 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2798 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2800 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2802 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
   case 742:
 
 /* Line 1806 of yacc.c  */
-#line 2790 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+#line 2804 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
@@ -9340,6 +9104,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2792 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+#line 2809 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
@@ -9347,6 +9111,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2794 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+#line 2814 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
 
@@ -9354,6 +9118,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2796 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+#line 2816 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
@@ -9361,20 +9125,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2798 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 747:
-
-/* Line 1806 of yacc.c  */
-#line 2800 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 748:
-
-/* Line 1806 of yacc.c  */
-#line 2805 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
+#line 2818 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
@@ -9382,6 +9132,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2810 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
+#line 2842 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -9389,26 +9139,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2812 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
-    break;
-
-  case 751:
-
-/* Line 1806 of yacc.c  */
-#line 2814 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
-    break;
-
-  case 754:
-
-/* Line 1806 of yacc.c  */
-#line 2838 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 755:
-
-/* Line 1806 of yacc.c  */
-#line 2840 "parser.yy"
+#line 2844 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9417,5 +9146,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9420 "Parser/parser.cc"
+#line 9149 "Parser/parser.cc"
       default: break;
     }
@@ -9648,5 +9377,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2843 "parser.yy"
+#line 2847 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/parser.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -262,5 +262,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 110 "parser.yy"
+#line 115 "parser.yy"
 
 	Token tok;
@@ -271,7 +271,9 @@
 	DeclarationNode::TypeClass tclass;
 	StatementNode *sn;
-	ConstantNode *constant;
+	ConstantExpr *constant;
+	ForCtl *fctl;
 	LabelNode *label;
 	InitializerNode *in;
+	OperKinds op;
 	bool flag;
 
@@ -279,5 +281,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 282 "Parser/parser.h"
+#line 284 "Parser/parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/parser.yy	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 20:52:53 2016
-// Update Count     : 1661
+// Last Modified On : Mon Aug 15 15:18:19 2016
+// Update Count     : 1891
 //
 
@@ -60,4 +60,9 @@
 std::stack< LinkageSpec::Type > linkageStack;
 TypedefTable typedefTable;
+
+void appendStr( std::string &to, std::string *from ) {
+	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
+	to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
+} // appendStr
 %}
 
@@ -116,7 +121,9 @@
 	DeclarationNode::TypeClass tclass;
 	StatementNode *sn;
-	ConstantNode *constant;
+	ConstantExpr *constant;
+	ForCtl *fctl;
 	LabelNode *label;
 	InitializerNode *in;
+	OperKinds op;
 	bool flag;
 }
@@ -127,7 +134,7 @@
 
 // expressions
-%type<constant> constant
+%type<en> constant
 %type<en> tuple							tuple_expression_list
-%type<en> ptrref_operator				unary_operator				assignment_operator
+%type<op> ptrref_operator				unary_operator				assignment_operator
 %type<en> primary_expression			postfix_expression			unary_expression
 %type<en> cast_expression				multiplicative_expression	additive_expression			shift_expression
@@ -136,9 +143,10 @@
 %type<en> constant_expression			assignment_expression		assignment_expression_opt
 %type<en> comma_expression				comma_expression_opt
-%type<en> argument_expression_list		argument_expression			for_control_expression		assignment_opt
+%type<en> argument_expression_list		argument_expression			assignment_opt
+%type<fctl> for_control_expression
 %type<en> subrange
 %type<en> asm_operands_opt asm_operands_list asm_operand
 %type<label> label_list
-%type<constant> asm_clobbers_list_opt
+%type<en> asm_clobbers_list_opt
 %type<flag> asm_volatile_opt
 
@@ -150,8 +158,8 @@
 %type<sn> block_item_list				block_item
 %type<sn> case_clause
-%type<en> case_value					case_value_list
-%type<sn> case_label					case_label_list
+%type<en> case_value
+%type<sn> case_value_list				case_label					case_label_list
 %type<sn> switch_clause_list_opt		switch_clause_list			choose_clause_list_opt		choose_clause_list
-%type<pn> handler_list					handler_clause				finally_clause
+%type<sn> handler_list					handler_clause				finally_clause
 
 // declarations
@@ -303,7 +311,7 @@
 constant:
 		// ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
-INTEGERconstant									{ $$ = makeConstant( ConstantNode::Integer, $1 ); }
-	| FLOATINGconstant							{ $$ = makeConstant( ConstantNode::Float, $1 ); }
-	| CHARACTERconstant							{ $$ = makeConstant( ConstantNode::Character, $1 ); }
+INTEGERconstant									{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
+	| FLOATINGconstant							{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
+	| CHARACTERconstant							{ $$ = new ExpressionNode( build_constantChar( *$1 ) ); }
 	;
 
@@ -330,6 +338,11 @@
 
 string_literal_list:									// juxtaposed strings are concatenated
-	STRINGliteral								{ $$ = makeConstantStr( ConstantNode::String, $1 ); }
-	| string_literal_list STRINGliteral			{ $$ = $1->appendstr( $2 ); }
+	STRINGliteral								{ $$ = build_constantStr( *$1 ); }
+	| string_literal_list STRINGliteral
+		{
+			appendStr( $1->get_constant()->get_value(), $2 );
+			delete $2;									// allocated by lexer
+			$$ = $1;
+		}
 	;
 
@@ -338,11 +351,11 @@
 primary_expression:
 	IDENTIFIER											// typedef name cannot be used as a variable name
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	| zero_one
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	| '(' comma_expression ')'
 		{ $$ = $2; }
 	| '(' compound_statement ')'						// GCC, lambda expression
-		{ $$ = new ValofExprNode( $2 ); }
+	{ $$ = new ExpressionNode( build_valexpr( $2 ) ); }
 	;
 
@@ -354,25 +367,26 @@
 		// little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is
 		// equivalent to the old x[i,j].
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), $1, $4 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $4 ) ); }
 	| postfix_expression '(' argument_expression_list ')'
-		{ $$ = new CompositeExprNode( $1, $3 ); }
+		{ $$ = new ExpressionNode( build_func( $1, $3 ) ); }
         // ambiguity with .0 so space required after field-selection, e.g.
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| postfix_expression '.' no_attr_identifier
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), $1, new VarRefNode( $3 )); }
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_varref( $3 ) ) ); }
 	| postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ARROW no_attr_identifier
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), $1, new VarRefNode( $3 )); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
 	| postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ICR
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), $1 ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
 	| postfix_expression DECR
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1 ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); }
 	| '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
-		{ $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }
+		{ $$ = new ExpressionNode( build_compoundLiteral( $2, new InitializerNode( $5, true ) ) ); }
 	| postfix_expression '{' argument_expression_list '}' // CFA
 		{
-			Token fn; fn.str = new std::string( "?{}" ); // location undefined
-			$$ = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) );
+			Token fn;
+			fn.str = new std::string( "?{}" ); // location undefined
+			$$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) );
 		}
 	;
@@ -381,5 +395,5 @@
 	argument_expression
 	| argument_expression_list ',' argument_expression
-		{ $$ = (ExpressionNode *)( $1->set_link( $3 )); }
+		{ $$ = (ExpressionNode *)( $1->set_last( $3 )); }
 	;
 
@@ -388,33 +402,24 @@
 		{ $$ = 0; }										// use default argument
 	| assignment_expression
-	| no_attr_identifier ':' assignment_expression
-		{ $$ = $3->set_argName( $1 ); }
-		// Only a list of no_attr_identifier_or_type_name is allowed in this context. However, there is insufficient
-		// look ahead to distinguish between this list of parameter names and a tuple, so the tuple form must be used
-		// with an appropriate semantic check.
-	| '[' push assignment_expression pop ']' ':' assignment_expression
-		{ $$ = $7->set_argName( $3 ); }
-	| '[' push assignment_expression ',' tuple_expression_list pop ']' ':' assignment_expression
-		{ $$ = $9->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 )))); }
 	;
 
 field_list:												// CFA, tuple field selector
 	field
-	| field_list ',' field						{ $$ = (ExpressionNode *)$1->set_link( $3 ); }
+	| field_list ',' field						{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
 	;
 
 field:													// CFA, tuple field selector
 	no_attr_identifier
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
         // ambiguity with .0 so space required after field-selection, e.g.
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| no_attr_identifier '.' field
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $3 ); }
+		{ $$ = new ExpressionNode( build_fieldSel( $3, build_varref( $1 ) ) ); }
 	| no_attr_identifier '.' '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $5 ); }
+		{ $$ = new ExpressionNode( build_fieldSel( $5, build_varref( $1 ) ) ); }
 	| no_attr_identifier ARROW field
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $3 ); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $3, build_varref( $1 ) ) ); }
 	| no_attr_identifier ARROW '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $5 ); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $5, build_varref( $1 ) ) ); }
 	;
 
@@ -426,50 +431,61 @@
 		{ $$ = $1; }
 	| string_literal_list
-		{ $$ = $1; }
+		{ $$ = new ExpressionNode( $1 ); }
 	| EXTENSION cast_expression							// GCC
 		{ $$ = $2->set_extension( true ); }
-	| ptrref_operator cast_expression					// CFA
-		{ $$ = new CompositeExprNode( $1, $2 ); }
 		// '*' ('&') is separated from unary_operator because of shift/reduce conflict in:
 		//		{ * X; }	 // dereference X
 		//		{ * int X; } // CFA declaration of pointer to int
+	| ptrref_operator cast_expression					// CFA
+		{
+			switch ( $1 ) {
+			  case OperKinds::AddressOf:
+				$$ = new ExpressionNode( build_addressOf( $2 ) );
+				break;
+			  case OperKinds::PointTo:
+				$$ = new ExpressionNode( build_unary_val( $1, $2 ) );
+				break;
+			  default:
+				assert( false );
+			}
+		}
 	| unary_operator cast_expression
-		{ $$ = new CompositeExprNode( $1, $2 ); }
+	  	{ $$ = new ExpressionNode( build_unary_val( $1, $2 ) ); }
 	| ICR unary_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), $2 ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::Incr, $2 ) ); }
 	| DECR unary_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), $2 ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::Decr, $2 ) ); }
 	| SIZEOF unary_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), $2 ); }
+		{ $$ = new ExpressionNode( build_sizeOfexpr( $2 ) ); }
 	| SIZEOF '(' type_name_no_function ')'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }
+		{ $$ = new ExpressionNode( build_sizeOftype( $3 ) ); }
+	| ALIGNOF unary_expression							// GCC, variable alignment
+		{ $$ = new ExpressionNode( build_alignOfexpr( $2 ) ); }
+	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
+		{ $$ = new ExpressionNode( build_alignOftype( $3 ) ); }
 	| OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
+		{ $$ = new ExpressionNode( build_offsetOf( $3, build_varref( $5 ) ) ); }
 	| ATTR_IDENTIFIER
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); }
+		{ $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), nullptr ) ); }
+	| ATTR_IDENTIFIER '(' argument_expression ')'
+		{ $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), $3 ) ); }
 	| ATTR_IDENTIFIER '(' type_name ')'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), new TypeValueNode( $3 )); }
-	| ATTR_IDENTIFIER '(' argument_expression ')'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3 ); }
-	| ALIGNOF unary_expression							// GCC, variable alignment
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), $2 ); }
-	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( $3 ) ); }
+		{ $$ = new ExpressionNode( build_attrtype( build_varref( $1 ), $3 ) ); }
 //	| ANDAND IDENTIFIER									// GCC, address of label
-//		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); }
+//		{ $$ = new ExpressionNode( new OperatorNode( OperKinds::LabelAddress ), new ExpressionNode( build_varref( $2, true ) ); }
 	;
 
 ptrref_operator:
-	'*'											{ $$ = new OperatorNode( OperatorNode::PointTo ); }
-	| '&'										{ $$ = new OperatorNode( OperatorNode::AddressOf ); }
+	'*'											{ $$ = OperKinds::PointTo; }
+	| '&'										{ $$ = OperKinds::AddressOf; }
 		// GCC, address of label must be handled by semantic check for ref,ref,label
-	| ANDAND									{ $$ = new OperatorNode( OperatorNode::And ); }
+//	| ANDAND									{ $$ = OperKinds::And; }
 	;
 
 unary_operator:
-	'+'											{ $$ = new OperatorNode( OperatorNode::UnPlus ); }
-	| '-'										{ $$ = new OperatorNode( OperatorNode::UnMinus ); }
-	| '!'										{ $$ = new OperatorNode( OperatorNode::Neg ); }
-	| '~'										{ $$ = new OperatorNode( OperatorNode::BitNeg ); }
+	'+'											{ $$ = OperKinds::UnPlus; }
+	| '-'										{ $$ = OperKinds::UnMinus; }
+	| '!'										{ $$ = OperKinds::Neg; }
+	| '~'										{ $$ = OperKinds::BitNeg; }
 	;
 
@@ -477,7 +493,7 @@
 	unary_expression
 	| '(' type_name_no_function ')' cast_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4 ); }
+		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
 	| '(' type_name_no_function ')' tuple
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4 ); }
+		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
 	;
 
@@ -485,9 +501,9 @@
 	cast_expression
 	| multiplicative_expression '*' cast_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); }
 	| multiplicative_expression '/' cast_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Div, $1, $3 ) ); }
 	| multiplicative_expression '%' cast_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
 	;
 
@@ -495,7 +511,7 @@
 	multiplicative_expression
 	| additive_expression '+' multiplicative_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); }
 	| additive_expression '-' multiplicative_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); }
 	;
 
@@ -503,7 +519,7 @@
 	additive_expression
 	| shift_expression LS additive_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); }
 	| shift_expression RS additive_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); }
 	;
 
@@ -511,11 +527,11 @@
 	shift_expression
 	| relational_expression '<' shift_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); }
 	| relational_expression '>' shift_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); }
 	| relational_expression LE shift_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); }
 	| relational_expression GE shift_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); }
 	;
 
@@ -523,7 +539,7 @@
 	relational_expression
 	| equality_expression EQ relational_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); }
 	| equality_expression NE relational_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); }
 	;
 
@@ -531,5 +547,5 @@
 	equality_expression
 	| AND_expression '&' equality_expression
-		{ $$ =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); }
 	;
 
@@ -537,5 +553,5 @@
 	AND_expression
 	| exclusive_OR_expression '^' AND_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); }
 	;
 
@@ -543,5 +559,5 @@
 	exclusive_OR_expression
 	| inclusive_OR_expression '|' exclusive_OR_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); }
 	;
 
@@ -549,5 +565,5 @@
 	inclusive_OR_expression
 	| logical_AND_expression ANDAND inclusive_OR_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::And ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_and_or( $1, $3, true ) ); }
 	;
 
@@ -555,5 +571,5 @@
 	logical_AND_expression
 	| logical_OR_expression OROR logical_AND_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_and_or( $1, $3, false ) ); }
 	;
 
@@ -561,9 +577,10 @@
 	logical_OR_expression
 	| logical_OR_expression '?' comma_expression ':' conditional_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*$1, *$3, *$5 ) ) ); }
+		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
+		// FIX ME: this hack computes $1 twice
 	| logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand
-		{ $$=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), $1, $4 ); }
+		{ $$ = new ExpressionNode( build_cond( $1, $1, $4 ) ); }
 	| logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*$1, *$3, *$5 ) ) ); }
+		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
 	;
 
@@ -575,16 +592,28 @@
 		// CFA, assignment is separated from assignment_operator to ensure no assignment operations for tuples
 	conditional_expression
-	| unary_expression '=' assignment_expression
-		{ $$ =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); }
 	| unary_expression assignment_operator assignment_expression
-		{ $$ =new CompositeExprNode( $2, $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); }
 	| tuple assignment_opt								// CFA, tuple expression
-		{ $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $2 ); }
+		{ $$ = ( $2 == 0 ) ? $1 : new ExpressionNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
 	;
 
 assignment_expression_opt:
 	// empty
-		{ $$ = new NullExprNode; }
+		{ $$ = nullptr; }
 	| assignment_expression
+	;
+
+assignment_operator:
+	'='											{ $$ = OperKinds::Assign; }
+	| MULTassign								{ $$ = OperKinds::MulAssn; }
+	| DIVassign									{ $$ = OperKinds::DivAssn; }
+	| MODassign									{ $$ = OperKinds::ModAssn; }
+	| PLUSassign								{ $$ = OperKinds::PlusAssn; }
+	| MINUSassign								{ $$ = OperKinds::MinusAssn; }
+	| LSassign									{ $$ = OperKinds::LSAssn; }
+	| RSassign									{ $$ = OperKinds::RSAssn; }
+	| ANDassign									{ $$ = OperKinds::AndAssn; }
+	| ERassign									{ $$ = OperKinds::ERAssn; }
+	| ORassign									{ $$ = OperKinds::OrAssn; }
 	;
 
@@ -593,11 +622,11 @@
 		// comma_expression in new_identifier_parameter_array and new_abstract_array
 	'[' ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
+		{ $$ = new ExpressionNode( build_tuple() ); }
 	| '[' push assignment_expression pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), $3 ); }
+		{ $$ = new ExpressionNode( build_tuple( $3 ) ); }
 	| '[' push ',' tuple_expression_list pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( $4 ) ); }
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); }
 	| '[' push assignment_expression ',' tuple_expression_list pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 ) ) ); }
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); }
 	;
 
@@ -605,24 +634,11 @@
 	assignment_expression_opt
 	| tuple_expression_list ',' assignment_expression_opt
-		{ $$ = (ExpressionNode *)$1->set_link( $3 ); }
-	;
-
-assignment_operator:
-	MULTassign									{ $$ = new OperatorNode( OperatorNode::MulAssn ); }
-	| DIVassign									{ $$ = new OperatorNode( OperatorNode::DivAssn ); }
-	| MODassign									{ $$ = new OperatorNode( OperatorNode::ModAssn ); }
-	| PLUSassign								{ $$ = new OperatorNode( OperatorNode::PlusAssn ); }
-	| MINUSassign								{ $$ = new OperatorNode( OperatorNode::MinusAssn ); }
-	| LSassign									{ $$ = new OperatorNode( OperatorNode::LSAssn ); }
-	| RSassign									{ $$ = new OperatorNode( OperatorNode::RSAssn ); }
-	| ANDassign									{ $$ = new OperatorNode( OperatorNode::AndAssn ); }
-	| ERassign									{ $$ = new OperatorNode( OperatorNode::ERAssn ); }
-	| ORassign									{ $$ = new OperatorNode( OperatorNode::OrAssn ); }
+		{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
 	;
 
 comma_expression:
 	assignment_expression
-	| comma_expression ',' assignment_expression	// { $$ = (ExpressionNode *)$1->add_to_list( $3 ); }
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), $1, $3 ); }
+	| comma_expression ',' assignment_expression
+		{ $$ = new ExpressionNode( build_comma( $1, $3 ) ); }
 	;
 
@@ -646,7 +662,7 @@
 	| '^' postfix_expression '{' argument_expression_list '}' ';' // CFA
 		{
-			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
-			$$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),
-				(ExpressionNode *)( $2 )->set_link( $4 ) ), 0 );
+			Token fn;
+			fn.str = new std::string( "^?{}" ); // location undefined
+			$$ = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) ) ) );
 		}
 	;
@@ -662,5 +678,5 @@
 compound_statement:
 	'{' '}'
-		{ $$ = new CompoundStmtNode( (StatementNode *)0 ); }
+		{ $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); }
 	| '{'
 		// Two scopes are necessary because the block itself has a scope, but every declaration within the block also
@@ -669,5 +685,5 @@
 	  local_label_declaration_opt						// GCC, local labels
 	  block_item_list pop '}'							// C99, intermix declarations and statements
-		{ $$ = new CompoundStmtNode( $5 ); }
+		{ $$ = new StatementNode( build_compound( $5 ) ); }
 	;
 
@@ -675,5 +691,5 @@
 	block_item
 	| block_item_list push block_item
-		{ if ( $1 != 0 ) { $1->set_link( $3 ); $$ = $1; } }
+		{ if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } }
 	;
 
@@ -683,5 +699,5 @@
 	| EXTENSION declaration								// GCC
 		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			$$ = new StatementNode( $2 );
@@ -695,10 +711,10 @@
 	statement
 	| statement_list statement
-		{ if ( $1 != 0 ) { $1->set_link( $2 ); $$ = $1; } }
+		{ if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } }
 	;
 
 expression_statement:
 	comma_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Exp, $1, 0 ); }
+		{ $$ = new StatementNode( build_expr( $1 ) ); }
 	;
 
@@ -706,24 +722,25 @@
 	IF '(' comma_expression ')' statement				%prec THEN
 		// explicitly deal with the shift/reduce conflict on if/else
-		{ $$ = new StatementNode( StatementNode::If, $3, $5 ); }
+		{ $$ = new StatementNode( build_if( $3, $5, nullptr ) ); }
 	| IF '(' comma_expression ')' statement ELSE statement
-		{ $$ = new StatementNode( StatementNode::If, $3, (StatementNode *)mkList((*$5, *$7 )) ); }
+		{ $$ = new StatementNode( build_if( $3, $5, $7 ) ); }
 	| SWITCH '(' comma_expression ')' case_clause		// CFA
-		{ $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
+		{ $$ = new StatementNode( build_switch( $3, $5 ) ); }
 	| SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
 		{
-			StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
+			StatementNode *sw = new StatementNode( build_switch( $3, $8 ) );
 			// The semantics of the declaration list is changed to include associated initialization, which is performed
 			// *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
 			// statement around the switch.  Statements after the initial declaration list can never be executed, and
-			// therefore, are removed from the grammar even though C allows it. Change also applies to choose statement.
-			$$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
+			// therefore, are removed from the grammar even though C allows it. The change also applies to choose
+			// statement.
+			$$ = $7 != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
 		}
 	| CHOOSE '(' comma_expression ')' case_clause		// CFA
-		{ $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
+		{ $$ = new StatementNode( build_switch( $3, $5 ) ); }
 	| CHOOSE '(' comma_expression ')' '{' push declaration_list_opt choose_clause_list_opt '}' // CFA
 		{
-			StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
-			$$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
+			StatementNode *sw = new StatementNode( build_switch( $3, $8 ) );
+			$$ = $7 != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
 		}
 	;
@@ -735,17 +752,17 @@
 	constant_expression							{ $$ = $1; }
 	| constant_expression ELLIPSIS constant_expression	// GCC, subrange
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_range( $1, $3 ) ); }
 	| subrange											// CFA, subrange
 	;
 
 case_value_list:										// CFA
-	case_value
-	| case_value_list ',' case_value
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( $1 ))->set_link( $3 ) ); }
+	case_value									{ $$ = new StatementNode( build_case( $1 ) ); }
+		// convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
+	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_last( new StatementNode( build_case( $3 ) ) ) ); }
 	;
 
 case_label:												// CFA
-	CASE case_value_list ':'					{ $$ = new StatementNode( StatementNode::Case, $2, 0 ); }
-	| DEFAULT ':'								{ $$ = new StatementNode( StatementNode::Default ); }
+	CASE case_value_list ':'					{ $$ = $2; }
+	| DEFAULT ':'								{ $$ = new StatementNode( build_default() ); }
 		// A semantic check is required to ensure only one default clause per switch/choose statement.
 	;
@@ -753,9 +770,9 @@
 case_label_list:										// CFA
 	case_label
-	| case_label_list case_label				{ $$ = (StatementNode *)( $1->set_link( $2 )); }
+	| case_label_list case_label				{ $$ = (StatementNode *)( $1->set_last( $2 )); }
 	;
 
 case_clause:											// CFA
-	case_label_list statement					{ $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); }
+	case_label_list statement					{ $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); }
 	;
 
@@ -768,7 +785,7 @@
 switch_clause_list:										// CFA
 	case_label_list statement_list
-		{ $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); }
+		{ $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); }
 	| switch_clause_list case_label_list statement_list
-		{ $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); }
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( $3 ) ) ) ) ); }
 	;
 
@@ -783,14 +800,14 @@
 		{ $$ = $1->append_last_case( $2 ); }
 	| case_label_list statement_list fall_through_opt
-		{ $$ = $1->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$2, *$3 ) ) ) ); }
+		{ $$ = $1->append_last_case( new StatementNode( build_compound( (StatementNode *)$2->set_last( $3 ) ) ) ); }
 	| choose_clause_list case_label_list fall_through
-		{ $$ = (StatementNode *)( $1->set_link( $2->append_last_case( $3 ))); }
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( $3 ))); }
 	| choose_clause_list case_label_list statement_list fall_through_opt
-		{ $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); }
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( (StatementNode *)$3->set_last( $4 ) ) ) ) ) ); }
 	;
 
 fall_through_opt:										// CFA
 	// empty
-		{ $$ = new StatementNode( StatementNode::Break ); }	// insert implicit break
+		{ $$ = new StatementNode( build_branch( "", BranchStmt::Break ) ); } // insert implicit break
 	| fall_through
 	;
@@ -805,88 +822,80 @@
 iteration_statement:
 	WHILE '(' comma_expression ')' statement
-		{ $$ = new StatementNode( StatementNode::While, $3, $5 ); }
+		{ $$ = new StatementNode( build_while( $3, $5 ) ); }
 	| DO statement WHILE '(' comma_expression ')' ';'
-		{ $$ = new StatementNode( StatementNode::Do, $5, $2 ); }
+		{ $$ = new StatementNode( build_while( $5, $2 ) ); }
 	| FOR '(' push for_control_expression ')' statement
-		{ $$ = new StatementNode( StatementNode::For, $4, $6 ); }
+		{ $$ = new StatementNode( build_for( $4, $6 ) ); }
 	;
 
 for_control_expression:
 	comma_expression_opt pop ';' comma_expression_opt ';' comma_expression_opt
-		{ $$ = new ForCtlExprNode( $1, $4, $6 ); }
+		{ $$ = new ForCtl( $1, $4, $6 ); }
 	| declaration comma_expression_opt ';' comma_expression_opt // C99
-		{ $$ = new ForCtlExprNode( $1, $2, $4 ); }
-	;
+		{ $$ = new ForCtl( $1, $2, $4 ); }
+ 	;
 
 jump_statement:
 	GOTO IDENTIFIER ';'
-		{ $$ = new StatementNode( StatementNode::Goto, $2 ); }
+		{ $$ = new StatementNode( build_branch( *$2, BranchStmt::Goto ) ); }
 	| GOTO '*' comma_expression ';'						// GCC, computed goto
 		// The syntax for the GCC computed goto violates normal expression precedence, e.g., goto *i+3; => goto *(i+3);
 		// whereas normal operator precedence yields goto (*i)+3;
-		{ $$ = new StatementNode( StatementNode::Goto, $3 ); }
+		{ $$ = new StatementNode( build_computedgoto( $3 ) ); }
 	| CONTINUE ';'
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
-		{ $$ = new StatementNode( StatementNode::Continue ); }
+		{ $$ = new StatementNode( build_branch( "", BranchStmt::Continue ) ); }
 	| CONTINUE IDENTIFIER ';'							// CFA, multi-level continue
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
 		// the target of the transfer appears only at the start of an iteration statement.
-		{ $$ = new StatementNode( StatementNode::Continue, $2 ); }
+		{ $$ = new StatementNode( build_branch( *$2, BranchStmt::Continue ) ); delete $2; }
 	| BREAK ';'
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
-		{ $$ = new StatementNode( StatementNode::Break ); }
+		{ $$ = new StatementNode( build_branch( "", BranchStmt::Break ) ); }
 	| BREAK IDENTIFIER ';'								// CFA, multi-level exit
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
 		// the target of the transfer appears only at the start of an iteration statement.
-		{ $$ = new StatementNode( StatementNode::Break, $2 ); }
+		{ $$ = new StatementNode( build_branch( *$2, BranchStmt::Break ) ); delete $2; }
 	| RETURN comma_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Return, $2, 0 ); }
-	| THROW assignment_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
-//	| THROW ';'
-//		{ $$ = new StatementNode( StatementNode::Throw ); }
-	| THROWRESUME assignment_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
-	| THROWRESUME assignment_expression_opt AT assignment_expression ';'
-		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
-//	| THROWRESUME ';'
-//		{ $$ = new StatementNode( StatementNode::Throw ); }
+		{ $$ = new StatementNode( build_return( $2 ) ); }
+	| THROW assignment_expression_opt ';'				// handles rethrow
+		{ $$ = new StatementNode( build_throw( $2 ) ); }
+	| THROWRESUME assignment_expression_opt ';'			// handles reresume
+		{ $$ = new StatementNode( build_throw( $2 ) ); }
+	| THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume
+		{ $$ = new StatementNode( build_throw( $2 ) ); }
 	;
 
 exception_statement:
 	TRY compound_statement handler_list
-		{ $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }
+		{ $$ = new StatementNode( build_try( $2, $3, 0 ) ); }
 	| TRY compound_statement finally_clause
-		{ $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }
+		{ $$ = new StatementNode( build_try( $2, 0, $3 ) ); }
 	| TRY compound_statement handler_list finally_clause
-		{
-			$3->set_link( $4 );
-			$$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 ))));
-		}
+		{ $$ = new StatementNode( build_try( $2, $3, $4 ) ); }
 	;
 
 handler_list:
-		// There must be at least one catch clause
 	handler_clause
 		// ISO/IEC 9899:1999 Section 15.3(6 ) If present, a "..." handler shall be the last handler for its try block.
 	| CATCH '(' ELLIPSIS ')' compound_statement
-		{ $$ = StatementNode::newCatchStmt( 0, $5, true ); }
+		{ $$ = new StatementNode( build_catch( 0, $5, true ) ); }
 	| handler_clause CATCH '(' ELLIPSIS ')' compound_statement
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }
 	| CATCHRESUME '(' ELLIPSIS ')' compound_statement
-		{ $$ = StatementNode::newCatchStmt( 0, $5, true ); }
+		{ $$ = new StatementNode( build_catch( 0, $5, true ) ); }
 	| handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }
 	;
 
 handler_clause:
 	CATCH '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = StatementNode::newCatchStmt( $5, $8 ); }
+		{ $$ = new StatementNode( build_catch( $5, $8 ) ); }
 	| handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
+	{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
 	| CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = StatementNode::newCatchStmt( $5, $8 ); }
+		{ $$ = new StatementNode( build_catch( $5, $8 ) ); }
 	| handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
 	;
 
@@ -894,6 +903,5 @@
 	FINALLY compound_statement
 		{
-			$$ = new StatementNode( StatementNode::Finally, 0, $2 );
-			std::cout << "Just created a finally node" << std::endl;
+			$$ = new StatementNode( build_finally( $2 ) );
 		}
 	;
@@ -923,13 +931,13 @@
 asm_statement:
 	ASM asm_volatile_opt '(' string_literal_list ')' ';'
-		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, 0 ); }
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, 0 ) ); }
 	| ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ')' ';' // remaining GCC
-		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6 ); }
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6 ) ); }
 	| ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ')' ';'
-		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8 ); }
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8 ) ); }
 	| ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ':' asm_clobbers_list_opt ')' ';'
-		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8, $10 ); }
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8, $10 ) ); }
 	| ASM asm_volatile_opt GOTO '(' string_literal_list ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';'
-	{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $5, 0, $8, $10, $12 ); }
+		{ $$ = new StatementNode( build_asmstmt( $2, $5, 0, $8, $10, $12 ) ); }
 	;
 
@@ -950,12 +958,12 @@
 	asm_operand
 	| asm_operands_list ',' asm_operand
-		{ $$ = (ExpressionNode *)$1->set_link( $3 ); }
+		{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
 	;
 
 asm_operand:											// GCC
 	string_literal_list '(' constant_expression ')'
-		{ $$ = new AsmExprNode( 0, $1, $3 ); }
+		{ $$ = new ExpressionNode( build_asmexpr( 0, $1, $3 ) ); }
 	| '[' constant_expression ']' string_literal_list '(' constant_expression ')'
-		{ $$ = new AsmExprNode( $2, $4, $6 ); }
+	{ $$ = new ExpressionNode( build_asmexpr( $2, $4, $6 ) ); }
 	;
 
@@ -964,14 +972,14 @@
 		{ $$ = 0; }										// use default argument
 	| string_literal_list
-		{ $$ = $1; }
+		{ $$ = new ExpressionNode( $1 ); }
 	| asm_clobbers_list_opt ',' string_literal_list
-		{ $$ = (ConstantNode *)$1->set_link( $3 ); }
+		{ $$ = (ExpressionNode *)$1->set_last( new ExpressionNode( $3 ) ); }
 	;
 
 label_list:
 	no_attr_identifier
-		{ $$ = new LabelNode(); $$->append_label( $1 ); }
+		{ $$ = new LabelNode(); $$->labels.push_back( *$1 ); }
 	| label_list ',' no_attr_identifier
-		{ $$ = $1; $1->append_label( $3 ); }
+		{ $$ = $1; $1->labels.push_back( *$3 ); }
 	;
 
@@ -1489,5 +1497,5 @@
 	| EXTENSION field_declaring_list ';'				// GCC
 		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			$$ = $2;
@@ -1735,7 +1743,7 @@
 	| initializer
 	| designation initializer					{ $$ = $2->set_designators( $1 ); }
-	| initializer_list ',' initializer			{ $$ = (InitializerNode *)( $1->set_link( $3 ) ); }
+	| initializer_list ',' initializer			{ $$ = (InitializerNode *)( $1->set_last( $3 ) ); }
 	| initializer_list ',' designation initializer
-		{ $$ = (InitializerNode *)( $1->set_link( $4->set_designators( $3 ) ) ); }
+		{ $$ = (InitializerNode *)( $1->set_last( $4->set_designators( $3 ) ) ); }
 	;
 
@@ -1753,5 +1761,5 @@
 	designator_list ':'									// C99, CFA uses ":" instead of "="
 	| no_attr_identifier_or_type_name ':'				// GCC, field name
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	;
 
@@ -1759,24 +1767,20 @@
 	designator
 	| designator_list designator
-		{ $$ = (ExpressionNode *)( $1->set_link( $2 )); }
-	//| designator_list designator						{ $$ = new CompositeExprNode( $1, $2 ); }
+		{ $$ = (ExpressionNode *)( $1->set_last( $2 ) ); }
+	//| designator_list designator						{ $$ = new ExpressionNode( $1, $2 ); }
 	;
 
 designator:
-		// lexer ambiguity: designator ".0" is floating-point constant or designator for name 0 only ".0" and ".1"
-		// allowed => semantic check
-	FLOATINGconstant
-		{ $$ = new DesignatorNode( new VarRefNode( $1 ) ); }
-	| '.' no_attr_identifier_or_type_name				// C99, field name
-		{ $$ = new DesignatorNode( new VarRefNode( $2 ) ); }
+	'.' no_attr_identifier_or_type_name					// C99, field name
+		{ $$ = new ExpressionNode( build_varref( $2 ) ); }
 	| '[' push assignment_expression pop ']'			// C99, single array element
 		// assignment_expression used instead of constant_expression because of shift/reduce conflicts with tuple.
-		{ $$ = new DesignatorNode( $3, true ); }
+		{ $$ = $3; }
 	| '[' push subrange pop ']'							// CFA, multiple array elements
-		{ $$ = new DesignatorNode( $3, true ); }
+		{ $$ = $3; }
 	| '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements
-		{ $$ = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $3, $5 ), true ); }
+		{ $$ = new ExpressionNode( build_range( $3, $5 ) ); }
 	| '.' '[' push field_list pop ']'					// CFA, tuple field selector
-		{ $$ = new DesignatorNode( $4 ); }
+		{ $$ = $4; }
 	;
 
@@ -1866,10 +1870,10 @@
 type_name_list:											// CFA
 	type_name
-		{ $$ = new TypeValueNode( $1 ); }
+		{ $$ = new ExpressionNode( build_typevalue( $1 ) ); }
 	| assignment_expression
 	| type_name_list ',' type_name
-		{ $$ = (ExpressionNode *)( $1->set_link( new TypeValueNode( $3 ))); }
+		{ $$ = (ExpressionNode *)( $1->set_last( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
 	| type_name_list ',' assignment_expression
-		{ $$ = (ExpressionNode *)( $1->set_link( $3 )); }
+		{ $$ = (ExpressionNode *)( $1->set_last( $3 )); }
 	;
 
@@ -2009,5 +2013,5 @@
 	| EXTENSION external_definition
 		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			$$ = $2;
@@ -2105,5 +2109,5 @@
 subrange:
 	constant_expression '~' constant_expression			// CFA, integer subrange
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $1, $3 ); }
+		{ $$ = new ExpressionNode( build_range( $1, $3 ) ); }
 	;
 
Index: src/Parser/parseutility.cc
===================================================================
--- src/Parser/parseutility.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/Parser/parseutility.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:30:39 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May 16 15:31:33 2015
-// Update Count     : 2
+// Last Modified On : Sun Aug 14 23:45:03 2016
+// Update Count     : 3
 // 
 
@@ -17,4 +17,9 @@
 #include "SynTree/Type.h"
 #include "SynTree/Expression.h"
+
+// rewrite
+//    if ( x ) ...
+// as
+//    if ( (int)(x != 0) ) ...
 
 Expression *notZeroExpr( Expression *orig ) {
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/ResolvExpr/Resolver.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -24,4 +24,5 @@
 #include "SynTree/Initializer.h"
 #include "SymTab/Indexer.h"
+#include "SymTab/Autogen.h"
 #include "Common/utility.h"
 #include "InitTweak/InitTweak.h"
@@ -41,4 +42,5 @@
 
 		virtual void visit( ArrayType * at );
+		virtual void visit( PointerType * at );
 
 		virtual void visit( ExprStmt *exprStmt );
@@ -52,5 +54,4 @@
 		virtual void visit( BranchStmt *branchStmt );
 		virtual void visit( ReturnStmt *returnStmt );
-		virtual void visit( ImplicitCtorDtorStmt * impCtorDtorStmt );
 
 		virtual void visit( SingleInit *singleInit );
@@ -59,4 +60,7 @@
 	  private:
   	typedef std::list< Initializer * >::iterator InitIterator;
+
+		template< typename PtrType >
+		void handlePtrType( PtrType * type );
 
 	  void resolveAggrInit( AggregateDecl *, InitIterator &, InitIterator & );
@@ -192,13 +196,22 @@
 	}
 
+	template< typename PtrType >
+	void Resolver::handlePtrType( PtrType * type ) {
+		if ( type->get_dimension() ) {
+			CastExpr *castExpr = new CastExpr( type->get_dimension(), SymTab::SizeType->clone() );
+			Expression *newExpr = findSingleExpression( castExpr, *this );
+			delete type->get_dimension();
+			type->set_dimension( newExpr );
+		}
+	}
+
 	void Resolver::visit( ArrayType * at ) {
-		if ( at->get_dimension() ) {
-			BasicType arrayLenType = BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
-			CastExpr *castExpr = new CastExpr( at->get_dimension(), arrayLenType.clone() );
-			Expression *newExpr = findSingleExpression( castExpr, *this );
-			delete at->get_dimension();
-			at->set_dimension( newExpr );
-		}
+		handlePtrType( at );
 		Visitor::visit( at );
+	}
+
+	void Resolver::visit( PointerType * pt ) {
+		handlePtrType( pt );
+		Visitor::visit( pt );
 	}
 
@@ -422,6 +435,6 @@
 
 	void Resolver::visit( ListInit * listInit ) {
-		InitIterator iter = listInit->begin_initializers();
-		InitIterator end = listInit->end_initializers();
+		InitIterator iter = listInit->begin();
+		InitIterator end = listInit->end();
 
 		if ( ArrayType * at = dynamic_cast< ArrayType * >( initContext ) ) {
@@ -521,54 +534,19 @@
 		// implicitly generated, there's no way for it to have side effects, so get rid of it
 		// to clean up generated code.
-		if ( InitTweak::isInstrinsicSingleArgCallStmt( ctorInit->get_ctor() ) ) {
+		if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit->get_ctor() ) ) {
 			delete ctorInit->get_ctor();
 			ctorInit->set_ctor( NULL );
 		}
-		if ( InitTweak::isInstrinsicSingleArgCallStmt( ctorInit->get_ctor() ) ) {
+
+		// xxx - todo
+		// if ( InitTweak::isIntrinsicCallStmt( ctorInit->get_ctor() ) ) {
+		// 	// can reduce the constructor down to a SingleInit using the
+		// 	// second argument from the ctor call
+		// }
+
+		if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit->get_dtor() ) ) {
 			delete ctorInit->get_dtor();
 			ctorInit->set_dtor( NULL );
 		}
-	}
-
-	void Resolver::visit( ImplicitCtorDtorStmt * impCtorDtorStmt ) {
-		// before resolving ctor/dtor, need to remove type qualifiers from the first argument (the object being constructed).
-		// Do this through a cast expression to greatly simplify the code.
-		Expression * callExpr = InitTweak::getCtorDtorCall( impCtorDtorStmt );
-		assert( callExpr );
-		Expression *& constructee = InitTweak::getCallArg( callExpr, 0 );
-		Type * type = 0;
-
-		// need to find the type of the first argument, which is unfortunately not uniform since array construction
-		// includes an untyped '+' expression.
-		if ( UntypedExpr * plusExpr = dynamic_cast< UntypedExpr * >( constructee ) ) {
-			// constructee is <array>+<index>
-			// get Variable <array>, then get the base type of the VariableExpr - this is the type that needs to be fixed
-			Expression * arr = InitTweak::getCallArg( plusExpr, 0 );
-			assert( dynamic_cast< VariableExpr * >( arr ) || dynamic_cast< MemberExpr *>( arr ) );
-			assert( arr && arr->get_results().size() == 1 );
-			type = arr->get_results().front()->clone();
-		} else {
-			// otherwise, constructing a plain object, which means the object's address is being taken.
-			// Need to get the type of the VariableExpr object, because the AddressExpr is rebuilt and uses the
-			// type of the VariableExpr to do so.
-			assert( constructee->get_results().size() == 1 );
-			AddressExpr * addrExpr = dynamic_cast< AddressExpr * > ( constructee );
-			assert( addrExpr && addrExpr->get_results().size() == 1 );
-			type = addrExpr->get_results().front()->clone();
-		}
-		// cast to T* with qualifiers removed.
-		// unfortunately, lvalue is considered a qualifier. For AddressExpr to resolve, its argument
-		// must have an lvalue qualified type, so remove all qualifiers except lvalue. If we ever
-		// remove lvalue as a qualifier, this can change to
-		//   type->get_qualifiers() = Type::Qualifiers();
-		Type * base = InitTweak::getPointerBase( type );
-		assert( base );
-		base->get_qualifiers() -= Type::Qualifiers(true, true, true, false, true, true);
-		// if pointer has lvalue qualifier, cast won't appear in output
-		type->set_isLvalue( false );
-		constructee = new CastExpr( constructee, type );
-
-		// finally, resolve the ctor/dtor
-		impCtorDtorStmt->get_callStmt()->accept( *this );
 	}
 } // namespace ResolvExpr
Index: src/SymTab/AddVisit.h
===================================================================
--- src/SymTab/AddVisit.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SymTab/AddVisit.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 16:14:32 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:46:33 2016
-// Update Count     : 6
+// Last Modified On : Thu Aug  4 11:22:01 2016
+// Update Count     : 9
 //
 
@@ -33,5 +33,5 @@
 	template< typename Visitor >
 	inline void addVisit(SwitchStmt *switchStmt, Visitor &visitor) {
-		addVisitStatementList( switchStmt->get_branches(), visitor );
+		addVisitStatementList( switchStmt->get_statements(), visitor );
 		maybeAccept( switchStmt->get_condition(), visitor );
 	}
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SymTab/Autogen.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -26,4 +26,6 @@
 
 namespace SymTab {
+	Type * SizeType = 0;
+
 	class AutogenerateRoutines : public Visitor {
 		public:
@@ -59,36 +61,4 @@
 	bool isUnnamedBitfield( ObjectDecl * obj ) {
 		return obj != NULL && obj->get_name() == "" && obj->get_bitfieldWidth() != NULL;
-	}
-
-	template< typename OutputIterator >
-	void makeScalarFunction( Expression *src, ObjectDecl *dstParam, DeclarationWithType *member, std::string fname, OutputIterator out ) {
-		ObjectDecl *obj = dynamic_cast<ObjectDecl *>( member );
-		// unnamed bit fields are not copied as they cannot be accessed
-		if ( isUnnamedBitfield( obj ) ) return;
-
-		// want to be able to generate assignment, ctor, and dtor generically,
-		// so fname is either ?=?, ?{}, or ^?{}
-		UntypedExpr *fExpr = new UntypedExpr( new NameExpr( fname ) );
-
-		UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );
-		derefExpr->get_args().push_back( new VariableExpr( dstParam ) );
-
-		// do something special for unnamed members
-		Expression *dstselect = new AddressExpr( new MemberExpr( member, derefExpr ) );
-		fExpr->get_args().push_back( dstselect );
-
-		if ( src ) {
-			fExpr->get_args().push_back( src );
-		}
-
-		Statement * callStmt = new ExprStmt( noLabels, fExpr );
-		if ( (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && obj->get_bitfieldWidth() == NULL ) ) ) {
-			// implicitly generated ctor/dtor calls should be wrapped
-			// so that later passes are aware they were generated.
-			// xxx - don't mark as an implicit ctor/dtor if obj is a bitfield,
-			// because this causes the address to be taken at codegen, which is illegal in C.
-			callStmt = new ImplicitCtorDtorStmt( callStmt );
-		}
-		*out++ = callStmt;
 	}
 
@@ -203,14 +173,8 @@
 	}
 
-	void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, TypeSubstitution & genericSubs, bool isGeneric, bool forward = true ) {
-		if ( isGeneric ) {
-			// rewrite member type in terms of the type variables on this operator
-			field = field->clone();
-			genericSubs.apply( field );
-
-			if ( src ) {
-				genericSubs.apply( src );
-			}
-		}
+	void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout, bool forward = true ) {
+// 		if ( isDynamicLayout && src ) {
+// 			genericSubs.apply( src );
+// 		}
 
 		ObjectDecl * returnVal = NULL;
@@ -219,26 +183,22 @@
 		}
 
+		InitTweak::InitExpander srcParam( src );
+
 		// assign to destination (and return value if generic)
-		if ( ArrayType *array = dynamic_cast< ArrayType * >( field->get_type() ) ) {
-			UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );
-			derefExpr->get_args().push_back( new VariableExpr( dstParam ) );
-			Expression *dstselect = new MemberExpr( field, derefExpr );
-
-			makeArrayFunction( src, dstselect, array, func->get_name(), back_inserter( func->get_statements()->get_kids() ), forward );
-			if ( isGeneric && returnVal ) {
-				UntypedExpr *derefRet = new UntypedExpr( new NameExpr( "*?" ) );
-				derefRet->get_args().push_back( new VariableExpr( returnVal ) );
-				Expression *retselect = new MemberExpr( field, derefRet );
-
-				makeArrayFunction( src, retselect, array, func->get_name(), back_inserter( func->get_statements()->get_kids() ), forward );
-			}
-		} else {
-			makeScalarFunction( src, dstParam, field, func->get_name(), back_inserter( func->get_statements()->get_kids() ) );
-			if ( isGeneric && returnVal ) makeScalarFunction( src, returnVal, field, func->get_name(), back_inserter( func->get_statements()->get_kids() ) );
+		UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );
+		derefExpr->get_args().push_back( new VariableExpr( dstParam ) );
+		Expression *dstselect = new MemberExpr( field, derefExpr );
+		genImplicitCall( srcParam, dstselect, func->get_name(), back_inserter( func->get_statements()->get_kids() ), field, forward );
+
+		if ( isDynamicLayout && returnVal ) {
+			UntypedExpr *derefRet = new UntypedExpr( new NameExpr( "*?" ) );
+			derefRet->get_args().push_back( new VariableExpr( returnVal ) );
+			Expression *retselect = new MemberExpr( field, derefRet );
+			genImplicitCall( srcParam, retselect, func->get_name(), back_inserter( func->get_statements()->get_kids() ), field, forward );
 		} // if
 	}
 
 	template<typename Iterator>
-	void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isGeneric, bool forward = true ) {
+	void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout, bool forward = true ) {
 		for ( ; member != end; ++member ) {
 			if ( DeclarationWithType *field = dynamic_cast< DeclarationWithType * >( *member ) ) { // otherwise some form of type declaration, e.g. Aggregate
@@ -276,5 +236,5 @@
 
 				Expression *srcselect = srcParam ? new MemberExpr( field, new VariableExpr( srcParam ) ) : NULL;
-				makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isGeneric, forward );
+				makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isDynamicLayout, forward );
 			} // if
 		} // for
@@ -284,5 +244,5 @@
 	/// void ?{}(A *, int) and void?{}(A *, int, int) for a struct A which has two int fields.
 	template<typename Iterator>
-	void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isGeneric ) {
+	void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout ) {
 		FunctionType * ftype = func->get_functionType();
 		std::list<DeclarationWithType*> & params = ftype->get_parameters();
@@ -310,9 +270,9 @@
 					// matching parameter, initialize field with copy ctor
 					Expression *srcselect = new VariableExpr(*parameter);
-					makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isGeneric );
+					makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isDynamicLayout );
 					++parameter;
 				} else {
 					// no matching parameter, initialize field with default ctor
-					makeStructMemberOp( dstParam, NULL, field, func, genericSubs, isGeneric );
+					makeStructMemberOp( dstParam, NULL, field, func, genericSubs, isDynamicLayout );
 				}
 			}
@@ -324,10 +284,10 @@
 
 		// Make function polymorphic in same parameters as generic struct, if applicable
-		bool isGeneric = false;  // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for union)
+		bool isDynamicLayout = false;  // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for union)
 		std::list< TypeDecl* >& genericParams = aggregateDecl->get_parameters();
 		std::list< Expression* > structParams;  // List of matching parameters to put on types
 		TypeSubstitution genericSubs; // Substitutions to make to member types of struct
 		for ( std::list< TypeDecl* >::const_iterator param = genericParams.begin(); param != genericParams.end(); ++param ) {
-			isGeneric = true;
+			if ( (*param)->get_kind() == TypeDecl::Any ) isDynamicLayout = true;
 			TypeDecl *typeParam = cloneAndRename( *param, "_autoassign_" + aggregateDecl->get_name() + "_" + (*param)->get_name() );
 			assignType->get_forall().push_back( typeParam );
@@ -389,5 +349,5 @@
 			FunctionDecl * ctor = new FunctionDecl( "?{}", functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, memCtorType->clone(), new CompoundStmt( noLabels ), true, false );
 			ctor->fixUniqueId();
-			makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor, genericSubs, isGeneric );
+			makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor, genericSubs, isDynamicLayout );
 			memCtors.push_back( ctor );
 		}
@@ -395,11 +355,11 @@
 
 		// generate appropriate calls to member ctor, assignment
-		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), assignDecl, genericSubs, isGeneric );
-		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctorDecl, genericSubs, isGeneric );
-		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), copyCtorDecl, genericSubs, isGeneric );
+		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), assignDecl, genericSubs, isDynamicLayout );
+		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctorDecl, genericSubs, isDynamicLayout );
+		makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), copyCtorDecl, genericSubs, isDynamicLayout );
 		// needs to do everything in reverse, so pass "forward" as false
-		makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dtorDecl, genericSubs, isGeneric, false );
-
-		if ( ! isGeneric ) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
+		makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dtorDecl, genericSubs, isDynamicLayout, false );
+
+		if ( ! isDynamicLayout ) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
 
 		declsToAdd.push_back( assignDecl );
@@ -414,9 +374,9 @@
 
 		// Make function polymorphic in same parameters as generic union, if applicable
-		bool isGeneric = false;  // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for struct)
+		bool isDynamicLayout = false; // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for struct)
 		std::list< TypeDecl* >& genericParams = aggregateDecl->get_parameters();
 		std::list< Expression* > unionParams;  // List of matching parameters to put on types
 		for ( std::list< TypeDecl* >::const_iterator param = genericParams.begin(); param != genericParams.end(); ++param ) {
-			isGeneric = true;
+			if ( (*param)->get_kind() == TypeDecl::Any ) isDynamicLayout = true;
 			TypeDecl *typeParam = cloneAndRename( *param, "_autoassign_" + aggregateDecl->get_name() + "_" + (*param)->get_name() );
 			assignType->get_forall().push_back( typeParam );
@@ -454,7 +414,6 @@
 
 		makeUnionFieldsAssignment( srcParam, dstParam, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) );
-		if ( isGeneric ) makeUnionFieldsAssignment( srcParam, returnVal, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) );
-
-		if ( ! isGeneric ) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
+		if ( isDynamicLayout ) makeUnionFieldsAssignment( srcParam, returnVal, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) );
+		else assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
 
 		// body of assignment and copy ctor is the same
Index: src/SymTab/Autogen.h
===================================================================
--- src/SymTab/Autogen.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SymTab/Autogen.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -22,82 +22,160 @@
 #include "SynTree/Declaration.h"
 #include "SynTree/Initializer.h"
+#include "InitTweak/InitTweak.h"
 
 namespace SymTab {
-  /// Generates assignment operators, constructors, and destructor for aggregate types as required
-  void autogenerateRoutines( std::list< Declaration * > &translationUnit );
+	/// Generates assignment operators, constructors, and destructor for aggregate types as required
+	void autogenerateRoutines( std::list< Declaration * > &translationUnit );
 
-  // originally makeArrayAssignment - changed to Function because it is now used for ctors and dtors as well
-  // admittedly not a great name change. This used to live in Validate.cc, but has been moved so it can be reused elsewhere
+	/// returns true if obj's name is the empty string and it has a bitfield width
+	bool isUnnamedBitfield( ObjectDecl * obj );
 
-  /// Store in out a loop which calls fname on each element of the array with srcParam and dstParam as arguments.
-  /// If forward is true, loop goes from 0 to N-1, else N-1 to 0
-  template< typename OutputIterator >
-  void makeArrayFunction( Expression *srcParam, Expression *dstParam, ArrayType *array, std::string fname, OutputIterator out, bool forward = true ) {
-    static UniqueName indexName( "_index" );
+	/// size_t type - set when size_t typedef is seen. Useful in a few places,
+	/// such as in determining array dimension type
+	extern Type * SizeType;
 
-    // for a flexible array member nothing is done -- user must define own assignment
-    if ( ! array->get_dimension() ) return;
+	/// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls.
+	template< typename OutputIterator >
+	Statement * genCall( InitTweak::InitExpander & srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast = false, bool forward = true );
 
-    Expression * begin, * end, * update, * cmp;
-    if ( forward ) {
-      // generate: for ( int i = 0; i < 0; ++i )
-      begin = new NameExpr( "0" );
-      end = array->get_dimension()->clone();
-      cmp = new NameExpr( "?<?" );
-      update = new NameExpr( "++?" );
-    } else {
-      // generate: for ( int i = N-1; i >= 0; --i )
-      begin = new UntypedExpr( new NameExpr( "?-?" ) );
-      ((UntypedExpr*)begin)->get_args().push_back( array->get_dimension()->clone() );
-      ((UntypedExpr*)begin)->get_args().push_back( new NameExpr( "1" ) );
-      end = new NameExpr( "0" );
-      cmp = new NameExpr( "?>=?" );
-      update = new NameExpr( "--?" );
-    }
+	/// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Should only be called with non-array types.
+	/// optionally returns a statement which must be inserted prior to the containing loop, if there is one
+	template< typename OutputIterator >
+	Statement * genScalarCall( InitTweak::InitExpander & srcParam, Expression *dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast = false ) {
+		// want to be able to generate assignment, ctor, and dtor generically,
+		// so fname is either ?=?, ?{}, or ^?{}
+		UntypedExpr *fExpr = new UntypedExpr( new NameExpr( fname ) );
 
-    ObjectDecl *index = new ObjectDecl( indexName.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), NULL );
+		// do something special for unnamed members
+		dstParam = new AddressExpr( dstParam );
+		if ( addCast ) {
+			// cast to T* with qualifiers removed, so that qualified objects can be constructed
+			// and destructed with the same functions as non-qualified objects.
+			// unfortunately, lvalue is considered a qualifier. For AddressExpr to resolve, its argument
+			// must have an lvalue qualified type, so remove all qualifiers except lvalue. If we ever
+			// remove lvalue as a qualifier, this can change to
+			//   type->get_qualifiers() = Type::Qualifiers();
+			assert( type );
+			Type * castType = type->clone();
+			castType->get_qualifiers() -= Type::Qualifiers(true, true, true, false, true, true);
+			castType->set_isLvalue( true ); // xxx - might not need this
+			dstParam = new CastExpr( dstParam, new PointerType( Type::Qualifiers(), castType ) );
+		}
+		fExpr->get_args().push_back( dstParam );
 
-    UntypedExpr *init = new UntypedExpr( new NameExpr( "?=?" ) );
-    init->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) );
-    init->get_args().push_back( begin );
-    index->set_init( new SingleInit( init, std::list<Expression*>() ) );
+		Statement * listInit = srcParam.buildListInit( fExpr );
 
-    UntypedExpr *cond = new UntypedExpr( cmp );
-    cond->get_args().push_back( new VariableExpr( index ) );
-    cond->get_args().push_back( end );
+		std::list< Expression * > args = *++srcParam;
+		fExpr->get_args().splice( fExpr->get_args().end(), args );
 
-    UntypedExpr *inc = new UntypedExpr( update );
-    inc->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) );
+		*out++ = new ExprStmt( noLabels, fExpr );
 
-    // want to be able to generate assignment, ctor, and dtor generically,
-    // so fname is either ?=?, ?{}, or ^?{}
-    UntypedExpr *fExpr = new UntypedExpr( new NameExpr( fname ) );
+		srcParam.clearArrayIndices();
 
-    UntypedExpr *dstIndex = new UntypedExpr( new NameExpr( "?+?" ) );
-    dstIndex->get_args().push_back( dstParam );
-    dstIndex->get_args().push_back( new VariableExpr( index ) );
-    fExpr->get_args().push_back( dstIndex );
+		return listInit;
+	}
 
-    // srcParam is NULL for default ctor/dtor
-    if ( srcParam ) {
-      UntypedExpr *srcIndex = new UntypedExpr( new NameExpr( "?[?]" ) );
-      srcIndex->get_args().push_back( srcParam );
-      srcIndex->get_args().push_back( new VariableExpr( index ) );
-      fExpr->get_args().push_back( srcIndex );
-    }
+	/// Store in out a loop which calls fname on each element of the array with srcParam and dstParam as arguments.
+	/// If forward is true, loop goes from 0 to N-1, else N-1 to 0
+	template< typename OutputIterator >
+	void genArrayCall( InitTweak::InitExpander & srcParam, Expression *dstParam, const std::string & fname, OutputIterator out, ArrayType *array, bool addCast = false, bool forward = true ) {
+		static UniqueName indexName( "_index" );
 
-    std::list<Statement *> initList;
-    CompoundStmt * block = new CompoundStmt( noLabels );
-    block->get_kids().push_back( new DeclStmt( noLabels, index ) );
-    block->get_kids().push_back( new ForStmt( noLabels, initList, cond, inc, new ExprStmt( noLabels, fExpr ) ) );
+		// for a flexible array member nothing is done -- user must define own assignment
+		if ( ! array->get_dimension() ) return ;
 
-    Statement * stmt = block;
-    if ( fname == "?{}" || fname == "^?{}" ) {
-      // implicitly generated ctor/dtor calls should be wrapped
-      // so that later passes are aware they were generated
-      stmt = new ImplicitCtorDtorStmt( stmt );
-    }
-    *out++ = stmt;
-  }
+		Expression * begin, * end, * update, * cmp;
+		if ( forward ) {
+			// generate: for ( int i = 0; i < 0; ++i )
+			begin = new NameExpr( "0" );
+			end = array->get_dimension()->clone();
+			cmp = new NameExpr( "?<?" );
+			update = new NameExpr( "++?" );
+		} else {
+			// generate: for ( int i = N-1; i >= 0; --i )
+			begin = new UntypedExpr( new NameExpr( "?-?" ) );
+			((UntypedExpr*)begin)->get_args().push_back( array->get_dimension()->clone() );
+			((UntypedExpr*)begin)->get_args().push_back( new NameExpr( "1" ) );
+			end = new NameExpr( "0" );
+			cmp = new NameExpr( "?>=?" );
+			update = new NameExpr( "--?" );
+		}
+
+		ObjectDecl *index = new ObjectDecl( indexName.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), NULL );
+
+		UntypedExpr *init = new UntypedExpr( new NameExpr( "?=?" ) );
+		init->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) );
+		init->get_args().push_back( begin );
+		index->set_init( new SingleInit( init, std::list<Expression*>() ) );
+
+		UntypedExpr *cond = new UntypedExpr( cmp );
+		cond->get_args().push_back( new VariableExpr( index ) );
+		cond->get_args().push_back( end );
+
+		UntypedExpr *inc = new UntypedExpr( update );
+		inc->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) );
+
+		UntypedExpr *dstIndex = new UntypedExpr( new NameExpr( "?[?]" ) );
+		dstIndex->get_args().push_back( dstParam );
+		dstIndex->get_args().push_back( new VariableExpr( index ) );
+		dstParam = dstIndex;
+
+		// srcParam must keep track of the array indices to build the
+		// source parameter and/or array list initializer
+		srcParam.addArrayIndex( new VariableExpr( index ), array->get_dimension()->clone() );
+
+		// for stmt's body, eventually containing call
+		CompoundStmt * body = new CompoundStmt( noLabels );
+		Statement * listInit = genCall( srcParam, dstParam, fname, back_inserter( body->get_kids() ), array->get_base(), addCast, forward );
+
+		// block containing for stmt and index variable
+		std::list<Statement *> initList;
+		CompoundStmt * block = new CompoundStmt( noLabels );
+		block->get_kids().push_back( new DeclStmt( noLabels, index ) );
+		if ( listInit ) block->get_kids().push_back( listInit );
+		block->get_kids().push_back( new ForStmt( noLabels, initList, cond, inc, body ) );
+
+		*out++ = block;
+	}
+
+	template< typename OutputIterator >
+	Statement * genCall( InitTweak::InitExpander &  srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast, bool forward ) {
+		if ( ArrayType * at = dynamic_cast< ArrayType * >( type ) ) {
+			genArrayCall( srcParam, dstParam, fname, out, at, addCast, forward );
+			return 0;
+		} else {
+			return genScalarCall( srcParam, dstParam, fname, out, type, addCast );
+		}
+	}
+
+	/// inserts into out a generated call expression to function fname with arguments dstParam
+	/// and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls. decl is the
+	/// object being constructed. The function wraps constructor and destructor calls in an
+	/// ImplicitCtorDtorStmt node.
+	template< typename OutputIterator >
+	void genImplicitCall( InitTweak::InitExpander &  srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, DeclarationWithType * decl, bool forward = true ) {
+		ObjectDecl *obj = dynamic_cast<ObjectDecl *>( decl );
+		assert( obj );
+		// unnamed bit fields are not copied as they cannot be accessed
+		if ( isUnnamedBitfield( obj ) ) return;
+
+		bool addCast = (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && obj->get_bitfieldWidth() == NULL ) );
+		std::list< Statement * > stmts;
+		genCall( srcParam, dstParam, fname, back_inserter( stmts ), obj->get_type(), addCast, forward );
+
+		// currently genCall should produce at most one element, but if that changes then the next line needs to be updated to grab the statement which contains the call
+		assert( stmts.size() <= 1 );
+		if ( stmts.size() == 1 ) {
+			Statement * callStmt = stmts.front();
+			if ( addCast ) {
+				// implicitly generated ctor/dtor calls should be wrapped
+				// so that later passes are aware they were generated.
+				// xxx - don't mark as an implicit ctor/dtor if obj is a bitfield,
+				// because this causes the address to be taken at codegen, which is illegal in C.
+				callStmt = new ImplicitCtorDtorStmt( callStmt );
+			}
+			*out++ = callStmt;
+		}
+	}
 } // namespace SymTab
 #endif // AUTOGEN_H
Index: src/SymTab/FixFunction.cc
===================================================================
--- src/SymTab/FixFunction.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SymTab/FixFunction.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// FixFunction.cc -- 
+// FixFunction.cc --
 //
 // Author           : Richard C. Bilson
@@ -44,5 +44,6 @@
 
 	Type * FixFunction::mutate(ArrayType *arrayType) {
-		PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), maybeClone( arrayType->get_base()->clone() ), maybeClone( arrayType->get_dimension() ), arrayType->get_isVarLen(), arrayType->get_isStatic() );
+		// need to recursively mutate the base type in order for multi-dimensional arrays to work.
+		PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->get_base()->clone()->acceptMutator( *this ), maybeClone( arrayType->get_dimension() ), arrayType->get_isVarLen(), arrayType->get_isStatic() );
 		delete arrayType;
 		return pointerType;
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SymTab/Validate.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -174,5 +174,5 @@
 
 		virtual void visit( FunctionDecl *funcDecl );
-};
+	};
 
 	class CompoundLiteral : public GenPoly::DeclMutator {
@@ -191,9 +191,9 @@
 		EliminateTypedef::eliminateTypedef( translationUnit );
 		HoistStruct::hoistStruct( translationUnit );
+		autogenerateRoutines( translationUnit ); // moved up, used to be below compoundLiteral - currently needs Pass1
 		acceptAll( translationUnit, pass1 );
 		acceptAll( translationUnit, pass2 );
 		ReturnChecker::checkFunctionReturns( translationUnit );
-		mutateAll( translationUnit, compoundliteral );
-		autogenerateRoutines( translationUnit );
+		compoundliteral.mutateDeclarationList( translationUnit );
 		acceptAll( translationUnit, pass3 );
 		VerifyCtorDtor::verify( translationUnit );
@@ -490,5 +490,14 @@
 		EliminateTypedef eliminator;
 		mutateAll( translationUnit, eliminator );
+		if ( eliminator.typedefNames.count( "size_t" ) ) {
+			// grab and remember declaration of size_t
+			SizeType = eliminator.typedefNames["size_t"].first->get_base()->clone();
+		} else {
+			// xxx - missing global typedef for size_t - default to long unsigned int, even though that may be wrong
+			// eventually should have a warning for this case.
+			SizeType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
+		}
 		filter( translationUnit, isTypedef, true );
+
 	}
 
@@ -518,4 +527,5 @@
 	Declaration *EliminateTypedef::mutate( TypedefDecl * tyDecl ) {
 		Declaration *ret = Mutator::mutate( tyDecl );
+
 		if ( typedefNames.count( tyDecl->get_name() ) == 1 && typedefNames[ tyDecl->get_name() ].second == scopeLevel ) {
 			// typedef to the same name from the same scope
@@ -541,7 +551,8 @@
 		if ( StructInstType *aggDecl = dynamic_cast< StructInstType * >( tyDecl->get_base() ) ) {
 			return new StructDecl( aggDecl->get_name() );
-//			return aggDecl->get_baseStruct();
 		} else if ( UnionInstType *aggDecl = dynamic_cast< UnionInstType * >( tyDecl->get_base() ) ) {
 			return new UnionDecl( aggDecl->get_name() );
+		} else if ( EnumInstType *enumDecl = dynamic_cast< EnumInstType * >( tyDecl->get_base() ) ) {
+			return new EnumDecl( enumDecl->get_name() );
 		} else {
 			return ret;
Index: src/SynTree/AddStmtVisitor.cc
===================================================================
--- src/SynTree/AddStmtVisitor.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/AddStmtVisitor.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Wed Jun 22 12:11:17 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:49:59 2016
-// Update Count     : 12
+// Last Modified On : Thu Aug  4 11:23:47 2016
+// Update Count     : 16
 //
 
@@ -71,5 +71,5 @@
 
 void AddStmtVisitor::visit(SwitchStmt *switchStmt) {
-	visitStatementList( switchStmt->get_branches() );
+	visitStatementList( switchStmt->get_statements() );
 	maybeAccept( switchStmt->get_condition(), *this );
 }
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Declaration.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// Declaration.cc -- 
+// Declaration.cc --
 //
 // Author           : Richard C. Bilson
@@ -20,4 +20,5 @@
 #include "Initializer.h"
 #include "Type.h"
+#include "Attribute.h"
 #include "Common/utility.h"
 
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Declaration.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -64,5 +64,5 @@
 class DeclarationWithType : public Declaration {
   public:
-	DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage );
+	DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, const std::list< Attribute * > & attributes );
 	DeclarationWithType( const DeclarationWithType &other );
 	virtual ~DeclarationWithType();
@@ -75,4 +75,7 @@
 	int get_scopeLevel() const { return scopeLevel; }
 	void set_scopeLevel( int newValue ) { scopeLevel = newValue; }
+
+	std::list< Attribute * >& get_attributes() { return attributes; }
+	const std::list< Attribute * >& get_attributes() const { return attributes; }
 
 	virtual DeclarationWithType *clone() const = 0;
@@ -87,4 +90,6 @@
 	// shadowed identifiers can be accessed
 	int scopeLevel = 0;
+
+	std::list< Attribute * > attributes;
 };
 
@@ -92,5 +97,5 @@
 	typedef DeclarationWithType Parent;
   public:
-	ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, bool isInline = false, bool isNoreturn = false );
+	ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes = std::list< Attribute * >(), bool isInline = false, bool isNoreturn = false );
 	ObjectDecl( const ObjectDecl &other );
 	virtual ~ObjectDecl();
@@ -131,5 +136,4 @@
 	std::list< std::string >& get_oldIdents() { return oldIdents; }
 	std::list< Declaration* >& get_oldDecls() { return oldDecls; }
-	std::list< Attribute * >& get_attributes() { return attributes; }
 
 	virtual FunctionDecl *clone() const { return new FunctionDecl( *this ); }
@@ -143,5 +147,4 @@
 	std::list< std::string > oldIdents;
 	std::list< Declaration* > oldDecls;
-	std::list< Attribute * > attributes;
 };
 
Index: src/SynTree/DeclarationWithType.cc
===================================================================
--- src/SynTree/DeclarationWithType.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/DeclarationWithType.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -16,15 +16,18 @@
 #include "Declaration.h"
 #include "Type.h"
+#include "Attribute.h"
 #include "Common/utility.h"
 
-DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage )
-		: Declaration( name, sc, linkage ) {
+DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, const std::list< Attribute * > & attributes )
+		: Declaration( name, sc, linkage ), attributes( attributes ) {
 }
 
 DeclarationWithType::DeclarationWithType( const DeclarationWithType &other )
 		: Declaration( other ), mangleName( other.mangleName ), scopeLevel( other.scopeLevel ) {
+	cloneAll( other.attributes, attributes );
 }
 
 DeclarationWithType::~DeclarationWithType() {
+	deleteAll( attributes );
 }
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Expression.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun 13 16:03:39 2016
-// Update Count     : 42
+// Last Modified On : Fri Aug  5 14:23:56 2016
+// Update Count     : 49
 //
 
@@ -344,10 +344,11 @@
 }
 
+//// is this right? It's cloning the member, but the member is a declaration so probably shouldn't be cloned...
 MemberExpr::MemberExpr( const MemberExpr &other ) :
-		Expression( other ), member( maybeClone( other.member ) ), aggregate( maybeClone( other.aggregate ) ) {
+		Expression( other ), member( other.member ), aggregate( maybeClone( other.aggregate ) ) {
 }
 
 MemberExpr::~MemberExpr() {
-	delete member;
+	// delete member;
 	delete aggregate;
 }
@@ -528,4 +529,12 @@
 }
 
+RangeExpr::RangeExpr( Expression *low, Expression *high ) : low( low ), high( high ) {}
+RangeExpr::RangeExpr( const RangeExpr &other ) : low( other.low->clone() ), high( other.high->clone() ) {}
+void RangeExpr::print( std::ostream &os, int indent ) const {
+	os << std::string( indent, ' ' ) << "Range Expression: ";
+	low->print( os, indent );
+	os << " ... ";
+	high->print( os, indent );
+}
 
 std::ostream & operator<<( std::ostream & out, Expression * expr ) {
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Expression.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jul  4 14:45:32 2016
-// Update Count     : 23
+// Last Modified On : Sat Aug  6 08:52:53 2016
+// Update Count     : 35
 //
 
@@ -18,4 +18,5 @@
 
 #include <map>
+#include <memory>
 #include "SynTree.h"
 #include "Visitor.h"
@@ -27,5 +28,5 @@
 class Expression {
   public:
-	Expression(Expression *_aname = 0 );
+	Expression( Expression *_aname = nullptr );
 	Expression( const Expression &other );
 	virtual ~Expression();
@@ -69,6 +70,6 @@
 typedef std::map< UniqueId, ParamEntry > InferredParams;
 
-/// ApplicationExpr represents the application of a function to a set of parameters.  This is the
-/// result of running an UntypedExpr through the expression analyzer.
+/// ApplicationExpr represents the application of a function to a set of parameters.  This is the result of running an
+/// UntypedExpr through the expression analyzer.
 class ApplicationExpr : public Expression {
   public:
@@ -92,12 +93,12 @@
 };
 
-/// UntypedExpr represents the application of a function to a set of parameters, but where the
-/// particular overload for the function name has not yet been determined.  Most operators are
-/// converted into functional form automatically, to permit operator overloading.
+/// UntypedExpr represents the application of a function to a set of parameters, but where the particular overload for
+/// the function name has not yet been determined.  Most operators are converted into functional form automatically, to
+/// permit operator overloading.
 class UntypedExpr : public Expression {
   public:
-	UntypedExpr( Expression *function, Expression *_aname = 0 );
+	UntypedExpr( Expression *function, Expression *_aname = nullptr );
 	UntypedExpr( const UntypedExpr &other );
-	UntypedExpr( Expression *function, std::list<Expression *> &args, Expression *_aname = 0 );
+	UntypedExpr( Expression *function, std::list<Expression *> &args, Expression *_aname = nullptr );
 	virtual ~UntypedExpr();
 
@@ -123,5 +124,5 @@
 class NameExpr : public Expression {
   public:
-	NameExpr( std::string name, Expression *_aname = 0 );
+	NameExpr( std::string name, Expression *_aname = nullptr );
 	NameExpr( const NameExpr &other );
 	virtual ~NameExpr();
@@ -144,5 +145,5 @@
 class AddressExpr : public Expression {
   public:
-	AddressExpr( Expression *arg, Expression *_aname = 0 );
+	AddressExpr( Expression *arg, Expression *_aname = nullptr );
 	AddressExpr( const AddressExpr &other );
 	virtual ~AddressExpr();
@@ -180,6 +181,6 @@
 class CastExpr : public Expression {
   public:
-	CastExpr( Expression *arg, Expression *_aname = 0 );
-	CastExpr( Expression *arg, Type *toType, Expression *_aname = 0 );
+	CastExpr( Expression *arg, Expression *_aname = nullptr );
+	CastExpr( Expression *arg, Type *toType, Expression *_aname = nullptr );
 	CastExpr( const CastExpr &other );
 	virtual ~CastExpr();
@@ -199,5 +200,5 @@
 class UntypedMemberExpr : public Expression {
   public:
-	UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = 0 );
+	UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = nullptr );
 	UntypedMemberExpr( const UntypedMemberExpr &other );
 	virtual ~UntypedMemberExpr();
@@ -220,5 +221,5 @@
 class MemberExpr : public Expression {
   public:
-	MemberExpr( DeclarationWithType *member, Expression *aggregate, Expression *_aname = 0 );
+	MemberExpr( DeclarationWithType *member, Expression *aggregate, Expression *_aname = nullptr );
 	MemberExpr( const MemberExpr &other );
 	virtual ~MemberExpr();
@@ -241,5 +242,5 @@
 class VariableExpr : public Expression {
   public:
-	VariableExpr( DeclarationWithType *var, Expression *_aname = 0 );
+	VariableExpr( DeclarationWithType *var, Expression *_aname = nullptr );
 	VariableExpr( const VariableExpr &other );
 	virtual ~VariableExpr();
@@ -259,5 +260,5 @@
 class ConstantExpr : public Expression {
   public:
-	ConstantExpr( Constant constant, Expression *_aname = 0 );
+	ConstantExpr( Constant constant, Expression *_aname = nullptr );
 	ConstantExpr( const ConstantExpr &other );
 	virtual ~ConstantExpr();
@@ -277,7 +278,7 @@
 class SizeofExpr : public Expression {
   public:
-	SizeofExpr( Expression *expr, Expression *_aname = 0 );
+	SizeofExpr( Expression *expr, Expression *_aname = nullptr );
 	SizeofExpr( const SizeofExpr &other );
-	SizeofExpr( Type *type, Expression *_aname = 0 );
+	SizeofExpr( Type *type, Expression *_aname = nullptr );
 	virtual ~SizeofExpr();
 
@@ -302,7 +303,7 @@
 class AlignofExpr : public Expression {
   public:
-	AlignofExpr( Expression *expr, Expression *_aname = 0 );
+	AlignofExpr( Expression *expr, Expression *_aname = nullptr );
 	AlignofExpr( const AlignofExpr &other );
-	AlignofExpr( Type *type, Expression *_aname = 0 );
+	AlignofExpr( Type *type, Expression *_aname = nullptr );
 	virtual ~AlignofExpr();
 
@@ -327,5 +328,5 @@
 class UntypedOffsetofExpr : public Expression {
   public:
-	UntypedOffsetofExpr( Type *type, const std::string &member, Expression *_aname = 0 );
+	UntypedOffsetofExpr( Type *type, const std::string &member, Expression *_aname = nullptr );
 	UntypedOffsetofExpr( const UntypedOffsetofExpr &other );
 	virtual ~UntypedOffsetofExpr();
@@ -348,5 +349,5 @@
 class OffsetofExpr : public Expression {
   public:
-	OffsetofExpr( Type *type, DeclarationWithType *member, Expression *_aname = 0 );
+	OffsetofExpr( Type *type, DeclarationWithType *member, Expression *_aname = nullptr );
 	OffsetofExpr( const OffsetofExpr &other );
 	virtual ~OffsetofExpr();
@@ -389,7 +390,7 @@
 class AttrExpr : public Expression {
   public:
-	AttrExpr(Expression *attr, Expression *expr, Expression *_aname = 0 );
+	AttrExpr(Expression *attr, Expression *expr, Expression *_aname = nullptr );
 	AttrExpr( const AttrExpr &other );
-	AttrExpr( Expression *attr, Type *type, Expression *_aname = 0 );
+	AttrExpr( Expression *attr, Type *type, Expression *_aname = nullptr );
 	virtual ~AttrExpr();
 
@@ -417,5 +418,5 @@
 class LogicalExpr : public Expression {
   public:
-	LogicalExpr( Expression *arg1, Expression *arg2, bool andp = true, Expression *_aname = 0 );
+	LogicalExpr( Expression *arg1, Expression *arg2, bool andp = true, Expression *_aname = nullptr );
 	LogicalExpr( const LogicalExpr &other );
 	virtual ~LogicalExpr();
@@ -440,5 +441,5 @@
 class ConditionalExpr : public Expression {
   public:
-	ConditionalExpr( Expression *arg1, Expression *arg2, Expression *arg3, Expression *_aname = 0 );
+	ConditionalExpr( Expression *arg1, Expression *arg2, Expression *arg3, Expression *_aname = nullptr );
 	ConditionalExpr( const ConditionalExpr &other );
 	virtual ~ConditionalExpr();
@@ -464,5 +465,5 @@
 class CommaExpr : public Expression {
   public:
-	CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname = 0 );
+	CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname = nullptr );
 	CommaExpr( const CommaExpr &other );
 	virtual ~CommaExpr();
@@ -485,5 +486,5 @@
 class TupleExpr : public Expression {
   public:
-	TupleExpr( Expression *_aname = 0 );
+	TupleExpr( Expression *_aname = nullptr );
 	TupleExpr( const TupleExpr &other );
 	virtual ~TupleExpr();
@@ -503,6 +504,6 @@
 class SolvedTupleExpr : public Expression {
   public:
-	SolvedTupleExpr( Expression *_aname = 0 ) : Expression( _aname ) {}
-	SolvedTupleExpr( std::list<Expression *> &, Expression *_aname = 0 );
+	SolvedTupleExpr( Expression *_aname = nullptr ) : Expression( _aname ) {}
+	SolvedTupleExpr( std::list<Expression *> &, Expression *_aname = nullptr );
 	SolvedTupleExpr( const SolvedTupleExpr &other );
 	virtual ~SolvedTupleExpr() {}
@@ -597,5 +598,5 @@
 class UntypedValofExpr : public Expression {
   public:
-	UntypedValofExpr( Statement *_body, Expression *_aname = 0 ) : Expression( _aname ), body ( _body ) {}
+	UntypedValofExpr( Statement *_body, Expression *_aname = nullptr ) : Expression( _aname ), body ( _body ) {}
 	UntypedValofExpr( const UntypedValofExpr & other );
 	virtual ~UntypedValofExpr();
@@ -632,4 +633,22 @@
 	Type * type;
 	Initializer * initializer;
+};
+
+class RangeExpr : public Expression {
+  public:
+	RangeExpr( Expression *low, Expression *high );
+	RangeExpr( const RangeExpr &other );
+
+	Expression * get_low() const { return low; }
+	Expression * get_high() const { return high; }
+	RangeExpr * set_low( Expression *low ) { RangeExpr::low = low; return this; }
+	RangeExpr * set_high( Expression *high ) { RangeExpr::high = high; return this; }
+
+	virtual RangeExpr *clone() const { return new RangeExpr( *this ); }
+	virtual void accept( Visitor &v ) { v.visit( this ); }
+	virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+  private:
+	Expression *low, *high;
 };
 
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/FunctionDecl.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -23,5 +23,5 @@
 
 FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, std::list< Attribute * > attributes )
-		: Parent( name, sc, linkage ), type( type ), statements( statements ), attributes( attributes ) {
+		: Parent( name, sc, linkage, attributes ), type( type ), statements( statements ) {
 	set_isInline( isInline );
 	set_isNoreturn( isNoreturn );
@@ -34,5 +34,4 @@
 FunctionDecl::FunctionDecl( const FunctionDecl &other )
 	: Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ) {
-		cloneAll( other.attributes, attributes );
 }
 
@@ -40,5 +39,4 @@
 	delete type;
 	delete statements;
-	deleteAll( attributes );
 }
 
@@ -69,5 +67,5 @@
 	} // if
 
-	printAll( attributes, os, indent );
+	printAll( get_attributes(), os, indent );
 
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
Index: src/SynTree/Initializer.h
===================================================================
--- src/SynTree/Initializer.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Initializer.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -93,6 +93,7 @@
 	std::list<Initializer*> &get_initializers() { return initializers; }
 
-	std::list<Initializer*>::iterator begin_initializers() { return initializers.begin(); }
-	std::list<Initializer*>::iterator end_initializers() { return initializers.end(); }
+	typedef std::list<Initializer*>::iterator iterator;
+	iterator begin() { return initializers.begin(); }
+	iterator end() { return initializers.end(); }
 
 	virtual ListInit *clone() const { return new ListInit( *this ); }
Index: src/SynTree/Label.h
===================================================================
--- src/SynTree/Label.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Label.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -9,7 +9,7 @@
 // Author           : Rob Schluntz
 // Created On       : Wed Jun 8 12:53:12 2016
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Jun 8 12:53:28 2016
-// Update Count     : 1
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Aug  7 14:44:29 2016
+// Update Count     : 2
 //
 
@@ -24,5 +24,5 @@
 class Label {
   public:
-	Label( const std::string & name = "", Statement * labelled = 0 ) : name( name ), labelled( labelled ) {}
+	Label( const std::string & name = "", Statement * labelled = 0, const std::list< Attribute * > & attributes = std::list< Attribute * >() ) : name( name ), labelled( labelled ), attributes( attributes ) {}
 	Label( const char * name, Statement * labelled = 0 ) : name( name ), labelled( labelled ) {}
 
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Mutator.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:51:19 2016
-// Update Count     : 17
+// Last Modified On : Thu Aug  4 11:23:21 2016
+// Update Count     : 19
 //
 
@@ -126,5 +126,5 @@
 Statement *Mutator::mutate( SwitchStmt *switchStmt ) {
 	switchStmt->set_condition( maybeMutate( switchStmt->get_condition(), *this ) );
-	mutateAll( switchStmt->get_branches(), *this );
+	mutateAll( switchStmt->get_statements(), *this );
 	return switchStmt;
 }
@@ -349,4 +349,10 @@
 	compLitExpr->set_initializer( maybeMutate( compLitExpr->get_initializer(), *this ) );
 	return compLitExpr;
+}
+
+Expression *Mutator::mutate( RangeExpr *rangeExpr ) {
+	rangeExpr->set_low( maybeMutate( rangeExpr->get_low(), *this ) );
+	rangeExpr->set_high( maybeMutate( rangeExpr->get_high(), *this ) );
+	return rangeExpr;
 }
 
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Mutator.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:51:43 2016
-// Update Count     : 11
+// Last Modified On : Wed Aug  3 16:59:45 2016
+// Update Count     : 12
 //
 #include <cassert>
@@ -78,4 +78,5 @@
 	virtual Expression* mutate( UntypedValofExpr *valofExpr );
 	virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );
+	virtual Expression* mutate( RangeExpr *rangeExpr );
 
 	virtual Type* mutate( VoidType *basicType );
Index: src/SynTree/ObjectDecl.cc
===================================================================
--- src/SynTree/ObjectDecl.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/ObjectDecl.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -18,9 +18,10 @@
 #include "Initializer.h"
 #include "Expression.h"
+#include "Attribute.h"
 #include "Common/utility.h"
 #include "Statement.h"
 
-ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, bool isInline, bool isNoreturn )
-	: Parent( name, sc, linkage ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {
+ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, bool isInline, bool isNoreturn )
+	: Parent( name, sc, linkage, attributes ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {
 	set_isInline( isInline );
 	set_isNoreturn( isNoreturn );
@@ -45,4 +46,6 @@
 		os << LinkageSpec::toString( get_linkage() ) << " ";
 	} // if
+
+	printAll( get_attributes(), os, indent );
 
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
@@ -80,4 +83,6 @@
 	} // if
 
+	// xxx - should printShort print attributes?
+
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
 		os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Statement.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:52:32 2016
-// Update Count     : 55
+// Last Modified On : Fri Aug 12 13:58:48 2016
+// Update Count     : 62
 //
 
@@ -143,19 +143,17 @@
 }
 
-SwitchStmt::SwitchStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_branches ):
-	Statement( _labels ), condition( _condition ), branches( _branches ) {
+SwitchStmt::SwitchStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_statements ):
+	Statement( _labels ), condition( _condition ), statements( _statements ) {
 }
 
 SwitchStmt::SwitchStmt( const SwitchStmt & other ):
 	Statement( other ), condition( maybeClone( other.condition ) ) {
-	cloneAll( other.branches, branches );
+	cloneAll( other.statements, statements );
 }
 
 SwitchStmt::~SwitchStmt() {
 	delete condition;
-	// destroy branches
-}
-
-void SwitchStmt::add_case( CaseStmt *c ) {}
+	// destroy statements
+}
 
 void SwitchStmt::print( std::ostream &os, int indent ) const {
@@ -164,10 +162,10 @@
 	os << endl;
 
-	// branches
+	// statements
 	std::list<Statement *>::const_iterator i;
-	for ( i = branches.begin(); i != branches.end(); i++)
+	for ( i = statements.begin(); i != statements.end(); i++)
 		(*i)->print( os, indent + 4 );
 
-	//for_each( branches.begin(), branches.end(), mem_fun( bind1st(&Statement::print ), os ));
+	//for_each( statements.begin(), statements.end(), mem_fun( bind1st(&Statement::print ), os ));
 }
 
@@ -187,6 +185,6 @@
 }
 
-CaseStmt * CaseStmt::makeDefault( std::list<Label> labels, std::list<Statement *> branches ) {
-	return new CaseStmt( labels, 0, branches, true );
+CaseStmt * CaseStmt::makeDefault( std::list<Label> labels, std::list<Statement *> stmts ) {
+	return new CaseStmt( labels, 0, stmts, true );
 }
 
@@ -311,6 +309,6 @@
 }
 
-CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool isCatchRest ) :
-	Statement( labels ), decl ( _decl ), body( _body ), catchRest ( isCatchRest ) {
+CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool catchAny ) :
+	Statement( labels ), decl ( _decl ), body( _body ), catchRest ( catchAny ) {
 }
 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Statement.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:53:29 2016
-// Update Count     : 47
+// Last Modified On : Fri Aug 12 13:57:46 2016
+// Update Count     : 65
 //
 
@@ -129,5 +129,5 @@
 class SwitchStmt : public Statement {
   public:
-	SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches );
+	SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &statements );
 	SwitchStmt( const SwitchStmt &other );
 	virtual ~SwitchStmt();
@@ -136,6 +136,5 @@
 	void set_condition( Expression *newValue ) { condition = newValue; }
 
-	std::list<Statement *> & get_branches() { return branches; }
-	void add_case( CaseStmt * );
+	std::list<Statement *> & get_statements() { return statements; }
 
 	virtual void accept( Visitor &v ) { v.visit( this ); }
@@ -146,16 +145,14 @@
   private:
 	Expression * condition;
-	std::list<Statement *> branches; // should be list of CaseStmt
+	std::list<Statement *> statements;
 };
 
 class CaseStmt : public Statement {
   public:
-	CaseStmt( std::list<Label> labels, Expression *conditions,
-	      std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError);
+	CaseStmt( std::list<Label> labels, Expression *conditions, std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError);
 	CaseStmt( const CaseStmt &other );
 	virtual ~CaseStmt();
 
-	static CaseStmt * makeDefault( std::list<Label> labels = std::list<Label>(),
-		std::list<Statement *> stmts = std::list<Statement *>() );
+	static CaseStmt * makeDefault( std::list<Label> labels = std::list<Label>(), std::list<Statement *> stmts = std::list<Statement *>() );
 
 	bool isDefault() const { return _isDefault; }
@@ -317,5 +314,5 @@
 class CatchStmt : public Statement {
   public:
-	CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool isCatchRest = false );
+	CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool catchAny = false );
 	CatchStmt( const CatchStmt &other );
 	virtual ~CatchStmt();
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/SynTree.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:54:02 2016
-// Update Count     : 6
+// Last Modified On : Wed Aug  3 17:02:34 2016
+// Update Count     : 7
 //
 
@@ -83,4 +83,5 @@
 class UntypedValofExpr;
 class CompoundLiteralExpr;
+class RangeExpr;
 
 class Type;
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Visitor.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:54:39 2016
-// Update Count     : 19
+// Last Modified On : Thu Aug  4 11:24:25 2016
+// Update Count     : 21
 //
 
@@ -109,5 +109,5 @@
 void Visitor::visit( SwitchStmt *switchStmt ) {
 	maybeAccept( switchStmt->get_condition(), *this );
-	acceptAll( switchStmt->get_branches(), *this );
+	acceptAll( switchStmt->get_statements(), *this );
 }
 
@@ -296,4 +296,9 @@
 	maybeAccept( compLitExpr->get_type(), *this );
 	maybeAccept( compLitExpr->get_initializer(), *this );
+}
+
+void Visitor::visit( RangeExpr *rangeExpr ) {
+	maybeAccept( rangeExpr->get_low(), *this );
+	maybeAccept( rangeExpr->get_high(), *this );
 }
 
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/SynTree/Visitor.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:55:09 2016
-// Update Count     : 8
+// Last Modified On : Wed Aug  3 17:01:50 2016
+// Update Count     : 9
 //
 
@@ -78,4 +78,5 @@
 	virtual void visit( UntypedValofExpr *valofExpr );
 	virtual void visit( CompoundLiteralExpr *compLitExpr );
+	virtual void visit( RangeExpr *rangeExpr );
 
 	virtual void visit( VoidType *basicType );
Index: src/driver/cfa.cc
===================================================================
--- src/driver/cfa.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/driver/cfa.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Tue Aug 20 13:44:49 2002
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul  7 08:56:01 2016
-// Update Count     : 144
+// Last Modified On : Sat Aug  6 16:14:55 2016
+// Update Count     : 148
 //
 
@@ -87,4 +87,5 @@
 	bool cpp_flag = false;								// -E or -M flag, preprocessor only
 	bool std_flag = false;								// -std= flag
+	bool noincstd_flag = false;							// -no-include-stdhdr= flag
 	bool debugging __attribute(( unused )) = false;		// -g flag
 
@@ -144,4 +145,6 @@
 			} else if ( arg == "-nohelp" ) {
 				help = false;							// strip the nohelp flag
+			} else if ( arg == "-no-include-stdhdr" ) {
+				noincstd_flag = true;					// strip the no-include-stdhdr flag
 			} else if ( arg == "-compiler" ) {
 				// use the user specified compiler
@@ -248,6 +251,8 @@
 	args[nargs] = "-I" CFA_INCDIR;
 	nargs += 1;
-	args[nargs] = "-I" CFA_INCDIR "/stdhdr";
-	nargs += 1;
+	if ( ! noincstd_flag ) {							// do not use during build
+		args[nargs] = "-I" CFA_INCDIR "/stdhdr";
+		nargs += 1;
+	} // if
 	args[nargs] = "-I" CFA_INCDIR "/containers";
 	nargs += 1;
Index: src/examples/asm.c
===================================================================
--- src/examples/asm.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ 	(revision )
@@ -1,29 +1,0 @@
-int fred() {
-    int src;
-    int dst;
-
-    asm volatile ( "mov %1, %0\n\t"
-		   "add $1, %0" : : : );
-
-    asm volatile ( "mov %1, %0\n\t"
-		   "add $1, %0"
-		   : "=" "r" (dst));
-
-    asm volatile ( "mov %1, %0\n\t"
-		   "add $1, %0"
-		   : "=r" (dst)
-		   : "r" (src));
-
-    asm ( "mov %1, %0\n\t"
-	  "add $1, %0"
-	  : "=r" (dst), "=r" (src)
-	  : [src] "r" (dst)
-	  : "r0");
-
-  L1: L2:
-    asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5"
-	       : /* No outputs. */
-	       : "r"(src), "r"(&dst)
-	       : "r5", "memory"
-	       : L1, L2 );
-}
Index: src/examples/gc_no_raii/bug-repro/return_template.c
===================================================================
--- src/examples/gc_no_raii/bug-repro/return_template.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/examples/gc_no_raii/bug-repro/return_template.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -5,6 +5,11 @@
 };
 
+forall(otype T) void ?{}(wrap(T)* this);
+forall(otype T) void ?{}(wrap(T)* this, wrap(T)* rhs);
+forall(otype T) void ^?{}(wrap(T)* this);
+forall(otype T) void ?=?(wrap(T)* this, wrap(T)* rhs);
+
 forall(otype T)
-static inline wrap(T) test()
+wrap(T) test()
 {
 	wrap(T) tester;
Index: src/examples/gc_no_raii/src/gc.h
===================================================================
--- src/examples/gc_no_raii/src/gc.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/examples/gc_no_raii/src/gc.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -7,7 +7,15 @@
 static inline gcpointer(T) gcmalloc()
 {
-    gcpointer(T) test;
-    // ctor(&test, gc_allocate(sizeof(T)));
-    // gc_conditional_collect();
-    return test;
+    gcpointer(T) ptr = { gc_allocate(sizeof(T)) };
+    ptr{};
+    gc_conditional_collect();
+    return ptr;
 }
+
+forall(otype T)
+static inline void gcmalloc(gcpointer(T)* ptr)
+{
+	ptr{ gc_allocate(sizeof(T)) };
+      (*ptr){};
+      gc_conditional_collect();
+}
Index: src/examples/gc_no_raii/src/gcpointers.c
===================================================================
--- src/examples/gc_no_raii/src/gcpointers.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/examples/gc_no_raii/src/gcpointers.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -1,5 +1,5 @@
 #include "gcpointers.h"
 
-#include "gc.h"
+// #include "gc.h"
 #include "internal/collector.h"
 #include "internal/object_header.h"
Index: src/examples/gc_no_raii/src/gcpointers.h
===================================================================
--- src/examples/gc_no_raii/src/gcpointers.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/examples/gc_no_raii/src/gcpointers.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,9 +10,9 @@
 };
 
-void gcpointer_ctor(gcpointer_t* this);
-void gcpointer_ctor(gcpointer_t* this, void* address);
-void gcpointer_ctor(gcpointer_t* this, gcpointer_t* other);
-void gcpointer_dtor(gcpointer_t* this);
-gcpointer_t* gcpointer_assign(gcpointer_t* this, gcpointer_t* rhs);
+void ?{}(gcpointer_t* this);
+void ?{}(gcpointer_t* this, void* address);
+void ?{}(gcpointer_t* this, gcpointer_t other);
+void ^?{}(gcpointer_t* this);
+gcpointer_t* ?=?(gcpointer_t this, gcpointer_t rhs);
 
 //Logical operators
@@ -27,60 +27,16 @@
 };
 
-forall(otype T)
-static inline void ctor(gcpointer(T)* this)
-{
-	gcpointer_ctor(&this->internal);
-}
+//
+forall(otype T) void ?{}(gcpointer(T)* this);
+forall(otype T) void ?{}(gcpointer(T)* this, void* address);
+forall(otype T) void ctor(gcpointer(T)* this, void* address);
+forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T)* other);
+forall(otype T) void ^?{}(gcpointer(T)* this);
+forall(otype T) gcpointer(T) ?=?(gcpointer(T) this, gcpointer(T) rhs);
 
-// forall(otype T)
-// static inline void ctor(gcpointer(T)* this, int null)
-// {
-// 	gcpointer_ctor(&this->internal, NULL);
-// }
 
-forall(otype T)
-static inline void ctor(gcpointer(T)* this, void* address)
-{
-	gcpointer_ctor(&this->internal, address);
-}
-
-forall(otype T)
-static inline void ctor(gcpointer(T)* this, gcpointer(T)* other)
-{
-	gcpointer_ctor(&this->internal, other);
-}
-
-forall(otype T)
-static inline void dtor(gcpointer(T)* this)
-{
-	gcpointer_dtor(&this->internal);
-}
-
-forall(otype T)
-static inline gcpointer(T)* ?=?(gcpointer(T)* this, gcpointer(T)* rhs)
-{
-	gcpointer_assign(&this->internal, &rhs->internal);
-	return this;
-}
-
-forall(otype T)
-static inline T *?(gcpointer(T) this)
-{
-	return *(T*)this.internal.ptr;
-}
+forall(otype T) T *?(gcpointer(T) this);
 
 //Logical operators
-forall(otype T)
-static inline int ?!=?(gcpointer(T) this, gcpointer(T) rhs)
-{
-	return this.internal.ptr != rhs.internal.ptr;
-}
-
-forall(otype T)
-static inline int ?==?(gcpointer(T) this, gcpointer(T) rhs)
-{
-	return !(this == rhs);
-}
-
-forall(otype T)
-extern struct gcpointer(T) 0;
+forall(otype T) int ?!=?(gcpointer(T) this, gcpointer(T) rhs);
+forall(otype T) int ?==?(gcpointer(T) this, gcpointer(T) rhs);
Index: src/examples/gc_no_raii/src/internal/memory_pool.h
===================================================================
--- src/examples/gc_no_raii/src/internal/memory_pool.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/examples/gc_no_raii/src/internal/memory_pool.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -3,4 +3,5 @@
 extern "C" {
 #include <stdbool.h>
+#include <stddef.h>
 #include <stdint.h>
 }
Index: src/examples/gc_no_raii/src/internal/state.h
===================================================================
--- src/examples/gc_no_raii/src/internal/state.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/examples/gc_no_raii/src/internal/state.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -1,9 +1,15 @@
 #pragma once
 
+#ifdef __cforall
+extern "C" {
+#endif
 #include <stddef.h>
 #include <stdint.h>
+#ifdef __cforall
+}
+#endif
+#include <vector>
 
 #include "tools.h"
-#include "vector.h"
 
 typedef vector(struct gc_memory_pool*, heap_allocator(struct gc_memory_pool*)) pools_table_t;
Index: src/examples/gc_no_raii/src/tools/worklist.h
===================================================================
--- src/examples/gc_no_raii/src/tools/worklist.h	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/examples/gc_no_raii/src/tools/worklist.h	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,5 +10,5 @@
 #endif
 
-#include "vector.h"
+#include <vector>
 
 typedef vector(intptr_t*, heap_allocator(intptr_t*)) worklist_t;
Index: src/examples/gc_no_raii/test/badlll.c
===================================================================
--- src/examples/gc_no_raii/test/badlll.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/examples/gc_no_raii/test/badlll.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -7,46 +7,50 @@
 };
 
+void ?{}(List_t* this);
+List_t* ?=?(List_t* this, List_t* rhs);
+
 typedef gcpointer(List_t) LLL;
 
 #define MAX (1024 * 1024)
 
-LLL buildLLL(int sz)
+// LLL buildLLL(int sz)
+void bla()
 {
 	int i;
-	LLL ll0, lll, llc;
-
-	ll0 = gcmalloc();
-	ll0->val = 0;
-	lll = ll0;
-
-	for (i = 1; i < sz; i++)
-	{
-		llc = gcmalloc();
-		llc->val = i;
-		lll->next = llc;
-		lll = llc;
-	}
-
-	return ll0;
+	// LLL ll0;//, lll, llc;
+//
+// 	ll0 = gcmalloc();
+// 	ll0->val = 0;
+// 	lll = ll0;
+//
+// 	for (i = 1; i < sz; i++)
+// 	{
+// 		llc = gcmalloc();
+// 		llc->val = i;
+// 		lll->next = llc;
+// 		lll = llc;
+// 	}
+//
+	// return ll0;
 }
-
-void testLLL(LLL lll)
-{
-	unsigned char *counted;
-
-	counted = (unsigned char *) calloc(MAX, sizeof(unsigned char));
-	while (lll)
-	{
-		counted[lll->val]++;
-		if (counted[lll->val] > 1)
-		{
-			fprintf(stderr, "ERROR! Encountered %d twice!\n", lll->val);
-			exit(1);
-		}
-		lll = lll->next;
-	}
-
-	return;
-}
+//
+// void testLLL(LLL lll)
+// {
+// 	unsigned char *counted;
+//
+// 	counted = (unsigned char *) calloc(MAX, sizeof(unsigned char));
+// 	while (lll)
+// 	{
+// 		counted[lll->val]++;
+// 		if (counted[lll->val] > 1)
+// 		{
+// 			fprintf(stderr, "ERROR! Encountered %d twice!\n", lll->val);
+// 			exit(1);
+// 		}
+// 		lll = lll->next;
+// 	}
+//
+// 	return;
+// }
 
 int main(void)
@@ -54,7 +58,7 @@
 	LLL mylll;
 
-	mylll = buildLLL(MAX);
-
-	testLLL(mylll);
+	// mylll = buildLLL(MAX);
+	//
+	// testLLL(mylll);
 
 	return 0;
Index: src/examples/gc_no_raii/test/gctest.c
===================================================================
--- src/examples/gc_no_raii/test/gctest.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/examples/gc_no_raii/test/gctest.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -7,3 +7,8 @@
 int main() {
 	sout | "Bonjour au monde!\n";
+
+	for(int i = 0; i < 1000000; i++) {
+		gcpointer(int) anInt;
+		gcmalloc(&anInt);
+	}
 }
Index: src/libcfa/Makefile.am
===================================================================
--- src/libcfa/Makefile.am	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/libcfa/Makefile.am	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 08:54:01 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Fri Jul  8 23:05:11 2016
-## Update Count     : 192
+## Last Modified On : Thu Aug 11 15:36:32 2016
+## Update Count     : 198
 ###############################################################################
 
@@ -26,14 +26,14 @@
 # create extra forward types/declarations to reduce inclusion of library files
 extras.cf : extras.regx extras.c
-	$(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
 
 # create forward declarations for gcc builtins
 builtins.cf : builtins.c
-	$(AM_V_GEN)if [ -e $< ] ; then \
+	${AM_V_GEN}if [ -e $< ] ; then \
 		@BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \
 	fi
 
 builtins.c : builtins.def prototypes.awk
-	$(AM_V_GEN)if [ -e $< ] ; then \
+	${AM_V_GEN}if [ -e $< ] ; then \
 		@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \
 	fi
@@ -48,13 +48,13 @@
 
 libcfa-prelude.c : ${srcdir}/prelude.cf ${srcdir}/extras.cf ${srcdir}/builtins.cf
-	$(AM_V_GEN)${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
+	${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
 
 libcfa-prelude.o : libcfa-prelude.c
-	 $(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
+	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
 
-CFLAGS = -quiet -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
+CFLAGS = -quiet -no-include-stdhdr -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
 CC = ${abs_top_srcdir}/src/driver/cfa
 
-headers = limits stdlib math iostream fstream iterator rational containers/vector
+headers = limits stdlib math iostream fstream iterator rational # containers/vector
 libobjs = ${headers:=.o}
 
@@ -63,5 +63,5 @@
 	@true
 
-${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA}	# add dependency to cfa-cpp so all libraries are rebuilt with new translator
+${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} # add dependency to cfa-cpp so all libraries are rebuilt with new translator
 
 libcfa_a_SOURCES = libcfa-prelude.c ${headers:=.c}
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/libcfa/Makefile.in	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -89,8 +89,7 @@
 libcfa_a_AR = $(AR) $(ARFLAGS)
 libcfa_a_LIBADD =
-am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) math.$(OBJEXT) \
 	iostream.$(OBJEXT) fstream.$(OBJEXT) iterator.$(OBJEXT) \
-	rational.$(OBJEXT) containers/vector.$(OBJEXT)
+	rational.$(OBJEXT)
 am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1)
 libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
@@ -136,5 +135,5 @@
 CFA_LIBDIR = @CFA_LIBDIR@
 CFA_PREFIX = @CFA_PREFIX@
-CFLAGS = -quiet -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
+CFLAGS = -quiet -no-include-stdhdr -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
@@ -234,5 +233,5 @@
 cfalib_DATA = builtins.cf extras.cf prelude.cf
 MAINTAINERCLEANFILES = builtins.cf extras.cf ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
-headers = limits stdlib math iostream fstream iterator rational containers/vector
+headers = limits stdlib math iostream fstream iterator rational # containers/vector
 libobjs = ${headers:=.o}
 libcfa_a_SOURCES = libcfa-prelude.c ${headers:=.c}
@@ -304,12 +303,4 @@
 clean-libLIBRARIES:
 	-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
-containers/$(am__dirstamp):
-	@$(MKDIR_P) containers
-	@: > containers/$(am__dirstamp)
-containers/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) containers/$(DEPDIR)
-	@: > containers/$(DEPDIR)/$(am__dirstamp)
-containers/vector.$(OBJEXT): containers/$(am__dirstamp) \
-	containers/$(DEPDIR)/$(am__dirstamp)
 libcfa.a: $(libcfa_a_OBJECTS) $(libcfa_a_DEPENDENCIES) $(EXTRA_libcfa_a_DEPENDENCIES) 
 	$(AM_V_at)-rm -f libcfa.a
@@ -319,5 +310,4 @@
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
-	-rm -f containers/vector.$(OBJEXT)
 
 distclean-compile:
@@ -332,5 +322,4 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/vector.Po@am__quote@
 
 .c.o:
@@ -505,6 +494,4 @@
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-rm -f containers/$(DEPDIR)/$(am__dirstamp)
-	-rm -f containers/$(am__dirstamp)
 
 maintainer-clean-generic:
@@ -517,5 +504,5 @@
 
 distclean: distclean-am
-	-rm -rf ./$(DEPDIR) containers/$(DEPDIR)
+	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
@@ -563,5 +550,5 @@
 
 maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR) containers/$(DEPDIR)
+	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic \
@@ -603,14 +590,14 @@
 # create extra forward types/declarations to reduce inclusion of library files
 extras.cf : extras.regx extras.c
-	$(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
 
 # create forward declarations for gcc builtins
 builtins.cf : builtins.c
-	$(AM_V_GEN)if [ -e $< ] ; then \
+	${AM_V_GEN}if [ -e $< ] ; then \
 		@BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \
 	fi
 
 builtins.c : builtins.def prototypes.awk
-	$(AM_V_GEN)if [ -e $< ] ; then \
+	${AM_V_GEN}if [ -e $< ] ; then \
 		@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \
 	fi
@@ -623,8 +610,8 @@
 
 libcfa-prelude.c : ${srcdir}/prelude.cf ${srcdir}/extras.cf ${srcdir}/builtins.cf
-	$(AM_V_GEN)${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
+	${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
 
 libcfa-prelude.o : libcfa-prelude.c
-	 $(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
+	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
 
 # extensionless header files are overridden by -o flag in default makerule => explicitly override default rule to silently do nothing
@@ -632,5 +619,5 @@
 	@true
 
-${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA}	# add dependency to cfa-cpp so all libraries are rebuilt with new translator
+${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} # add dependency to cfa-cpp so all libraries are rebuilt with new translator
 
 maintainer-clean-local:
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/main.cc	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,16 +10,12 @@
 // Created On       : Fri May 15 23:12:02 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul  5 15:23:11 2016
-// Update Count     : 209
+// Last Modified On : Mon Aug 15 17:58:57 2016
+// Update Count     : 220
 //
 
 #include <iostream>
 #include <fstream>
-#include <cstdlib>
-#include <cstdio>
 #include <getopt.h>
 #include "Parser/Parser.h"
-#include "Parser/ParseNode.h"
-#include "Parser/LinkageSpec.h"
 #include "SynTree/Declaration.h"
 #include "SynTree/Visitor.h"
@@ -28,4 +24,5 @@
 #include "GenPoly/Box.h"
 #include "GenPoly/CopyParams.h"
+#include "GenPoly/InstantiateGeneric.h"
 #include "CodeGen/Generate.h"
 #include "CodeGen/FixNames.h"
@@ -42,7 +39,4 @@
 #include "InitTweak/GenInit.h"
 #include "InitTweak/FixInit.h"
-#include "InitTweak/FixGlobalInit.h"
-//#include "Explain/GenProlog.h"
-//#include "Try/Visit.h"
 
 #include "Common/SemanticError.h"
@@ -193,5 +187,5 @@
 			input = fopen( argv[ optind ], "r" );
 			if ( ! input ) {
-				std::cout << "Error: can't open " << argv[ optind ] << std::endl;
+				std::cout << "Error: cannot open " << argv[ optind ] << std::endl;
 				exit( EXIT_FAILURE );
 			} // if
@@ -219,5 +213,5 @@
 			FILE * builtins = fopen( libcfap | treep ? "builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
 			if ( builtins == NULL ) {
-				std::cerr << "Error: can't open builtins.cf" << std::endl;
+				std::cerr << "Error: cannot open builtins.cf" << std::endl;
 				exit( EXIT_FAILURE );
 			} // if
@@ -227,5 +221,5 @@
 			FILE * extras = fopen( libcfap | treep ? "extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
 			if ( extras == NULL ) {
-				std::cerr << "Error: can't open extras.cf" << std::endl;
+				std::cerr << "Error: cannot open extras.cf" << std::endl;
 				exit( EXIT_FAILURE );
 			} // if
@@ -236,5 +230,5 @@
 				FILE * prelude = fopen( treep ? "prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
 				if ( prelude == NULL ) {
-					std::cerr << "Error: can't open prelude.cf" << std::endl;
+					std::cerr << "Error: cannot open prelude.cf" << std::endl;
 					exit( EXIT_FAILURE );
 				} // if
@@ -282,6 +276,4 @@
 		OPTPRINT( "fixNames" )
 		CodeGen::fixNames( translationUnit );
-		OPTPRINT( "fixGlobalInit" );
-		InitTweak::fixGlobalInit( translationUnit, filename, libcfap || treep );
 		OPTPRINT( "tweakInit" )
 		InitTweak::genInit( translationUnit );
@@ -304,7 +296,7 @@
 		}
 
+		// fix ObjectDecl - replaces ConstructorInit nodes
 		OPTPRINT( "fixInit" )
-		// fix ObjectDecl - replaces ConstructorInit nodes
-		InitTweak::fix( translationUnit );
+		InitTweak::fix( translationUnit, filename, libcfap || treep );
 		if ( ctorinitp ) {
 			dump ( translationUnit );
@@ -312,4 +304,6 @@
 		}
 
+		OPTPRINT("instantiateGenerics")
+		GenPoly::instantiateGeneric( translationUnit );
 		OPTPRINT( "copyParams" );
 		GenPoly::copyParams( translationUnit );
@@ -384,6 +378,5 @@
 	std::list< Declaration * > decls;
 	if ( noprotop ) {
-		filter( translationUnit.begin(), translationUnit.end(),
-				std::back_inserter( decls ), notPrelude );
+		filter( translationUnit.begin(), translationUnit.end(), std::back_inserter( decls ), notPrelude );
 	} else {
 		decls = translationUnit;
Index: src/tests/.expect/32/extension.txt
===================================================================
--- src/tests/.expect/32/extension.txt	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/.expect/32/extension.txt	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -100,15 +100,2 @@
     ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2));
 }
-__attribute__ ((constructor(),)) static void _init_extension(void){
-    int _global_init0;
-    ((void)((*((int *)(&__a__i_1)))=_global_init0) /* ?{} */);
-    int _global_init1;
-    ((void)((*((int *)(&__b__i_1)))=_global_init1) /* ?{} */);
-    int _global_init2;
-    ((void)((*((int *)(&__c__i_1)))=_global_init2) /* ?{} */);
-}
-__attribute__ ((destructor(),)) static void _destroy_extension(void){
-    ((void)((*((int *)(&__c__i_1)))) /* ^?{} */);
-    ((void)((*((int *)(&__b__i_1)))) /* ^?{} */);
-    ((void)((*((int *)(&__a__i_1)))) /* ^?{} */);
-}
Index: src/tests/.expect/32/gccExtensions.txt
===================================================================
--- src/tests/.expect/32/gccExtensions.txt	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/.expect/32/gccExtensions.txt	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -5,8 +5,16 @@
 extern void exit(int __status);
 extern int printf(const char *__restrict __format, ...);
+extern int __x__i_1;
 int main(int __argc__i_1, const char **__argv__PPCc_1){
     asm ( "nop" :  :  :  );
     asm ( "nop" :  :  :  );
     asm ( "nop" :  :  :  );
+    static int __y__i_2;
+    int __src__i_2;
+    int __dst__i_2;
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" :  :  :  );
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) :  :  );
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) : "r" ( __src__i_2 ) :  );
+    asm ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ), "=r" ( __src__i_2 ) : [ __src__i_2 ] "r" ( __dst__i_2 ) : "r0" );
     double _Complex __c1__Xd_2;
     double _Complex __c2__Xd_2;
@@ -151,7 +159,7 @@
     struct s4 __y2__3ss4_2;
     ((void)___constructor__F_P3ss4_autogen___2(((struct s4 *)(&__y2__3ss4_2))));
-    int __m1__A0i_2[((long unsigned int )10)];
-    int __m2__A0A0i_2[((long unsigned int )10)][((long unsigned int )10)];
-    int __m3__A0A0i_2[((long unsigned int )10)][((long unsigned int )10)];
+    int __m1__A0i_2[((unsigned int )10)];
+    int __m2__A0A0i_2[((unsigned int )10)][((unsigned int )10)];
+    int __m3__A0A0i_2[((unsigned int )10)][((unsigned int )10)];
     int _retVal0 = { 0 };
     ((void)(_retVal0=0) /* ?{} */);
Index: src/tests/.expect/64/extension.txt
===================================================================
--- src/tests/.expect/64/extension.txt	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/.expect/64/extension.txt	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -100,15 +100,2 @@
     ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2));
 }
-__attribute__ ((constructor(),)) static void _init_extension(void){
-    int _global_init0;
-    ((void)((*((int *)(&__a__i_1)))=_global_init0) /* ?{} */);
-    int _global_init1;
-    ((void)((*((int *)(&__b__i_1)))=_global_init1) /* ?{} */);
-    int _global_init2;
-    ((void)((*((int *)(&__c__i_1)))=_global_init2) /* ?{} */);
-}
-__attribute__ ((destructor(),)) static void _destroy_extension(void){
-    ((void)((*((int *)(&__c__i_1)))) /* ^?{} */);
-    ((void)((*((int *)(&__b__i_1)))) /* ^?{} */);
-    ((void)((*((int *)(&__a__i_1)))) /* ^?{} */);
-}
Index: src/tests/.expect/64/gccExtensions.txt
===================================================================
--- src/tests/.expect/64/gccExtensions.txt	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/.expect/64/gccExtensions.txt	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -5,8 +5,17 @@
 extern void exit(int __status);
 extern int printf(const char *__restrict __format, ...);
+extern int __x__i_1;
 int main(int __argc__i_1, const char **__argv__PPCc_1){
     asm ( "nop" :  :  :  );
     asm ( "nop" :  :  :  );
     asm ( "nop" :  :  :  );
+    static int __y__i_2;
+    int __src__i_2;
+    int __dst__i_2;
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" :  :  :  );
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) :  :  );
+    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) : "r" ( __src__i_2 ) :  );
+    asm ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ), "=r" ( __src__i_2 ) : [ __src__i_2 ] "r" ( __dst__i_2 ) : "r0" );
+    L2: L1: asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5" :  : "r" ( __src__i_2 ), "r" ( (&__dst__i_2) ) : "r5", "memory" : L1, L2 );
     double _Complex __c1__Xd_2;
     double _Complex __c2__Xd_2;
Index: src/tests/.expect/libcfa_vector.txt
===================================================================
--- src/tests/.expect/libcfa_vector.txt	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ 	(revision )
@@ -1,5 +1,0 @@
-0
-1
-2
-3
-0
Index: src/tests/.expect/multiDimension.txt
===================================================================
--- src/tests/.expect/multiDimension.txt	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
+++ src/tests/.expect/multiDimension.txt	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -0,0 +1,304 @@
+constructing with 1
+constructing with 2
+constructing with 3
+constructing with 4
+constructing with 5
+constructing with 6
+constructing with 7
+constructing with 8
+constructing with 9
+constructing with 10
+constructing with 1
+constructing with 2
+constructing with 3
+constructing with 4
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+constructing with 1234567
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+constructing with 1
+constructing with 2
+constructing with 3
+constructing with 4
+constructing with 5
+constructing with 6
+constructing with 7
+constructing with 8
+constructing with 9
+constructing with 0
+constructing with 0
+constructing with 0
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+default constructing
+constructing with 999
+constructing with 1111
+default constructing
+default constructing
+constructing with 1
+constructing with 2
+constructing with 3
+constructing with 4
+default constructing
+default constructing
+default constructing
+default constructing
+constructing with 0
+default constructing
+default constructing
+default constructing
+constructing with 11
+constructing with 22
+constructing with 33
+constructing with 55
+constructing with 66
+default constructing
+constructing with 77
+default constructing
+default constructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
+destructing
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/Makefile.am	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 09:08:15 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Sat Jul  9 11:23:24 2016
-## Update Count     : 35
+## Last Modified On : Mon Aug 15 12:24:54 2016
+## Update Count     : 39
 ###############################################################################
 
@@ -27,14 +27,14 @@
 
 all-local :
-	+python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast dtor-early-exit init_once
+	@+python test.py vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once
 
 all-tests :
-	+python test.py --all
+	@+python test.py --all		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
 
 clean-local :
-	-rm -f ${EXTRA_PROGRAMS}
+	rm -f ${EXTRA_PROGRAMS}
 
 list :
-	+python test.py --list
+	@+python test.py --list
 
 constant0-1DP : constant0-1.c
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/Makefile.in	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -635,14 +635,14 @@
 
 all-local :
-	+python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast dtor-early-exit init_once
+	@+python test.py vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once
 
 all-tests :
-	+python test.py --all
+	@+python test.py --all		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
 
 clean-local :
-	-rm -f ${EXTRA_PROGRAMS}
+	rm -f ${EXTRA_PROGRAMS}
 
 list :
-	+python test.py --list
+	@+python test.py --list
 
 constant0-1DP : constant0-1.c
Index: src/tests/asmName.c
===================================================================
--- src/tests/asmName.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ 	(revision )
@@ -1,16 +1,0 @@
-//Testing assembly declaration
-extern int x asm( "xx" );
-
-int fred( int x ) {
-    static int y asm( "yy" );
-
-// Cforall extensions
-
-    static * int z asm( "zz" );
-}
-
-//Dummy main
-int main(int argc, char const *argv[])
-{
-	return 0;
-}
Index: src/tests/exception.c
===================================================================
--- src/tests/exception.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/exception.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -11,5 +11,5 @@
 	x/4;
     } catch( int ) {
-    } catch( int x ) {
+    } catch( float x ) {
     } catch( struct { int i; } ) {
     } catch( struct { int i; } x ) {
@@ -21,5 +21,5 @@
     } catch( * struct { int i; } x ) {
     } catch( ... ) {
-//    } finally {
+    } finally {
     } // try
 }
Index: src/tests/gccExtensions.c
===================================================================
--- src/tests/gccExtensions.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/gccExtensions.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -1,6 +1,54 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// gccExtensions.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Sun Aug 14 17:28:17 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Aug 15 12:44:35 2016
+// Update Count     : 5
+// 
+
+extern int x asm( "xx" );
+
 int main(int argc, char const *argv[]) {
 	asm( "nop" );
 	__asm( "nop" );
 	__asm__( "nop" );
+
+	static int y asm( "yy" );
+//	static * int z asm( "zz" );							// CFA declaration
+
+	int src;
+	int dst;
+
+	asm volatile ( "mov %1, %0\n\t"
+				   "add $1, %0" : : : );
+
+	asm volatile ( "mov %1, %0\n\t"
+				   "add $1, %0"
+				   : "=" "r" (dst));
+
+	asm volatile ( "mov %1, %0\n\t"
+				   "add $1, %0"
+				   : "=r" (dst)
+				   : "r" (src));
+
+	asm ( "mov %1, %0\n\t"
+		  "add $1, %0"
+		  : "=r" (dst), "=r" (src)
+		  : [src] "r" (dst)
+		  : "r0");
+
+  L1: L2:
+	asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5"
+			   : /* No outputs. */
+			   : "r"(src), "r"(&dst)
+			   : "r5", "memory"
+			   : L1, L2 );
 
 	__complex__ c1;
@@ -57,2 +105,7 @@
 	return 0;
 }
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa gccExtensions.c" //
+// End: //
Index: src/tests/init_once.c
===================================================================
--- src/tests/init_once.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/init_once.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -92,4 +92,8 @@
 init_once y = x;
 
+void static_variable() {
+	static init_once x;
+}
+
 int main() {
 	// local variables
@@ -179,4 +183,9 @@
 		}
 	}
+
+	// function-scoped static variable
+	for (int i = 0; i < 10; i++) {
+		static_variable();
+	}
 }
 
Index: src/tests/labelledExit.c
===================================================================
--- src/tests/labelledExit.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/labelledExit.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -1,2 +1,17 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// labelledExit.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Aug 10 07:29:39 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 10 07:30:15 2016
+// Update Count     : 1
+// 
+
 int foo() {
   	int i;
@@ -136,14 +151,12 @@
 	else
 		i += 1;
-
 }
 
-int main(int argc, char const *argv[]) {
+int main( int argc, char const *argv[] ) {
 	/* code */
-	return 0;
 }
 
 // Local Variables: //
 // tab-width: 4 //
-// compile-command: "cfa LabelledExit.c" //
+// compile-command: "cfa labelledExit.c" //
 // End: //
Index: src/tests/multiDimension.c
===================================================================
--- src/tests/multiDimension.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
+++ src/tests/multiDimension.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -0,0 +1,72 @@
+struct X {
+  int a;
+  int * ptr;
+};
+
+void ?{}(X * this) {
+  printf("default constructing\n");
+  (&this->a){ 123 };
+  this->ptr = malloc(sizeof(int));
+}
+
+void ?{}(X * this, X other) {
+  printf("copy constructing\n");
+  (&this->a){ other.a };
+  this->ptr = malloc(sizeof(int));
+}
+
+void ?{}(X * this, int a) {
+  printf("constructing with %d\n", a);
+  (&this->a){ a };
+  this->ptr = malloc(sizeof(int));
+}
+
+void ^?{}(X * this) {
+  printf("destructing\n");
+  free(this->ptr);
+}
+
+X ?=?(X * this, X other) {
+  this->a = other.a;
+  return *this;
+}
+
+X global[10][10] = {
+  { 1, { 2 }, { 3 }, { 4 }, 5, 6, 7, 8, 9, 10, 11, 12 },
+  { 1, 2, 3, 4 },
+  { { 1234567 } }
+};
+
+X global2[3][3][3] = {
+  {
+    { 1, 2, 3 },
+    { 4, 5, 6 },
+    { 7, 8, 9 },
+    { 10, 11, 12 }
+  },
+  {
+    { 0, 0, 0 }
+  }
+};
+
+int foo() {
+  static X abc[3][3] = {
+    { 11, 22, 33, 44 },
+    { 55, 66 },
+    { 77 },
+    { 88, 99, 1010 }
+  };
+}
+
+int main() {
+  X abc[4][4] = {
+    { 999, 1111 },
+    { 1, 2, 3, 4, 5 },
+    {},
+    { 0 },
+    { 88 }
+  };
+
+  foo();
+  foo();
+}
Index: src/tests/switch.c
===================================================================
--- src/tests/switch.c	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/switch.c	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jul 12 06:50:22 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 18:02:23 2016
-// Update Count     : 22
+// Last Modified On : Thu Aug  4 11:44:29 2016
+// Update Count     : 31
 // 
 
@@ -33,11 +33,19 @@
 	} // switch
 
-	// switch (3 ) {
-	// 	int j;
-	//   case 3:
-	// 	break;
-	//   case 4:
-	// 	j = 0;
-	// }
+	switch ( 3 ) {
+		int j;
+	  case 3:
+		break;
+	  case 4:
+		j = 0;
+	}
+
+	switch ( i ) {
+	  case 1, 2, 3:
+		switch ( i ) {
+		  case 2, 3, 4:
+			7;
+		}
+	}
 
 	switch ( i ) {
@@ -49,8 +57,8 @@
 	  default:
 		i = 3;
-	  case 3:
+	  case 19:
 	  case 'A' ... 'Z':
-	  case 5 ... 6:
-	  case 2, 4:
+	  case 1 ... 6:
+	  case 20, 30:
 		j = 3;
 		f( 3 );
@@ -78,8 +86,8 @@
 		struct S { int i; };
 		S s;
-	  case 3:
+	  case 19:
 	  case 'A' ... 'Z':
-	  case 5 ... 6:
-	  case 2, 4, 7:
+	  case 0 ... 6:
+	  case 20, 30, 40:
 		i = 3;
 		f( 3 );
Index: src/tests/test.py
===================================================================
--- src/tests/test.py	(revision 950f7a72ccf248faed22f2bbd0d7542e24948798)
+++ src/tests/test.py	(revision 7527e6365628dd566e55f6dbeaca1521c6718837)
@@ -23,8 +23,10 @@
 # parses the Makefile to find the machine type (32-bit / 64-bit)
 def getMachineType():
-	with open('Makefile') as file:
-		makefile = file.read()
-		m = re.search("CFA_FLAGS\s*=\s*-m(.*)", makefile)
-		return m.group(1) if m else '64'
+	sh('echo "int main() { return 0; }" > .dummy.c')
+	sh("make .dummy", print2stdout=False)
+	_, out = sh("file .dummy", print2stdout=False)
+	sh("rm -f .dummy.c > /dev/null 2>&1")
+	sh("rm -f .dummy > /dev/null 2>&1")
+	return re.search("ELF\s([0-9]+)-bit", out).group(1)
 
 # reads the directory ./.expect and indentifies the tests
@@ -97,9 +99,4 @@
 		return False
 
-# find the test data for a given test name
-def filterTests(testname) :
-	found = [test for test in allTests if test.name == testname]
-	return (found[0] if len(found) == 1 else Test(testname, testname) )
-
 ################################################################################
 #               running test functions
@@ -139,5 +136,5 @@
 		if not dry_run and fileContainsOnly(out_file, "make: *** No rule to make target `%s'.  Stop." % test.name) :
 			retcode = 1;
-			error = "\t\tNo make target for test %s!" % test
+			error = "\t\tNo make target for test %s!" % test.name
 			sh("rm %s" % out_file, False)
 
@@ -250,5 +247,10 @@
 	# already existing tests and create new info for the new tests
 	if options.regenerate_expected :
-		tests = map(filterTests, options.tests)
+		for testname in options.tests :
+			if testname.endswith(".c") or testname.endswith(".cc") or testname.endswith(".cpp") :
+				print('ERROR: "%s", tests are not allowed to end with a C/C++/CFA extension, ignoring it' % testname, file=sys.stderr)
+			else :
+				found = [test for test in allTests if test.name == testname]
+				tests.append( found[0] if len(found) == 1 else Test(testname, testname) )
 
 	else :
