Index: Jenkinsfile
===================================================================
--- Jenkinsfile	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ Jenkinsfile	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -173,5 +173,5 @@
 
 def notify_server() {
-	sh 'curl --silent -X POST http://plg2:8082/jenkins/notify > /dev/null'
+	sh 'curl --silent -X POST http://plg2:8082/jenkins/notify > /dev/null || true'
 	return
 }
@@ -320,5 +320,5 @@
 
 		//Then publish the results
-		sh 'curl --silent --data @bench.csv http://plg2:8082/jenkins/publish > /dev/null'
+		sh 'curl --silent --data @bench.csv http://plg2:8082/jenkins/publish > /dev/null || true'
 }
 
Index: configure
===================================================================
--- configure	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ configure	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -3131,5 +3131,5 @@
 if test "${enable_threading+set}" = set; then :
   enableval=$enable_threading; case "${enableval}" in
-  yes) build_threading-"yes" ;;
+  yes) build_threading="yes" ;;
   no)  build_threading="no" ;;
   *) as_fn_error $? "bad value ${enableval} for --enable-debug" "$LINENO" 5 ;;
Index: configure.ac
===================================================================
--- configure.ac	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ configure.ac	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -59,5 +59,5 @@
 AC_ARG_ENABLE(threading, AS_HELP_STRING([--enable-threading], [Build and install libcfa with threading support (Enabled by default)]),
 [case "${enableval}" in
-  yes) build_threading-"yes" ;;
+  yes) build_threading="yes" ;;
   no)  build_threading="no" ;;
   *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
Index: doc/LaTeXmacros/common.tex
===================================================================
--- doc/LaTeXmacros/common.tex	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ doc/LaTeXmacros/common.tex	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -248,6 +248,6 @@
 	morekeywords={_Alignas,_Alignof,__alignof,__alignof__,asm,__asm,__asm__,_At,_Atomic,__attribute,__attribute__,auto,
 		_Bool,catch,catchResume,choose,_Complex,__complex,__complex__,__const,__const__,disable,dtype,enable,__extension__,
-		fallthrough,fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,otype,restrict,_Static_assert,
-		_Thread_local,throw,throwResume,trait,try,typeof,__typeof,__typeof__,},
+		fallthrough,fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,one_t,otype,restrict,_Static_assert,
+		_Thread_local,throw,throwResume,trait,try,typeof,__typeof,__typeof__,zero_t},
 }%
 
@@ -263,5 +263,5 @@
 escapechar=§,											% LaTeX escape in CFA code §...§ (section symbol), emacs: C-q M-'
 mathescape=true,										% LaTeX math escape in CFA code $...$
-%keepspaces=true,										% 
+%keepspaces=true,										%
 showstringspaces=false,									% do not show spaces with cup
 showlines=true,											% show blank lines at end of code
Index: doc/proposals/flags.md
===================================================================
--- doc/proposals/flags.md	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ doc/proposals/flags.md	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,78 @@
+## Flag Enums ##
+
+A common programming problem is to represent a value from a set of boolean flags, each of which can be either on or off. C already has enums and bitfields, which can be naturally used to represent the individual flags, but are un-ergonomic to combine together. This proposal introduces "flag enums", a variant of the usual enums specialized to represent flags in a more ergonomic way.
+
+As an example, a flag enum for the TCP control bits could be defined as follows:
+
+	```
+	enum TCP_Flags {
+		FIN,
+		SYN,
+		RST,
+		PSH,
+		ACK,
+		URG,
+		ECE,
+		CWR,
+		NS
+	} __attribute__((flag));
+	```
+
+The `__attribute__` syntax is ugly, but represents the smallest backwards compatibility break; a new SUE for enum flags (e.g. `flag enum TCP_Flags { ... };` or even `flag TCP_Flags { ... };`) might also be reasonable.
+
+A flag enum would be different than a normal enum in two ways: it would auto-generate discriminant values differently, and it would have a number of bitwise operators defined on it by default.
+
+Normal enums generate their discriminant values sequentially starting at zero (`0, 1, 2, 3, ...`), while a flag enum would generate its discriminant values as successive powers of two starting at `1`. E.g. the `TCP_Flags` declaration above would codegen to an enum like below:
+
+	```
+	enum TCP_Flags {
+		FIN = 0x1,
+		SYN = 0x2,
+		RST = 0x4,
+		PSH = 0x8,
+		ACK = 0x10,
+		URG = 0x20,
+		ECE = 0x40,
+		CWR = 0x80,
+		NS = 0x100
+	};
+	```
+
+The precise rule used would be that if no enum discriminant is given, the discriminant is the smallest power of two larger than the previous discriminant (`1` if there is no previous discriminant). This would allow some flexibility for cases like these:
+
+	```
+	enum FunFlags {
+		NONE = 0,           // Named empty value
+		FOO,  // == 0x1
+		BAZ = 0x6,          // Multi-bit flag: 0x4 | 0x2
+		BAR,  // == 0x8
+		FOOBAR = FOO | BAR  // Named combination flag
+	} __attribute__((flag));
+	```
+
+Secondly, we would auto-generate a number of useful operators for any flag enum, as follows:
+* The default constructor for any flag enum would be defined, and would produce a flag with an underlying value of 0.
+* Assignment from and equality/inequality to `zero_t` should also be defined based on the underlying enum value.
+* The bitwise operators `?&?, ?|?, ?^?, ~?` and their assignment variants `?&=?, ?|=?, ?^=?` shall be defined with the semantics of the underlying enum value; `?-?` and `?-=?` should also be defined such that `a - b == a & ~b` (a set difference operation).
+
+With these operations defined, flag enums would support a full set of useful flag operations, using existing, known syntax, as follows:
+
+	```
+	FunFlags f = some_val();
+	if ( f ) { sout | "f has some flag(s) set" | endl; }
+	if ( f & FOO ) { sout | "f has FOO set" | endl; }
+	f |= FOO; // set FOO
+	f -= FOO; // unset FOO
+	f ^= FOO; // toggle FOO
+	```
+
+In each of the cases above, `FOO` could be replaced by `(BAR | BAZ)` to do the same operation or test on multiple flags at once.
+
+### Related Work ###
+C# has the [`[Flags]`][1] enum attribute, but their proposal does not go as far; specifically, the flag discriminants must be manually specified, and they do not automatically implement the bitwise operators on the flags. 
+
+Java has [`EnumSet`][2] which represents the set of flags for a given enum (C++ [`bitset`][3] can be used similarly). The main disadvantage of applying this approach to Cforall is that C enum types already implicitly convert to int, and the bitwise operators already have interpretations on enums with `int` results based on this conversion. As such, all flags need to be wrapped in a set to be used type-safely with the bitwise operators.
+
+[1]: https://msdn.microsoft.com/en-us/library/system.enum.hasflag(v=vs.110).aspx
+[2]: http://docs.oracle.com/javase/7/docs/api/java/util/EnumSet.html
+[3]: http://en.cppreference.com/w/cpp/utility/bitset
Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/CodeGen/CodeGenerator.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 16 14:56:29 2017
-// Update Count     : 418
+// Last Modified On : Fri Mar  3 21:18:47 2017
+// Update Count     : 465
 //
 
@@ -134,10 +134,6 @@
 
 		handleStorageClass( functionDecl );
-		if ( functionDecl->get_isInline() ) {
-			output << "inline ";
-		} // if
-		if ( functionDecl->get_isNoreturn() ) {
-			output << "_Noreturn ";
-		} // if
+		DeclarationNode::print_FuncSpec( output, functionDecl->get_funcSpec() );
+
 		output << genType( functionDecl->get_functionType(), mangleName( functionDecl ), pretty );
 
@@ -835,5 +831,4 @@
 	}
 
-
 	void CodeGenerator::visit( ReturnStmt * returnStmt ) {
 		output << "return ";
@@ -899,6 +894,7 @@
 	}
 
-	void CodeGenerator::handleStorageClass( Declaration * decl ) {
+	void CodeGenerator::handleStorageClass( DeclarationWithType * decl ) {
 		switch ( decl->get_storageClass() ) {
+			//output << DeclarationNode::storageClassNames[decl->get_storageClass()] << ' ';
 		  case DeclarationNode::Extern:
 			output << "extern ";
@@ -913,20 +909,13 @@
 			output << "register ";
 			break;
-		  case DeclarationNode::Inline:
-			output << "inline ";
-			break;
-		  case DeclarationNode::Fortran:
-			output << "fortran ";
-			break;
-		  case DeclarationNode::Noreturn:
-			output << "_Noreturn ";
-			break;
 		  case DeclarationNode::Threadlocal:
-			output << "_Thread_local ";
-			break;
+		  	output << "_Thread_local ";
+		  	break;
 		  case DeclarationNode::NoStorageClass:
 			break;
+		  default:
+			assert( false );
 		} // switch
-	}
+	} // CodeGenerator::handleStorageClass
 
 	std::string genName( DeclarationWithType * decl ) {
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/CodeGen/CodeGenerator.h	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  9 15:06:21 2017
-// Update Count     : 49
+// Last Modified On : Wed Mar  1 16:20:04 2017
+// Update Count     : 50
 //
 
@@ -123,5 +123,5 @@
 
 		void printDesignators( std::list< Expression * > & );
-		void handleStorageClass( Declaration *decl );
+		void handleStorageClass( DeclarationWithType *decl );
 		void handleAggregate( AggregateDecl *aggDecl );
 		void handleTypedef( NamedTypeDecl *namedType );
Index: src/CodeGen/FixNames.cc
===================================================================
--- src/CodeGen/FixNames.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/CodeGen/FixNames.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Mon Apr 11 15:38:10 2016
-// Update Count     : 1
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Mar  3 21:52:17 2017
+// Update Count     : 6
 //
 
@@ -44,5 +44,5 @@
 			LinkageSpec::Cforall, 
 			main_type = new FunctionType( Type::Qualifiers(), true ), 
-			nullptr, false, false
+			nullptr
 		) };
 		main_type->get_returnVals().push_back( 
@@ -50,5 +50,5 @@
 		);
 
-		auto&& name = SymTab::Mangler::mangle( mainDecl.get() );
+		auto && name = SymTab::Mangler::mangle( mainDecl.get() );
 		// std::cerr << name << std::endl;
 		return name;
@@ -61,5 +61,5 @@
 			LinkageSpec::Cforall, 
 			main_type = new FunctionType( Type::Qualifiers(), false ), 
-			nullptr, false, false
+			nullptr
 		) };
 		main_type->get_returnVals().push_back( 
Index: src/CodeTools/DeclStats.cc
===================================================================
--- src/CodeTools/DeclStats.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/CodeTools/DeclStats.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -63,4 +63,7 @@
 			std::map<unsigned, unsigned> p_poly;   ///< Count of decls with each percentage of polymorphic elements
 			VectorMap<unsigned> n_types;           ///< Count of decls with each number of distinct types in the pack
+			/// Count of decls with each percentage of new types in lists.
+			/// Types used in the parameter list that recur in the return list are not considered to be new.
+			std::map<unsigned, unsigned> p_new;
 
 			ArgPackStats& operator+= (const ArgPackStats& o) {
@@ -71,4 +74,5 @@
 				sum(p_poly, o.p_poly);
 				sum(n_types, o.n_types);
+				sum(p_new, o.p_new);
 				
 				return *this;
@@ -86,4 +90,8 @@
 			/// Count of uses of each non-basic type
 			std::unordered_map<std::string, unsigned> compound_type_names;
+			/// Count of decls using each basic type
+			std::unordered_map<std::string, unsigned> basic_type_decls;
+			/// Count of decls using each compound type
+			std::unordered_map<std::string, unsigned> compound_type_decls;
 			/// Stats for the parameter list
 			ArgPackStats params;
@@ -98,5 +106,5 @@
 			ArgPackStats assn_returns;
 			
-			Stats() : n_decls(0), n_type_params(), by_name(), basic_type_names(), compound_type_names(), params(), returns(), n_assns(), assn_params(), assn_returns() {}
+			Stats() : n_decls(0), n_type_params(), by_name(), basic_type_names(), compound_type_names(), basic_type_decls(), compound_type_decls(), params(), returns(), n_assns(), assn_params(), assn_returns() {}
 
 		public:
@@ -107,4 +115,6 @@
 				sum( basic_type_names, o.basic_type_names );
 				sum( compound_type_names, o.compound_type_names );
+				sum( basic_type_decls, o.basic_type_decls );
+				sum( compound_type_decls, o.compound_type_decls );
 				sum( params, o.params );
 				sum( returns, o.returns );
@@ -120,11 +130,14 @@
 		std::unordered_set<std::string> seen_names;  ///< Stores manglenames already seen to avoid double-counting
 		Stats total;
+		/// Count of expressions with (depth, fanout)
+		std::map<std::pair<unsigned, unsigned>, unsigned> exprs_by_fanout_at_depth;
 
 		/// Update arg pack stats based on a declaration list
-		void analyze( Stats& stats, ArgPackStats& pstats, std::list<DeclarationWithType*>& decls ) {
+		void analyze( Stats& stats, std::unordered_set<std::string>& seen, ArgPackStats& pstats, std::list<DeclarationWithType*>& decls ) {
 			std::unordered_set<std::string> types;
-			unsigned n = 0;
-			unsigned n_basic = 0;
-			unsigned n_poly = 0;
+			unsigned n = 0;        ///< number of args/returns
+			unsigned n_basic = 0;  ///< number of basic types
+			unsigned n_poly = 0;   ///< number of polymorphic types
+			unsigned n_new = 0;    ///< number of new types
 			for ( auto decl : decls ) {
 				Type* dt = decl->get_type();
@@ -135,12 +148,20 @@
 				dt->print( ss );
 				types.insert( ss.str() );
+				bool this_new = seen.insert( ss.str() ).second;
+				if ( this_new ) { ++n_new; }
 
 				if ( dynamic_cast<BasicType*>( dt ) ) {
 					++n_basic;
 					++stats.basic_type_names[ ss.str() ];
+					if ( this_new ) {
+						++stats.basic_type_decls[ ss.str() ];
+					}
 				} else if ( GenPoly::hasPolyBase( dt ) ) {
 					++n_poly;
 				} else {
 					++stats.compound_type_names[ ss.str() ];
+					if ( this_new ) {
+						++stats.compound_type_decls[ ss.str() ];
+					}
 				}
 			}
@@ -151,4 +172,5 @@
 				++pstats.p_basic[ n_basic*100/n ];
 				++pstats.p_poly[ n_poly*100/n ];
+				++pstats.p_new[ n_new*100/n ];
 			}
 			++pstats.n_types.at( types.size() );
@@ -156,6 +178,18 @@
 		
 		void analyzeFunc( FunctionType* fnTy, Stats& stats, ArgPackStats& params, ArgPackStats& returns ) {
-			analyze( stats, params, fnTy->get_parameters() );
-			analyze( stats, returns, fnTy->get_returnVals() );
+			std::unordered_set<std::string> seen;
+			analyze( stats, seen, params, fnTy->get_parameters() );
+			analyze( stats, seen, returns, fnTy->get_returnVals() );
+		}
+
+		void analyzeExpr( UntypedExpr *expr, unsigned depth ) {
+			auto& args = expr->get_args();
+			unsigned fanout = args.size();
+			++exprs_by_fanout_at_depth[ std::make_pair(depth, fanout) ];
+			for ( Expression* arg : args ) {
+				if ( UntypedExpr *uearg = dynamic_cast<UntypedExpr*>(arg) ) {
+					analyzeExpr( uearg, depth+1 );
+				}
+			}
 		}
 
@@ -166,5 +200,8 @@
 			// skip if already seen declaration for this function
 			const std::string& mangleName = decl->get_mangleName().empty() ? decl->get_name() : decl->get_mangleName();
-			if ( ! seen_names.insert( mangleName ).second ) return;
+			if ( ! seen_names.insert( mangleName ).second ) {
+				maybeAccept( decl->get_statements(), *this );
+				return;
+			}
 			
 			Stats& stats = for_linkage[ decl->get_linkage() ];
@@ -194,4 +231,11 @@
 
 			analyzeFunc( fnTy, stats, stats.params, stats.returns );
+
+			// analyze expressions in decl statements
+			maybeAccept( decl->get_statements(), *this );
+		}
+
+		virtual void visit( UntypedExpr *expr ) {
+			analyzeExpr( expr, 0 );
 		}
 
@@ -275,4 +319,14 @@
 			printAllMap("%_poly_" + name, [&extract](const Stats& stats) { return extract(stats).p_poly; });
 			printAllMap("n_distinct_types_" + name, [&extract](const Stats& stats) { return extract(stats).n_types; });
+			printAllMap("%_new_types_in_" + name, [&extract](const Stats& stats) { return extract(stats).p_new; });
+		}
+
+		void printPairMap( const std::string& name, 
+		                   const std::map<std::pair<unsigned, unsigned>, unsigned>& map ) {
+			for ( const auto& entry : map ) {
+				const auto& key = entry.first;
+				std::cout << "\"" << name << "\"," << key.first << "," << key.second << "," 
+				          << entry.second << std::endl;
+			}
 		}
 		
@@ -291,6 +345,8 @@
 			printAll("basic_type_names", [](const Stats& stats) { return stats.basic_type_names.size(); });
 			printAllSparseHisto("basic_type_uses", [](const Stats& stats) { return stats.basic_type_names; });
+			printAllSparseHisto("decls_using_basic_type", [](const Stats& stats) { return stats.basic_type_decls; });
 			printAll("compound_type_names", [](const Stats& stats) { return stats.compound_type_names.size(); });
 			printAllSparseHisto("compound_type_uses", [](const Stats& stats) { return stats.compound_type_names; });
+			printAllSparseHisto("decls_using_compound_type", [](const Stats& stats) { return stats.compound_type_decls; });
 			printAllPack("params", [](const Stats& stats) { return stats.params; });
 			printAllPack("returns", [](const Stats& stats) { return stats.returns; });
@@ -298,4 +354,7 @@
 			printAllPack("assn_params", [](const Stats& stats) { return stats.assn_params; });
 			printAllPack("assn_returns", [](const Stats& stats) { return stats.assn_returns; });
+			std::cout << std::endl;
+
+			printPairMap("exprs_by_depth+fanout", exprs_by_fanout_at_depth);
 		}
 	};
Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/GenPoly/Box.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 16 14:57:16 2017
-// Update Count     : 297
+// Last Modified On : Fri Mar  3 21:57:15 2017
+// Update Count     : 310
 //
 
@@ -299,5 +299,6 @@
 		// because each unit generates copies of the default routines for each aggregate.
 		FunctionDecl *layoutDecl = new FunctionDecl(
-			layoutofName( typeDecl ), functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );
+			layoutofName( typeDecl ), functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ),
+			std::list< Attribute * >(), DeclarationNode::FuncSpec( DeclarationNode::InlineSpec ) );
 		layoutDecl->fixUniqueId();
 		return layoutDecl;
@@ -910,5 +911,5 @@
 			adapterBody->get_kids().push_back( bodyStmt );
 			std::string adapterName = makeAdapterName( mangleName );
-			return new FunctionDecl( adapterName, DeclarationNode::NoStorageClass, LinkageSpec::C, adapterType, adapterBody, false, false );
+			return new FunctionDecl( adapterName, DeclarationNode::NoStorageClass, LinkageSpec::C, adapterType, adapterBody );
 		}
 
Index: src/GenPoly/Specialize.cc
===================================================================
--- src/GenPoly/Specialize.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/GenPoly/Specialize.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Thu Apr 28 15:17:45 2016
-// Update Count     : 24
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Mar  3 21:54:45 2017
+// Update Count     : 28
 //
 
@@ -155,5 +155,5 @@
 		} // if
 		// create new thunk with same signature as formal type (C linkage, empty body)
-		FunctionDecl *thunkFunc = new FunctionDecl( thunkNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, newType, new CompoundStmt( noLabels ), false, false );
+		FunctionDecl *thunkFunc = new FunctionDecl( thunkNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, newType, new CompoundStmt( noLabels ) );
 		thunkFunc->fixUniqueId();
 
Index: src/InitTweak/FixGlobalInit.cc
===================================================================
--- src/InitTweak/FixGlobalInit.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/InitTweak/FixGlobalInit.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 04 15:14:56 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun 29 22:33:15 2016
-// Update Count     : 4
+// Last Modified On : Fri Mar  3 21:55:33 2017
+// Update Count     : 9
 //
 
@@ -87,7 +87,7 @@
 			dtorParameters.push_back( new ConstantExpr( Constant::from_int( 102 ) ) );
 		}
-		initFunction = new FunctionDecl( "_init_" + fixedName, DeclarationNode::Static, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ), false, false );
+		initFunction = new FunctionDecl( "_init_" + fixedName, DeclarationNode::Static, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ) );
 		initFunction->get_attributes().push_back( new Attribute( "constructor", ctorParameters ) );
-		destroyFunction = new FunctionDecl( "_destroy_" + fixedName, DeclarationNode::Static, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ), false, false );
+		destroyFunction = new FunctionDecl( "_destroy_" + fixedName, DeclarationNode::Static, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ) );
 		destroyFunction->get_attributes().push_back( new Attribute( "destructor", dtorParameters ) );
 	}
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/InitTweak/FixInit.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Wed Jan 13 16:29:30 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 16 14:58:43 2017
-// Update Count     : 35
+// Last Modified On : Fri Mar  3 21:56:11 2017
+// Update Count     : 39
 //
 
@@ -731,5 +731,5 @@
 
 							// 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 );
+							FunctionDecl * dtorCaller = new FunctionDecl( objDecl->get_mangleName() + dtorCallerNamer.newName(), DeclarationNode::Static, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ) );
 							dtorCaller->fixUniqueId();
 							dtorCaller->get_statements()->push_back( dtorStmt );
Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/InitTweak/GenInit.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -332,5 +332,6 @@
 			if ( ObjectDecl * field = dynamic_cast< ObjectDecl * >( member ) ) {
 				if ( isManaged( field ) ) {
-					managedTypes.insert( SymTab::Mangler::mangle( aggregateDecl ) );
+					StructInstType inst( Type::Qualifiers(), aggregateDecl );
+					managedTypes.insert( SymTab::Mangler::mangle( &inst ) );
 					break;
 				}
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/Parser/DeclarationNode.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 16 13:06:50 2017
-// Update Count     : 753
+// Last Modified On : Fri Mar  3 21:38:34 2017
+// Update Count     : 862
 //
 
@@ -32,13 +32,14 @@
 
 // These must remain in the same order as the corresponding DeclarationNode enumerations.
-const char * DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "NoStorageClass" };
-const char * DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic", "NoQualifier" };
-const char * DeclarationNode::basicTypeName[] = { "void", "_Bool", "char", "int", "float", "double", "long double", "NoBasicType" };
-const char * DeclarationNode::complexTypeName[] = { "_Complex", "_Imaginary", "NoComplexType" };
-const char * DeclarationNode::signednessName[] = { "signed", "unsigned", "NoSignedness" };
-const char * DeclarationNode::lengthName[] = { "short", "long", "long long", "NoLength" };
-const char * DeclarationNode::aggregateName[] = { "struct", "union", "context" };
-const char * DeclarationNode::typeClassName[] = { "otype", "dtype", "ftype" };
-const char * DeclarationNode::builtinTypeName[] = { "__builtin_va_list" };
+const char * DeclarationNode::storageClassNames[] = { "extern", "static", "auto", "register", "_Thread_local", "inline", "fortran", "_Noreturn", "NoStorageClassNames" };
+const char * DeclarationNode::funcSpecifierNames[] = { "inline", "fortran", "_Noreturn", "NoFunctionSpecifierNames" };
+const char * DeclarationNode::typeQualifierNames[] = { "const", "restrict", "volatile", "lvalue", "_Atomic", "NoTypeQualifierNames" };
+const char * DeclarationNode::basicTypeNames[] = { "void", "_Bool", "char", "int", "float", "double", "long double", "NoBasicTypeNames" };
+const char * DeclarationNode::complexTypeNames[] = { "_Complex", "_Imaginary", "NoComplexTypeNames" };
+const char * DeclarationNode::signednessNames[] = { "signed", "unsigned", "NoSignednessNames" };
+const char * DeclarationNode::lengthNames[] = { "short", "long", "long long", "NoLengthNames" };
+const char * DeclarationNode::aggregateNames[] = { "struct", "union", "context", "NoAggregateNames" };
+const char * DeclarationNode::typeClassNames[] = { "otype", "dtype", "ftype", "NoTypeClassNames" };
+const char * DeclarationNode::builtinTypeNames[] = { "__builtin_va_list", "NoBuiltinTypeNames" };
 
 UniqueName DeclarationNode::anonymous( "__anonymous" );
@@ -50,6 +51,4 @@
 		storageClass( NoStorageClass ),
 		bitfieldWidth( nullptr ),
-		isInline( false ),
-		isNoreturn( false ),
 		hasEllipsis( false ),
 		linkage( ::linkage ),
@@ -92,6 +91,5 @@
 	newnode->storageClass = storageClass;
 	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
-	newnode->isInline = isInline;
-	newnode->isNoreturn = isNoreturn;
+	newnode->funcSpec = funcSpec;
 	newnode->enumeratorValue.reset( maybeClone( enumeratorValue.get() ) );
 	newnode->hasEllipsis = hasEllipsis;
@@ -118,4 +116,14 @@
 }
 
+void DeclarationNode::print_FuncSpec( std::ostream & output, DeclarationNode::FuncSpec funcSpec ) {
+	if ( funcSpec.any() ) {								// function specifiers?
+		for ( unsigned int i = 0; i < DeclarationNode::NoFuncSpecifier; i += 1 ) {
+			if ( funcSpec[i] ) {
+				output << DeclarationNode::funcSpecifierNames[i] << ' ';
+			} // if
+		} // for
+	} // if
+} // print_FuncSpec
+
 void DeclarationNode::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' );
@@ -130,7 +138,7 @@
 	} // if
 
-	if ( storageClass != NoStorageClass ) os << DeclarationNode::storageName[storageClass] << ' ';
-	if ( isInline ) os << DeclarationNode::storageName[Inline] << ' ';
-	if ( isNoreturn ) os << DeclarationNode::storageName[Noreturn] << ' ';
+	if ( storageClass != NoStorageClass ) os << DeclarationNode::storageClassNames[storageClass] << ' ';
+	print_FuncSpec( os, funcSpec );
+
 	if ( type ) {
 		type->print( os, indent );
@@ -174,8 +182,4 @@
 	} // if
 
-	if ( body ) {
-		newnode->type->function.hasBody = true;
-	} // if
-
 	if ( ret ) {
 		newnode->type->base = ret->type;
@@ -187,10 +191,51 @@
 } // DeclarationNode::newFunction
 
-DeclarationNode * DeclarationNode::newQualifier( Qualifier q ) {
+
+DeclarationNode * DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
+	DeclarationNode * newnode = new DeclarationNode;
+	newnode->storageClass = sc;
+	return newnode;
+} // DeclarationNode::newStorageClass
+
+DeclarationNode * DeclarationNode::newFuncSpecifier( DeclarationNode::FuncSpecifier fs ) {
+	DeclarationNode * newnode = new DeclarationNode;
+	newnode->funcSpec[ fs ] = true;
+	return newnode;
+} // DeclarationNode::newFuncSpecifier
+
+DeclarationNode * DeclarationNode::newTypeQualifier( TypeQualifier tq ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData();
-	newnode->type->qualifiers[ q ] = 1;
+	newnode->type->typeQualifiers[ tq ] = true;
 	return newnode;
 } // DeclarationNode::newQualifier
+
+DeclarationNode * DeclarationNode::newBasicType( BasicType bt ) {
+	DeclarationNode * newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Basic );
+	newnode->type->basictype = bt;
+	return newnode;
+} // DeclarationNode::newBasicType
+
+DeclarationNode * DeclarationNode::newComplexType( ComplexType ct ) {
+	DeclarationNode * newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Basic );
+	newnode->type->complextype = ct;
+	return newnode;
+} // DeclarationNode::newComplexType
+
+DeclarationNode * DeclarationNode::newSignedNess( Signedness sn ) {
+	DeclarationNode * newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Basic );
+	newnode->type->signedness = sn;
+	return newnode;
+} // DeclarationNode::newSignedNess
+
+DeclarationNode * DeclarationNode::newLength( Length lnth ) {
+	DeclarationNode * newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Basic );
+	newnode->type->length = lnth;
+	return newnode;
+} // DeclarationNode::newLength
 
 DeclarationNode * DeclarationNode::newForall( DeclarationNode * forall ) {
@@ -200,38 +245,4 @@
 	return newnode;
 } // DeclarationNode::newForall
-
-DeclarationNode * DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
-	DeclarationNode * newnode = new DeclarationNode;
-	newnode->storageClass = sc;
-	return newnode;
-} // DeclarationNode::newStorageClass
-
-DeclarationNode * DeclarationNode::newBasicType( BasicType bt ) {
-	DeclarationNode * newnode = new DeclarationNode;
-	newnode->type = new TypeData( TypeData::Basic );
-	newnode->type->basictype = bt;
-	return newnode;
-} // DeclarationNode::newBasicType
-
-DeclarationNode * DeclarationNode::newComplexType( ComplexType ct ) {
-	DeclarationNode * newnode = new DeclarationNode;
-	newnode->type = new TypeData( TypeData::Basic );
-	newnode->type->complextype = ct;
-	return newnode;
-} // DeclarationNode::newComplexType
-
-DeclarationNode * DeclarationNode::newSignedNess( Signedness sn ) {
-	DeclarationNode * newnode = new DeclarationNode;
-	newnode->type = new TypeData( TypeData::Basic );
-	newnode->type->signedness = sn;
-	return newnode;
-} // DeclarationNode::newSignedNess
-
-DeclarationNode * DeclarationNode::newLength( Length lnth ) {
-	DeclarationNode * newnode = new DeclarationNode;
-	newnode->type = new TypeData( TypeData::Basic );
-	newnode->type->length = lnth;
-	return newnode;
-} // DeclarationNode::newLength
 
 DeclarationNode * DeclarationNode::newFromTypedef( string * name ) {
@@ -259,5 +270,5 @@
 } // DeclarationNode::newAggregate
 
-DeclarationNode * DeclarationNode::newEnum( string * name, DeclarationNode * constants ) {
+DeclarationNode * DeclarationNode::newEnum( string * name, DeclarationNode * constants, bool body ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Enum );
@@ -268,4 +279,5 @@
 	} // if
 	newnode->type->enumeration.constants = constants;
+	newnode->type->enumeration.body = body;
 	return newnode;
 } // DeclarationNode::newEnum
@@ -431,10 +443,10 @@
 
 void DeclarationNode::checkQualifiers( const TypeData * src, const TypeData * dst ) {
-	TypeData::Qualifiers qsrc = src->qualifiers, qdst = dst->qualifiers; // optimization
-
-	if ( (qsrc & qdst).any() ) {						// common qualifier ?
-		for ( int i = 0; i < NoQualifier; i += 1 ) {	// find common qualifiers
+	const TypeData::TypeQualifiers &qsrc = src->typeQualifiers, &qdst = dst->typeQualifiers; // optimization
+
+	if ( (qsrc & qdst).any() ) {						 // common qualifier ?
+		for ( unsigned int i = 0; i < NoTypeQualifier; i += 1 ) { // find common qualifiers
 			if ( qsrc[i] && qdst[i] ) {
-				appendError( error, string( "duplicate " ) + DeclarationNode::qualifierName[i] );
+				appendError( error, string( "duplicate " ) + DeclarationNode::typeQualifierNames[i] );
 			} // if
 		} // for
@@ -443,18 +455,28 @@
 
 void DeclarationNode::checkStorageClasses( DeclarationNode * q ) {
+	const FuncSpec &src = funcSpec, &dst = q->funcSpec; // optimization
+	if ( (src & dst).any() ) {							// common specifier ?
+		for ( unsigned int i = 0; i < NoFuncSpecifier; i += 1 ) { // find common specifier
+			if ( src[i] && dst[i] ) {
+				appendError( error, string( "duplicate " ) + DeclarationNode::funcSpecifierNames[i] );
+			} // if
+		} // for
+	} // if
+
 	if ( storageClass != NoStorageClass && q->storageClass != NoStorageClass ) {
 		if ( storageClass == q->storageClass ) {		// duplicate qualifier
-			appendError( error, string( "duplicate " ) + storageName[ storageClass ] );
+			appendError( error, string( "duplicate " ) + storageClassNames[ storageClass ] );
 		} else {										// only one storage class
-			appendError( error, string( "conflicting " ) + storageName[ storageClass ] + " & " + storageName[ q->storageClass ] );
+			appendError( error, string( "conflicting " ) + storageClassNames[ storageClass ] + " & " + storageClassNames[ q->storageClass ] );
 			q->storageClass = storageClass;				// FIX ERROR, prevent assertions from triggering
 		} // if
 	} // if
+
 	appendError( error, q->error );
 } // DeclarationNode::checkStorageClasses
 
 DeclarationNode * DeclarationNode::copyStorageClasses( DeclarationNode * q ) {
-	isInline = isInline || q->isInline;
-	isNoreturn = isNoreturn || q->isNoreturn;
+	funcSpec = funcSpec | q->funcSpec;
+
 	// do not overwrite an existing value with NoStorageClass
 	if ( q->storageClass != NoStorageClass ) {
@@ -484,5 +506,5 @@
 		src = nullptr;
 	} else {
-		dst->qualifiers |= src->qualifiers;
+		dst->typeQualifiers |= src->typeQualifiers;
 	} // if
 } // addQualifiersToType
@@ -542,10 +564,10 @@
 		switch ( dst->kind ) {
 		  case TypeData::Unknown:
-			src->qualifiers |= dst->qualifiers;
+			src->typeQualifiers |= dst->typeQualifiers;
 			dst = src;
 			src = nullptr;
 			break;
 		  case TypeData::Basic:
-			dst->qualifiers |= src->qualifiers;
+			dst->typeQualifiers |= src->typeQualifiers;
 			if ( src->kind != TypeData::Unknown ) {
 				assert( src->kind == TypeData::Basic );
@@ -554,15 +576,15 @@
 					dst->basictype = src->basictype;
 				} else if ( src->basictype != DeclarationNode::NoBasicType )
-					throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::basicTypeName[ src->basictype ] + " in type: ", src );
+					throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::basicTypeNames[ src->basictype ] + " in type: ", src );
 
 				if ( dst->complextype == DeclarationNode::NoComplexType ) {
 					dst->complextype = src->complextype;
 				} else if ( src->complextype != DeclarationNode::NoComplexType )
-					throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::complexTypeName[ src->complextype ] + " in type: ", src );
+					throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::complexTypeNames[ src->complextype ] + " in type: ", src );
 
 				if ( dst->signedness == DeclarationNode::NoSignedness ) {
 					dst->signedness = src->signedness;
 				} else if ( src->signedness != DeclarationNode::NoSignedness )
-					throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::signednessName[ src->signedness ] + " in type: ", src );
+					throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::signednessNames[ src->signedness ] + " in type: ", src );
 
 				if ( dst->length == DeclarationNode::NoLength ) {
@@ -571,5 +593,5 @@
 					dst->length = DeclarationNode::LongLong;
 				} else if ( src->length != DeclarationNode::NoLength )
-					throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::lengthName[ src->length ] + " in type: ", src );
+					throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::lengthNames[ src->length ] + " in type: ", src );
 			} // if
 			break;
@@ -583,5 +605,5 @@
 					dst->base->aggInst.params = maybeClone( src->aggregate.actuals );
 				} // if
-				dst->base->qualifiers |= src->qualifiers;
+				dst->base->typeQualifiers |= src->typeQualifiers;
 				src = nullptr;
 				break;
@@ -610,7 +632,10 @@
 					type->aggInst.aggregate = o->type;
 					if ( o->type->kind == TypeData::Aggregate ) {
+						type->aggInst.hoistType = o->type->aggregate.body;
 						type->aggInst.params = maybeClone( o->type->aggregate.actuals );
+					} else {
+						type->aggInst.hoistType = o->type->enumeration.body;
 					} // if
-					type->qualifiers |= o->type->qualifiers;
+					type->typeQualifiers |= o->type->typeQualifiers;
 				} else {
 					type = o->type;
@@ -698,5 +723,4 @@
 	assert( ! type->function.body );
 	type->function.body = body;
-	type->function.hasBody = true;
 	return this;
 }
@@ -769,5 +793,5 @@
 					p->type->base->aggInst.params = maybeClone( type->aggregate.actuals );
 				} // if
-				p->type->base->qualifiers |= type->qualifiers;
+				p->type->base->typeQualifiers |= type->typeQualifiers;
 				break;
 
@@ -806,5 +830,5 @@
 					lastArray->base->aggInst.params = maybeClone( type->aggregate.actuals );
 				} // if
-				lastArray->base->qualifiers |= type->qualifiers;
+				lastArray->base->typeQualifiers |= type->typeQualifiers;
 				break;
 			  default:
@@ -885,4 +909,6 @@
 				newType->aggInst.aggregate->aggregate.fields = nullptr;
 			} // if
+			// don't hoist twice
+			newType->aggInst.hoistType = false;
 		} // if
 
@@ -945,5 +971,5 @@
 	SemanticError errors;
 	std::back_insert_iterator< std::list< DeclarationWithType * > > out( outputList );
-	
+
 	for ( const DeclarationNode * cur = firstNode; cur; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ) ) {
 		try {
@@ -957,5 +983,5 @@
 					auto obj = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, nullptr, inst, nullptr );
 					obj->location = cur->location;
-					* out++ = obj; 
+					* out++ = obj;
 					delete agg;
 				} else if ( UnionDecl * agg = dynamic_cast< UnionDecl * >( decl ) ) {
@@ -1004,10 +1030,8 @@
 	} // if
 
-//	if ( variable.name ) {
 	if ( variable.tyClass != NoTypeClass ) {
 		static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Dtype, TypeDecl::Ftype, TypeDecl::Ttype };
 		assertf( sizeof(kindMap)/sizeof(kindMap[0] == NoTypeClass-1), "DeclarationNode::build: kindMap is out of sync." );
 		assertf( variable.tyClass < sizeof(kindMap)/sizeof(kindMap[0]), "Variable's tyClass is out of bounds." );
-//		TypeDecl * ret = new TypeDecl( *variable.name, DeclarationNode::NoStorageClass, nullptr, kindMap[ variable.tyClass ] );
 		TypeDecl * ret = new TypeDecl( *name, DeclarationNode::NoStorageClass, nullptr, kindMap[ variable.tyClass ] );
 		buildList( variable.assertions, ret->get_assertions() );
@@ -1016,13 +1040,24 @@
 
 	if ( type ) {
-		return buildDecl( type, name ? *name : string( "" ), storageClass, maybeBuild< Expression >( bitfieldWidth ), isInline, isNoreturn, linkage, asmName, maybeBuild< Initializer >(initializer), attributes )->set_extension( extension );
-	} // if
-
-	if ( ! isInline && ! isNoreturn ) {
-		assertf( name, "ObjectDecl are assumed to have names\n" );
-		return (new ObjectDecl( *name, storageClass, linkage, maybeBuild< Expression >( bitfieldWidth ), nullptr, maybeBuild< Initializer >( initializer ) ))->set_asmName( asmName )->set_extension( extension );
-	} // if
-
-	throw SemanticError( "invalid function specifier ", this );
+		// Function specifiers can only appear on a function definition/declaration.
+		//
+		//    inline _Noreturn int f();			// allowed
+		//    inline _Noreturn int g( int i );	// allowed
+		//    inline _Noreturn int i;			// disallowed
+		if ( type->kind != TypeData::Function && funcSpec.any() ) {
+			throw SemanticError( "invalid function specifier for ", this );
+		} // if
+		return buildDecl( type, name ? *name : string( "" ), storageClass, maybeBuild< Expression >( bitfieldWidth ), funcSpec, linkage, asmName, maybeBuild< Initializer >(initializer), attributes )->set_extension( extension );
+	} // if
+
+	// SUE's cannot have function specifiers, either
+	//
+	//    inlne _Noreturn struct S { ... };		// disallowed
+	//    inlne _Noreturn enum   E { ... };		// disallowed
+	if ( funcSpec.any() ) {
+		throw SemanticError( "invalid function specifier for ", this );
+	} // if
+	assertf( name, "ObjectDecl must a have name\n" );
+	return (new ObjectDecl( *name, storageClass, linkage, maybeBuild< Expression >( bitfieldWidth ), nullptr, maybeBuild< Initializer >( initializer ) ))->set_asmName( asmName )->set_extension( extension );
 }
 
@@ -1031,33 +1066,13 @@
 
 	if ( attr.expr ) {
-//		return new AttrType( buildQualifiers( type ), *attr.name, attr.expr->build() );
 		return new AttrType( buildQualifiers( type ), *name, attr.expr->build(), attributes );
 	} else if ( attr.type ) {
-//		return new AttrType( buildQualifiers( type ), *attr.name, attr.type->buildType() );
 		return new AttrType( buildQualifiers( type ), *name, attr.type->buildType(), attributes );
 	} // if
 
 	switch ( type->kind ) {
-	  case TypeData::Enum: {
-		  EnumDecl * typedecl = buildEnum( type, attributes );
-		  return new EnumInstType( buildQualifiers( type ), typedecl );
-	  }
+	  case TypeData::Enum:
 	  case TypeData::Aggregate: {
-		  AggregateDecl * typedecl = buildAggregate( type, attributes );
-		  ReferenceToType * ret;
-		  switch ( type->aggregate.kind ) {
-			case DeclarationNode::Struct:
-			  ret = new StructInstType( buildQualifiers( type ), (StructDecl *)typedecl );
-			  break;
-			case DeclarationNode::Union:
-			  ret = new UnionInstType( buildQualifiers( type ), (UnionDecl *)typedecl );
-			  break;
-			case DeclarationNode::Trait:
-			  assert( false );
-			  //ret = new TraitInstType( buildQualifiers( type ), (TraitDecl *)typedecl );
-			  break;
-			default:
-			  assert( false );
-		  } // switch
+		  ReferenceToType * ret = buildComAggInst( type, attributes );
 		  buildList( type->aggregate.actuals, ret->get_parameters() );
 		  return ret;
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/Parser/ParseNode.h	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 16 13:15:55 2017
-// Update Count     : 661
+// Last Modified On : Fri Mar  3 21:34:27 2017
+// Update Count     : 704
 //
 
@@ -19,4 +19,5 @@
 #include <string>
 #include <list>
+#include <bitset>
 #include <iterator>
 #include <memory>
@@ -109,5 +110,5 @@
 	ExpressionNode( const ExpressionNode &other );
 	virtual ~ExpressionNode() {}
-	virtual ExpressionNode * clone() const { return expr ? new ExpressionNode( expr->clone() ) : nullptr; }
+	virtual ExpressionNode * clone() const override { return expr ? new ExpressionNode( expr->clone() ) : nullptr; }
 
 	bool get_extension() const { return extension; }
@@ -203,10 +204,8 @@
 	// These must remain in the same order as the corresponding DeclarationNode names.
 
-	// enum StorageClass { Extern, Static, Auto, Register, NoStorageClass };
-	// enum FunctionSpec { Inline, Fortran, Noreturn, NoFunctionSpec };
-	// enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic, Threadlocal, Mutex, NoQualifier };
-
-	enum StorageClass { Extern, Static, Auto, Register, Inline, Fortran, Noreturn, Threadlocal, NoStorageClass, };
-	enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic, NoQualifier };
+	enum StorageClass { Extern, Static, Auto, Register, Threadlocal, NoStorageClass };
+	enum FuncSpecifier { Inline, Noreturn, Fortran, NoFuncSpecifier,
+					InlineSpec = 1 << Inline, NoreturnSpec = 1 << Noreturn, FortranSpec = 1 << Fortran };
+	enum TypeQualifier { Const, Restrict, Volatile, Lvalue, Atomic, NoTypeQualifier };
 	enum BasicType { Void, Bool, Char, Int, Float, Double, LongDouble, NoBasicType };
 	enum ComplexType { Complex, Imaginary, NoComplexType };
@@ -217,26 +216,28 @@
 	enum BuiltinType { Valist, Zero, One, NoBuiltinType };
 
-	static const char * storageName[];
-	static const char * qualifierName[];
-	static const char * basicTypeName[];
-	static const char * complexTypeName[];
-	static const char * signednessName[];
-	static const char * lengthName[];
-	static const char * aggregateName[];
-	static const char * typeClassName[];
-	static const char * builtinTypeName[];
-
-	static DeclarationNode * newFunction( std::string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body, bool newStyle = false );
-	static DeclarationNode * newQualifier( Qualifier );
-	static DeclarationNode * newForall( DeclarationNode * );
+	static const char * storageClassNames[];
+	static const char * funcSpecifierNames[];
+	static const char * typeQualifierNames[];
+	static const char * basicTypeNames[];
+	static const char * complexTypeNames[];
+	static const char * signednessNames[];
+	static const char * lengthNames[];
+	static const char * aggregateNames[];
+	static const char * typeClassNames[];
+	static const char * builtinTypeNames[];
+
 	static DeclarationNode * newStorageClass( StorageClass );
+	static DeclarationNode * newFuncSpecifier( FuncSpecifier );
+	static DeclarationNode * newTypeQualifier( TypeQualifier );
 	static DeclarationNode * newBasicType( BasicType );
 	static DeclarationNode * newComplexType( ComplexType );
-	static DeclarationNode * newSignedNess( Signedness sn );
-	static DeclarationNode * newLength( Length lnth );
+	static DeclarationNode * newSignedNess( Signedness );
+	static DeclarationNode * newLength( Length );
 	static DeclarationNode * newBuiltinType( BuiltinType );
+	static DeclarationNode * newForall( DeclarationNode * );
 	static DeclarationNode * newFromTypedef( std::string * );
+	static DeclarationNode * newFunction( std::string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body, bool newStyle = false );
 	static DeclarationNode * newAggregate( Aggregate kind, const std::string * name, ExpressionNode * actuals, DeclarationNode * fields, bool body );
-	static DeclarationNode * newEnum( std::string * name, DeclarationNode * constants );
+	static DeclarationNode * newEnum( std::string * name, DeclarationNode * constants, bool body );
 	static DeclarationNode * newEnumConstant( std::string * name, ExpressionNode * constant );
 	static DeclarationNode * newName( std::string * );
@@ -259,5 +260,5 @@
 	DeclarationNode();
 	~DeclarationNode();
-	DeclarationNode * clone() const;
+	DeclarationNode * clone() const override;
 
 	DeclarationNode * addQualifiers( DeclarationNode * );
@@ -324,6 +325,10 @@
 	TypeData * type;
 	StorageClass storageClass;
+
+	typedef std::bitset< DeclarationNode::NoFuncSpecifier > FuncSpec;
+	FuncSpec funcSpec;
+	static void print_FuncSpec( std::ostream & output, FuncSpec funcSpec );
+
 	ExpressionNode * bitfieldWidth;
-	bool isInline, isNoreturn;
 	std::unique_ptr<ExpressionNode> enumeratorValue;
 	bool hasEllipsis;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/Parser/TypeData.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Feb 19 09:49:33 2017
-// Update Count     : 467
+// Last Modified On : Fri Mar  3 21:59:10 2017
+// Update Count     : 516
 //
 
@@ -48,5 +48,4 @@
 		function.oldDeclList = nullptr;
 		function.body = nullptr;
-		function.hasBody = false;
 		function.newStyle = false;
 		break;
@@ -63,4 +62,5 @@
 		aggInst.aggregate = nullptr;
 		aggInst.params = nullptr;
+		aggInst.hoistType = false;;
 		break;
 	  case Enum:
@@ -68,4 +68,5 @@
 		enumeration.name = nullptr;
 		enumeration.constants = nullptr;
+		enumeration.body = false;
 		break;
 	  case Symbolic:
@@ -156,5 +157,5 @@
 TypeData * TypeData::clone() const {
 	TypeData * newtype = new TypeData( kind );
-	newtype->qualifiers = qualifiers;
+	newtype->typeQualifiers = typeQualifiers;
 	newtype->base = maybeClone( base );
 	newtype->forall = maybeClone( forall );
@@ -182,5 +183,4 @@
 		newtype->function.oldDeclList = maybeClone( function.oldDeclList );
 		newtype->function.body = maybeClone( function.body );
-		newtype->function.hasBody = function.hasBody;
 		newtype->function.newStyle = function.newStyle;
 		break;
@@ -196,8 +196,10 @@
 		newtype->aggInst.aggregate = maybeClone( aggInst.aggregate );
 		newtype->aggInst.params = maybeClone( aggInst.params );
+		newtype->aggInst.hoistType = aggInst.hoistType;
 		break;
 	  case Enum:
 		newtype->enumeration.name = enumeration.name ? new string( *enumeration.name ) : nullptr;
 		newtype->enumeration.constants = maybeClone( enumeration.constants );
+		newtype->enumeration.body = enumeration.body;
 		break;
 	  case Symbolic:
@@ -224,6 +226,6 @@
 
 void TypeData::print( ostream &os, int indent ) const {
-	for ( int i = 0; i < DeclarationNode::NoQualifier; i += 1 ) {
-		if ( qualifiers[i] ) os << DeclarationNode::qualifierName[ i ] << ' ';
+	for ( int i = 0; i < DeclarationNode::NoTypeQualifier; i += 1 ) {
+		if ( typeQualifiers[i] ) os << DeclarationNode::typeQualifierNames[ i ] << ' ';
 	} // for
 
@@ -248,9 +250,9 @@
 		break;
 	  case Basic:
-		if ( signedness != DeclarationNode::NoSignedness ) os << DeclarationNode::signednessName[ signedness ] << " ";
-		if ( length != DeclarationNode::NoLength ) os << DeclarationNode::lengthName[ length ] << " ";
+		if ( signedness != DeclarationNode::NoSignedness ) os << DeclarationNode::signednessNames[ signedness ] << " ";
+		if ( length != DeclarationNode::NoLength ) os << DeclarationNode::lengthNames[ length ] << " ";
 		assert( basictype != DeclarationNode::NoBasicType );
-		os << DeclarationNode::basicTypeName[ basictype ] << " ";
-		if ( complextype != DeclarationNode::NoComplexType ) os << DeclarationNode::complexTypeName[ complextype ] << " ";
+		os << DeclarationNode::basicTypeNames[ basictype ] << " ";
+		if ( complextype != DeclarationNode::NoComplexType ) os << DeclarationNode::complexTypeNames[ complextype ] << " ";
 		break;
 	  case Array:
@@ -293,13 +295,11 @@
 		} // if
 		os << endl;
-		if ( function.hasBody ) {
+		if ( function.body ) {
 			os << string( indent + 2, ' ' ) << "with body " << endl;
-		} // if
-		if ( function.body ) {
 			function.body->printList( os, indent + 2 );
 		} // if
 		break;
 	  case Aggregate:
-		os << DeclarationNode::aggregateName[ aggregate.kind ] << ' ' << *aggregate.name << endl;
+		os << DeclarationNode::aggregateNames[ aggregate.kind ] << ' ' << *aggregate.name << endl;
 		if ( aggregate.params ) {
 			os << string( indent + 2, ' ' ) << "with type parameters " << endl;
@@ -335,4 +335,7 @@
 			os << "with constants" << endl;
 			enumeration.constants->printList( os, indent + 2 );
+		} // if
+		if ( enumeration.body ) {
+			os << string( indent + 2, ' ' ) << " with body " << endl;
 		} // if
 		break;
@@ -396,5 +399,5 @@
 			FunctionType * dtorType = new FunctionType( Type::Qualifiers(), false );
 			dtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), td->get_name(), *i ) ), nullptr ) );
-			td->get_assertions().push_front( new FunctionDecl( "^?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, dtorType, nullptr, false, false ) );
+			td->get_assertions().push_front( new FunctionDecl( "^?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, dtorType, nullptr ) );
 
 			// add copy ctor:  void ?{}(T *, T)
@@ -402,10 +405,10 @@
 			copyCtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), td->get_name(), *i ) ), nullptr ) );
 			copyCtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new TypeInstType( Type::Qualifiers(), td->get_name(), *i ), nullptr ) );
-			td->get_assertions().push_front( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, copyCtorType, nullptr, false, false ) );
+			td->get_assertions().push_front( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, copyCtorType, nullptr ) );
 
 			// add default ctor:  void ?{}(T *)
 			FunctionType * ctorType = new FunctionType( Type::Qualifiers(), false );
 			ctorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), td->get_name(), *i ) ), nullptr ) );
-			td->get_assertions().push_front( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, ctorType, nullptr, false, false ) );
+			td->get_assertions().push_front( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, ctorType, nullptr ) );
 
 			// add assignment operator:  T * ?=?(T *, T)
@@ -414,5 +417,5 @@
 			assignType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new TypeInstType( Type::Qualifiers(), td->get_name(), *i ), nullptr ) );
 			assignType->get_returnVals().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new TypeInstType( Type::Qualifiers(), td->get_name(), *i ), nullptr ) );
-			td->get_assertions().push_front( new FunctionDecl( "?=?", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, assignType, nullptr, false, false ) );
+			td->get_assertions().push_front( new FunctionDecl( "?=?", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, assignType, nullptr ) );
 		} // if
 	} // for
@@ -491,9 +494,9 @@
 Type::Qualifiers buildQualifiers( const TypeData * td ) {
 	Type::Qualifiers q;
-	q.isConst = td->qualifiers[ DeclarationNode::Const ];
-	q.isVolatile = td->qualifiers[ DeclarationNode::Volatile ];
-	q.isRestrict = td->qualifiers[ DeclarationNode::Restrict ];
-	q.isLvalue = td->qualifiers[ DeclarationNode::Lvalue ];
-	q.isAtomic = td->qualifiers[ DeclarationNode::Atomic ];;
+	q.isConst = td->typeQualifiers[ DeclarationNode::Const ];
+	q.isVolatile = td->typeQualifiers[ DeclarationNode::Volatile ];
+	q.isRestrict = td->typeQualifiers[ DeclarationNode::Restrict ];
+	q.isLvalue = td->typeQualifiers[ DeclarationNode::Lvalue ];
+	q.isAtomic = td->typeQualifiers[ DeclarationNode::Atomic ];;
 	return q;
 } // buildQualifiers
@@ -513,8 +516,8 @@
 	  case DeclarationNode::Bool:
 		if ( td->signedness != DeclarationNode::NoSignedness ) {
-			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::signednessName[ td->signedness ] + " in type: ", td );
+			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::signednessNames[ td->signedness ] + " in type: ", td );
 		} // if
 		if ( td->length != DeclarationNode::NoLength ) {
-			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::lengthName[ td->length ] + " in type: ", td );
+			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::lengthNames[ td->length ] + " in type: ", td );
 		} // if
 
@@ -529,5 +532,5 @@
 
 		if ( td->length != DeclarationNode::NoLength ) {
-			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::lengthName[ td->length ] + " in type: ", td );
+			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::lengthNames[ td->length ] + " in type: ", td );
 		} // if
 
@@ -559,8 +562,8 @@
 	  FloatingPoint: ;
 		if ( td->signedness != DeclarationNode::NoSignedness ) {
-			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::signednessName[ td->signedness ] + " in type: ", td );
+			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::signednessNames[ td->signedness ] + " in type: ", td );
 		} // if
 		if ( td->length == DeclarationNode::Short || td->length == DeclarationNode::LongLong ) {
-			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::lengthName[ td->length ] + " in type: ", td );
+			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::lengthNames[ td->length ] + " in type: ", td );
 		} // if
 		if ( td->basictype == DeclarationNode::Float && td->length == DeclarationNode::Long ) {
@@ -643,27 +646,85 @@
 } // buildAggregate
 
+ReferenceToType * buildComAggInst( const TypeData * type, std::list< Attribute * > attributes ) {
+	switch ( type->kind ) {
+	  case TypeData::Enum: {
+		  if ( type->enumeration.body ) {
+			  EnumDecl * typedecl = buildEnum( type, attributes );
+			  return new EnumInstType( buildQualifiers( type ), typedecl );
+		  } else {
+			  return new EnumInstType( buildQualifiers( type ), *type->enumeration.name );
+		  } // if
+	  }
+	  case TypeData::Aggregate: {
+		  ReferenceToType * ret;
+		  if ( type->aggregate.body ) {
+			  AggregateDecl * typedecl = buildAggregate( type, attributes );
+			  switch ( type->aggregate.kind ) {
+				case DeclarationNode::Struct:
+				  ret = new StructInstType( buildQualifiers( type ), (StructDecl *)typedecl );
+				  break;
+				case DeclarationNode::Union:
+				  ret = new UnionInstType( buildQualifiers( type ), (UnionDecl *)typedecl );
+				  break;
+				case DeclarationNode::Trait:
+				  assert( false );
+				  //ret = new TraitInstType( buildQualifiers( type ), (TraitDecl *)typedecl );
+				  break;
+				default:
+				  assert( false );
+			  } // switch
+		  } else {
+			  switch ( type->aggregate.kind ) {
+				case DeclarationNode::Struct:
+				  ret = new StructInstType( buildQualifiers( type ), *type->aggregate.name );
+				  break;
+				case DeclarationNode::Union:
+				  ret = new UnionInstType( buildQualifiers( type ), *type->aggregate.name );
+				  break;
+				case DeclarationNode::Trait:
+				  ret = new TraitInstType( buildQualifiers( type ), *type->aggregate.name );
+				  break;
+				default:
+				  assert( false );
+			  } // switch
+		  } // if
+		  return ret;
+	  }
+	  default:
+		assert( false );
+	} // switch
+} // buildAggInst
+
 ReferenceToType * buildAggInst( const TypeData * td ) {
 	assert( td->kind == TypeData::AggregateInst );
 
-	ReferenceToType * ret;
-	if ( td->aggInst.aggregate->kind == TypeData::Enum ) {
-		ret = new EnumInstType( buildQualifiers( td ), *td->aggInst.aggregate->enumeration.name );
-	} else {
-		assert( td->aggInst.aggregate->kind == TypeData::Aggregate );
-		switch ( td->aggInst.aggregate->aggregate.kind ) {
-		  case DeclarationNode::Struct:
-			assert( td->aggInst.aggregate->aggregate.name );
-			ret = new StructInstType( buildQualifiers( td ), *td->aggInst.aggregate->aggregate.name );
-			break;
-		  case DeclarationNode::Union:
-			ret = new UnionInstType( buildQualifiers( td ), *td->aggInst.aggregate->aggregate.name );
-			break;
-		  case DeclarationNode::Trait:
-			ret = new TraitInstType( buildQualifiers( td ), *td->aggInst.aggregate->aggregate.name );
-			break;
-		  default:
-			assert( false );
-		} // switch
-	} // if
+	// ReferenceToType * ret = buildComAggInst( td->aggInst.aggregate, std::list< Attribute * >() );
+	ReferenceToType * ret = nullptr;
+	TypeData * type = td->aggInst.aggregate;
+	switch ( type->kind ) {
+	  case TypeData::Enum: {
+		  return new EnumInstType( buildQualifiers( type ), *type->enumeration.name );
+	  }
+	  case TypeData::Aggregate: {
+		  switch ( type->aggregate.kind ) {
+			case DeclarationNode::Struct:
+			  ret = new StructInstType( buildQualifiers( type ), *type->aggregate.name );
+			  break;
+			case DeclarationNode::Union:
+			  ret = new UnionInstType( buildQualifiers( type ), *type->aggregate.name );
+			  break;
+			case DeclarationNode::Trait:
+			  ret = new TraitInstType( buildQualifiers( type ), *type->aggregate.name );
+			  break;
+			default:
+			  assert( false );
+		  } // switch
+	  }
+	  break;
+	  default:
+		assert( false );
+	} // switch
+
+	ret->set_hoistType( td->aggInst.hoistType );
 	buildList( td->aggInst.params, ret->get_parameters() );
 	buildForall( td->forall, ret->get_forall() );
@@ -696,4 +757,5 @@
 		} // if
 	} // for
+	ret->set_body( td->enumeration.body );
 	return ret;
 } // buildEnum
@@ -722,24 +784,14 @@
 } // buildTypeof
 
-Declaration * buildDecl( const TypeData * td, const string &name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init, std::list< Attribute * > attributes ) {
+Declaration * buildDecl( const TypeData * td, const string &name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, DeclarationNode::FuncSpec funcSpec, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init, std::list< Attribute * > attributes ) {
 	if ( td->kind == TypeData::Function ) {
-		if ( td->function.idList ) {
-			buildKRFunction( td->function );
+		if ( td->function.idList ) {					// KR function ?
+			buildKRFunction( td->function );			// transform into C11 function
 		} // if
 
 		FunctionDecl * decl;
-		if ( td->function.hasBody ) {
-			if ( td->function.body ) {
-				Statement * stmt = td->function.body->build();
-				CompoundStmt * body = dynamic_cast< CompoundStmt* >( stmt );
-				assert( body );
-				decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), body, isInline, isNoreturn, attributes );
-			} else {
-				// list< Label > ls;
-				decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), new CompoundStmt( list< Label >() ), isInline, isNoreturn, attributes );
-			} // if
-		} else {
-			decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), nullptr, isInline, isNoreturn, attributes );
-		} // if
+		Statement * stmt = maybeBuild<Statement>( td->function.body );
+		CompoundStmt * body = dynamic_cast< CompoundStmt* >( stmt );
+		decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), body, attributes, funcSpec );
 		return decl->set_asmName( asmName );
 	} else if ( td->kind == TypeData::Aggregate ) {
@@ -750,5 +802,5 @@
 		return buildSymbolic( td, name, sc );
 	} else {
-		return (new ObjectDecl( name, sc, linkage, bitfieldWidth, typebuild( td ), init, attributes, isInline, isNoreturn ))->set_asmName( asmName );
+		return (new ObjectDecl( name, sc, linkage, bitfieldWidth, typebuild( td ), init, attributes ))->set_asmName( asmName );
 	} // if
 	return nullptr;
@@ -768,5 +820,5 @@
 			break;
 		  default:
-			ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType* >( buildDecl( td->base,  "", DeclarationNode::NoStorageClass, nullptr, false, false, LinkageSpec::Cforall, nullptr ) ) );
+			ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType* >( buildDecl( td->base, "", DeclarationNode::NoStorageClass, nullptr, DeclarationNode::FuncSpecifier(), LinkageSpec::Cforall, nullptr ) ) );
 		} // switch
 	} else {
@@ -816,5 +868,5 @@
 
 	for ( DeclarationNode * param = function.idList; param != nullptr; param = dynamic_cast< DeclarationNode* >( param->get_next() ) ) {
-		if ( ! param->type ) {							// generate type int for empty parameters
+		if ( ! param->type ) {							// generate type int for empty parameter type
 			param->type = new TypeData( TypeData::Basic );
 			param->type->basictype = DeclarationNode::Int;
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/Parser/TypeData.h	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 16 14:30:05 2017
-// Update Count     : 153
+// Last Modified On : Fri Mar  3 20:56:53 2017
+// Update Count     : 167
 //
 
@@ -38,4 +38,5 @@
 		TypeData * aggregate;
 		ExpressionNode * params;
+		bool hoistType;
 	};
 
@@ -49,4 +50,5 @@
 		const std::string * name;
 		DeclarationNode * constants;
+		bool body;
 	};
 
@@ -56,5 +58,4 @@
 		mutable DeclarationNode * oldDeclList;
 		StatementNode * body;
-		bool hasBody;
 		bool newStyle;
 	};
@@ -75,6 +76,6 @@
 	DeclarationNode::Length length = DeclarationNode::NoLength;
 	DeclarationNode::BuiltinType builtintype = DeclarationNode::NoBuiltinType;
-	typedef std::bitset< DeclarationNode::NoQualifier > Qualifiers;
-	Qualifiers qualifiers;
+	typedef std::bitset< DeclarationNode::NoTypeQualifier > TypeQualifiers;
+	TypeQualifiers typeQualifiers;
 	DeclarationNode * forall;
 
@@ -104,4 +105,5 @@
 ArrayType * buildArray( const TypeData * );
 AggregateDecl * buildAggregate( const TypeData *, std::list< Attribute * > );
+ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes );
 ReferenceToType * buildAggInst( const TypeData * );
 NamedTypeDecl * buildSymbolic( const TypeData *, const std::string &name, DeclarationNode::StorageClass sc );
@@ -111,5 +113,5 @@
 TupleType * buildTuple( const TypeData * );
 TypeofType * buildTypeof( const TypeData * );
-Declaration * buildDecl( const TypeData *, const std::string &, DeclarationNode::StorageClass, Expression *, bool isInline, bool isNoreturn, LinkageSpec::Spec, ConstantExpr *asmName, Initializer * init = nullptr, std::list< class Attribute * > attributes = std::list< class Attribute * >() );
+Declaration * buildDecl( const TypeData *, const std::string &, DeclarationNode::StorageClass, Expression *, DeclarationNode::FuncSpec funcSpec, LinkageSpec::Spec, ConstantExpr *asmName, Initializer * init = nullptr, std::list< class Attribute * > attributes = std::list< class Attribute * >() );
 FunctionType * buildFunction( const TypeData * );
 void buildKRFunction( const TypeData::Function_t & function );
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/Parser/parser.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -626,16 +626,16 @@
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  238
+#define YYFINAL  240
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   11059
+#define YYLAST   11898
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  138
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  242
+#define YYNNTS  249
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  756
+#define YYNRULES  775
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1556
+#define YYNSTATES  1582
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
@@ -723,50 +723,52 @@
     1028,  1033,  1037,  1042,  1047,  1055,  1060,  1064,  1068,  1072,
     1076,  1083,  1085,  1087,  1089,  1091,  1093,  1095,  1097,  1099,
-    1100,  1102,  1104,  1107,  1109,  1111,  1113,  1115,  1117,  1119,
-    1121,  1122,  1128,  1130,  1133,  1137,  1139,  1142,  1144,  1146,
-    1148,  1150,  1152,  1154,  1156,  1158,  1160,  1162,  1164,  1166,
+    1101,  1103,  1105,  1107,  1109,  1111,  1113,  1115,  1116,  1118,
+    1120,  1123,  1125,  1127,  1129,  1131,  1133,  1135,  1137,  1138,
+    1144,  1146,  1149,  1153,  1155,  1158,  1160,  1162,  1164,  1166,
     1168,  1170,  1172,  1174,  1176,  1178,  1180,  1182,  1184,  1186,
-    1188,  1190,  1193,  1196,  1200,  1204,  1206,  1210,  1212,  1215,
-    1218,  1221,  1226,  1231,  1236,  1241,  1243,  1246,  1249,  1253,
-    1255,  1258,  1261,  1263,  1266,  1269,  1273,  1275,  1278,  1281,
-    1283,  1285,  1291,  1295,  1296,  1304,  1313,  1317,  1319,  1321,
-    1322,  1325,  1328,  1332,  1336,  1341,  1343,  1346,  1350,  1353,
-    1355,  1360,  1361,  1363,  1366,  1369,  1371,  1372,  1374,  1377,
-    1384,  1388,  1389,  1398,  1401,  1406,  1407,  1410,  1411,  1413,
-    1415,  1417,  1423,  1429,  1435,  1437,  1443,  1449,  1459,  1461,
-    1467,  1468,  1470,  1472,  1478,  1480,  1482,  1488,  1494,  1496,
-    1500,  1504,  1509,  1511,  1513,  1515,  1517,  1520,  1522,  1526,
-    1530,  1533,  1537,  1539,  1543,  1545,  1547,  1549,  1551,  1553,
-    1555,  1557,  1559,  1561,  1563,  1565,  1568,  1570,  1572,  1573,
-    1576,  1579,  1581,  1586,  1587,  1589,  1592,  1596,  1601,  1604,
-    1607,  1609,  1612,  1615,  1621,  1627,  1635,  1642,  1644,  1647,
-    1650,  1654,  1656,  1659,  1662,  1667,  1670,  1675,  1676,  1681,
-    1684,  1686,  1688,  1690,  1692,  1693,  1696,  1702,  1708,  1722,
-    1724,  1726,  1730,  1734,  1737,  1741,  1745,  1748,  1753,  1755,
-    1762,  1772,  1773,  1785,  1787,  1791,  1795,  1799,  1801,  1803,
-    1809,  1812,  1818,  1819,  1821,  1823,  1827,  1828,  1830,  1832,
-    1834,  1840,  1841,  1848,  1851,  1853,  1856,  1861,  1864,  1868,
-    1872,  1876,  1881,  1887,  1893,  1899,  1906,  1908,  1910,  1912,
-    1916,  1917,  1923,  1924,  1926,  1928,  1931,  1938,  1940,  1944,
-    1945,  1947,  1952,  1954,  1956,  1958,  1960,  1963,  1965,  1968,
-    1971,  1973,  1977,  1980,  1984,  1989,  1992,  1997,  2002,  2006,
-    2015,  2019,  2022,  2024,  2027,  2034,  2043,  2047,  2050,  2054,
-    2058,  2063,  2068,  2072,  2074,  2076,  2078,  2083,  2092,  2096,
-    2099,  2103,  2107,  2112,  2117,  2121,  2124,  2126,  2129,  2132,
-    2134,  2138,  2141,  2145,  2150,  2153,  2158,  2163,  2167,  2174,
-    2183,  2187,  2190,  2192,  2195,  2198,  2201,  2205,  2210,  2213,
-    2218,  2223,  2227,  2234,  2243,  2247,  2250,  2252,  2255,  2258,
-    2260,  2262,  2265,  2269,  2274,  2277,  2282,  2289,  2298,  2300,
-    2303,  2306,  2308,  2311,  2314,  2318,  2323,  2325,  2330,  2335,
-    2339,  2345,  2354,  2358,  2361,  2365,  2367,  2373,  2379,  2386,
-    2393,  2395,  2398,  2401,  2403,  2406,  2409,  2413,  2418,  2420,
-    2425,  2430,  2434,  2440,  2449,  2453,  2455,  2458,  2460,  2463,
-    2470,  2476,  2483,  2491,  2499,  2501,  2504,  2507,  2509,  2512,
-    2515,  2519,  2524,  2526,  2531,  2536,  2540,  2549,  2553,  2555,
-    2557,  2560,  2562,  2564,  2567,  2571,  2574,  2578,  2581,  2585,
-    2589,  2592,  2597,  2601,  2604,  2608,  2611,  2616,  2620,  2623,
-    2630,  2637,  2644,  2652,  2654,  2657,  2659,  2661,  2663,  2666,
-    2670,  2673,  2677,  2680,  2684,  2688,  2693,  2696,  2700,  2705,
-    2708,  2714,  2721,  2728,  2729,  2731,  2732
+    1188,  1190,  1192,  1194,  1196,  1198,  1200,  1202,  1204,  1206,
+    1209,  1212,  1216,  1220,  1222,  1226,  1228,  1231,  1234,  1237,
+    1242,  1247,  1252,  1257,  1259,  1262,  1265,  1269,  1271,  1274,
+    1277,  1279,  1282,  1285,  1289,  1291,  1294,  1297,  1299,  1302,
+    1305,  1309,  1311,  1314,  1317,  1319,  1321,  1323,  1325,  1331,
+    1332,  1340,  1349,  1351,  1355,  1359,  1361,  1363,  1364,  1367,
+    1370,  1374,  1378,  1383,  1385,  1388,  1392,  1395,  1397,  1402,
+    1403,  1405,  1408,  1411,  1413,  1414,  1416,  1419,  1426,  1427,
+    1436,  1438,  1442,  1445,  1450,  1451,  1454,  1455,  1457,  1459,
+    1461,  1467,  1473,  1479,  1481,  1487,  1493,  1503,  1505,  1511,
+    1512,  1514,  1516,  1522,  1524,  1526,  1532,  1538,  1540,  1544,
+    1548,  1553,  1555,  1557,  1559,  1561,  1564,  1566,  1570,  1574,
+    1577,  1581,  1583,  1587,  1589,  1591,  1593,  1595,  1597,  1599,
+    1601,  1603,  1605,  1607,  1609,  1612,  1614,  1616,  1617,  1620,
+    1623,  1625,  1630,  1631,  1633,  1636,  1640,  1645,  1648,  1651,
+    1653,  1656,  1659,  1665,  1671,  1679,  1686,  1688,  1691,  1694,
+    1698,  1700,  1703,  1706,  1711,  1714,  1719,  1720,  1725,  1728,
+    1730,  1732,  1734,  1736,  1737,  1740,  1746,  1752,  1766,  1768,
+    1770,  1774,  1778,  1781,  1785,  1789,  1792,  1797,  1799,  1806,
+    1816,  1817,  1829,  1831,  1835,  1839,  1843,  1845,  1847,  1853,
+    1856,  1862,  1863,  1865,  1867,  1871,  1872,  1874,  1876,  1878,
+    1884,  1885,  1892,  1895,  1897,  1900,  1905,  1908,  1912,  1916,
+    1920,  1925,  1931,  1937,  1943,  1950,  1952,  1954,  1956,  1960,
+    1961,  1967,  1968,  1970,  1972,  1975,  1982,  1984,  1988,  1989,
+    1991,  1996,  1998,  2000,  2002,  2004,  2007,  2009,  2012,  2015,
+    2017,  2021,  2024,  2028,  2033,  2036,  2041,  2046,  2050,  2059,
+    2063,  2066,  2068,  2071,  2078,  2087,  2091,  2094,  2098,  2102,
+    2107,  2112,  2116,  2118,  2120,  2122,  2127,  2136,  2140,  2143,
+    2147,  2151,  2156,  2161,  2165,  2168,  2170,  2173,  2176,  2178,
+    2182,  2185,  2189,  2194,  2197,  2202,  2207,  2211,  2218,  2227,
+    2231,  2234,  2236,  2239,  2242,  2245,  2249,  2254,  2257,  2262,
+    2267,  2271,  2278,  2287,  2291,  2294,  2296,  2299,  2302,  2304,
+    2306,  2309,  2313,  2318,  2321,  2326,  2333,  2342,  2344,  2347,
+    2350,  2352,  2355,  2358,  2362,  2367,  2369,  2374,  2379,  2383,
+    2389,  2398,  2402,  2405,  2409,  2411,  2417,  2423,  2430,  2437,
+    2439,  2442,  2445,  2447,  2450,  2453,  2457,  2462,  2464,  2469,
+    2474,  2478,  2484,  2493,  2497,  2499,  2502,  2504,  2507,  2514,
+    2520,  2527,  2535,  2543,  2545,  2548,  2551,  2553,  2556,  2559,
+    2563,  2568,  2570,  2575,  2580,  2584,  2593,  2597,  2599,  2601,
+    2604,  2606,  2608,  2611,  2615,  2618,  2622,  2625,  2629,  2633,
+    2636,  2641,  2645,  2648,  2652,  2655,  2660,  2664,  2667,  2674,
+    2681,  2688,  2696,  2698,  2701,  2703,  2705,  2707,  2710,  2714,
+    2717,  2721,  2724,  2728,  2732,  2737,  2740,  2744,  2749,  2752,
+    2758,  2765,  2772,  2773,  2775,  2776
 };
 
@@ -774,5 +776,5 @@
 static const yytype_int16 yyrhs[] =
 {
-     308,     0,    -1,    -1,    -1,    82,    -1,    85,    -1,    86,
+     315,     0,    -1,    -1,    -1,    82,    -1,    85,    -1,    86,
       -1,    87,    -1,    83,    -1,    75,    -1,    79,    -1,   145,
       -1,    75,    -1,    79,    -1,    75,    -1,   145,    -1,    88,
@@ -784,5 +786,5 @@
      149,    86,    -1,   149,    90,   144,    -1,   149,    90,   116,
      139,   152,   140,   117,    -1,   149,    91,    -1,   149,    92,
-      -1,   114,   281,   115,   119,   285,   378,   120,    -1,   149,
+      -1,   114,   288,   115,   119,   292,   385,   120,    -1,   149,
      119,   150,   120,    -1,   151,    -1,   150,   121,   151,    -1,
       -1,   172,    -1,   153,    -1,   152,   121,   153,    -1,   154,
@@ -794,9 +796,9 @@
      141,    -1,   146,    -1,    43,   159,    -1,   157,   159,    -1,
      158,   159,    -1,    91,   156,    -1,    92,   156,    -1,    40,
-     156,    -1,    40,   114,   281,   115,    -1,    69,   156,    -1,
-      69,   114,   281,   115,    -1,    41,   114,   281,   121,   144,
+     156,    -1,    40,   114,   288,   115,    -1,    69,   156,    -1,
+      69,   114,   288,   115,    -1,    41,   114,   288,   121,   144,
      115,    -1,    79,    -1,    79,   114,   151,   115,    -1,    79,
-     114,   282,   115,    -1,   122,    -1,   123,    -1,   124,    -1,
-     125,    -1,   126,    -1,   127,    -1,   156,    -1,   114,   281,
+     114,   289,   115,    -1,   122,    -1,   123,    -1,   124,    -1,
+     125,    -1,   126,    -1,   127,    -1,   156,    -1,   114,   288,
      115,   159,    -1,   159,    -1,   160,   122,   159,    -1,   160,
      128,   159,    -1,   160,   129,   159,    -1,   160,    -1,   161,
@@ -818,8 +820,8 @@
       -1,   177,    -1,   180,    -1,   181,    -1,   185,    -1,   186,
       -1,   198,    -1,   200,    -1,   201,    -1,   206,    -1,   132,
-     149,   119,   150,   120,   137,    -1,   278,   135,   318,   179,
+     149,   119,   150,   120,   137,    -1,   285,   135,   325,   179,
       -1,   119,   120,    -1,   119,   139,   139,   217,   182,   140,
      120,    -1,   183,    -1,   182,   139,   183,    -1,   220,    -1,
-      43,   220,    -1,   314,    -1,    43,   314,    -1,   179,   140,
+      43,   220,    -1,   321,    -1,    43,   321,    -1,   179,   140,
       -1,   179,    -1,   184,   179,    -1,   178,   137,    -1,    44,
      114,   177,   115,   179,    -1,    44,   114,   177,   115,   179,
@@ -828,5 +830,5 @@
      114,   177,   115,   191,    -1,    56,   114,   177,   115,   119,
      139,   213,   194,   120,    -1,   171,    -1,   171,   101,   171,
-      -1,   316,    -1,   187,    -1,   188,   121,   187,    -1,    47,
+      -1,   323,    -1,   187,    -1,   188,   121,   187,    -1,    47,
      188,   135,    -1,    48,   135,    -1,   189,    -1,   190,   189,
       -1,   190,   179,    -1,    -1,   193,    -1,   190,   184,    -1,
@@ -837,7 +839,7 @@
      114,   177,   115,   137,    -1,    51,   114,   139,   199,   115,
      179,    -1,   178,   140,   137,   178,   137,   178,    -1,   220,
-     178,   137,   178,    -1,    54,   278,   137,    -1,    54,   122,
-     177,   137,    -1,    53,   137,    -1,    53,   278,   137,    -1,
-      52,   137,    -1,    52,   278,   137,    -1,    55,   178,   137,
+     178,   137,   178,    -1,    54,   285,   137,    -1,    54,   122,
+     177,   137,    -1,    53,   137,    -1,    53,   285,   137,    -1,
+      52,   137,    -1,    52,   285,   137,    -1,    55,   178,   137,
       -1,    64,   173,   137,    -1,    65,   173,   137,    -1,    65,
      173,    66,   172,   137,    -1,    60,   181,   202,    -1,    60,
@@ -850,6 +852,6 @@
      139,   205,   140,   115,   181,   140,    -1,   203,    62,   114,
      139,   139,   205,   140,   115,   181,   140,    -1,    63,   181,
-      -1,   233,    -1,   233,   315,    -1,   233,   363,    -1,   372,
-     144,    -1,   372,    -1,    67,   207,   114,   146,   115,   137,
+      -1,   235,    -1,   235,   322,    -1,   235,   370,    -1,   379,
+     144,    -1,   379,    -1,    67,   207,   114,   146,   115,   137,
       -1,    67,   207,   114,   146,   135,   208,   115,   137,    -1,
       67,   207,   114,   146,   135,   208,   135,   208,   115,   137,
@@ -863,189 +865,193 @@
       -1,   220,    -1,   214,   139,   220,    -1,   140,    -1,   216,
       -1,   230,    -1,   216,   139,   230,    -1,    -1,   218,    -1,
-      31,   219,   137,    -1,   218,    31,   219,   137,    -1,   280,
-      -1,   219,   121,   280,    -1,   221,    -1,   230,    -1,   222,
+      31,   219,   137,    -1,   218,    31,   219,   137,    -1,   287,
+      -1,   219,   121,   287,    -1,   221,    -1,   230,    -1,   222,
      140,   137,    -1,   227,   140,   137,    -1,   224,   140,   137,
-      -1,   299,   140,   137,    -1,   302,   140,   137,    -1,   223,
-     283,    -1,   239,   223,   283,    -1,   222,   140,   121,   139,
-     278,   283,    -1,   373,   278,   317,    -1,   376,   278,   317,
-      -1,   235,   376,   278,   317,    -1,   225,    -1,   235,   225,
-      -1,   239,   225,    -1,   239,   235,   225,    -1,   224,   140,
-     121,   139,   278,    -1,   376,   278,   114,   139,   266,   140,
-     115,    -1,   226,   278,   114,   139,   266,   140,   115,    -1,
-     116,   139,   268,   140,   117,    -1,   116,   139,   268,   140,
-     121,   139,   269,   140,   117,    -1,     3,   223,    -1,     3,
-     225,    -1,   227,   140,   121,   139,   144,    -1,     3,   233,
-     315,    -1,   228,   140,   121,   139,   315,    -1,   235,     3,
-     233,   315,    -1,   233,     3,   315,    -1,   233,     3,   235,
-     315,    -1,     3,   144,   136,   172,    -1,   229,   140,   121,
+      -1,   306,   140,   137,    -1,   309,   140,   137,    -1,   223,
+     290,    -1,   241,   223,   290,    -1,   222,   140,   121,   139,
+     285,   290,    -1,   380,   285,   324,    -1,   383,   285,   324,
+      -1,   237,   383,   285,   324,    -1,   225,    -1,   237,   225,
+      -1,   241,   225,    -1,   241,   237,   225,    -1,   224,   140,
+     121,   139,   285,    -1,   383,   285,   114,   139,   273,   140,
+     115,    -1,   226,   285,   114,   139,   273,   140,   115,    -1,
+     116,   139,   275,   140,   117,    -1,   116,   139,   275,   140,
+     121,   139,   276,   140,   117,    -1,     3,   223,    -1,     3,
+     225,    -1,   227,   140,   121,   139,   144,    -1,     3,   234,
+     322,    -1,   228,   140,   121,   139,   322,    -1,   237,     3,
+     234,   322,    -1,   234,     3,   322,    -1,   234,     3,   237,
+     322,    -1,     3,   144,   136,   172,    -1,   229,   140,   121,
      139,   144,   136,   172,    -1,   232,   231,   140,   137,    -1,
-     228,   140,   137,    -1,   229,   140,   137,    -1,   247,   140,
-     137,    -1,   315,   317,   283,    -1,   231,   121,   318,   315,
-     317,   283,    -1,   243,    -1,   247,    -1,   249,    -1,   289,
-      -1,   244,    -1,   248,    -1,   250,    -1,   290,    -1,    -1,
-     235,    -1,   236,    -1,   235,   236,    -1,   237,    -1,   320,
-      -1,    10,    -1,    12,    -1,    11,    -1,    14,    -1,    70,
-      -1,    -1,    13,   114,   238,   292,   115,    -1,   240,    -1,
-     235,   240,    -1,   239,   235,   240,    -1,   241,    -1,   240,
-     241,    -1,     5,    -1,     7,    -1,     4,    -1,     6,    -1,
-       8,    -1,     9,    -1,    72,    -1,    74,    -1,    16,    -1,
-      21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,    -1,
-      22,    -1,    23,    -1,    15,    -1,    27,    -1,    28,    -1,
-      29,    -1,    26,    -1,    24,    -1,    25,    -1,   244,    -1,
-     239,   244,    -1,   243,   241,    -1,   243,   241,   235,    -1,
-     243,   241,   244,    -1,   245,    -1,   234,   246,   234,    -1,
-     242,    -1,   235,   242,    -1,   245,   236,    -1,   245,   242,
-      -1,    30,   114,   282,   115,    -1,    30,   114,   177,   115,
-      -1,    81,   114,   282,   115,    -1,    81,   114,   177,   115,
-      -1,   248,    -1,   239,   248,    -1,   247,   241,    -1,   247,
-     241,   235,    -1,   251,    -1,   235,   251,    -1,   248,   236,
-      -1,   250,    -1,   239,   250,    -1,   249,   241,    -1,   249,
-     241,   235,    -1,    77,    -1,   235,    77,    -1,   250,   236,
-      -1,   252,    -1,   262,    -1,   254,   318,   119,   255,   120,
-      -1,   254,   318,   280,    -1,    -1,   254,   318,   280,   253,
-     119,   255,   120,    -1,   254,   318,   114,   298,   115,   119,
-     255,   120,    -1,   254,   318,   291,    -1,    33,    -1,    34,
-      -1,    -1,   255,   256,    -1,   257,   137,    -1,    43,   257,
-     137,    -1,   233,   258,   137,    -1,    43,   233,   258,   137,
-      -1,   372,    -1,   372,   280,    -1,   257,   121,   280,    -1,
-     257,   121,    -1,   259,    -1,   258,   121,   318,   259,    -1,
-      -1,   261,    -1,   324,   260,    -1,   337,   260,    -1,   363,
-      -1,    -1,   261,    -1,   135,   171,    -1,    32,   318,   119,
-     264,   378,   120,    -1,    32,   318,   280,    -1,    -1,    32,
-     318,   280,   263,   119,   264,   378,   120,    -1,   280,   265,
-      -1,   264,   121,   280,   265,    -1,    -1,   136,   171,    -1,
-      -1,   267,    -1,   269,    -1,   268,    -1,   268,   140,   121,
-     139,   269,    -1,   269,   140,   121,   139,   101,    -1,   268,
-     140,   121,   139,   101,    -1,   273,    -1,   269,   140,   121,
-     139,   273,    -1,   268,   140,   121,   139,   273,    -1,   268,
-     140,   121,   139,   269,   140,   121,   139,   273,    -1,   274,
-      -1,   269,   140,   121,   139,   274,    -1,    -1,   271,    -1,
-     272,    -1,   272,   140,   121,   139,   101,    -1,   276,    -1,
-     275,    -1,   272,   140,   121,   139,   276,    -1,   272,   140,
-     121,   139,   275,    -1,   275,    -1,   368,   278,   379,    -1,
-     376,   278,   379,    -1,   235,   376,   278,   379,    -1,   225,
-      -1,   276,    -1,   368,    -1,   376,    -1,   235,   376,    -1,
-     377,    -1,   232,   342,   379,    -1,   232,   346,   379,    -1,
-     232,   379,    -1,   232,   357,   379,    -1,   144,    -1,   277,
-     121,   144,    -1,   142,    -1,    77,    -1,    78,    -1,   143,
-      -1,    77,    -1,    78,    -1,   144,    -1,    77,    -1,    78,
-      -1,   372,    -1,   233,    -1,   233,   351,    -1,   281,    -1,
-     377,    -1,    -1,   136,   284,    -1,   112,   284,    -1,   172,
-      -1,   119,   285,   378,   120,    -1,    -1,   284,    -1,   286,
-     284,    -1,   285,   121,   284,    -1,   285,   121,   286,   284,
-      -1,   287,   135,    -1,   280,   135,    -1,   288,    -1,   287,
-     288,    -1,   118,   280,    -1,   116,   139,   172,   140,   117,
-      -1,   116,   139,   316,   140,   117,    -1,   116,   139,   171,
-     101,   171,   140,   117,    -1,   118,   116,   139,   152,   140,
-     117,    -1,   290,    -1,   239,   290,    -1,   289,   241,    -1,
-     289,   241,   235,    -1,   291,    -1,   235,   291,    -1,   290,
-     236,    -1,    78,   114,   298,   115,    -1,   293,   379,    -1,
-     292,   121,   293,   379,    -1,    -1,   295,   280,   294,   296,
-      -1,   233,   342,    -1,    35,    -1,    37,    -1,    36,    -1,
-      38,    -1,    -1,   296,   297,    -1,   133,   280,   114,   298,
-     115,    -1,   133,   119,   139,   304,   120,    -1,   133,   114,
-     139,   292,   140,   115,   119,   139,   304,   120,   114,   298,
-     115,    -1,   282,    -1,   172,    -1,   298,   121,   282,    -1,
-     298,   121,   172,    -1,    35,   300,    -1,   240,    35,   300,
-      -1,   299,   121,   300,    -1,   301,   296,    -1,   301,   296,
-     136,   282,    -1,   280,    -1,   279,   114,   139,   292,   140,
-     115,    -1,    39,   280,   114,   139,   292,   140,   115,   119,
-     120,    -1,    -1,    39,   280,   114,   139,   292,   140,   115,
-     119,   303,   304,   120,    -1,   305,    -1,   304,   139,   305,
-      -1,   306,   140,   137,    -1,   307,   140,   137,    -1,   223,
-      -1,   225,    -1,   306,   140,   121,   139,   278,    -1,   233,
-     315,    -1,   307,   140,   121,   139,   315,    -1,    -1,   309,
-      -1,   311,    -1,   309,   139,   311,    -1,    -1,   309,    -1,
-     220,    -1,   313,    -1,    67,   114,   146,   115,   137,    -1,
-      -1,     5,    84,   312,   119,   310,   120,    -1,    43,   311,
-      -1,   314,    -1,   329,   181,    -1,   333,   139,   215,   181,
-      -1,   224,   181,    -1,   232,   329,   181,    -1,   235,   329,
-     181,    -1,   239,   329,   181,    -1,   239,   235,   329,   181,
-      -1,   232,   333,   139,   215,   181,    -1,   235,   333,   139,
-     215,   181,    -1,   239,   333,   139,   215,   181,    -1,   239,
-     235,   333,   139,   215,   181,    -1,   324,    -1,   337,    -1,
-     329,    -1,   171,   127,   171,    -1,    -1,    67,   114,   146,
-     115,   318,    -1,    -1,   319,    -1,   320,    -1,   319,   320,
-      -1,    42,   114,   114,   321,   115,   115,    -1,   322,    -1,
-     321,   121,   322,    -1,    -1,   323,    -1,   323,   114,   150,
-     115,    -1,    75,    -1,    77,    -1,    78,    -1,    10,    -1,
-     325,   318,    -1,   326,    -1,   327,   318,    -1,   328,   318,
-      -1,   142,    -1,   114,   325,   115,    -1,   157,   324,    -1,
-     157,   235,   324,    -1,   114,   326,   115,   318,    -1,   325,
-     355,    -1,   114,   326,   115,   355,    -1,   114,   327,   115,
-     356,    -1,   114,   327,   115,    -1,   114,   326,   115,   114,
-     139,   270,   140,   115,    -1,   114,   328,   115,    -1,   330,
-     318,    -1,   331,    -1,   332,   318,    -1,   325,   114,   139,
-     270,   140,   115,    -1,   114,   331,   115,   114,   139,   270,
-     140,   115,    -1,   114,   330,   115,    -1,   157,   329,    -1,
-     157,   235,   329,    -1,   114,   331,   115,    -1,   114,   331,
-     115,   355,    -1,   114,   332,   115,   356,    -1,   114,   332,
-     115,    -1,   334,    -1,   335,    -1,   336,    -1,   325,   114,
-     277,   115,    -1,   114,   335,   115,   114,   139,   270,   140,
-     115,    -1,   114,   334,   115,    -1,   157,   333,    -1,   157,
-     235,   333,    -1,   114,   335,   115,    -1,   114,   335,   115,
-     355,    -1,   114,   336,   115,   356,    -1,   114,   336,   115,
-      -1,   338,   318,    -1,   339,    -1,   340,   318,    -1,   341,
-     318,    -1,   347,    -1,   114,   338,   115,    -1,   157,   337,
-      -1,   157,   235,   337,    -1,   114,   339,   115,   318,    -1,
-     338,   355,    -1,   114,   339,   115,   355,    -1,   114,   340,
-     115,   356,    -1,   114,   340,   115,    -1,   338,   114,   139,
-     270,   140,   115,    -1,   114,   339,   115,   114,   139,   270,
-     140,   115,    -1,   114,   341,   115,    -1,   325,   318,    -1,
-     343,    -1,   344,   318,    -1,   345,   318,    -1,   157,   342,
-      -1,   157,   235,   342,    -1,   114,   343,   115,   318,    -1,
-     325,   361,    -1,   114,   343,   115,   355,    -1,   114,   344,
-     115,   356,    -1,   114,   344,   115,    -1,   325,   114,   139,
-     270,   140,   115,    -1,   114,   343,   115,   114,   139,   270,
-     140,   115,    -1,   114,   345,   115,    -1,   347,   318,    -1,
-     348,    -1,   349,   318,    -1,   350,   318,    -1,    77,    -1,
-      78,    -1,   157,   346,    -1,   157,   235,   346,    -1,   114,
-     348,   115,   318,    -1,   347,   361,    -1,   114,   348,   115,
-     361,    -1,   347,   114,   139,   270,   140,   115,    -1,   114,
-     348,   115,   114,   139,   270,   140,   115,    -1,   352,    -1,
-     353,   318,    -1,   354,   318,    -1,   157,    -1,   157,   235,
-      -1,   157,   351,    -1,   157,   235,   351,    -1,   114,   352,
-     115,   318,    -1,   355,    -1,   114,   352,   115,   355,    -1,
-     114,   353,   115,   356,    -1,   114,   353,   115,    -1,   114,
-     139,   270,   140,   115,    -1,   114,   352,   115,   114,   139,
-     270,   140,   115,    -1,   114,   354,   115,    -1,   116,   117,
-      -1,   116,   117,   356,    -1,   356,    -1,   116,   139,   172,
-     140,   117,    -1,   116,   139,   122,   140,   117,    -1,   356,
-     116,   139,   172,   140,   117,    -1,   356,   116,   139,   122,
-     140,   117,    -1,   358,    -1,   359,   318,    -1,   360,   318,
-      -1,   157,    -1,   157,   235,    -1,   157,   357,    -1,   157,
-     235,   357,    -1,   114,   358,   115,   318,    -1,   361,    -1,
-     114,   358,   115,   361,    -1,   114,   359,   115,   356,    -1,
-     114,   359,   115,    -1,   114,   139,   270,   140,   115,    -1,
-     114,   358,   115,   114,   139,   270,   140,   115,    -1,   114,
-     360,   115,    -1,   362,    -1,   362,   356,    -1,   356,    -1,
-     116,   117,    -1,   116,   139,   235,   122,   140,   117,    -1,
-     116,   139,   235,   140,   117,    -1,   116,   139,   235,   172,
-     140,   117,    -1,   116,   139,     7,   234,   172,   140,   117,
-      -1,   116,   139,   235,     7,   172,   140,   117,    -1,   364,
-      -1,   365,   318,    -1,   366,   318,    -1,   157,    -1,   157,
-     235,    -1,   157,   363,    -1,   157,   235,   363,    -1,   114,
-     364,   115,   318,    -1,   355,    -1,   114,   364,   115,   355,
-      -1,   114,   365,   115,   356,    -1,   114,   365,   115,    -1,
-     114,   364,   115,   114,   139,   270,   140,   115,    -1,   114,
-     366,   115,    -1,   368,    -1,   376,    -1,   235,   376,    -1,
-     369,    -1,   370,    -1,   157,   233,    -1,   235,   157,   233,
-      -1,   157,   377,    -1,   235,   157,   377,    -1,   157,   367,
-      -1,   235,   157,   367,    -1,   116,   117,   233,    -1,   371,
-     233,    -1,   116,   117,   356,   233,    -1,   371,   356,   233,
-      -1,   356,   233,    -1,   116,   117,   369,    -1,   371,   369,
-      -1,   116,   117,   356,   369,    -1,   371,   356,   369,    -1,
-     356,   369,    -1,   116,   139,   235,   122,   140,   117,    -1,
-     116,   139,   235,   172,   140,   117,    -1,   116,   139,   239,
-     172,   140,   117,    -1,   116,   139,   239,   235,   172,   140,
-     117,    -1,   376,    -1,   235,   376,    -1,   373,    -1,   374,
-      -1,   375,    -1,   157,   233,    -1,   235,   157,   233,    -1,
-     157,   377,    -1,   235,   157,   377,    -1,   157,   372,    -1,
-     235,   157,   372,    -1,   116,   117,   233,    -1,   116,   117,
-     356,   233,    -1,   356,   233,    -1,   116,   117,   374,    -1,
-     116,   117,   356,   374,    -1,   356,   374,    -1,   116,   139,
-     269,   140,   117,    -1,   376,   114,   139,   266,   140,   115,
-      -1,   226,   114,   139,   266,   140,   115,    -1,    -1,   121,
-      -1,    -1,   136,   172,    -1
+     228,   140,   137,    -1,   229,   140,   137,    -1,   249,   140,
+     137,    -1,   322,   324,   290,    -1,   231,   121,   325,   322,
+     324,   290,    -1,   245,    -1,   249,    -1,   253,    -1,   296,
+      -1,   245,    -1,   251,    -1,   253,    -1,   296,    -1,   246,
+      -1,   250,    -1,   254,    -1,   297,    -1,   246,    -1,   252,
+      -1,   254,    -1,   297,    -1,    -1,   237,    -1,   238,    -1,
+     237,   238,    -1,   239,    -1,   327,    -1,    10,    -1,    12,
+      -1,    11,    -1,    14,    -1,    70,    -1,    -1,    13,   114,
+     240,   299,   115,    -1,   242,    -1,   237,   242,    -1,   241,
+     237,   242,    -1,   243,    -1,   242,   243,    -1,     5,    -1,
+       7,    -1,     4,    -1,     6,    -1,    74,    -1,     8,    -1,
+       9,    -1,    72,    -1,    16,    -1,    21,    -1,    20,    -1,
+      18,    -1,    19,    -1,    17,    -1,    22,    -1,    23,    -1,
+      15,    -1,    27,    -1,    28,    -1,    29,    -1,    26,    -1,
+      24,    -1,    25,    -1,   246,    -1,   241,   246,    -1,   245,
+     243,    -1,   245,   243,   237,    -1,   245,   243,   246,    -1,
+     247,    -1,   236,   248,   236,    -1,   244,    -1,   237,   244,
+      -1,   247,   238,    -1,   247,   244,    -1,    30,   114,   289,
+     115,    -1,    30,   114,   177,   115,    -1,    81,   114,   289,
+     115,    -1,    81,   114,   177,   115,    -1,   250,    -1,   241,
+     250,    -1,   249,   243,    -1,   249,   243,   237,    -1,   255,
+      -1,   237,   255,    -1,   250,   238,    -1,   252,    -1,   241,
+     252,    -1,   251,   243,    -1,   251,   243,   237,    -1,   256,
+      -1,   237,   256,    -1,   252,   238,    -1,   254,    -1,   241,
+     254,    -1,   253,   243,    -1,   253,   243,   237,    -1,    77,
+      -1,   237,    77,    -1,   254,   238,    -1,   257,    -1,   268,
+      -1,   259,    -1,   270,    -1,   260,   325,   119,   261,   120,
+      -1,    -1,   260,   325,   287,   258,   119,   261,   120,    -1,
+     260,   325,   114,   305,   115,   119,   261,   120,    -1,   259,
+      -1,   260,   325,   287,    -1,   260,   325,   298,    -1,    33,
+      -1,    34,    -1,    -1,   261,   262,    -1,   263,   137,    -1,
+      43,   263,   137,    -1,   234,   264,   137,    -1,    43,   234,
+     264,   137,    -1,   379,    -1,   379,   287,    -1,   263,   121,
+     287,    -1,   263,   121,    -1,   265,    -1,   264,   121,   325,
+     265,    -1,    -1,   267,    -1,   331,   266,    -1,   344,   266,
+      -1,   370,    -1,    -1,   267,    -1,   135,   171,    -1,    32,
+     325,   119,   271,   385,   120,    -1,    -1,    32,   325,   287,
+     269,   119,   271,   385,   120,    -1,   270,    -1,    32,   325,
+     287,    -1,   287,   272,    -1,   271,   121,   287,   272,    -1,
+      -1,   136,   171,    -1,    -1,   274,    -1,   276,    -1,   275,
+      -1,   275,   140,   121,   139,   276,    -1,   276,   140,   121,
+     139,   101,    -1,   275,   140,   121,   139,   101,    -1,   280,
+      -1,   276,   140,   121,   139,   280,    -1,   275,   140,   121,
+     139,   280,    -1,   275,   140,   121,   139,   276,   140,   121,
+     139,   280,    -1,   281,    -1,   276,   140,   121,   139,   281,
+      -1,    -1,   278,    -1,   279,    -1,   279,   140,   121,   139,
+     101,    -1,   283,    -1,   282,    -1,   279,   140,   121,   139,
+     283,    -1,   279,   140,   121,   139,   282,    -1,   282,    -1,
+     375,   285,   386,    -1,   383,   285,   386,    -1,   237,   383,
+     285,   386,    -1,   225,    -1,   283,    -1,   375,    -1,   383,
+      -1,   237,   383,    -1,   384,    -1,   233,   349,   386,    -1,
+     233,   353,   386,    -1,   233,   386,    -1,   233,   364,   386,
+      -1,   144,    -1,   284,   121,   144,    -1,   142,    -1,    77,
+      -1,    78,    -1,   143,    -1,    77,    -1,    78,    -1,   144,
+      -1,    77,    -1,    78,    -1,   379,    -1,   234,    -1,   234,
+     358,    -1,   288,    -1,   384,    -1,    -1,   136,   291,    -1,
+     112,   291,    -1,   172,    -1,   119,   292,   385,   120,    -1,
+      -1,   291,    -1,   293,   291,    -1,   292,   121,   291,    -1,
+     292,   121,   293,   291,    -1,   294,   135,    -1,   287,   135,
+      -1,   295,    -1,   294,   295,    -1,   118,   287,    -1,   116,
+     139,   172,   140,   117,    -1,   116,   139,   323,   140,   117,
+      -1,   116,   139,   171,   101,   171,   140,   117,    -1,   118,
+     116,   139,   152,   140,   117,    -1,   297,    -1,   241,   297,
+      -1,   296,   243,    -1,   296,   243,   237,    -1,   298,    -1,
+     237,   298,    -1,   297,   238,    -1,    78,   114,   305,   115,
+      -1,   300,   386,    -1,   299,   121,   300,   386,    -1,    -1,
+     302,   287,   301,   303,    -1,   234,   349,    -1,    35,    -1,
+      37,    -1,    36,    -1,    38,    -1,    -1,   303,   304,    -1,
+     133,   287,   114,   305,   115,    -1,   133,   119,   139,   311,
+     120,    -1,   133,   114,   139,   299,   140,   115,   119,   139,
+     311,   120,   114,   305,   115,    -1,   289,    -1,   172,    -1,
+     305,   121,   289,    -1,   305,   121,   172,    -1,    35,   307,
+      -1,   242,    35,   307,    -1,   306,   121,   307,    -1,   308,
+     303,    -1,   308,   303,   136,   289,    -1,   287,    -1,   286,
+     114,   139,   299,   140,   115,    -1,    39,   287,   114,   139,
+     299,   140,   115,   119,   120,    -1,    -1,    39,   287,   114,
+     139,   299,   140,   115,   119,   310,   311,   120,    -1,   312,
+      -1,   311,   139,   312,    -1,   313,   140,   137,    -1,   314,
+     140,   137,    -1,   223,    -1,   225,    -1,   313,   140,   121,
+     139,   285,    -1,   234,   322,    -1,   314,   140,   121,   139,
+     322,    -1,    -1,   316,    -1,   318,    -1,   316,   139,   318,
+      -1,    -1,   316,    -1,   220,    -1,   320,    -1,    67,   114,
+     146,   115,   137,    -1,    -1,     5,    84,   319,   119,   317,
+     120,    -1,    43,   318,    -1,   321,    -1,   336,   181,    -1,
+     340,   139,   215,   181,    -1,   224,   181,    -1,   232,   336,
+     181,    -1,   237,   336,   181,    -1,   241,   336,   181,    -1,
+     241,   237,   336,   181,    -1,   232,   340,   139,   215,   181,
+      -1,   237,   340,   139,   215,   181,    -1,   241,   340,   139,
+     215,   181,    -1,   241,   237,   340,   139,   215,   181,    -1,
+     331,    -1,   344,    -1,   336,    -1,   171,   127,   171,    -1,
+      -1,    67,   114,   146,   115,   325,    -1,    -1,   326,    -1,
+     327,    -1,   326,   327,    -1,    42,   114,   114,   328,   115,
+     115,    -1,   329,    -1,   328,   121,   329,    -1,    -1,   330,
+      -1,   330,   114,   150,   115,    -1,    75,    -1,    77,    -1,
+      78,    -1,    10,    -1,   332,   325,    -1,   333,    -1,   334,
+     325,    -1,   335,   325,    -1,   142,    -1,   114,   332,   115,
+      -1,   157,   331,    -1,   157,   237,   331,    -1,   114,   333,
+     115,   325,    -1,   332,   362,    -1,   114,   333,   115,   362,
+      -1,   114,   334,   115,   363,    -1,   114,   334,   115,    -1,
+     114,   333,   115,   114,   139,   277,   140,   115,    -1,   114,
+     335,   115,    -1,   337,   325,    -1,   338,    -1,   339,   325,
+      -1,   332,   114,   139,   277,   140,   115,    -1,   114,   338,
+     115,   114,   139,   277,   140,   115,    -1,   114,   337,   115,
+      -1,   157,   336,    -1,   157,   237,   336,    -1,   114,   338,
+     115,    -1,   114,   338,   115,   362,    -1,   114,   339,   115,
+     363,    -1,   114,   339,   115,    -1,   341,    -1,   342,    -1,
+     343,    -1,   332,   114,   284,   115,    -1,   114,   342,   115,
+     114,   139,   277,   140,   115,    -1,   114,   341,   115,    -1,
+     157,   340,    -1,   157,   237,   340,    -1,   114,   342,   115,
+      -1,   114,   342,   115,   362,    -1,   114,   343,   115,   363,
+      -1,   114,   343,   115,    -1,   345,   325,    -1,   346,    -1,
+     347,   325,    -1,   348,   325,    -1,   354,    -1,   114,   345,
+     115,    -1,   157,   344,    -1,   157,   237,   344,    -1,   114,
+     346,   115,   325,    -1,   345,   362,    -1,   114,   346,   115,
+     362,    -1,   114,   347,   115,   363,    -1,   114,   347,   115,
+      -1,   345,   114,   139,   277,   140,   115,    -1,   114,   346,
+     115,   114,   139,   277,   140,   115,    -1,   114,   348,   115,
+      -1,   332,   325,    -1,   350,    -1,   351,   325,    -1,   352,
+     325,    -1,   157,   349,    -1,   157,   237,   349,    -1,   114,
+     350,   115,   325,    -1,   332,   368,    -1,   114,   350,   115,
+     362,    -1,   114,   351,   115,   363,    -1,   114,   351,   115,
+      -1,   332,   114,   139,   277,   140,   115,    -1,   114,   350,
+     115,   114,   139,   277,   140,   115,    -1,   114,   352,   115,
+      -1,   354,   325,    -1,   355,    -1,   356,   325,    -1,   357,
+     325,    -1,    77,    -1,    78,    -1,   157,   353,    -1,   157,
+     237,   353,    -1,   114,   355,   115,   325,    -1,   354,   368,
+      -1,   114,   355,   115,   368,    -1,   354,   114,   139,   277,
+     140,   115,    -1,   114,   355,   115,   114,   139,   277,   140,
+     115,    -1,   359,    -1,   360,   325,    -1,   361,   325,    -1,
+     157,    -1,   157,   237,    -1,   157,   358,    -1,   157,   237,
+     358,    -1,   114,   359,   115,   325,    -1,   362,    -1,   114,
+     359,   115,   362,    -1,   114,   360,   115,   363,    -1,   114,
+     360,   115,    -1,   114,   139,   277,   140,   115,    -1,   114,
+     359,   115,   114,   139,   277,   140,   115,    -1,   114,   361,
+     115,    -1,   116,   117,    -1,   116,   117,   363,    -1,   363,
+      -1,   116,   139,   172,   140,   117,    -1,   116,   139,   122,
+     140,   117,    -1,   363,   116,   139,   172,   140,   117,    -1,
+     363,   116,   139,   122,   140,   117,    -1,   365,    -1,   366,
+     325,    -1,   367,   325,    -1,   157,    -1,   157,   237,    -1,
+     157,   364,    -1,   157,   237,   364,    -1,   114,   365,   115,
+     325,    -1,   368,    -1,   114,   365,   115,   368,    -1,   114,
+     366,   115,   363,    -1,   114,   366,   115,    -1,   114,   139,
+     277,   140,   115,    -1,   114,   365,   115,   114,   139,   277,
+     140,   115,    -1,   114,   367,   115,    -1,   369,    -1,   369,
+     363,    -1,   363,    -1,   116,   117,    -1,   116,   139,   237,
+     122,   140,   117,    -1,   116,   139,   237,   140,   117,    -1,
+     116,   139,   237,   172,   140,   117,    -1,   116,   139,     7,
+     236,   172,   140,   117,    -1,   116,   139,   237,     7,   172,
+     140,   117,    -1,   371,    -1,   372,   325,    -1,   373,   325,
+      -1,   157,    -1,   157,   237,    -1,   157,   370,    -1,   157,
+     237,   370,    -1,   114,   371,   115,   325,    -1,   362,    -1,
+     114,   371,   115,   362,    -1,   114,   372,   115,   363,    -1,
+     114,   372,   115,    -1,   114,   371,   115,   114,   139,   277,
+     140,   115,    -1,   114,   373,   115,    -1,   375,    -1,   383,
+      -1,   237,   383,    -1,   376,    -1,   377,    -1,   157,   235,
+      -1,   237,   157,   235,    -1,   157,   384,    -1,   237,   157,
+     384,    -1,   157,   374,    -1,   237,   157,   374,    -1,   116,
+     117,   235,    -1,   378,   235,    -1,   116,   117,   363,   235,
+      -1,   378,   363,   235,    -1,   363,   235,    -1,   116,   117,
+     376,    -1,   378,   376,    -1,   116,   117,   363,   376,    -1,
+     378,   363,   376,    -1,   363,   376,    -1,   116,   139,   237,
+     122,   140,   117,    -1,   116,   139,   237,   172,   140,   117,
+      -1,   116,   139,   241,   172,   140,   117,    -1,   116,   139,
+     241,   237,   172,   140,   117,    -1,   383,    -1,   237,   383,
+      -1,   380,    -1,   381,    -1,   382,    -1,   157,   234,    -1,
+     237,   157,   234,    -1,   157,   384,    -1,   237,   157,   384,
+      -1,   157,   379,    -1,   237,   157,   379,    -1,   116,   117,
+     234,    -1,   116,   117,   363,   234,    -1,   363,   234,    -1,
+     116,   117,   381,    -1,   116,   117,   363,   381,    -1,   363,
+     381,    -1,   116,   139,   276,   140,   117,    -1,   383,   114,
+     139,   273,   140,   115,    -1,   226,   114,   139,   273,   140,
+     115,    -1,    -1,   121,    -1,    -1,   136,   172,    -1
 };
 
@@ -1074,59 +1080,61 @@
      892,   897,   899,   904,   906,   910,   913,   917,   920,   924,
      926,   928,   930,   935,   937,   939,   944,   946,   948,   950,
-     952,   957,   959,   961,   963,   968,   980,   981,   986,   988,
-     993,   997,   999,  1001,  1003,  1005,  1011,  1012,  1018,  1019,
-    1023,  1024,  1029,  1031,  1037,  1038,  1040,  1046,  1051,  1061,
-    1063,  1067,  1068,  1073,  1075,  1079,  1080,  1084,  1086,  1090,
-    1091,  1095,  1096,  1100,  1101,  1116,  1117,  1118,  1119,  1120,
-    1124,  1129,  1136,  1146,  1151,  1156,  1164,  1169,  1174,  1179,
-    1184,  1214,  1219,  1226,  1228,  1235,  1240,  1245,  1256,  1261,
-    1266,  1271,  1276,  1285,  1290,  1320,  1324,  1325,  1326,  1332,
-    1337,  1345,  1346,  1347,  1348,  1352,  1353,  1354,  1355,  1360,
-    1361,  1370,  1371,  1376,  1377,  1381,  1383,  1385,  1387,  1389,
-    1392,  1391,  1403,  1404,  1406,  1416,  1417,  1422,  1424,  1426,
-    1428,  1430,  1433,  1435,  1438,  1443,  1445,  1447,  1449,  1451,
-    1453,  1455,  1457,  1459,  1461,  1463,  1465,  1467,  1469,  1471,
-    1477,  1478,  1480,  1482,  1484,  1489,  1490,  1496,  1497,  1499,
-    1501,  1506,  1508,  1510,  1512,  1517,  1518,  1520,  1522,  1527,
-    1528,  1530,  1535,  1536,  1538,  1540,  1545,  1547,  1549,  1554,
-    1555,  1559,  1561,  1567,  1566,  1570,  1572,  1577,  1579,  1585,
-    1586,  1591,  1592,  1597,  1600,  1608,  1609,  1611,  1613,  1618,
-    1619,  1625,  1626,  1628,  1631,  1634,  1639,  1640,  1645,  1650,
-    1652,  1658,  1657,  1664,  1666,  1672,  1673,  1681,  1682,  1686,
-    1687,  1688,  1690,  1692,  1699,  1700,  1702,  1704,  1709,  1710,
-    1716,  1717,  1721,  1722,  1727,  1728,  1729,  1731,  1739,  1740,
-    1742,  1745,  1747,  1751,  1752,  1753,  1755,  1757,  1761,  1766,
-    1774,  1776,  1785,  1787,  1792,  1793,  1794,  1798,  1799,  1800,
-    1804,  1805,  1806,  1810,  1811,  1812,  1817,  1818,  1823,  1824,
-    1826,  1831,  1832,  1837,  1838,  1839,  1840,  1841,  1856,  1857,
-    1862,  1863,  1869,  1871,  1874,  1876,  1878,  1901,  1902,  1904,
-    1906,  1911,  1912,  1914,  1919,  1924,  1925,  1931,  1930,  1934,
-    1938,  1940,  1942,  1944,  1950,  1951,  1956,  1961,  1963,  1968,
-    1970,  1971,  1973,  1978,  1980,  1982,  1987,  1989,  1994,  1999,
-    2007,  2013,  2012,  2026,  2027,  2032,  2033,  2037,  2042,  2047,
-    2055,  2060,  2071,  2072,  2077,  2078,  2084,  2085,  2089,  2090,
-    2091,  2096,  2095,  2106,  2114,  2120,  2126,  2135,  2141,  2147,
-    2153,  2159,  2167,  2173,  2181,  2187,  2196,  2197,  2198,  2202,
-    2208,  2209,  2219,  2220,  2224,  2225,  2230,  2235,  2236,  2242,
-    2243,  2245,  2250,  2251,  2252,  2253,  2288,  2290,  2291,  2293,
-    2298,  2303,  2308,  2310,  2312,  2317,  2319,  2321,  2323,  2328,
-    2330,  2339,  2341,  2342,  2347,  2349,  2351,  2356,  2358,  2360,
-    2365,  2367,  2369,  2381,  2382,  2383,  2387,  2389,  2391,  2396,
-    2398,  2400,  2405,  2407,  2409,  2424,  2426,  2427,  2429,  2434,
-    2435,  2440,  2442,  2444,  2449,  2451,  2453,  2455,  2460,  2462,
-    2464,  2474,  2476,  2477,  2479,  2484,  2486,  2488,  2493,  2495,
-    2497,  2499,  2504,  2506,  2508,  2521,  2523,  2524,  2526,  2531,
-    2536,  2544,  2546,  2548,  2553,  2555,  2560,  2562,  2579,  2580,
-    2582,  2587,  2589,  2591,  2593,  2595,  2600,  2601,  2603,  2605,
-    2610,  2612,  2614,  2620,  2622,  2624,  2628,  2630,  2632,  2634,
-    2668,  2669,  2671,  2676,  2678,  2680,  2682,  2684,  2689,  2690,
-    2692,  2694,  2699,  2701,  2703,  2709,  2710,  2712,  2721,  2724,
-    2726,  2729,  2731,  2733,  2747,  2748,  2750,  2755,  2757,  2759,
-    2761,  2763,  2768,  2769,  2771,  2773,  2778,  2780,  2788,  2789,
-    2790,  2795,  2796,  2800,  2802,  2804,  2806,  2808,  2810,  2817,
-    2819,  2821,  2823,  2825,  2828,  2830,  2832,  2834,  2836,  2841,
-    2843,  2845,  2850,  2876,  2877,  2879,  2883,  2884,  2888,  2890,
-    2892,  2894,  2896,  2898,  2905,  2907,  2909,  2911,  2913,  2915,
-    2920,  2927,  2929,  2947,  2949,  2954,  2955
+     952,   957,   959,   961,   963,   968,   976,   977,   982,   984,
+     989,   993,   995,   997,   999,  1001,  1007,  1008,  1014,  1015,
+    1019,  1020,  1025,  1027,  1033,  1034,  1036,  1042,  1047,  1057,
+    1059,  1063,  1064,  1069,  1071,  1075,  1076,  1080,  1082,  1086,
+    1087,  1091,  1092,  1096,  1097,  1112,  1113,  1114,  1115,  1116,
+    1120,  1125,  1132,  1142,  1147,  1152,  1160,  1165,  1170,  1175,
+    1180,  1210,  1215,  1222,  1224,  1231,  1236,  1241,  1252,  1257,
+    1262,  1267,  1272,  1281,  1286,  1316,  1320,  1321,  1322,  1328,
+    1333,  1341,  1342,  1343,  1344,  1353,  1354,  1355,  1356,  1360,
+    1361,  1362,  1363,  1372,  1373,  1374,  1375,  1380,  1381,  1390,
+    1391,  1396,  1397,  1401,  1403,  1405,  1407,  1409,  1412,  1411,
+    1423,  1424,  1426,  1436,  1437,  1442,  1444,  1446,  1448,  1450,
+    1453,  1455,  1457,  1462,  1464,  1466,  1468,  1470,  1472,  1474,
+    1476,  1478,  1480,  1482,  1484,  1486,  1488,  1490,  1496,  1497,
+    1499,  1501,  1503,  1508,  1509,  1515,  1516,  1518,  1520,  1525,
+    1527,  1529,  1531,  1536,  1537,  1539,  1541,  1546,  1547,  1549,
+    1554,  1555,  1557,  1559,  1564,  1565,  1567,  1572,  1573,  1575,
+    1577,  1582,  1584,  1586,  1591,  1592,  1596,  1597,  1601,  1604,
+    1603,  1607,  1609,  1613,  1618,  1623,  1625,  1631,  1632,  1637,
+    1638,  1643,  1646,  1654,  1655,  1657,  1659,  1664,  1665,  1671,
+    1672,  1674,  1677,  1680,  1685,  1686,  1691,  1696,  1699,  1698,
+    1702,  1706,  1714,  1716,  1722,  1723,  1731,  1732,  1736,  1737,
+    1738,  1740,  1742,  1749,  1750,  1752,  1754,  1759,  1760,  1766,
+    1767,  1771,  1772,  1777,  1778,  1779,  1781,  1789,  1790,  1792,
+    1795,  1797,  1801,  1802,  1803,  1805,  1807,  1812,  1817,  1825,
+    1827,  1836,  1838,  1843,  1844,  1845,  1849,  1850,  1851,  1855,
+    1856,  1857,  1861,  1862,  1863,  1868,  1869,  1874,  1875,  1877,
+    1882,  1883,  1888,  1889,  1890,  1891,  1892,  1907,  1908,  1913,
+    1914,  1920,  1922,  1925,  1927,  1929,  1952,  1953,  1955,  1957,
+    1962,  1963,  1965,  1970,  1975,  1976,  1982,  1981,  1985,  1989,
+    1991,  1993,  1995,  2001,  2002,  2007,  2012,  2014,  2019,  2021,
+    2022,  2024,  2029,  2031,  2033,  2038,  2040,  2045,  2050,  2058,
+    2064,  2063,  2077,  2078,  2083,  2084,  2088,  2093,  2098,  2106,
+    2111,  2122,  2123,  2128,  2129,  2135,  2136,  2140,  2141,  2142,
+    2147,  2146,  2157,  2165,  2171,  2177,  2186,  2192,  2198,  2204,
+    2210,  2218,  2224,  2232,  2238,  2247,  2248,  2249,  2253,  2259,
+    2260,  2270,  2271,  2275,  2276,  2281,  2286,  2287,  2293,  2294,
+    2296,  2301,  2302,  2303,  2304,  2339,  2341,  2342,  2344,  2349,
+    2354,  2359,  2361,  2363,  2368,  2370,  2372,  2374,  2379,  2381,
+    2390,  2392,  2393,  2398,  2400,  2402,  2407,  2409,  2411,  2416,
+    2418,  2420,  2432,  2433,  2434,  2438,  2440,  2442,  2447,  2449,
+    2451,  2456,  2458,  2460,  2475,  2477,  2478,  2480,  2485,  2486,
+    2491,  2493,  2495,  2500,  2502,  2504,  2506,  2511,  2513,  2515,
+    2525,  2527,  2528,  2530,  2535,  2537,  2539,  2544,  2546,  2548,
+    2550,  2555,  2557,  2559,  2572,  2574,  2575,  2577,  2582,  2587,
+    2595,  2597,  2599,  2604,  2606,  2611,  2613,  2630,  2631,  2633,
+    2638,  2640,  2642,  2644,  2646,  2651,  2652,  2654,  2656,  2661,
+    2663,  2665,  2671,  2673,  2675,  2679,  2681,  2683,  2685,  2719,
+    2720,  2722,  2727,  2729,  2731,  2733,  2735,  2740,  2741,  2743,
+    2745,  2750,  2752,  2754,  2760,  2761,  2763,  2772,  2775,  2777,
+    2780,  2782,  2784,  2798,  2799,  2801,  2806,  2808,  2810,  2812,
+    2814,  2819,  2820,  2822,  2824,  2829,  2831,  2839,  2840,  2841,
+    2846,  2847,  2852,  2854,  2856,  2858,  2860,  2862,  2869,  2871,
+    2873,  2875,  2877,  2880,  2882,  2884,  2886,  2888,  2893,  2895,
+    2897,  2902,  2928,  2929,  2931,  2935,  2936,  2940,  2942,  2944,
+    2946,  2948,  2950,  2957,  2959,  2961,  2963,  2965,  2967,  2972,
+    2979,  2981,  2999,  3001,  3006,  3007
 };
 #endif
@@ -1189,29 +1197,32 @@
   "cfa_function_return", "cfa_typedef_declaration", "typedef_declaration",
   "typedef_expression", "c_declaration", "declaring_list",
-  "declaration_specifier", "type_specifier", "type_qualifier_list_opt",
+  "declaration_specifier", "declaration_specifier_nobody",
+  "type_specifier", "type_specifier_nobody", "type_qualifier_list_opt",
   "type_qualifier_list", "type_qualifier", "type_qualifier_name", "$@1",
   "declaration_qualifier_list", "storage_class_list", "storage_class",
   "basic_type_name", "basic_declaration_specifier", "basic_type_specifier",
   "direct_type_name", "indirect_type_name", "sue_declaration_specifier",
-  "sue_type_specifier", "typedef_declaration_specifier",
-  "typedef_type_specifier", "elaborated_type", "aggregate_type", "$@2",
-  "aggregate_key", "field_declaration_list", "field_declaration",
+  "sue_type_specifier", "sue_declaration_specifier_nobody",
+  "sue_type_specifier_nobody", "typedef_declaration_specifier",
+  "typedef_type_specifier", "elaborated_type", "elaborated_type_nobody",
+  "aggregate_type", "$@2", "aggregate_type_nobody", "aggregate_key",
+  "field_declaration_list", "field_declaration",
   "cfa_field_declaring_list", "field_declaring_list", "field_declarator",
   "bit_subrange_size_opt", "bit_subrange_size", "enum_type", "$@3",
-  "enumerator_list", "enumerator_value_opt", "cfa_parameter_type_list_opt",
-  "cfa_parameter_type_list", "cfa_parameter_list",
-  "cfa_abstract_parameter_list", "parameter_type_list_opt",
-  "parameter_type_list", "parameter_list", "cfa_parameter_declaration",
-  "cfa_abstract_parameter_declaration", "parameter_declaration",
-  "abstract_parameter_declaration", "identifier_list",
-  "identifier_or_type_name", "no_01_identifier_or_type_name",
-  "no_attr_identifier_or_type_name", "type_name_no_function", "type_name",
-  "initializer_opt", "initializer", "initializer_list", "designation",
-  "designator_list", "designator", "typegen_declaration_specifier",
-  "typegen_type_specifier", "typegen_name", "type_parameter_list",
-  "type_parameter", "$@4", "type_class", "assertion_list_opt", "assertion",
-  "type_name_list", "type_declaring_list", "type_declarator",
-  "type_declarator_name", "trait_specifier", "$@5",
-  "trait_declaration_list", "trait_declaration",
+  "enum_type_nobody", "enumerator_list", "enumerator_value_opt",
+  "cfa_parameter_type_list_opt", "cfa_parameter_type_list",
+  "cfa_parameter_list", "cfa_abstract_parameter_list",
+  "parameter_type_list_opt", "parameter_type_list", "parameter_list",
+  "cfa_parameter_declaration", "cfa_abstract_parameter_declaration",
+  "parameter_declaration", "abstract_parameter_declaration",
+  "identifier_list", "identifier_or_type_name",
+  "no_01_identifier_or_type_name", "no_attr_identifier_or_type_name",
+  "type_name_no_function", "type_name", "initializer_opt", "initializer",
+  "initializer_list", "designation", "designator_list", "designator",
+  "typegen_declaration_specifier", "typegen_type_specifier",
+  "typegen_name", "type_parameter_list", "type_parameter", "$@4",
+  "type_class", "assertion_list_opt", "assertion", "type_name_list",
+  "type_declaring_list", "type_declarator", "type_declarator_name",
+  "trait_specifier", "$@5", "trait_declaration_list", "trait_declaration",
   "cfa_trait_declaring_list", "trait_declaring_list", "translation_unit",
   "external_definition_list", "external_definition_list_opt",
@@ -1302,50 +1313,52 @@
      228,   228,   228,   229,   229,   230,   230,   230,   230,   231,
      231,   232,   232,   232,   232,   233,   233,   233,   233,   234,
-     234,   235,   235,   236,   236,   237,   237,   237,   237,   237,
-     238,   237,   239,   239,   239,   240,   240,   241,   241,   241,
-     241,   241,   241,   241,   241,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     243,   243,   243,   243,   243,   244,   244,   245,   245,   245,
-     245,   246,   246,   246,   246,   247,   247,   247,   247,   248,
-     248,   248,   249,   249,   249,   249,   250,   250,   250,   251,
-     251,   252,   252,   253,   252,   252,   252,   254,   254,   255,
-     255,   256,   256,   256,   256,   257,   257,   257,   257,   258,
-     258,   259,   259,   259,   259,   259,   260,   260,   261,   262,
-     262,   263,   262,   264,   264,   265,   265,   266,   266,   267,
-     267,   267,   267,   267,   268,   268,   268,   268,   269,   269,
-     270,   270,   271,   271,   272,   272,   272,   272,   273,   273,
-     273,   273,   273,   274,   274,   274,   274,   274,   275,   275,
-     276,   276,   277,   277,   278,   278,   278,   279,   279,   279,
-     280,   280,   280,   281,   281,   281,   282,   282,   283,   283,
-     283,   284,   284,   285,   285,   285,   285,   285,   286,   286,
-     287,   287,   288,   288,   288,   288,   288,   289,   289,   289,
-     289,   290,   290,   290,   291,   292,   292,   294,   293,   293,
-     295,   295,   295,   295,   296,   296,   297,   297,   297,   298,
-     298,   298,   298,   299,   299,   299,   300,   300,   301,   301,
-     302,   303,   302,   304,   304,   305,   305,   306,   306,   306,
-     307,   307,   308,   308,   309,   309,   310,   310,   311,   311,
-     311,   312,   311,   311,   313,   313,   313,   314,   314,   314,
-     314,   314,   314,   314,   314,   314,   315,   315,   315,   316,
-     317,   317,   318,   318,   319,   319,   320,   321,   321,   322,
-     322,   322,   323,   323,   323,   323,   324,   324,   324,   324,
-     325,   325,   326,   326,   326,   327,   327,   327,   327,   328,
-     328,   329,   329,   329,   330,   330,   330,   331,   331,   331,
-     332,   332,   332,   333,   333,   333,   334,   334,   334,   335,
-     335,   335,   336,   336,   336,   337,   337,   337,   337,   338,
-     338,   339,   339,   339,   340,   340,   340,   340,   341,   341,
-     341,   342,   342,   342,   342,   343,   343,   343,   344,   344,
-     344,   344,   345,   345,   345,   346,   346,   346,   346,   347,
-     347,   348,   348,   348,   349,   349,   350,   350,   351,   351,
-     351,   352,   352,   352,   352,   352,   353,   353,   353,   353,
-     354,   354,   354,   355,   355,   355,   356,   356,   356,   356,
-     357,   357,   357,   358,   358,   358,   358,   358,   359,   359,
-     359,   359,   360,   360,   360,   361,   361,   361,   362,   362,
-     362,   362,   362,   362,   363,   363,   363,   364,   364,   364,
-     364,   364,   365,   365,   365,   365,   366,   366,   367,   367,
-     367,   368,   368,   369,   369,   369,   369,   369,   369,   370,
-     370,   370,   370,   370,   370,   370,   370,   370,   370,   371,
-     371,   371,   371,   372,   372,   372,   373,   373,   374,   374,
-     374,   374,   374,   374,   375,   375,   375,   375,   375,   375,
-     376,   377,   377,   378,   378,   379,   379
+     234,   234,   234,   235,   235,   235,   235,   236,   236,   237,
+     237,   238,   238,   239,   239,   239,   239,   239,   240,   239,
+     241,   241,   241,   242,   242,   243,   243,   243,   243,   243,
+     243,   243,   243,   244,   244,   244,   244,   244,   244,   244,
+     244,   244,   244,   244,   244,   244,   244,   244,   245,   245,
+     245,   245,   245,   246,   246,   247,   247,   247,   247,   248,
+     248,   248,   248,   249,   249,   249,   249,   250,   250,   250,
+     251,   251,   251,   251,   252,   252,   252,   253,   253,   253,
+     253,   254,   254,   254,   255,   255,   256,   256,   257,   258,
+     257,   257,   257,   259,   259,   260,   260,   261,   261,   262,
+     262,   262,   262,   263,   263,   263,   263,   264,   264,   265,
+     265,   265,   265,   265,   266,   266,   267,   268,   269,   268,
+     268,   270,   271,   271,   272,   272,   273,   273,   274,   274,
+     274,   274,   274,   275,   275,   275,   275,   276,   276,   277,
+     277,   278,   278,   279,   279,   279,   279,   280,   280,   280,
+     280,   280,   281,   281,   281,   281,   281,   282,   282,   283,
+     283,   284,   284,   285,   285,   285,   286,   286,   286,   287,
+     287,   287,   288,   288,   288,   289,   289,   290,   290,   290,
+     291,   291,   292,   292,   292,   292,   292,   293,   293,   294,
+     294,   295,   295,   295,   295,   295,   296,   296,   296,   296,
+     297,   297,   297,   298,   299,   299,   301,   300,   300,   302,
+     302,   302,   302,   303,   303,   304,   304,   304,   305,   305,
+     305,   305,   306,   306,   306,   307,   307,   308,   308,   309,
+     310,   309,   311,   311,   312,   312,   313,   313,   313,   314,
+     314,   315,   315,   316,   316,   317,   317,   318,   318,   318,
+     319,   318,   318,   320,   320,   320,   321,   321,   321,   321,
+     321,   321,   321,   321,   321,   322,   322,   322,   323,   324,
+     324,   325,   325,   326,   326,   327,   328,   328,   329,   329,
+     329,   330,   330,   330,   330,   331,   331,   331,   331,   332,
+     332,   333,   333,   333,   334,   334,   334,   334,   335,   335,
+     336,   336,   336,   337,   337,   337,   338,   338,   338,   339,
+     339,   339,   340,   340,   340,   341,   341,   341,   342,   342,
+     342,   343,   343,   343,   344,   344,   344,   344,   345,   345,
+     346,   346,   346,   347,   347,   347,   347,   348,   348,   348,
+     349,   349,   349,   349,   350,   350,   350,   351,   351,   351,
+     351,   352,   352,   352,   353,   353,   353,   353,   354,   354,
+     355,   355,   355,   356,   356,   357,   357,   358,   358,   358,
+     359,   359,   359,   359,   359,   360,   360,   360,   360,   361,
+     361,   361,   362,   362,   362,   363,   363,   363,   363,   364,
+     364,   364,   365,   365,   365,   365,   365,   366,   366,   366,
+     366,   367,   367,   367,   368,   368,   368,   369,   369,   369,
+     369,   369,   369,   370,   370,   370,   371,   371,   371,   371,
+     371,   372,   372,   372,   372,   373,   373,   374,   374,   374,
+     375,   375,   376,   376,   376,   376,   376,   376,   377,   377,
+     377,   377,   377,   377,   377,   377,   377,   377,   378,   378,
+     378,   378,   379,   379,   379,   380,   380,   381,   381,   381,
+     381,   381,   381,   382,   382,   382,   382,   382,   382,   383,
+     384,   384,   385,   385,   386,   386
 };
 
@@ -1382,51 +1395,53 @@
        5,     7,     7,     5,     9,     2,     2,     5,     3,     5,
        4,     3,     4,     4,     7,     4,     3,     3,     3,     3,
-       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,
+       6,     1,     1,     1,     1,     1,     1,     1,     1,     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,     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,     5,     3,     0,     7,     8,     3,     1,     1,     0,
-       2,     2,     3,     3,     4,     1,     2,     3,     2,     1,
-       4,     0,     1,     2,     2,     1,     0,     1,     2,     6,
-       3,     0,     8,     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,
-       2,     3,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     1,     1,     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,     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,
-       5,     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,     4,     2,     4,     4,     3,     8,
-       3,     2,     1,     2,     6,     8,     3,     2,     3,     3,
-       4,     4,     3,     1,     1,     1,     4,     8,     3,     2,
-       3,     3,     4,     4,     3,     2,     1,     2,     2,     1,
-       3,     2,     3,     4,     2,     4,     4,     3,     6,     8,
-       3,     2,     1,     2,     2,     2,     3,     4,     2,     4,
-       4,     3,     6,     8,     3,     2,     1,     2,     2,     1,
-       1,     2,     3,     4,     2,     4,     6,     8,     1,     2,
-       2,     1,     2,     2,     3,     4,     1,     4,     4,     3,
-       5,     8,     3,     2,     3,     1,     5,     5,     6,     6,
-       1,     2,     2,     1,     2,     2,     3,     4,     1,     4,
-       4,     3,     5,     8,     3,     1,     2,     1,     2,     6,
-       5,     6,     7,     7,     1,     2,     2,     1,     2,     2,
-       3,     4,     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,     6,     6,     0,     1,     0,     2
+       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,     2,     2,
+       3,     1,     2,     2,     1,     1,     1,     1,     5,     0,
+       7,     8,     1,     3,     3,     1,     1,     0,     2,     2,
+       3,     3,     4,     1,     2,     3,     2,     1,     4,     0,
+       1,     2,     2,     1,     0,     1,     2,     6,     0,     8,
+       1,     3,     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,     2,
+       3,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     2,     1,     1,     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,     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,     5,
+       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,     4,     2,     4,     4,     3,     8,     3,
+       2,     1,     2,     6,     8,     3,     2,     3,     3,     4,
+       4,     3,     1,     1,     1,     4,     8,     3,     2,     3,
+       3,     4,     4,     3,     2,     1,     2,     2,     1,     3,
+       2,     3,     4,     2,     4,     4,     3,     6,     8,     3,
+       2,     1,     2,     2,     2,     3,     4,     2,     4,     4,
+       3,     6,     8,     3,     2,     1,     2,     2,     1,     1,
+       2,     3,     4,     2,     4,     6,     8,     1,     2,     2,
+       1,     2,     2,     3,     4,     1,     4,     4,     3,     5,
+       8,     3,     2,     3,     1,     5,     5,     6,     6,     1,
+       2,     2,     1,     2,     2,     3,     4,     1,     4,     4,
+       3,     5,     8,     3,     1,     2,     1,     2,     6,     5,
+       6,     7,     7,     1,     2,     2,     1,     2,     2,     3,
+       4,     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,
+       6,     6,     0,     1,     0,     2
 };
 
@@ -1436,160 +1451,163 @@
 static const yytype_uint16 yydefact[] =
 {
-     299,   299,   319,   317,   320,   318,   321,   322,   305,   307,
-     306,     0,   308,   333,   325,   330,   328,   329,   327,   326,
-     331,   332,   338,   339,   337,   334,   335,   336,   552,   377,
-     378,     0,     0,     0,   299,     0,   309,   323,   324,     9,
-     366,     0,    10,    16,    17,     0,     2,    72,    73,   570,
-      11,   299,   528,   253,     3,   458,     3,   266,     0,     3,
-       3,     3,   254,     0,     0,     0,   300,   301,   303,   299,
-     312,   315,   347,   291,   340,   345,   292,   355,   293,   362,
-     359,   369,   552,   370,   294,   477,   481,     3,     3,     0,
-       2,   524,   529,   534,   304,     0,     0,   552,   582,   552,
-       2,   593,   594,   595,   299,     0,   736,   737,     0,    14,
-       0,    15,   299,   275,   276,     0,   300,   295,   296,   297,
-     298,   531,   310,     0,   553,   554,    14,   451,   452,    13,
-     447,   450,     0,   508,   503,   494,   451,   452,     0,     0,
-     533,     0,   299,     0,     0,     0,     0,     0,     0,     0,
-       0,   299,   299,     0,   738,   300,   587,   599,   742,   735,
-     733,   740,     0,     0,     0,   260,     2,     0,   537,   445,
-     446,   444,     0,     0,     0,     0,   639,   640,     0,     0,
-       3,   550,   546,   552,   567,   552,   552,   548,     2,   547,
-     552,   606,   552,   552,   609,     0,     0,     0,   299,   299,
-     317,   367,     2,   299,   267,   302,   313,   348,   360,   482,
-       0,     2,     0,   458,   268,   300,   341,   356,   363,   478,
-       0,     2,     0,   316,   342,   349,   350,     0,   357,   361,
-     364,   368,     0,   479,   483,     0,     0,     0,     1,   299,
-       2,   535,   581,   583,   299,     2,   746,   300,   749,   550,
-     550,     0,   300,     0,     0,   278,   552,   548,     2,   299,
-       0,     0,   299,     0,   400,   555,     2,   506,     2,   559,
-      19,     0,    18,     0,     0,     0,     0,    21,    69,     4,
-       8,     5,     6,     7,     0,     0,   299,     2,    74,    75,
-      76,    77,    57,    22,    58,    26,    56,    78,   299,     0,
-      80,    84,    87,    90,    95,    98,   100,   102,   104,   106,
-     108,   112,   500,    23,   454,   456,   499,     0,   453,   457,
-       0,   571,   586,   589,   592,   598,   601,   604,     2,   744,
-     299,   747,     2,    72,   299,     3,   432,     0,   755,   300,
-     299,   312,   340,   292,   355,   362,     3,     3,   414,   418,
-     428,   433,   477,   299,   434,   711,   712,   299,   435,   437,
-       2,   588,   600,   734,     2,     2,   255,     2,   463,     0,
-     461,   460,   459,   146,     2,     2,   257,     2,     2,   256,
+     307,   307,   327,   325,   328,   326,   330,   331,   313,   315,
+     314,     0,   316,   341,   333,   338,   336,   337,   335,   334,
+     339,   340,   346,   347,   345,   342,   343,   344,   571,   395,
+     396,     0,     0,     0,   307,     0,   317,   332,   329,     9,
+     381,     0,    10,    16,    17,     0,     2,    72,    73,   589,
+      11,   307,   547,   253,     3,   477,     3,   266,     0,     3,
+       3,     3,   254,     0,     0,     0,   308,   309,   311,   307,
+     320,   323,   355,   291,   348,   353,   292,   363,   293,   377,
+     367,   384,   392,   571,   385,   420,   294,   496,   500,     3,
+       3,     0,     2,   543,   548,   553,   312,     0,     0,   571,
+     601,   571,     2,   612,   613,   614,   307,     0,   755,   756,
+       0,    14,     0,    15,   307,   275,   276,     0,   308,   299,
+     300,   301,   302,   550,   318,     0,   572,   573,    14,   470,
+     471,    13,   466,   469,     0,   527,   522,   513,   470,   471,
+       0,     0,   552,     0,   307,     0,     0,     0,     0,     0,
+       0,     0,     0,   307,   307,     0,   757,   308,   606,   618,
+     761,   754,   752,   759,     0,     0,     0,   260,     2,     0,
+     556,   464,   465,   463,     0,     0,     0,     0,   658,   659,
+       0,     0,     3,   569,   565,   571,   586,   571,   571,   567,
+       2,   566,   571,   625,   571,   571,   628,     0,     0,     0,
+     307,   307,   325,   382,     2,   307,   267,   310,   321,   356,
+     368,   501,     0,     2,     0,   477,   268,   308,   349,   364,
+     378,   497,     0,     2,     0,   324,   350,   357,   358,     0,
+     365,   369,   379,   383,     0,   498,   502,     0,     0,     0,
+       1,   307,     2,   554,   600,   602,   307,     2,   765,   308,
+     768,   569,   569,     0,   308,     0,     0,   278,   571,   567,
+       2,   307,     0,     0,   307,     0,   421,   574,     2,   525,
+       2,   578,    19,     0,    18,     0,     0,     0,     0,    21,
+      69,     4,     8,     5,     6,     7,     0,     0,   307,     2,
+      74,    75,    76,    77,    57,    22,    58,    26,    56,    78,
+     307,     0,    80,    84,    87,    90,    95,    98,   100,   102,
+     104,   106,   108,   112,   519,    23,   473,   475,   518,     0,
+     472,   476,     0,   590,   605,   608,   611,   617,   620,   623,
+       2,   763,   307,   766,   571,     2,    72,   307,     3,   451,
+       0,   774,   308,   307,   320,   295,   348,   296,   370,   297,
+     377,   374,   386,   571,   387,     3,     3,   433,   437,   447,
+     452,   298,   496,   307,   453,   730,   731,   307,   454,   456,
+       2,   607,   619,   753,     2,     2,   255,     2,   482,     0,
+     480,   479,   478,   146,     2,     2,   257,     2,     2,   256,
        2,   286,     2,   287,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   572,   611,   552,     0,     0,   458,     2,
-     566,   575,   665,   568,   569,   538,   299,     2,   605,   614,
-     607,   608,     0,   281,   299,   299,   346,   300,     0,   300,
-     299,   739,   743,   741,   539,   299,   550,   261,   269,   314,
-       0,     2,   540,   299,   504,   343,   344,   288,   358,   365,
-     452,   299,   379,   372,   376,   480,   505,   258,   259,   525,
-     299,   442,     0,   299,   243,     0,     2,   245,     0,   300,
-       0,   263,     2,   264,   283,     0,     0,     2,   299,   550,
-     299,   490,   492,   491,   493,     0,     0,   755,     0,   753,
-     405,     0,   299,     0,   299,   495,   299,   565,   562,   563,
-     564,     0,   557,   560,     0,    20,   299,    64,   299,    78,
-      59,   299,    66,   299,   299,    62,    63,     2,   132,     0,
-       0,     0,   733,   299,    31,     0,    34,    35,    40,     2,
-       0,    40,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   117,   116,     0,    60,    61,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     2,   651,   455,   648,
-     552,   552,   656,   484,   299,     2,   590,   591,     2,   602,
-     603,     0,   745,   748,   299,   299,     0,   713,   300,   717,
-     708,   709,   715,     0,     2,     2,     0,   673,   552,   755,
-     622,   552,   552,   755,   552,   636,   552,   552,   687,   755,
-     670,   552,   552,   678,   685,   440,   299,   436,   300,     0,
-       0,   299,   723,   300,   728,   755,   720,   299,   725,   755,
-     299,   299,     0,     0,    21,     2,     0,    22,     0,   464,
-     753,     0,     0,   470,   247,     0,   299,     0,     0,     0,
-     552,   578,   580,   610,   552,   617,   620,   573,   612,     0,
-     285,     0,   289,   663,     0,   299,   282,     0,     0,     0,
-       0,   280,     2,     0,   265,   541,   299,     0,     0,   299,
-       0,   300,     3,   421,     3,   425,   424,   596,     0,   536,
-     299,    72,     3,   299,   755,   300,     3,   434,   435,     2,
-       0,     0,     0,   489,   311,   299,   485,   487,   754,     0,
-       0,   403,     0,     3,     2,     2,     0,   507,     3,     0,
-     559,    40,   530,     0,     2,     0,     0,     0,    41,     0,
-       0,   299,    24,     0,    25,     0,   114,     3,     2,    32,
-       0,    38,     0,     2,    29,     0,   113,    81,    82,    83,
-      85,    86,    88,    89,    93,    94,    91,    92,    96,    97,
-      99,   101,   103,   105,   107,     0,     0,   299,     0,     0,
-       0,   652,   653,   649,   650,   502,   501,   299,   299,   719,
-     299,   724,   300,   299,   667,   710,   666,     2,   299,     0,
-       0,     0,     0,     0,     0,     0,     0,   688,     0,   756,
-     674,   625,   641,   675,     2,   621,   628,   438,   623,   624,
-     439,     2,   635,   644,   637,   638,   441,   671,   672,   686,
-     714,   718,   716,   755,   273,     2,   750,     2,   429,   722,
-     727,   430,     3,   408,     3,     3,     3,   458,     0,     0,
-       2,   472,   469,   754,     0,   465,     2,   468,   471,     0,
-     299,   248,   270,     3,   277,   279,     0,     2,   574,   576,
-     577,     2,   613,   615,   616,   550,     0,   664,   542,     3,
-     352,   351,   354,   353,   299,   543,     0,   544,     0,   299,
-     371,   391,   380,     0,   385,   379,     0,     0,   443,   246,
-       0,     0,     3,     2,   673,   436,     0,   532,     0,   755,
-     494,   405,   399,   111,   406,   753,     0,   299,   299,   299,
-       0,   556,   558,     0,    65,   299,     0,    67,    70,    71,
-       0,   133,   463,    79,   115,   130,     3,   114,     0,    28,
-      40,     3,     0,    37,   110,     0,     3,   552,   659,   662,
-     654,     3,     3,   721,   726,     2,    72,   299,     3,     3,
-     300,     0,     3,   552,   631,   634,   552,   552,   681,   684,
-     299,     3,   626,   642,   676,   299,   299,   431,   299,   299,
-       0,     0,     0,     0,   262,   111,     0,     3,     3,     0,
-     466,     0,   462,     0,     0,   251,   299,     0,     0,   134,
-       0,     0,     0,     0,     0,   134,     0,     0,   114,   114,
-     226,    21,   366,   446,    69,     0,    22,   135,     0,     3,
-     136,   137,     2,   148,   138,   139,   140,   141,   142,   143,
-     150,     0,   152,     0,     0,     0,   299,   299,   458,   552,
-       0,   545,   379,   391,     0,     0,     0,   697,     0,   389,
-     392,   396,   552,   396,   702,   395,   694,   552,   552,   388,
-     381,   386,   299,   584,     2,   669,   668,     0,   674,     2,
-     486,   488,   404,     0,   509,     3,   517,   518,     0,     2,
-     513,     3,     3,     0,     0,   561,     0,   753,   114,     0,
-       3,    54,     0,    54,    54,     3,    42,    44,    39,     0,
-       3,   109,     0,     2,   655,   657,   658,     0,     0,   299,
-       0,     0,     0,     3,   552,     0,     2,   627,   629,   630,
-       2,   643,   645,     2,   677,   679,   680,     0,     0,    72,
-       0,     3,     3,     3,     3,   416,   415,   419,   752,     2,
-       2,   751,     0,     0,     0,     0,     3,   467,     3,     0,
-     249,   151,   153,     0,     0,     0,     0,     2,   197,     0,
-     195,     0,     0,     0,     0,     0,     0,     0,     0,   227,
-       0,     0,   157,   154,   299,     0,   552,     0,   272,   284,
-       3,     3,   290,   551,   618,   299,     0,   382,     0,     0,
-       0,     0,   398,   698,   699,   552,   383,   393,   397,   394,
-     695,   696,   387,   374,   299,   271,   299,   402,     0,   520,
-     497,   299,     0,     0,   496,   511,    68,     0,   131,   128,
-       0,    51,     2,    45,    52,    53,     0,     0,     0,     0,
-      27,     0,   660,   299,   585,   597,   729,   730,   731,     0,
-     682,   299,   299,   299,     3,     3,     0,   690,     0,     0,
-       0,     0,   299,   299,     3,   549,   473,   474,     0,   252,
-       0,     0,     0,     0,   299,   198,   196,     0,   193,   199,
-       0,     0,     0,     0,   203,   206,   204,   200,     0,   201,
-       0,     0,    40,   149,   147,   134,   250,     0,     0,   375,
-     384,   552,   705,   707,   700,   391,   423,   427,   426,     0,
-     514,     2,   515,     2,   516,   510,   299,    36,   129,    55,
-       0,    43,    33,     2,    49,     2,    47,    30,     3,   732,
-       3,     3,     3,     0,     0,   689,   691,   632,   646,   274,
-       2,   413,     3,   412,     0,   476,   134,     0,     0,   134,
-       3,     0,   134,     3,   300,   299,   194,     0,     2,     2,
-     215,   205,     0,     0,     0,     0,     0,     0,   145,   579,
-     619,     2,   701,   703,   704,   390,     2,     0,     0,     2,
-       3,     0,     0,     0,     0,     0,     0,   692,   693,   299,
-       0,   475,   158,     0,     0,     2,   171,   134,   160,     0,
-     188,     0,   134,     0,   300,     2,   162,     0,     2,     0,
-       2,     2,     2,   202,     0,     0,   228,    37,   299,   299,
-     519,   521,   512,     0,     3,     3,   661,   633,   647,   683,
-     417,   134,   164,   167,     0,   166,   170,     3,   173,   172,
-       0,   134,   190,   134,     3,     0,   299,     0,   299,     0,
-       2,     0,     2,     0,   221,     0,     0,     0,   229,   230,
-     144,     3,     2,    46,     0,     0,   159,     0,     0,   169,
-     239,   174,     2,   241,   189,     0,   192,   178,   207,     3,
-     216,   220,   209,     3,     0,   299,     0,   299,   228,     0,
-       0,     0,   228,     0,     0,     0,    50,    48,   165,   168,
-     134,     0,   175,   299,   134,   134,     0,   179,     0,     0,
-     697,   217,   218,   219,     0,   208,     3,   210,     3,     0,
-       0,     0,   222,     0,   231,   706,   299,   155,   176,   161,
-     134,   242,   191,   186,   184,   180,   163,   134,     0,   698,
-       0,     0,     0,   234,     0,   232,     0,   234,     0,   156,
-     177,   187,   181,   185,   184,   182,     3,     3,     0,     0,
-     235,     0,     0,   223,     0,   498,   183,   211,   213,     3,
-       3,     0,     0,     0,     0,   212,   214,   236,   237,     0,
-     233,   224,     0,     0,   225,   238
+       0,     0,     0,   591,   630,   571,     0,     0,   477,     2,
+     585,   594,   684,   587,   588,   557,   307,     2,   624,   633,
+     626,   627,     0,   281,   307,   307,   354,   308,     0,   308,
+     307,   758,   762,   760,   558,   307,   569,   261,   269,   322,
+       0,     2,   559,   307,   523,   351,   352,   288,   366,   380,
+     471,   307,   397,   393,   394,   499,   524,   258,   259,   544,
+     307,   461,     0,   307,   243,     0,     2,   245,     0,   308,
+     307,     0,   263,     2,   264,   283,     0,     0,     2,   307,
+     569,   307,   509,   511,   510,   512,     0,     0,   774,     0,
+     772,   424,     0,   307,     0,   307,   514,   307,   584,   581,
+     582,   583,     0,   576,   579,     0,    20,   307,    64,   307,
+      78,    59,   307,    66,   307,   307,    62,    63,     2,   132,
+       0,     0,     0,   752,   307,    31,     0,    34,    35,    40,
+       2,     0,    40,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   117,   116,     0,    60,    61,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     2,   670,   474,
+     667,   571,   571,   675,   503,   307,     2,   609,   610,     2,
+     621,   622,     0,   764,   767,     0,   307,   307,     0,   732,
+     308,   303,   304,   305,   306,   736,   727,   728,   734,     0,
+       2,     2,     0,   692,   571,   774,   641,   571,   571,   774,
+     571,   655,   571,   571,   706,   774,   689,   571,   571,   697,
+     704,   459,   307,   375,   455,   308,   371,   372,   376,     0,
+       0,     0,   307,   742,   308,   747,   774,   739,   307,   744,
+     774,   307,   307,     0,     0,    21,     2,     0,    22,     0,
+     483,   772,     0,     0,   489,   247,     0,   307,     0,     0,
+       0,   571,   597,   599,   629,   571,   636,   639,   592,   631,
+       0,   285,     0,   289,   682,     0,   307,   282,     0,     0,
+       0,     0,   280,     2,     0,   265,   560,   307,     0,     0,
+     307,     0,   308,     3,   440,     3,   444,   443,   615,     0,
+     555,   307,   308,    72,     3,   307,   774,   308,     3,   453,
+     454,     2,     0,     0,     0,   508,   319,   307,   504,   506,
+     773,     0,     0,   422,     0,     3,     2,     2,     0,   526,
+       3,     0,   578,    40,   549,     0,     2,     0,     0,     0,
+      41,     0,     0,   307,    24,     0,    25,     0,   114,     3,
+       2,    32,     0,    38,     0,     2,    29,     0,   113,    81,
+      82,    83,    85,    86,    88,    89,    93,    94,    91,    92,
+      96,    97,    99,   101,   103,   105,   107,     0,     0,   307,
+       0,     0,     0,   671,   672,   668,   669,   521,   520,   307,
+     307,   421,   738,   307,   743,   308,   307,   686,   729,   685,
+       2,   307,     0,     0,     0,     0,     0,     0,     0,     0,
+     707,     0,   775,   693,   644,   660,   694,     2,   640,   647,
+     457,   642,   643,   458,     2,   654,   663,   656,   657,   460,
+     690,   691,   705,   733,   737,   735,   774,   373,   393,   273,
+       2,   769,     2,   448,   741,   746,   449,     3,   427,     3,
+       3,     3,   477,     0,     0,     2,   491,   488,   773,     0,
+     484,     2,   487,   490,     0,   307,   248,   270,     3,   277,
+     279,     0,     2,   593,   595,   596,     2,   632,   634,   635,
+     569,     0,   683,   561,     3,   360,   359,   362,   361,   307,
+     562,     0,   563,     0,   307,   388,   409,   398,     0,   403,
+     397,     0,     0,   462,   246,     0,     0,     3,     2,   692,
+     455,     0,   551,     0,   774,   513,   424,   417,   111,   425,
+     772,     0,   307,   307,   307,     0,   575,   577,     0,    65,
+     307,     0,    67,    70,    71,     0,   133,   482,    79,   115,
+     130,     3,   114,     0,    28,    40,     3,     0,    37,   110,
+       0,     3,   571,   678,   681,   673,     3,     3,   740,   745,
+       2,    72,   307,     3,     3,   308,     0,     3,   571,   650,
+     653,   571,   571,   700,   703,   307,     3,   645,   661,   695,
+     307,   307,   450,   307,   307,     0,     0,     0,     0,   262,
+     111,     0,     3,     3,     0,   485,     0,   481,     0,     0,
+     251,   307,     0,     0,   134,     0,     0,     0,     0,     0,
+     134,     0,     0,   114,   114,   226,    21,   381,   465,    69,
+       0,    22,   135,     0,     3,   136,   137,     2,   148,   138,
+     139,   140,   141,   142,   143,   150,     0,   152,     0,     0,
+       0,   307,   307,   477,   571,     0,   564,   397,   409,     0,
+       0,     0,   716,     0,   407,   410,   414,   571,   414,   721,
+     413,   713,   571,   571,   406,   399,   404,   307,   603,     2,
+     688,   687,     0,   693,     2,   505,   507,   423,     0,   528,
+       3,   536,   537,     0,     2,   532,     3,     3,     0,     0,
+     580,     0,   772,   114,     0,     3,    54,     0,    54,    54,
+       3,    42,    44,    39,     0,     3,   109,     0,     2,   674,
+     676,   677,     0,     0,   307,     0,     0,     0,     3,   571,
+       0,     2,   646,   648,   649,     2,   662,   664,     2,   696,
+     698,   699,     0,     0,    72,     0,     3,     3,     3,     3,
+     435,   434,   438,   771,     2,     2,   770,     0,     0,     0,
+       0,     3,   486,     3,     0,   249,   151,   153,     0,     0,
+       0,     0,     2,   197,     0,   195,     0,     0,     0,     0,
+       0,     0,     0,     0,   227,     0,     0,   157,   154,   307,
+       0,   571,     0,   272,   284,     3,     3,   290,   570,   637,
+     307,     0,   400,     0,     0,     0,     0,   416,   717,   718,
+     571,   401,   411,   415,   412,   714,   715,   405,   390,   307,
+     271,   307,   419,     0,   539,   516,   307,     0,     0,   515,
+     530,    68,     0,   131,   128,     0,    51,     2,    45,    52,
+      53,     0,     0,     0,     0,    27,     0,   679,   307,   604,
+     616,   748,   749,   750,     0,   701,   307,   307,   307,     3,
+       3,     0,   709,     0,     0,     0,     0,   307,   307,     3,
+     568,   492,   493,     0,   252,     0,     0,     0,     0,   307,
+     198,   196,     0,   193,   199,     0,     0,     0,     0,   203,
+     206,   204,   200,     0,   201,     0,     0,    40,   149,   147,
+     134,   250,     0,     0,   391,   402,   571,   724,   726,   719,
+     409,   442,   446,   445,     0,   533,     2,   534,     2,   535,
+     529,   307,    36,   129,    55,     0,    43,    33,     2,    49,
+       2,    47,    30,     3,   751,     3,     3,     3,     0,     0,
+     708,   710,   651,   665,   274,     2,   432,     3,   431,     0,
+     495,   134,     0,     0,   134,     3,     0,   134,     3,   308,
+     307,   194,     0,     2,     2,   215,   205,     0,     0,     0,
+       0,     0,     0,   145,   598,   638,     2,   720,   722,   723,
+     408,     2,     0,     0,     2,     3,     0,     0,     0,     0,
+       0,     0,   711,   712,   307,     0,   494,   158,     0,     0,
+       2,   171,   134,   160,     0,   188,     0,   134,     0,   308,
+       2,   162,     0,     2,     0,     2,     2,     2,   202,     0,
+       0,   228,    37,   307,   307,   538,   540,   531,     0,     3,
+       3,   680,   652,   666,   702,   436,   134,   164,   167,     0,
+     166,   170,     3,   173,   172,     0,   134,   190,   134,     3,
+       0,   307,     0,   307,     0,     2,     0,     2,     0,   221,
+       0,     0,     0,   229,   230,   144,     3,     2,    46,     0,
+       0,   159,     0,     0,   169,   239,   174,     2,   241,   189,
+       0,   192,   178,   207,     3,   216,   308,   220,   209,     3,
+       0,   307,     0,   307,   228,     0,     0,     0,   228,     0,
+       0,     0,    50,    48,   165,   168,   134,     0,   175,   307,
+     134,   134,     0,   179,     0,     0,   716,   217,   218,   219,
+       0,   208,     3,   210,     3,     0,     0,     0,   222,     0,
+     231,   725,   307,   155,   176,   161,   134,   242,   191,   186,
+     184,   180,   163,   134,     0,   717,     0,     0,     0,   234,
+       0,   232,     0,   234,     0,   156,   177,   187,   181,   185,
+     184,   182,     3,     3,     0,     0,   235,     0,     0,   223,
+       0,   517,   183,   211,   213,     3,     3,     0,     0,     0,
+       0,   212,   214,   236,   237,     0,   233,   224,     0,     0,
+     225,   238
 };
 
@@ -1597,192 +1615,195 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   778,   454,   292,    49,   130,   131,   293,   294,   272,
-     295,   296,   730,   731,  1075,  1076,  1077,  1201,   297,   369,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   966,   508,   915,   534,   313,   916,   997,
-     998,  1497,  1000,  1001,  1002,  1003,  1498,  1004,  1005,  1403,
-    1404,  1366,  1367,  1368,  1471,  1472,  1476,  1477,  1522,  1523,
-    1006,  1321,  1007,  1008,  1254,  1255,  1256,  1449,  1009,  1150,
-    1427,  1428,  1429,  1531,  1549,  1441,  1442,   455,   456,   840,
-     841,   974,    52,    53,    54,    55,    56,   336,   153,    59,
-      60,    61,    62,   180,   338,    64,    65,   252,    67,    68,
-     262,   340,   341,    71,    72,    73,   117,    75,   198,   343,
-     118,    78,   119,    80,    81,   670,    82,   669,   872,   873,
-    1028,  1029,  1177,  1030,    83,   481,   479,   701,   822,   823,
-     346,   347,   672,   673,   674,   348,   349,   675,   351,   452,
-    1011,   132,   133,   315,   316,   165,   629,   630,   631,   632,
-     633,    84,   120,    86,   476,   477,   890,   478,   267,   485,
-     317,    87,   134,   135,    88,  1286,  1059,  1060,  1061,  1062,
-      89,    90,   690,    91,   261,    92,    93,   181,   968,   664,
-     400,   124,    94,   491,   492,   493,   182,   256,   184,   185,
-     186,   257,    97,    98,    99,   100,   101,   102,   103,   189,
-     190,   191,   192,   193,   791,   590,   591,   592,   593,   194,
-     595,   596,   597,   558,   559,   560,   561,  1034,   104,   599,
-     600,   601,   602,   603,   604,  1035,  1036,  1037,  1038,   579,
-     354,   355,   356,   357,   318,   159,   106,   107,   108,   359,
-     699,   605
+      -1,   801,   464,   294,    49,   132,   133,   295,   296,   274,
+     297,   298,   752,   753,  1100,  1101,  1102,  1226,   299,   379,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   991,   519,   940,   545,   315,   941,  1022,
+    1023,  1523,  1025,  1026,  1027,  1028,  1524,  1029,  1030,  1428,
+    1429,  1391,  1392,  1393,  1497,  1498,  1502,  1503,  1548,  1549,
+    1031,  1346,  1032,  1033,  1279,  1280,  1281,  1474,  1034,  1175,
+    1452,  1453,  1454,  1557,  1575,  1466,  1467,   465,   466,   865,
+     866,   999,    52,    53,    54,    55,    56,   339,   155,    59,
+      60,    61,    62,   182,   468,   341,    64,  1475,    65,   254,
+      67,    68,   264,   343,   344,    71,    72,   345,   119,    75,
+     200,    76,   120,   347,   348,   349,   121,    80,   351,    81,
+     691,    82,    83,   690,   897,   898,  1053,  1054,  1202,  1055,
+      84,   492,    85,   490,   723,   847,   848,   355,   356,   693,
+     694,   695,   357,   358,   696,   360,   462,  1036,   134,   135,
+     317,   318,   167,   650,   651,   652,   653,   654,   361,   122,
+      88,   487,   488,   915,   489,   269,   496,   319,    89,   136,
+     137,    90,  1311,  1084,  1085,  1086,  1087,    91,    92,   712,
+      93,   263,    94,    95,   183,   993,   685,   410,   126,    96,
+     502,   503,   504,   184,   258,   186,   187,   188,   259,    99,
+     100,   101,   102,   103,   104,   105,   191,   192,   193,   194,
+     195,   814,   606,   607,   608,   609,   196,   611,   612,   613,
+     569,   570,   571,   572,  1059,   106,   615,   616,   617,   618,
+     619,   620,  1060,  1061,  1062,  1063,   595,   364,   365,   366,
+     367,   320,   161,   108,   109,   110,   369,   721,   621
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1330
+#define YYPACT_NINF -1346
 static const yytype_int16 yypact[] =
 {
-    6225,  5848, -1330,    41, -1330, -1330, -1330, -1330, -1330, -1330,
-   -1330,    44, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330,
-   -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330,   160, -1330,
-   -1330,  1888,  1143,   152,  7885,   161, -1330, -1330, -1330, -1330,
-   -1330,   267, -1330, -1330, -1330,   930,   170, -1330, -1330, -1330,
-   -1330,  3147, -1330, -1330, -1330,    75,   301, -1330,  1958, -1330,
-   -1330, -1330, -1330,  1627,   423,    40,  8006, -1330, -1330,  3147,
-     760, -1330, -1330,   725,   435,  4274,  1756,   809,   725,   987,
-   -1330, -1330,   160, -1330,   725,  1086, -1330,   265, -1330,   447,
-     450, -1330, -1330, -1330, -1330,   351,   301,   160, -1330,   160,
-   -1330, -1330, -1330, -1330,  8356,  1958, -1330, -1330,  1958, -1330,
-     337, -1330,  8476, -1330, -1330,  1743,  9451, -1330,  1134,  1134,
-    1134, -1330, -1330,   862,   160, -1330,   432,   459,   482, -1330,
-   -1330, -1330,   487, -1330, -1330, -1330, -1330, -1330,   511,   519,
-   -1330,   413,  9017,  2489,   116,   434,   446,   525,   537,   556,
-     561,  9526,  7391,   567, -1330,  3761, -1330, -1330, -1330, -1330,
-     570, -1330,   105,  5159,  5159, -1330,   586,   266, -1330, -1330,
-   -1330, -1330,   601,   369,   380,   402, -1330, -1330,  1627,  1992,
-     603,   654, -1330,    56, -1330,   160,   160,   301, -1330, -1330,
-      68, -1330,   160,   160, -1330,  2640,   630,   635,  1134,  6918,
-   -1330, -1330, -1330,  3147, -1330, -1330,   725, -1330, -1330, -1330,
-     301, -1330,  1958,    75, -1330,  8202, -1330,  1134,  1134,  1134,
-     301, -1330,  1888, -1330,  3470, -1330, -1330,   610,  1134, -1330,
-    1134, -1330,  1182,  1134, -1330,  1888,   619,   624, -1330,  7885,
-     540, -1330, -1330, -1330,  9378, -1330, -1330,  3910, -1330,   654,
-      53, 10308,  9451,  1743,  2640, -1330,    69, -1330, -1330,  8476,
-    1958,   656, 10981,  1143,   666, -1330, -1330,   383, -1330,   453,
-   -1330,   692,   757, 10367,   729, 10308, 10426, -1330,   743, -1330,
-   -1330, -1330, -1330, -1330, 10485, 10485,  8781,   170, -1330, -1330,
-   -1330, -1330, -1330, -1330, -1330, -1330,  1854,  1766,  9017, 10308,
-   -1330,   571,   562,   733,   403,   661,   742,   720,   772,   811,
-      80, -1330, -1330, -1330,   587, -1330, -1330,   242, -1330, -1330,
-    2489, -1330, -1330,    52,   795, -1330,   295,   795, -1330, -1330,
-    8356, -1330,   800,   803,  9135, -1330, -1330,  1159,  2129,  8562,
-    6918,   725, -1330,   725,  1134,  1134, -1330, -1330, -1330, -1330,
-   -1330, -1330,  1134,  8356,  1958, -1330, -1330,  9526,  1829, -1330,
-   -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330,  5097, 10308,
-   -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330,
-   -1330, -1330, -1330, -1330,   701,   806,   813,   817,   776,   819,
-     827,   839,  1992, -1330, -1330,   160,   787,   812,    75,   849,
-   -1330, -1330,   851, -1330, -1330, -1330,  9378, -1330, -1330, -1330,
-   -1330, -1330,  2640, -1330,  9017,  9017, -1330,  1134,  1743,  7053,
-    8637, -1330, -1330, -1330, -1330,  9378,    53, -1330, -1330,   725,
-     301, -1330, -1330,  9378, -1330,  4136, -1330, -1330,  1134,  1134,
-     267,  9017, -1330,   856, -1330,  1134, -1330, -1330, -1330, -1330,
-    9719, -1330,   334, 10721, -1330,   301,   858, -1330,  1743, 10761,
-   10544, -1330, -1330, -1330, -1330,   873,  2640, -1330,  8637,   654,
-    7764, -1330, -1330, -1330, -1330,  1408,   393,   834,  1143,   864,
-     855,   874, 10981,  1547,  8476, -1330, 10981, -1330, -1330, -1330,
-   -1330,   596, -1330,   881,   859, -1330,  8781, -1330,  9566, -1330,
-   -1330,  8781, -1330,  8899,  8781, -1330, -1330,   170, -1330,   598,
-     889,   892, -1330,  7143, -1330,    85, -1330, -1330, 10308, -1330,
-     542, 10308, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330,
-   -1330, -1330, -1330, -1330, 10308, -1330, -1330, 10308, 10308, 10308,
-   10308, 10308, 10308, 10308, 10308, 10308, 10308, 10308, 10308, 10308,
-   10308, 10308, 10308, 10308, 10308,  3975,   587,   600, -1330, -1330,
-     160,   160, -1330, -1330,  9017, -1330, -1330,   851, -1330, -1330,
-     851, 10603, -1330, -1330,  9526,  7143,   893, -1330,  9451, -1330,
-   -1330,   570, -1330,   895,   566,   904, 10308,  2075,    76,   834,
-   -1330,   160,   160,   834,   202, -1330,   160,   160,   851,   834,
-   -1330,   160,   160, -1330,   795, -1330,  9599,  1958, 10912,   173,
-     526,  9599, -1330,  3910, -1330,   834, -1330,  8356, -1330,    55,
-    6359,  6359,  1958, 10190,   891, -1330,   960,   896,   899, -1330,
-     909,  5159,   408, -1330,  1005,  1958,  6359,   540,  1743,   540,
-     209,   795, -1330, -1330,   275,   795, -1330, -1330, -1330,  1743,
-   -1330,   413, -1330,   795,   301,  9719, -1330,   621,   926,   622,
-     928, -1330,   800,   301, -1330, -1330,  9378,   301,   631,  2873,
-     927, 10912, -1330, -1330,   935, -1330, -1330, -1330,   540, -1330,
-   10837,   803, -1330,  6359,   543,  8562, -1330, -1330,   570,   925,
-     934,  1408,  2646, -1330, -1330, 10981, -1330, -1330,  1143,   936,
-   10308, -1330,  1143,   938, -1330, -1330,   946, -1330,   938,   947,
-     453, 10308, -1330,   950,   170,   949,   952,   953, -1330,   959,
-     963,  7143, -1330, 10308, -1330, 10249, 10308,   966, -1330, -1330,
-     633, -1330, 10308, -1330, -1330,   683, -1330, -1330, -1330, -1330,
-     571,   571,   562,   562,   733,   733,   733,   733,   403,   403,
-     661,   742,   720,   772,   811, 10308,   164,  9719,   965,   976,
-     977,   600, -1330, -1330, -1330, -1330, -1330,  9719,  9719, -1330,
-    8356, -1330,  7515,  9253, -1330, -1330, -1330,   566,  9719,   901,
-     979,   980,   986,   990,   996,  1001,  1004, -1330,  5001, -1330,
-    2075, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330,
-   -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330,   851,
-   -1330, -1330, -1330,   834, -1330, -1330, -1330, -1330, -1330, -1330,
-   -1330, -1330, -1330, -1330,  1008,  1010, -1330,    75,   966, 10190,
-   -1330, -1330, -1330,  5097,   982, -1330, -1330, -1330, -1330,  1143,
-    6749,  1096, -1330, -1330, -1330, -1330,   994, -1330, -1330, -1330,
-     851, -1330, -1330, -1330,   851,   654,  1019,   851, -1330, -1330,
-   -1330, -1330, -1330, -1330,  7391, -1330,   301, -1330,  1023,  9566,
-   -1330,  1424, -1330,   421,  1143, -1330,  1035,  1030, -1330, -1330,
-    1036,  1040, -1330,   822,  1684, -1330,   552, -1330,  2646,   834,
-   -1330,   855, -1330, -1330, -1330,   864,  1046, 10981,  8476,  9017,
-    1050, -1330, -1330,   665,  1039,  7391,   540,  1039, -1330, -1330,
-    1039, -1330,  5097, -1330, -1330, -1330,  1045, 10308,  1051, -1330,
-   10308, -1330,  1051, -1330, -1330, 10308, -1330,   305,   795, -1330,
-   -1330, -1330, -1330, -1330, -1330, -1330,   803,  9135, -1330, -1330,
-    7639,  1055, -1330,   308,   795, -1330,   311,   328,   795, -1330,
-    1134,  6615, -1330, -1330, -1330,  9719,  9719, -1330,  8637,  8637,
-    1062,  1058,  1060,  1067, -1330,   655,   304,   966, -1330,  1051,
-   -1330,  5159, -1330, 10308,   426, -1330,  7019,  1057,  1073, 10131,
-    1074,  1075,   885,  1043,   501, 10308,  1077,   301, 10308, 10308,
-    1185,  1065,  1066,   267,   113,   637,  1068,  1072,  1082, -1330,
-   -1330, -1330,  1085, -1330, -1330, -1330, -1330, -1330, -1330, -1330,
-   -1330,  1076, -1330,  1143,  1095, 10308,  9719,  9719,    75,   160,
-    1097, -1330, -1330,  1424,   427,  2325, 10308,  2260,   431, -1330,
-   -1330,  1079,    72,  1079, -1330, -1330, -1330,   160,   160,  1143,
-   -1330, -1330,  3323, -1330, -1330, -1330, -1330,  1110,  1684, -1330,
-   -1330,  1094, -1330,  1108, -1330,   938, -1330, -1330,  1743,  1109,
-   -1330, -1330, -1330,   673,  1116, -1330,  1125,   909, 10308,  1126,
-    1045, -1330,  1167, -1330, -1330,  1132, -1330,   146, -1330,  1127,
-    1132, -1330,  1149, -1330, -1330, -1330,   851,  1152,  1161,  7267,
-    1157,  1160,  1163, -1330,   160,  1169, -1330, -1330, -1330,   851,
-   -1330, -1330, -1330, -1330, -1330, -1330,   851, 10308, 10308,   803,
-    1165, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330,
-   -1330, -1330, 10308, 10308,  1168,  1171,  1132, -1330, -1330,  1143,
-   -1330, -1330, -1330, 10308, 10308,  1236, 10308, -1330, -1330,  1154,
-   -1330,  1158, 10308,  1162,  1166, 10308,  1123,  1172,    38, -1330,
-      82,  1907, -1330, -1330,  6749,  1174,   160,   448, -1330, -1330,
-   -1330, -1330, -1330, -1330, -1330,  9411,   460, -1330,   762,  1183,
-    1187,  1191, -1330,  2260, -1330,   160, -1330, -1330, -1330, -1330,
-   -1330, -1330, -1330, -1330,  9947, -1330,  8637, -1330,  1195, -1330,
-   -1330,  8476,   462,   471, -1330,  1192, -1330,  1193, -1330, -1330,
-    1204,  1240, -1330, -1330,  1240,  1240,  1051,  1210,  1516,  1643,
-   -1330,  1212, -1330,  9719, -1330, -1330, -1330, -1330, -1330,  1214,
-   -1330,  9719,  9719,  9719, -1330, -1330,  1216, -1330,  1218,  1229,
-    1230,   679,  8322,  8442, -1330, -1330, -1330, -1330,  1232, -1330,
-     690,   693,  1239,   710,  6884, -1330, -1330,   513, -1330, -1330,
-     723,  1241,  1243,   301,  1287,   825, -1330, -1330, 10308, -1330,
-    1246,   413, 10308, -1330, -1330, 10131, -1330,  1247,  1251, -1330,
-   -1330,   439,   795, -1330, -1330,  1424, -1330, -1330, -1330,  1235,
-   -1330, -1330, -1330, -1330, -1330, -1330,  8476, -1330, -1330, -1330,
-    1051, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330, -1330,
-   -1330, -1330, -1330,  1244,  1253, -1330, -1330, -1330, -1330, -1330,
-   -1330, -1330,  1256, -1330,  1257, -1330, 10131,   102, 10308, 10131,
-   -1330,  1260, 10308, -1330,  6149,  8476, -1330,   386,  1275,  1280,
-   -1330, -1330,  1268,  1269,  1252,   413,   197,   763, -1330, -1330,
-   -1330, -1330, -1330, -1330,   851, -1330, -1330,  1958,  1743,  1264,
-    1132,  1051,  1051,  1276,  1278,  1279,  1282, -1330, -1330,  8637,
-    1274, -1330,  1354, 10308,  1267, -1330, -1330, 10041, -1330,   727,
-   -1330,  1266, 10131,  1270,  8712, -1330, -1330,  1290, -1330,  1291,
-   -1330,  1307,  1309, -1330,  1277,  1281,   195,  1283,  9719,  8476,
-   -1330, -1330, -1330,  1294,  1132,  1132, -1330, -1330, -1330, -1330,
-   -1330, 10131,   314, -1330,   327, -1330, -1330,  6528, -1330, -1330,
-    1284, 10308, -1330, 10308,  6528,   301,  9566,   301,  9566,  1298,
-   -1330,  1299, -1330,  1292, -1330, 10308,  1302,   237,  1305, -1330,
-   -1330, -1330,  1310, -1330,  1312,  1314, -1330, 10308, 10308, -1330,
-   -1330,   847,    86, -1330, -1330,  1296, -1330,   847, -1330, -1330,
-    2447,   540, -1330, -1330,   301,  9566,   301,  9566,   195,  1318,
-   10308,  1301,   195,   195,  1326,  1330, -1330, -1330, -1330, -1330,
-   10041,  1334,   847,  8127, 10308,  9951,  1336,   847,  1331,  2447,
-    2348, -1330, -1330, -1330,  1344, -1330, -1330, -1330, -1330,  1325,
-     413,  1347, -1330,   273, -1330, -1330,  9017, -1330,  9813, -1330,
-   10041, -1330, -1330,  1328,  9723, -1330, -1330,  9951,   301,  2348,
-     301,  1348,  1352,   413,  1355, -1330,  1335,   413,   738, -1330,
-    9813, -1330, -1330, -1330,  9723, -1330, -1330, -1330,   301,   301,
-   -1330,   485, 10308, -1330,   740, -1330, -1330, -1330, -1330, -1330,
-   -1330,   413,   540,  1353,  1337, -1330, -1330, -1330, -1330,   755,
-   -1330, -1330,  1339,   540, -1330, -1330
+    7080, 10336, -1346,    65, -1346, -1346, -1346, -1346, -1346, -1346,
+   -1346,    62, -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346,
+   -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346,   140, -1346,
+   -1346,  1135,  1743,    79,  8505,   107, -1346, -1346, -1346, -1346,
+   -1346,   187, -1346, -1346, -1346,  1055,   192, -1346, -1346, -1346,
+   -1346, 10182, -1346, -1346, -1346,   118,   227, -1346,  1650, -1346,
+   -1346, -1346, -1346,  2245,   362,    74,  8626, -1346, -1346, 10182,
+    1874, -1346, -1346,  1963,   424,  3845,  1754,   831,  1963,  1126,
+   -1346, -1346, -1346,   140, -1346, -1346,  1963,  1440, -1346,   315,
+   -1346,   449,   497, -1346, -1346, -1346, -1346,   340,   227,   140,
+   -1346,   140, -1346, -1346, -1346, -1346,  6995,  1650, -1346, -1346,
+    1650, -1346,   379, -1346,  9247, -1346, -1346,  2348, 10491, -1346,
+     797,   797,   797, -1346, -1346,  1229,   140, -1346,   431,   468,
+     505, -1346, -1346, -1346,   517, -1346, -1346, -1346, -1346, -1346,
+     536,   569, -1346,   522,  9788,  2012,   153,   486,   556,   589,
+     592,   600,   612, 10524,  8132,   576, -1346, 10222, -1346, -1346,
+   -1346, -1346,   587, -1346,   216,  3873,  3873, -1346,   616,   454,
+   -1346, -1346, -1346, -1346,   636,   467,   478,   540, -1346, -1346,
+    2245,  2715,   640,   713, -1346,    42, -1346,   140,   140,   227,
+   -1346, -1346,    80, -1346,   140,   140, -1346,  2887,   679,   692,
+     797,  7794, -1346, -1346, -1346, 10182, -1346, -1346,  1963, -1346,
+   -1346, -1346,   227, -1346,  1650,   118, -1346,  8898, -1346,   797,
+     797,   797,   227, -1346,  1135, -1346,  7163, -1346, -1346,   691,
+     797, -1346,   797, -1346,   993,   797, -1346,  1135,   700,   717,
+   -1346,  8505,   606, -1346, -1346, -1346, 10149, -1346, -1346,  4159,
+   -1346,   713,    16,  5182, 10491,  2348,  2887, -1346,    92, -1346,
+   -1346,  9247,  1650,   697, 11820,  1743,   800, -1346, -1346,    59,
+   -1346,   509, -1346,   765,   838,  5241,   819,  5182,  5622, -1346,
+     821, -1346, -1346, -1346, -1346, -1346,  6113,  6113,  9552,   192,
+   -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346,  1842,  2541,
+    9788,  5182, -1346,   385,   290,   801,   638,   472,   837,   833,
+     835,   879,    26, -1346, -1346, -1346,   733, -1346, -1346,   223,
+   -1346, -1346,  2012, -1346, -1346,   432,   865, -1346,   659,   865,
+   -1346, -1346,  6995, -1346,   140,   874,   876,  9906, -1346, -1346,
+     878,  1713,  9333,  7918,  1963,  1963, -1346,  1963,   797,  1963,
+     797, -1346, -1346,   140, -1346, -1346, -1346, -1346, -1346, -1346,
+   -1346,  1963,   797, 10609,  1650, -1346, -1346, 10642,  1324, -1346,
+   -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346,  3398,  5182,
+   -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346,
+   -1346, -1346, -1346, -1346,   921,   880,   906,   909,   944,   914,
+     916,   918,  2715, -1346, -1346,   140,   902,   935,   118,   934,
+   -1346, -1346,   949, -1346, -1346, -1346, 10149, -1346, -1346, -1346,
+   -1346, -1346,  2887, -1346,  9788,  9788, -1346,   797,  2348,  8042,
+    9408, -1346, -1346, -1346, -1346, 10149,    16, -1346, -1346,  1963,
+     227, -1346, -1346, 10149, -1346,  7659, -1346, -1346,   797,   797,
+     187,  9788, -1346,   954, -1346,   797, -1346, -1346, -1346, -1346,
+   10950, -1346,   397, 11485, -1346,   227,   960, -1346,  2348, 11525,
+    7794,  6374, -1346, -1346, -1346, -1346,   980,  2887, -1346,  9408,
+     713,  7345, -1346, -1346, -1346, -1346,  1499,   420,   951,  1743,
+     969,   967,   990, 11820,  1343,  9247, -1346, 11820, -1346, -1346,
+   -1346, -1346,   422, -1346,   996,   976, -1346,  9552, -1346, 10682,
+   -1346, -1346,  9552, -1346,  9670,  9552, -1346, -1346,   192, -1346,
+     452,  1006,  1007, -1346,  7884, -1346,   532, -1346, -1346,  5182,
+   -1346,   763,  5182, -1346, -1346, -1346, -1346, -1346, -1346, -1346,
+   -1346, -1346, -1346, -1346, -1346,  5182, -1346, -1346,  5182,  5182,
+    5182,  5182,  5182,  5182,  5182,  5182,  5182,  5182,  5182,  5182,
+    5182,  5182,  5182,  5182,  5182,  5182,  3194,   733,   674, -1346,
+   -1346,   140,   140, -1346, -1346,  9788, -1346, -1346,   949, -1346,
+   -1346,   949,  6559, -1346, -1346,  1743, 10642,  7884,  1002, -1346,
+   10757, -1346,   797,   797,   797, -1346, -1346,   587, -1346,  1011,
+     953,  1016,  5182,  2260,   168,   951, -1346,   140,   140,   951,
+     211, -1346,   140,   140,   949,   951, -1346,   140,   140, -1346,
+     865, -1346, 10797, -1346,  1650, 11676,   797,   797, -1346,  1953,
+     266,   729, 10797, -1346,  7263, -1346,   951, -1346, 10609, -1346,
+     193,  9018,  9018,  1650,  4710,   989, -1346,   550,  1010,  1012,
+   -1346,  1021,  3873,   390, -1346,  1117,  1650,  9018,   606,  2348,
+     606,   235,   865, -1346, -1346,   274,   865, -1346, -1346, -1346,
+    2348, -1346,   522, -1346,   865,   227, 10950, -1346,   487,  1045,
+     620,  1049, -1346,   874,   227, -1346, -1346, 10149,   227,   633,
+    6712,  1046, 11676, -1346, -1346,  1051, -1346, -1346, -1346,   606,
+   -1346, 11601, 11751,   876, -1346,  9018,   518,  9333, -1346, -1346,
+     587,  1047,  1050,  1499,  2494, -1346, -1346, 11820, -1346, -1346,
+    1743,  1052,  5182, -1346,  1743,  1053, -1346, -1346,  1057, -1346,
+    1053,  1060,   509,  5182, -1346,  1061,   192,  1063,  1072,  1073,
+   -1346,  1076,  1077,  7884, -1346,  5182, -1346,  5073,  5182,  1068,
+   -1346, -1346,   657, -1346,  5182, -1346, -1346,   828, -1346, -1346,
+   -1346, -1346,   385,   385,   290,   290,   801,   801,   801,   801,
+     638,   638,   472,   837,   833,   835,   879,  5182,   327, 10950,
+    1084,  1085,  1086,   674, -1346, -1346, -1346, -1346, -1346, 10950,
+   10950, -1346, -1346, 10609, -1346,  8256, 10024, -1346, -1346, -1346,
+     953, 10950,   985,  1089,  1093,  1107,  1110,  1115,  1120,  1124,
+   -1346,  4610, -1346,  2260, -1346, -1346, -1346, -1346, -1346, -1346,
+   -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346,
+   -1346, -1346,   949, -1346, -1346, -1346,   951,   797, -1346, -1346,
+   -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346,  1127,
+    1130, -1346,   118,  1068,  4710, -1346, -1346, -1346,  3398,  1123,
+   -1346, -1346, -1346, -1346,  1743,  7483,  1215, -1346, -1346, -1346,
+   -1346,  1116, -1346, -1346, -1346,   949, -1346, -1346, -1346,   949,
+     713,  1136,   949, -1346, -1346, -1346, -1346, -1346, -1346,  8132,
+   -1346,   227, -1346,  1142, 10682, -1346,  2205, -1346,   542,  1743,
+   -1346,  1152,  1157, -1346, -1346,  1156,  1162, -1346,   775,  1004,
+   -1346,   751, -1346,  2494,   951, -1346,   967, -1346, -1346, -1346,
+     969,  1165, 11820,  9247,  9788,  1168, -1346, -1346,   677,  1169,
+    8132,   606,  1169, -1346, -1346,  1169, -1346,  3398, -1346, -1346,
+   -1346,  1163,  5182,  1278, -1346,  5182, -1346,  1278, -1346, -1346,
+    5182, -1346,   317,   865, -1346, -1346, -1346, -1346, -1346, -1346,
+   -1346,   876,  9906, -1346, -1346,  8380,  1174, -1346,   318,   865,
+   -1346,   324,   376,   865, -1346,   797,  4908, -1346, -1346, -1346,
+   10950, 10950, -1346,  9408,  9408,  1177,  1176,  1184,  1186, -1346,
+     793,    61,  1068, -1346,  1278, -1346,  3873, -1346,  5182,   543,
+   -1346,  7760,  1195,  1198, 11362,  1199,  1200,  1074,  1128,  1197,
+    5182,  1209,   227,  5182,  5182,  1300,  1189,  1193,   187,   182,
+     688,  1196,  1212,  1214, -1346, -1346, -1346,  1217, -1346, -1346,
+   -1346, -1346, -1346, -1346, -1346, -1346,  1219, -1346,  1743,  1234,
+    5182, 10950, 10950,   118,   140,  1237, -1346, -1346,  2205,   575,
+    1180,  5182,  2333,   588, -1346, -1346,  1222,    54,  1222, -1346,
+   -1346, -1346,   140,   140,  1743, -1346, -1346, 10376, -1346, -1346,
+   -1346, -1346,  1255,  1004, -1346, -1346,  1238, -1346,  1254, -1346,
+    1053, -1346, -1346,  2348,  1259, -1346, -1346, -1346,   708,  1256,
+   -1346,  1266,  1021,  5182,  1265,  1163, -1346,   818, -1346, -1346,
+    1264, -1346,    23, -1346,  1270,  1264, -1346,  1275, -1346, -1346,
+   -1346,   949,  1276,  1280,  8008,  1287,  1288,  1291, -1346,   140,
+    1294, -1346, -1346, -1346,   949, -1346, -1346, -1346, -1346, -1346,
+   -1346,   949,  5182,  5182,   876,  1298, -1346, -1346, -1346, -1346,
+   -1346, -1346, -1346, -1346, -1346, -1346, -1346,  5182,  5182,  1306,
+    1307,  1264, -1346, -1346,  1743, -1346, -1346, -1346,  5182,  5182,
+    1361,  5182, -1346, -1346,  1296, -1346,  1297,  5182,  1302,  1303,
+    5182,  1094,  1304,    -2, -1346,    55,  1896, -1346, -1346,  7483,
+    1273,   140,   608, -1346, -1346, -1346, -1346, -1346, -1346, -1346,
+   10451,   618, -1346,   858,  1310,  1313,  1329, -1346,  2333, -1346,
+     140, -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346, 11178,
+   -1346,  9408, -1346,  1330, -1346, -1346,  9247,   621,   664, -1346,
+    1328, -1346,  1336, -1346, -1346,  1347,  1331, -1346, -1346,  1331,
+    1331,  1278,  1349,   897,  1631, -1346,  1350, -1346, 10950, -1346,
+   -1346, -1346, -1346, -1346,  1355, -1346, 10950, 10950, 10950, -1346,
+   -1346,  1357, -1346,  1359,  1345,  1365,   815,  9093,  9213, -1346,
+   -1346, -1346, -1346,  1362, -1346,   710,   712,  1344,   754,  7625,
+   -1346, -1346,   698, -1346, -1346,   761,  1371,  1376,   227,  1429,
+     937, -1346, -1346,  5182, -1346,  1379,   522,  5182, -1346, -1346,
+   11362, -1346,  1384,  1385, -1346, -1346,   416,   865, -1346, -1346,
+    2205, -1346, -1346, -1346,  1375, -1346, -1346, -1346, -1346, -1346,
+   -1346,  9247, -1346, -1346, -1346,  1278, -1346, -1346, -1346, -1346,
+   -1346, -1346, -1346, -1346, -1346, -1346, -1346, -1346,  1387,  1390,
+   -1346, -1346, -1346, -1346, -1346, -1346, -1346,  1396, -1346,  1397,
+   -1346, 11362,    52,  5182, 11362, -1346,  1400,  5182, -1346,  8823,
+    9247, -1346,   242,  1401,  1418, -1346, -1346,  1406,  1407,  1388,
+     522,   291,   885, -1346, -1346, -1346, -1346, -1346, -1346,   949,
+   -1346, -1346,  1650,  2348,  1409,  1264,  1278,  1278,  1416,  1417,
+    1421,  1425, -1346, -1346,  9408,  1420, -1346,  1497,  5182,  1412,
+   -1346, -1346, 11272, -1346,   794, -1346,  1415, 11362,  1424,  9483,
+   -1346, -1346,  1439, -1346,  1442, -1346,  1454,  1461, -1346,  1431,
+    1427,   210,  1430, 10950,  9247, -1346, -1346, -1346,  1455,  1264,
+    1264, -1346, -1346, -1346, -1346, -1346, 11362,    76, -1346,   476,
+   -1346, -1346,  5498, -1346, -1346,  1443,  5182, -1346,  5182,  5498,
+     227, 10830,   227, 10830,  1462, -1346,  1467, -1346,  1457, -1346,
+    5182,  1480,   308,  1475, -1346, -1346, -1346,  1479, -1346,  1483,
+    1485, -1346,  5182,  5182, -1346, -1346,   963,    96, -1346, -1346,
+    1471, -1346,   963, -1346, -1346,  1784, 10757,   606, -1346, -1346,
+     227, 10830,   227, 10830,   210,  1487,  5182,  1477,   210,   210,
+    1500,  1502, -1346, -1346, -1346, -1346, 11272,  1498,   963,  8747,
+    5182, 11182,  1503,   963,  1510,  1784,  2509, -1346, -1346, -1346,
+    1512, -1346, -1346, -1346, -1346,  1493,   522,  1516, -1346,   358,
+   -1346, -1346,  9788, -1346, 11044, -1346, 11272, -1346, -1346,  1501,
+   10954, -1346, -1346, 11182,   227,  2509,   227,  1519,  1520,   522,
+    1522, -1346,  1509,   522,   809, -1346, 11044, -1346, -1346, -1346,
+   10954, -1346, -1346, -1346,   227,   227, -1346,   568,  5182, -1346,
+     824, -1346, -1346, -1346, -1346, -1346, -1346,   522,   606,  1533,
+    1514, -1346, -1346, -1346, -1346,   843, -1346, -1346,  1518,   606,
+   -1346, -1346
 };
 
@@ -1790,29 +1811,29 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1330,  4602,  1553, -1330,  2208, -1330,     7,     0,   -94, -1330,
-   -1330,   478,  -507,  -466,  -839,  -847, -1330,  -174,  5285,   694,
-   -1330,    66,   362,   365,   538,   366,   931,   937,   940,   924,
-     939, -1330,   320,  -636,  4424,  -882, -1330, -1330,   578,  -177,
-    -942,  -361, -1330,   120, -1330,   354, -1077, -1330, -1330,    67,
-   -1330, -1071, -1040,   183, -1330, -1330, -1330, -1330,    -9, -1090,
-   -1330, -1330, -1330, -1330, -1330, -1330,   262, -1329, -1330, -1330,
-    -798, -1330,    54,     4, -1330,   109, -1330,  -306, -1330, -1330,
-   -1330,   512,  -805, -1330, -1330,     3, -1131,   270,   704, -1330,
-   -1330, -1330,  -145, -1330,   250,  1286,  -188,  2355,  4289, -1330,
-   -1330,    18,  1452,   993,  1681, -1330,  2638, -1330, -1330,   112,
-    2990, -1330,  3232,  1709, -1330, -1330, -1330,  -833, -1330,   658,
-     505,   257,   500,  -445, -1330, -1330,   837,   645,  -484, -1330,
-    -489,  -339,  -560, -1330, -1330,  -919,  -900,  -129,  1056, -1330,
-     240, -1330,   970,  -170,  -275,  -200,  -136,   629,   717, -1330,
-     911, -1330,  3561,  1374,  -401,   857, -1330, -1330,   664, -1330,
-    -432, -1330,   316, -1330, -1330, -1330, -1224,   360, -1330, -1330,
-   -1330,  1091, -1330,    23, -1330, -1330,  -799,  -109, -1287,  -148,
-    5540, -1330,  5415, -1330,   845, -1330,  -100,    90,  -175,  -171,
-    -162,     2,   -40,   -34,   -30,   493,    15,    22,    32,   -92,
-    -161,  -159,  -157,  -156,  -314,  -467,  -462,  -442,  -512,  -313,
-    -534, -1330, -1330,  -503,  1006,  1011,  1014,  1751,  5167,  -538,
-    -510,  -504,  -500,  -533, -1330,  -939, -1005,  -999,  -995,  -568,
-    -305,  -309, -1330, -1330,   392,   502,   -58, -1330,  3974,   -39,
-    -574,  -222
+   -1346,  4712,  1583, -1346,  1844, -1346,     7,     0,   257, -1346,
+   -1346,   637,  -508,  -460,  -702, -1047, -1346,   -72,  1640,  1181,
+   -1346,   368,   492,   531,   498,   557,  1092,  1099,  1100,  1106,
+    1091, -1346,  -277,  -697,  5286,  -774, -1346, -1346,   722,   565,
+    -972,   603, -1346,   111, -1346,   496, -1130, -1346, -1346,   208,
+   -1346, -1322,  -943,   325, -1346, -1346, -1346, -1346,   128, -1151,
+   -1346, -1346, -1346, -1346, -1346, -1346,   400, -1046, -1346, -1346,
+    -544, -1346,   196,   138, -1346,   243, -1346,  -329, -1346, -1346,
+   -1346,   648,  -823, -1346, -1346,     5, -1137,   564,   270, -1346,
+   -1346, -1346,  -130, -1346,    18,  -452,    47,  -213,  -191,  2570,
+    4418, -1346, -1346,   131,   355,   744,  1341,    39,  2331, -1346,
+   -1346, -1346,   276, -1346,   365,   201,  2987,    15,  -227, -1346,
+   -1346,  5549,  5788,  -872, -1346,   795,   639,   391,   634,  -919,
+   -1346, -1346,  6180,   970,   781,  -314, -1346,   -52,  -391,   770,
+   -1346, -1346,  -927,  -863,   -63,   -19, -1346,  1233, -1346,  1364,
+     -99,  -296,  -180,  -136,   762,   840, -1346,  1048,   405,  3462,
+    1523,  -417,   986, -1346, -1346,   792, -1346,  -436, -1346,   -73,
+   -1346, -1346, -1346, -1262,   494, -1346, -1346, -1346,  1230, -1346,
+       6, -1346, -1346,  -803,  -107, -1345,  -150,  6282, -1346,  3941,
+   -1346,   982, -1346,   -18,   212,  -176,  -173,  -169,     2,   -42,
+     -40,   -32,   586,    10,    22,    49,    50,  -166,  -163,  -160,
+    -158,  -318,  -540,  -528,  -480,  -587,  -304,  -556, -1346, -1346,
+    -509,  1145,  1154,  1155,  1813,  5019,  -577,  -507,  -497,  -488,
+    -468, -1346,  -925, -1029, -1004, -1003,  -581,  -252,  -244, -1346,
+   -1346,   169,    77,   -45, -1346,  3860,   -39,  -632,   147
 };
 
@@ -1820,796 +1841,858 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -528
+#define YYTABLE_NINF -547
 static const yytype_int16 yytable[] =
 {
-      50,   111,    96,   385,   113,   145,   255,   386,   110,   668,
-     416,   146,   161,   427,   735,   147,   387,   388,    69,   389,
-    1169,   390,   391,   350,   589,   594,  1170,   371,   372,   580,
-    1171,   111,   111,   398,    50,  1010,    96,   717,   811,  1115,
-    1116,  1012,  1042,  1144,   614,    50,   248,   271,   618,   793,
-     783,    50,    69,   156,   762,   796,   834,   140,    50,  1117,
-     148,   803,  1349,    50,   894,   187,    50,   149,   210,    50,
-     196,   220,   213,   161,   784,   792,  1405,   150,   385,   393,
-     785,   703,   386,  1080,   786,   708,   413,   394,  1174,  1453,
-      95,   387,   388,   331,   389,   859,   390,   391,    33,   457,
-     654,   461,   463,   319,  1258,    50,  1147,  1148,    50,   509,
-      33,    33,    76,  1323,    33,    50,   511,   780,    33,   663,
-     397,   197,   781,   111,    95,   121,  1486,   667,  1488,   686,
-    1126,   824,   824,  -240,  -240,   144,  1260,   826,   145,   658,
-     660,    95,   782,    50,   146,   156,    76,   824,   147,  1363,
-    1364,  1405,   843,   183,   393,    50,    95,   361,   122,    95,
-     109,   693,   394,   687,   423,  1432,   565,   462,   399,   462,
-     240,  1131,   399,    43,    44,  1259,   168,  1132,    50,    50,
-     554,   156,   407,   467,   399,   399,  1198,   163,   399,  1165,
-     794,   586,   585,   148,   824,    50,  1261,   926,   652,   882,
-     149,   728,    33,    50,   903,   156,  -240,   931,   932,   707,
-     150,   164,    50,   145,   555,    50,   241,   430,   942,   146,
-     423,  1365,   111,   147,   780,  1203,   365,   503,   719,   781,
-     240,   321,   111,    95,  1274,   111,  1208,   657,   659,    50,
-     111,    96,   366,   941,    33,    95,   796,   451,   -10,   782,
-      63,    33,   954,    50,    50,   696,   156,    69,   930,   161,
-      50,   457,   449,   111,  1209,   771,   139,   784,   384,   183,
-      57,   114,   573,   785,   594,   141,  1323,   786,   953,   270,
-     457,   825,   825,  1323,    63,   723,  1117,   151,   457,   766,
-     814,   350,   647,    95,   815,   582,  1409,   825,   172,   925,
-     648,   580,  1320,   656,    57,    95,   580,   405,   820,   661,
-     780,  1425,  1385,  1115,  1116,   781,   801,    33,   585,   509,
-      50,  1053,   361,   847,   509,   399,   713,   509,   715,    95,
-     424,   716,  1386,  1117,   720,   782,   204,    50,    50,   214,
-     432,   500,  1323,   465,   825,   249,   793,    33,   250,  1010,
-      33,    76,  1461,    33,    50,  1012,    76,   563,    50,  1291,
-     866,  1294,  1296,   564,   535,   536,   647,   797,   627,   811,
-      33,   800,  1462,   784,   648,   319,   319,   806,   756,   785,
-    1373,   142,   686,   786,   350,  1505,   235,   375,  1516,   851,
-    1172,   399,    50,   818,   361,  1112,  1113,   821,  1504,  1409,
-     535,  1470,   319,   376,  1409,  1122,   510,  1475,  1517,   568,
-      95,   399,    50,  1102,  1105,  1437,   687,  1525,    50,  1083,
-     166,   399,  1096,  1520,   399,  1100,   195,   585,   588,  1409,
-    1524,  1123,  1500,  1363,  1364,   535,  1409,  1507,  -295,  1322,
-    1400,  1123,  1103,   158,   585,   319,   350,   238,  1438,   677,
-    -523,  1350,   426,   111,  1078,   678,  1160,  1161,    50,  1117,
-     110,   934,  1439,   487,   319,   240,    50,  1063,   361,  1445,
-      50,  1446,    96,   251,  1169,    50,   952,   594,   111,   999,
-    1170,    33,   183,   111,  1171,   428,  1234,  1235,    69,    63,
-     378,   350,   350,  1197,   458,   835,  1055,   270,   544,   545,
-     469,   380,   105,   105,   158,  1375,   379,   350,   694,    57,
-     954,  1482,  1394,  1395,   695,   111,   483,   381,    76,   484,
-     111,   457,   729,   382,   836,   319,   626,   734,   488,   845,
-     489,   490,  1502,   546,   547,   879,   105,    76,   434,   383,
-     855,  1174,  1039,   837,   157,    76,   -12,  1129,  1039,   322,
-     665,   446,  1175,  1341,   350,   399,   188,   856,  1040,   211,
-      95,   323,   221,  1130,  1167,   588,   686,   812,  1176,  1129,
-    1274,   105,   582,  -448,   952,   679,    39,   172,   169,   170,
-      42,  1175,    76,  1281,    50,  1266,  1178,    50,  1178,    43,
-      44,   957,  1283,   773,   615,   422,  -449,  1270,   619,  1282,
-     687,   266,  1443,   737,   738,   739,  1541,    50,  1284,  1443,
-       8,     9,    10,    11,    12,   109,   510,   109,  1135,  1114,
-    1542,   510,    50,  1142,   510,   268,   111,   964,    43,    44,
-      43,    44,   580,   269,   723,    50,   157,   111,    50,   111,
-     324,    39,    33,   816,   844,    42,   846,   817,   362,    50,
-    1326,   422,   325,  1298,    43,    44,   458,   883,   733,   585,
-    1489,  1300,  1301,  1302,  1493,    47,    48,  1050,  1501,   816,
-      36,   326,   157,  1049,   779,   458,   327,   588,   111,   586,
-     777,   360,   585,   458,   364,   878,   540,   541,    47,    48,
-     158,    50,    50,   537,    51,   112,   157,   970,   111,   538,
-     539,   556,   111,   399,    58,    58,   373,  1018,   431,    47,
-      48,   709,   277,   722,   556,   377,   399,   710,   684,   723,
-      63,   397,    47,    48,   395,    43,    44,  1402,    51,     2,
-     200,     4,     5,     6,     7,   350,   860,   862,    58,   143,
-      57,   105,   723,   723,   414,    51,   868,   437,   919,   415,
-     686,   504,   564,   367,   920,  1337,   447,   179,   548,   549,
-     203,   448,  1107,    51,     2,   200,     4,     5,     6,     7,
-      58,  1031,  -112,    58,   858,   470,  -112,    50,    76,  1033,
-    1065,   779,   588,   865,   687,  -401,   920,   867,  1194,  1459,
-      50,   913,    76,   999,   564,   222,  1309,    37,   112,    38,
-    1310,  1468,  1402,   923,   920,  1316,   112,   494,  1317,   254,
-     259,   723,  -296,   362,   723,   240,   321,   399,  1162,     8,
-       9,    10,    11,    12,  1491,  1319,   542,   543,  1431,   350,
-     350,   723,    37,   627,    38,  1127,   298,   143,  1327,   111,
-     996,   495,  1410,   498,   723,   112,   334,   813,   723,   203,
-     385,    33,   551,  1535,   386,  1544,   337,   503,    69,   564,
-     319,  1541,   827,   387,   388,   550,   389,   779,   390,   391,
-    1552,    50,   179,   179,   111,   842,  1553,   321,   399,    36,
-     588,   687,   773,  1387,   920,   362,  1332,  1333,    50,   254,
-     407,   643,   399,  1312,  1363,  1364,  1543,    51,   812,  1204,
-    1205,  1056,   740,   741,  1338,   552,   111,   742,   743,   203,
-     553,   328,   627,  1066,   748,   749,   458,   574,   111,    58,
-      -3,   640,   111,  1031,   650,  1074,   651,   393,   641,  1074,
-     458,  1033,   642,    51,   644,   394,   883,   109,   585,   136,
-     137,   259,   645,    58,    47,    48,   259,   254,   254,  1189,
-      43,    44,    76,   112,   646,  1362,  1240,  1241,  1370,  1243,
-      39,  1032,   169,   170,    42,  1247,   653,   245,  1250,   111,
-     586,   684,   105,    43,    44,  -373,  1074,  -244,   588,   996,
-     298,   263,    50,    50,    50,   698,  1021,   467,   321,   399,
-    -297,   700,   298,   702,    69,   711,   712,     8,     9,    10,
-      11,    12,   138,   535,   724,    39,  1408,   725,   557,    42,
-     774,  1412,   776,   111,   143,   794,   321,   585,    43,    44,
-     893,   787,  1138,    50,   112,    50,   -14,    50,   334,    33,
-     833,   -15,   587,   606,   832,   109,   839,   136,   137,   111,
-    1436,   861,   500,   863,    45,  -527,   875,   611,    43,    44,
-    -422,   611,    47,    48,   887,  1277,   892,    36,    50,   695,
-     899,   874,   901,   223,  1518,   904,   224,   907,   908,   228,
-     906,   230,   111,   647,   909,   924,   830,   233,   910,  1074,
-     927,   648,   744,   745,   746,   747,   179,   917,    76,  -298,
-      63,   928,   929,   264,   943,   944,     8,     9,    10,    11,
-      12,   945,   972,   350,   350,   946,   254,  1146,   298,   298,
-      57,   947,   254,  1032,   611,  1168,   948,  1032,    39,   949,
-     169,   170,    42,  -410,   337,  -409,   109,  1013,    33,   111,
-    1015,    43,    44,  1071,  1019,   298,  1072,  1519,  1073,    43,
-      44,  1369,  1022,  1519,     8,     9,    10,    11,    12,   965,
-    1043,  1044,   254,  1045,   996,   684,    36,  1046,   912,  1519,
-     254,  1054,   611,  1519,    51,  1064,  1068,  1336,  1057,   692,
-    1094,  1133,    69,    50,    58,  1031,    33,  1118,   112,  1119,
-    1140,  1120,  1121,  1033,  1251,  1252,  1253,  1134,  1136,  1137,
-     298,  1145,   112,   723,  1056,   298,  1149,   298,   298,   223,
-      -9,  -445,   443,   -11,    36,    -3,   111,   334,   111,   111,
-    1158,  1156,  1164,  1074,  1026,  1074,  1074,   337,   109,  1152,
-     136,   137,  1139,  1141,  1143,  1185,    63,   483,  1187,  1190,
-     350,    43,    44,   480,    39,  1195,   169,   170,    42,  1391,
-    1196,  1384,   109,  1199,  1210,  1081,    57,    43,    44,  1071,
-     557,   557,  1072,  1206,  1073,    43,    44,   109,   298,   136,
-     440,   874,  1325,  1032,  1212,   996,    76,  1214,   611,   334,
-      43,    44,   606,   360,  1216,    50,  1215,  1217,   587,   337,
-    1218,   587,  1227,  1202,  1220,  1236,  1242,   115,  1237,  1056,
-     111,  1245,  1426,   965,  1264,  1246,   441,  1074,  1271,  1248,
-     611,   442,  1272,  1249,   385,   611,  1273,   606,   386,  1257,
-    1279,   611,  1285,  1287,   611,   611,   996,   387,   388,   996,
-     389,  1288,   390,   391,   337,   337,  1289,  1292,   213,  1297,
-     611,  1299,   254,  1305,   223,  1306,   228,   154,   628,   684,
-     337,  1481,   105,   254,  1307,  1308,   893,    50,    50,  1315,
-    1253,   111,   111,  1318,  1346,  1328,    76,  1329,  1074,  1074,
-    1335,  1357,  1339,   112,  1426,  1032,  1340,   996,  1426,  1426,
-    1358,  -411,   996,  1330,  1361,  1372,  1377,   611,   884,   606,
-     393,  1379,  1381,  1382,  1392,   692,   692,   337,   394,  1383,
-     246,  1396,  1056,  1397,  1398,  1310,  1514,  1399,   154,  1401,
-     105,   996,  1406,  1411,    63,  1415,  1417,  1413,  1419,   647,
-    1421,  1433,  1423,  1454,  1456,   334,  1460,   648,  1424,  1530,
-    1430,  1444,   223,  1530,    57,  1325,  1463,  1458,   314,  1466,
-    1465,  1467,  1325,  1474,   874,  1490,   684,   329,  1492,   145,
-     209,  1495,   893,   893,  1496,   146,  1508,  1547,   697,   147,
-      50,   111,    70,   706,  1499,   557,  1506,   319,  1483,  1510,
-    1513,  1057,  1515,  1528,   611,  1521,   937,  1529,  1550,  1532,
-     996,   587,  1533,  1151,  1551,   996,  1554,   753,   105,    50,
-      50,   750,   156,    39,   587,   418,    70,    42,   751,   421,
-     209,  1325,   752,   754,   458,  1070,    43,    44,   996,    39,
-     996,   176,   177,    42,   996,  1469,   676,   996,  1263,    50,
-    1376,   361,    43,    44,    57,  1536,  1331,  1494,   206,    76,
-     996,  1534,   691,  1447,   996,  1157,    76,  1024,  1166,   209,
-      47,    48,  1345,  1179,   298,  1448,  1052,  1452,  1025,   895,
-     399,  1067,   111,   838,    58,   421,    47,    48,   475,  1548,
-     971,  1280,   889,   111,  1051,   902,  1057,   874,   334,  1026,
-    1555,   689,   758,   112,     0,  1027,     0,   759,   337,   465,
-     760,     0,   314,     0,  1485,     0,  1487,   884,   884,     0,
-       0,     0,   692,     0,   154,    76,     0,  1390,     0,   209,
-       0,   109,   112,   298,   204,   214,   831,     0,  1071,   334,
-       0,  1072,    58,  1073,    43,    44,   444,   162,     0,   167,
-       0,     0,   173,   174,   175,     0,   572,     0,     0,     0,
-     577,   209,   109,     0,   136,   137,   209,     0,  1526,   227,
-    1527,   334,  1293,     0,     0,    43,    44,     0,     0,   612,
-     236,   237,     0,   616,   428,     0,     0,     0,  1539,  1540,
-       0,     0,   611,   611,     0,     0,   105,   458,     0,  1057,
-       0,   704,   337,   337,   458,     0,   705,   429,   891,     0,
-     298,     0,   480,     0,     0,     0,     0,    57,     0,     0,
-      58,     0,     0,   893,    57,     0,     0,     0,     0,     0,
-       0,    70,     0,   105,     8,     9,    10,    11,    12,     0,
-     314,   314,    39,     0,   176,   177,    42,     0,     0,     0,
-       0,   676,     0,   209,     0,    43,    44,  1027,   109,  1027,
-       0,  1027,     0,   458,     0,  1071,    33,   314,  1072,     0,
-    1073,    43,    44,   396,     0,     0,   112,     0,     0,   115,
-       0,   178,   884,    57,     0,   893,   105,   207,     0,    47,
-      48,     0,   254,     0,    36,     0,   226,   893,   893,  1295,
-       2,   200,     4,     5,     6,     7,     0,     0,   475,     0,
-     314,     0,   475,     0,     0,   208,     0,     0,     0,     0,
-     893,     0,   314,   334,   314,     0,     0,   314,   105,   314,
-     314,   206,     0,   209,     0,     0,     0,   207,   883,     0,
-     585,     0,     0,   628,     0,     0,    47,    48,  1451,   975,
-    1451,     0,     0,   676,     0,     0,     0,     0,    39,     0,
-     176,   177,    42,   676,   676,   208,     0,   105,    37,     0,
-      38,    43,    44,   209,   676,     0,   207,     0,     0,     0,
-       0,     0,     0,     0,  1041,     0,     0,  1451,   298,  1451,
-     314,     0,   893,     0,     0,     0,     0,   253,    58,   112,
-     769,     0,     0,     0,   208,    47,    48,  1027,   522,   523,
-     524,   525,   526,   527,   528,   529,   530,   531,   532,     0,
-     611,     0,   628,     0,     0,   112,   576,     0,   583,     0,
-       0,   105,   810,    -3,     0,    58,   207,   577,     0,   609,
-     610,     0,   533,   819,    39,     0,   169,   170,    42,   105,
-       0,   206,     0,     0,     0,     0,   105,    43,    44,     0,
-       0,     0,    70,     0,   208,     0,   611,   611,   207,     0,
-       0,     0,     0,   207,   401,     0,   337,   337,   298,     0,
-     514,   409,     0,   364,   515,   516,   517,     0,    58,     0,
-       0,     0,   209,     0,     0,   871,   208,     0,     0,     0,
-       0,   208,     0,   126,     0,   127,   128,   129,   518,  1027,
-     519,     0,   520,   521,     0,   105,    43,    44,     0,     0,
-     112,   475,   209,   975,     0,     0,     0,   209,     0,     0,
-      58,     0,     0,   514,     0,     0,     0,   515,   516,   517,
-       0,     0,     8,     9,    10,    11,    12,   401,     0,  1182,
-       0,   676,   676,     0,     0,     0,     0,     0,   259,   112,
-     207,   518,     0,   519,     0,   520,  1262,     0,    58,    58,
-       0,     0,     0,    39,    33,   169,   170,    42,     0,     0,
-       0,     0,   254,     0,     0,   209,    43,    44,   208,     0,
-       0,     0,     0,   611,     0,     0,   933,     0,     0,   209,
-     429,     0,    36,   337,     0,   562,     0,    39,   259,   176,
-     177,    42,   676,   676,   566,     0,     0,   569,    58,     0,
-      43,    44,     0,   112,     0,     8,     9,    10,    11,    12,
-       0,     0,     0,    58,     0,     0,     0,     0,     0,  1239,
-     207,   112,     0,     0,     0,     0,   178,     0,   112,     0,
-     112,    58,   112,     0,    47,    48,   207,    33,    58,     0,
-       0,     0,     0,   206,     0,     0,     0,     0,   208,     0,
-       0,     0,     0,     0,     0,   401,     0,   206,     0,   409,
-     207,     0,     0,     0,  1480,    36,   209,     0,     0,   112,
-      39,   112,   176,   177,    42,  1023,     0,     0,     0,     0,
-       0,     0,     0,    43,    44,     0,     0,   112,   208,     0,
-       0,     0,     0,  1480,  1480,     0,     0,    58,     0,     0,
-       0,     0,     0,   475,  1058,   314,     0,     0,     0,   584,
-     298,   585,     0,     0,     0,     0,     0,    47,    48,     0,
-       0,     0,     0,  1480,    39,     0,   176,   177,    42,     0,
-       0,     0,     0,     0,     0,     0,   401,    43,    44,     0,
-       0,     0,     0,   810,   206,   876,     0,   877,     0,     0,
-       0,     0,     0,     0,   880,   881,     0,     0,     0,   886,
-    1278,     0,     0,   584,     0,   585,     0,     0,     0,     0,
-       0,    47,    48,     0,     0,     0,   896,     0,     0,   207,
-       0,   900,     0,     0,     0,   586,   171,     0,     0,   676,
-       8,     9,    10,    11,    12,     0,     0,   676,   676,   676,
-     583,     0,     0,     0,     0,     0,     0,   208,     0,   207,
-       0,     0,    70,     0,   207,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,     0,     0,     0,   562,   562,     0,
-       0,     0,     0,   171,   209,     0,   171,   208,     0,     0,
-       0,     0,   208,     0,     0,     0,     0,     0,   871,     0,
-      36,     0,     0,     0,     0,    39,     0,   176,   177,    42,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,    44,
-       0,     0,   207,     0,     0,    66,   116,     0,     8,     9,
-      10,    11,    12,     0,     0,     0,   207,     0,     0,     0,
-       0,     0,     0,     0,  1025,   960,   399,   961,   962,   963,
-     208,     0,    47,    48,     0,     0,     0,     0,     0,    66,
-      33,   849,   429,     0,   208,   853,  1014,     0,     0,     0,
-      39,     0,   176,   177,    42,     0,   155,     0,     0,     0,
-       0,     0,  1020,    43,    44,     0,     0,     0,    36,     0,
-     171,     0,     0,    39,   215,   176,   177,    42,    70,     0,
-       0,     0,     0,     0,     0,  1047,    43,    44,     0,  1025,
-       0,   399,     0,     0,   676,     0,     0,    47,    48,     0,
-       0,   871,     0,   207,     0,     0,     0,     0,     0,   247,
-       0,     0,  1479,     0,   399,     0,     0,     0,   171,  1069,
-      47,    48,     0,     0,  1079,     0,     0,  1058,     0,  1082,
-       0,   208,     0,     0,  1087,  1088,     0,     0,     0,  1090,
-       0,  1091,  1092,     0,     0,  1095,     0,     0,   320,     8,
-       9,    10,    11,    12,  1110,     0,   247,   339,     0,     0,
-       0,     0,   562,     0,     0,     0,     0,     0,     0,     0,
-    1124,  1125,    39,     0,   176,   177,    42,     0,     0,     0,
-       0,    33,     0,     0,   392,    43,    44,     0,     0,     0,
-       0,     0,     0,     0,     0,   171,     0,     0,     0,     0,
-     412,     0,  1153,   417,   419,  1155,     0,     0,   155,    36,
-       0,  1479,   171,   399,    39,     0,   171,     0,    42,    47,
-      48,     0,  1058,     0,     0,     0,     0,    43,    44,   435,
-       0,     0,     0,   438,     0,   439,     0,     0,   445,     0,
-       0,     0,     0,     0,    66,     0,     0,     0,     0,   459,
-       0,     0,     0,    45,     0,     0,    70,     0,  1188,   466,
-       0,    47,    48,     0,  1192,  1193,     0,   419,     0,     0,
-       0,   207,     0,  1200,     0,     0,     0,     0,  1207,     0,
-       0,     0,     0,  1211,     0,     0,     0,     0,    74,     0,
-       0,     0,     0,     0,     0,     0,  1219,     0,     0,   208,
-       8,     9,    10,    11,    12,     0,     8,     9,    10,    11,
-      12,     0,  1226,     0,  1228,  1229,  1230,  1231,     0,     0,
-       0,     0,    74,     0,     0,  1058,     0,     0,  1085,  1238,
-       0,  1124,    33,     0,     0,   247,     0,     0,    33,   578,
-       0,     0,     0,     0,  1098,   608,    70,     0,   209,     0,
-       0,     0,  1450,     0,  1450,     0,     0,   216,   613,     0,
-      36,     0,   613,  1267,  1268,    39,    36,   176,   177,    42,
-       0,    39,     0,     0,     0,    42,     0,     0,    43,    44,
-       0,     0,     0,     0,    43,    44,     0,     0,     0,     0,
-       0,  1450,     0,  1450,     0,     0,     0,     0,   209,     0,
-       0,     0,     0,     0,   253,     0,     0,     0,     0,     0,
-     691,   459,    47,    48,     0,     0,     0,     0,    47,    48,
-       0,     0,     0,     0,     0,   339,   206,  1303,  1304,     0,
-     459,     0,   314,   401,     0,     0,     0,  1314,   459,     0,
-     342,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   671,     0,     0,   419,     0,
-       0,     0,     0,     0,     0,   171,     0,     0,     0,     0,
-       0,     0,     0,   685,     0,    66,   429,     0,     0,     0,
-     171,     0,     0,     0,     0,     0,     0,   419,     0,     0,
-       0,   419,     0,   171,     0,     0,     0,     0,     0,     0,
-       0,  1353,     0,  1354,  1355,  1356,     0,     0,     0,    70,
-       0,     0,   436,     0,     0,  1360,    70,     0,   339,     0,
-       0,     0,     0,  1371,     0,     0,   167,    74,     0,     0,
-       0,     0,    74,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,  1393,     0,    28,    29,    30,     0,     0,
-       0,     0,   761,     0,     0,    33,   869,     0,     0,   401,
-       0,     0,     0,     0,     0,    70,     0,     0,     0,   613,
-     772,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   790,    36,     0,     0,     0,  1434,  1435,     0,
-      40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
-    1440,   578,     0,     0,     0,     0,   578,  1440,     0,     0,
-       0,     0,   613,     0,     0,   339,   339,     0,   216,     0,
-       0,     0,     0,     0,  1464,     0,     0,     0,     0,   714,
-      77,   339,     0,   870,     0,    47,    48,     0,     0,     0,
-       0,     0,  1478,     0,     0,   207,  1484,     0,     0,     0,
-     671,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   459,  1343,     0,    77,     0,     0,     0,     0,     0,
-       0,     0,     0,   208,     0,   459,     0,     0,   339,  1511,
-       0,  1512,     0,     0,    74,     0,     0,   888,   171,     0,
-     419,     0,     0,     0,     0,   207,     0,     0,   342,   217,
-       0,     0,     0,    74,     0,     0,     0,     0,     0,     0,
-       0,    74,     0,     0,     0,     0,   685,     0,     0,  1537,
-    1538,     0,     0,   208,     0,     0,     0,     0,   342,     0,
-       0,     0,  1545,  1546,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   342,     0,    74,     0,
-       0,     0,   671,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   671,   671,     0,   613,     0,     0,   940,     0,
-       0,     0,     0,   671,     0,     0,     0,     0,     0,     0,
-       0,     0,   344,   951,     0,     0,     0,     0,     0,     0,
-       0,   342,     0,     0,     0,     0,     0,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
-      29,    30,     0,     0,     0,     0,     0,   171,     0,    33,
-     171,   171,   171,     0,     0,    66,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   342,     0,     0,     0,    36,     0,   772,
-       0,     0,    39,     0,    40,    41,    42,     0,     0,    77,
-       0,     0,    79,     0,    77,    43,    44,     0,     0,  1048,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   419,   116,     0,     0,     0,     0,   342,   342,
-     685,    45,     0,    46,     0,     0,    79,     0,     0,    47,
-      48,     0,     0,     0,   342,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   578,   342,     0,     0,     0,     0,     0,     0,
-       0,   218,     0,     0,    74,   417,     0,     0,     0,     0,
-     671,   671,     0,   339,   339,     0,     0,     0,    74,     0,
-       0,   342,     0,     0,     0,     0,     0,     0,     0,     0,
-     217,    66,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,     0,     0,    28,    29,    30,     0,   342,
-       0,     0,   171,     0,     0,    33,   869,     0,     0,     0,
-       0,   671,   671,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1173,     0,   345,     0,     0,     0,     0,     0,
-       0,     0,     0,    36,     0,   342,    77,     0,     0,     0,
-      40,    41,     0,     0,     0,   342,   342,     0,     0,     0,
-     344,   216,     0,     0,     0,    77,   342,     0,     0,     0,
-       0,     0,     0,    77,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   714,
-     344,     0,     0,  1183,   685,    47,    48,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   344,     0,
-      77,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    79,     0,   171,     0,     0,    79,     0,    74,     0,
+      50,   113,    98,   147,   395,   148,   115,   396,   112,   426,
+     257,   397,   163,   149,   398,   689,   815,   399,    63,   859,
+     400,  1194,   401,   605,   757,   919,   816,   706,  1067,   381,
+     382,   113,   113,   408,    50,   437,    98,   610,  1169,    73,
+     142,   834,  1035,  1430,   806,    50,  1195,  1196,   117,  1374,
+    1228,    50,    63,   158,   739,   150,  1140,  1141,    50,   784,
+     803,   250,  1037,    50,  1283,   189,    50,   151,   212,    50,
+    1434,   222,   804,    73,   215,   163,   725,   107,   107,   395,
+     730,   210,   396,   407,    33,   596,   397,   675,   708,   398,
+     423,   359,   399,   807,   152,   400,    33,   401,   156,  1388,
+    1389,   472,   474,   808,   198,   321,   684,    50,   333,  1285,
+      50,   107,   809,  1233,   688,   623,   467,    50,  1430,   635,
+     805,  1142,    33,   639,   589,   113,   565,  1199,   679,   681,
+     473,    69,  1348,   210,    33,  1284,   819,  1203,   147,  1203,
+     148,  1234,   826,  -240,  -240,    50,   107,   158,   149,   123,
+     633,   444,  1457,   248,   637,   199,   242,    50,   409,   371,
+     566,   156,  1147,   403,   456,    69,   433,   170,   715,  1286,
+     409,  1390,   210,   803,  1434,  1190,   124,  1462,  1156,  1434,
+      50,    50,    33,   158,  1316,   804,  1319,  1321,  1148,   522,
+     150,   316,   494,   141,   417,   495,   409,    50,  1157,   729,
+     331,    78,   151,  1148,  1434,    50,   478,   158,   409,   243,
+      33,  1434,    97,   147,    50,   148,  -240,    50,   741,   440,
+     160,   143,   433,   149,   113,   928,   978,   709,   673,   152,
+     165,   404,   210,   805,   113,    78,   979,   113,   403,  1172,
+    1173,    50,   113,    98,   966,  1105,    97,   459,   428,   461,
+     850,   850,   431,    33,   166,    50,    50,   146,   158,    63,
+     803,   163,    50,    97,   210,   113,   850,   242,   323,   210,
+      58,    58,   804,  1299,   955,   185,    77,    33,    97,   788,
+      73,    97,   817,   160,   601,    73,   467,   584,  1078,  1388,
+    1389,   706,  1151,   807,   272,  1348,   514,  1345,   598,   610,
+     415,   144,  1348,   808,    58,   467,   404,   473,   431,   153,
+      77,   486,   809,   467,   850,   677,    33,   -10,   107,  1223,
+     805,   682,    50,   434,   371,   824,  1450,   601,   851,   602,
+    1140,  1141,   816,   442,   819,   316,    58,   375,   574,    58,
+      50,    50,   794,   868,   575,   219,   168,   156,  1142,   872,
+    1531,   409,   708,   376,  1197,    70,  1035,    97,   891,    33,
+      33,  1400,  1348,   623,    50,   197,    33,   359,    50,    97,
+     596,  1530,    69,   792,   432,  1398,  1037,   470,   648,   583,
+     596,   834,  1551,   839,   668,   321,   321,   840,   876,    70,
+     409,   907,   394,   185,   845,  1142,  1546,  1479,   623,   521,
+     273,   807,    50,  1550,   371,    86,  1410,   623,   735,   833,
+     737,   808,   321,   738,   551,   552,   742,    97,    33,   589,
+     809,   208,    50,  1487,   340,   844,  1411,  -299,    50,    97,
+     432,  1108,  1121,   409,   409,  1512,   237,  1514,  1125,    86,
+     601,   697,    78,  1488,   210,   918,  1347,    78,   745,   240,
+    1259,  1260,   669,    97,   242,    73,   321,  1425,    33,   668,
+    1222,   359,   950,   113,  1470,   623,  1471,   476,    50,   160,
+     112,   316,   316,  1542,    73,   321,  1194,    50,   706,   371,
+     623,    50,    73,    98,   210,  1103,    50,    58,  1088,   113,
+    1128,   709,   601,  1543,   113,   977,   979,  -542,   316,    63,
+     949,  1195,  1196,  1127,  1130,  1080,   861,   548,   647,   610,
+     117,    58,   698,   549,   550,   253,   860,    77,   699,   498,
+      73,  1142,    77,  1496,   359,   862,   113,   669,  1528,  1501,
+    1366,   113,   409,   751,    97,   716,   321,   731,   756,   708,
+     486,   717,   316,   732,   486,   -12,   576,   470,   409,   959,
+    1508,   686,   870,   604,   316,  1526,   316,   467,   107,   316,
+    1533,   316,   316,   880,    57,   116,   470,   744,   623,   559,
+     560,   904,   439,   745,   470,   385,   700,   990,   359,   359,
+     958,  1199,  -467,   835,   499,   113,   500,   501,   388,   849,
+     849,   386,  1139,   598,   359,   977,    70,  1463,    57,   390,
+      50,   324,   885,    50,   389,   849,   272,   111,   745,  1468,
+    1299,  1464,    69,  1375,   185,   391,  1468,    78,   521,  -468,
+      43,    44,   316,   521,    50,   111,   521,   138,   139,   113,
+     206,   268,   908,   216,   601,   718,    78,   159,    43,    44,
+      47,    48,   359,    50,    78,   511,    86,   113,   750,   190,
+     270,    86,   213,   849,   602,   223,    50,   697,   113,    50,
+     113,   392,   706,  1064,  1154,   869,   855,   871,   546,   547,
+      50,   325,   989,  1106,  1419,  1420,  1527,   393,   709,  1065,
+    1155,   111,    78,   271,     8,     9,    10,    11,    12,  1567,
+     370,  1427,    77,    97,    43,    44,  1064,   208,   604,   113,
+     340,   374,   592,  1568,   326,   546,   903,   327,   626,  1200,
+     596,    77,  1192,    50,    50,   328,    33,   210,   796,    77,
+     113,   990,   995,   708,   113,  1201,    73,   329,   592,  1154,
+    1043,   159,   592,   555,   556,   887,   383,   896,   623,  1200,
+      73,   745,  1306,   372,    36,  1291,   219,   546,   893,   833,
+     387,    58,   820,  1485,   575,  1295,   823,    77,  1307,   706,
+     697,   405,   829,   279,   486,  1494,  1427,   159,   557,   558,
+     697,   697,   944,   579,   918,   409,    43,    44,   945,  1362,
+     407,   438,   697,   843,  1132,  1308,   883,   846,   567,  1517,
+     409,   159,  1090,   424,   340,   890,    47,    48,   945,   892,
+      50,  1309,   515,   441,   377,    57,   425,     8,     9,    10,
+      11,    12,   802,    50,   225,   604,   481,   226,   470,   745,
+     230,    86,   232,  1219,   208,  1341,   359,  1342,   447,   575,
+     235,   745,   470,   745,  -300,  1351,    70,   457,   111,    33,
+      86,     8,     9,    10,    11,    12,   841,   567,    86,   409,
+     842,    43,    44,   520,   458,    47,    48,   340,   648,   899,
+    1152,  1569,   709,  1187,   113,  1021,  1337,    36,   841,  1344,
+     918,   918,  1074,    33,   395,   745,  1352,   396,  1056,   755,
+     505,   397,   745,    63,   398,   321,    86,   399,    78,   908,
+     400,   601,   401,   111,   553,   554,    50,    47,    48,   113,
+    1096,    36,    78,  1097,    73,  1098,    43,    44,   372,  1435,
+    -112,   340,   340,    50,  -112,   745,   759,   760,   761,  -418,
+     359,   359,   506,   835,  1561,   802,   604,   340,  1081,   881,
+     575,   113,  1334,   509,  1227,   514,  1335,   648,  1091,  1570,
+    1515,  1048,   107,   113,  1519,  1567,  1058,   113,   948,   945,
+    1099,   592,   225,    39,  1099,   171,   172,    42,  1578,   709,
+     561,   697,   697,    77,  1579,   562,    43,    44,   563,   486,
+    1083,   316,   111,   323,   409,   340,  1214,    77,   564,  1096,
+     439,   330,  1097,   982,  1098,    43,    44,   592,   372,   678,
+     680,   586,   370,    -3,   113,   661,    69,   592,  1357,  1358,
+     107,  1099,  1046,   592,  1021,  1412,   945,    50,    50,    50,
+    1388,  1389,   802,  1318,     8,     9,    10,    11,    12,    63,
+     796,   662,   697,   697,   663,   604,  1229,  1230,    39,   665,
+    1056,   666,    42,   667,   403,   242,   323,   409,   113,   671,
+      73,    43,    44,   762,   763,    57,    33,   208,    50,   672,
+      50,   674,    50,   766,   767,   768,   769,   439,   417,   664,
+     409,  1075,   208,   899,   113,   247,    78,   800,   111,   601,
+     138,   450,   520,  -389,    36,    47,    48,   520,   107,  -244,
+     520,    43,    44,    50,   764,   765,  1544,   602,   225,   226,
+     720,   627,    86,   232,   478,   323,   409,   113,  1058,   817,
+     323,   601,   404,   722,  1099,   235,    86,   451,  1057,   724,
+     733,   918,   452,   734,   896,   938,   770,   771,   908,   797,
+     601,   746,   747,  1171,   -14,   604,    47,    48,   799,  -301,
+      39,   778,    69,   810,    42,    58,     8,     9,    10,    11,
+      12,    77,   858,    43,    44,   -15,  1302,   857,   864,    39,
+     208,   171,   172,    42,   113,  1276,  1277,  1278,   592,   340,
+     886,   626,    43,    44,   888,   900,  -441,  -546,    33,    45,
+     912,   924,   917,   918,   717,   926,   929,    47,    48,  1021,
+     668,    51,   114,   225,   931,   918,   918,   932,   933,   942,
+    1303,   934,   935,    58,   359,   359,    36,    63,    50,   952,
+     953,   954,    78,    39,   968,   171,   172,    42,   969,   918,
+     128,  1163,   129,   130,   131,    51,    43,    44,    73,   697,
+      70,  1081,   970,    43,    44,   971,   145,   697,   697,   697,
+     972,   113,    51,   113,   113,   973,   899,   896,  1099,   974,
+    1099,  1099,  -429,   997,   181,  -428,  1038,   205,   669,   623,
+      51,  1044,  1040,   340,   340,    39,   107,   178,   179,    42,
+    1057,  1047,  1193,  1083,  1057,  1165,  1416,  1068,    43,    44,
+      86,    58,    39,  1070,   171,   172,    42,    77,  1069,  1071,
+    1079,   918,  1056,  1089,  1093,    43,    44,   114,   937,  1119,
+    1021,   174,  1143,   107,  1050,   114,   409,  1144,   256,   261,
+      50,  1146,    47,    48,   111,  1145,   138,   139,    73,  1158,
+      69,  1174,  1159,  1161,  1162,   113,  1081,    43,    44,  1167,
+     439,   359,  1099,  1170,    -9,   300,   145,   592,  -464,   395,
+     546,   -11,   396,   745,   114,   337,   397,    -3,   205,   398,
+     251,  1021,   399,   252,  1021,   400,   107,   401,   265,  1183,
+    1058,  1177,  1189,   111,  1181,   215,    70,  1051,  1083,   899,
+    1096,   181,   181,  1097,   210,  1098,    43,    44,  1507,   511,
+    1210,   494,    50,    50,  1212,  1220,   113,   113,   256,  1215,
+      78,  1221,  1224,  1099,  1099,  1231,    51,  1235,   107,  1355,
+    1237,  1239,  1021,  1289,   697,  1240,   140,  1021,   205,    39,
+    1350,   171,   172,    42,  1241,  1242,    86,   209,  1243,  1245,
+    1057,  1267,    43,    44,   210,  1252,   228,  1314,   111,  1081,
+     138,   139,    51,  1261,  1262,  1296,  1021,   107,  1297,    57,
+     261,    43,    44,  1270,  1271,   261,   256,   256,   374,  1273,
+    1274,  1282,   114,  -302,  1298,  1304,   884,   436,  1310,    58,
+       8,     9,    10,    11,    12,    77,  1312,   726,  1343,   209,
+    1332,  1083,   727,   147,  1313,   148,  1317,  1322,  1024,   300,
+      78,    73,  1324,   149,  1330,    50,  1331,   113,    73,  1340,
+    1333,   300,    33,   321,  1509,  1353,    58,  1082,   403,   266,
+    1354,   107,  1278,  1360,  1371,   480,  1021,   568,   209,  1364,
+    1365,  1021,  1402,   145,  1382,    50,    50,  1383,   158,   107,
+      36,  -430,  1057,   114,  1386,  1397,   107,   668,   337,  1404,
+    1406,  1407,   603,   622,  1021,  1408,  1021,   340,   340,  1417,
+    1021,  1421,  1422,  1021,    70,    50,  1423,   371,    73,    58,
+    1424,  1335,  1426,  1361,   632,    77,  1021,  1431,   632,   951,
+    1021,  1473,  1436,  1478,  1440,  1444,   404,  1442,   209,   956,
+     957,  1438,  1446,  1350,  1449,    57,  1448,  1455,   113,   316,
+    1350,   967,  1458,   174,    39,  1574,   107,  1480,    42,   113,
+    1469,    58,  1482,   181,    86,   669,  1581,    43,    44,   211,
+     209,  1511,  1484,  1513,  1486,   209,  1489,   636,   453,  1491,
+    1492,   640,  1493,   256,  1516,   300,   300,  1160,  1500,   256,
+    1477,   632,  1477,   713,  1518,  1521,  1522,  1409,  1525,    58,
+      58,    47,    48,  1532,    70,  1534,   219,  1536,  1539,   491,
+    1350,  1541,   300,    78,  1554,  1555,  1558,   164,  1547,   169,
+      78,   211,   175,   176,   177,  1552,  1559,  1553,  1576,   256,
+    1477,  1577,  1477,   772,   340,  1580,   776,  1176,   256,   229,
+     632,   773,    51,   774,  1095,  1565,  1566,   714,  1451,    58,
+     775,  1495,   238,   239,    86,  1288,   114,  1401,  1562,  1356,
+     211,  1560,  1472,   209,    58,  1520,  1182,  1191,   300,  1049,
+     114,  1370,  1204,   300,   920,   300,   300,  1077,   996,  1092,
+      78,   863,    58,   914,   208,   337,   111,  1076,    77,    58,
+    1305,   711,   780,  1096,   927,    77,  1097,   476,  1098,    43,
+      44,   781,   782,  1265,  1266,    39,  1268,   171,   172,    42,
+       0,     0,  1272,     0,     0,  1275,     0,     0,    43,    44,
+     211,  1451,   649,    57,     0,  1451,  1451,  1320,   568,   568,
+    1137,  1138,     0,     0,   439,     0,   300,   454,     2,   202,
+       4,     5,     6,     7,     0,   406,     0,   632,   337,    58,
+     209,   622,   211,  1540,     0,    77,     0,   211,     0,     0,
+    1082,   603,  1024,     0,   603,     0,   209,    70,    39,     0,
+     178,   179,    42,     0,    70,     0,  1556,     0,     0,     0,
+    1556,    43,    44,   632,     0,     0,   592,     0,   592,     0,
+     209,  1185,  1186,   632,     0,   622,     0,     0,   111,   632,
+     138,   139,   632,   632,  1573,     0,    37,   600,    38,   601,
+       0,    43,    44,    57,     0,    47,    48,    86,   632,     0,
+     256,     0,     0,     0,    86,     0,   592,     0,   592,   602,
+       0,   256,     0,   719,    70,     0,     0,   836,   728,    39,
+       0,   178,   179,    42,     0,   211,     0,     0,     0,     0,
+       0,   114,    43,    44,     0,  1082,   852,     0,     2,   202,
+       4,     5,     6,     7,     0,     0,   632,   909,   622,   867,
+       0,    -3,     0,  1363,   714,   714,     0,     0,  1505,     0,
+     409,     0,   173,     0,    86,     0,    47,    48,  1394,   224,
+       0,     0,     0,   206,   216,   508,     0,   510,   513,   588,
+       0,   599,     0,     0,   337,     0,   516,   517,   525,     0,
+       0,   209,   526,   527,   528,     0,     0,     0,   630,   631,
+     510,   510,     0,     0,  1387,     0,    37,  1395,    38,   791,
+       0,   173,   211,     0,   173,     0,   529,     0,   530,     0,
+     531,   532,     0,   438,   568,     0,   209,     2,   202,     4,
+       5,     6,     7,     0,   632,   209,   962,   510,  1082,     0,
+       0,   603,   525,     0,     0,     0,   526,   527,   528,     0,
+       0,     0,   211,   838,   603,  1433,    57,     0,   411,     0,
+    1437,     0,     0,    57,     0,   419,     0,     0,  1323,     0,
+     529,   856,   530,     0,   531,  1287,  1325,  1326,  1327,   510,
+       0,     0,     8,     9,    10,    11,    12,     0,   111,  1461,
+     138,   450,     0,   209,     0,    37,     0,    38,     0,     0,
+       0,    43,    44,   209,     0,     0,   300,     0,   209,     0,
+       0,     0,     0,     0,    33,     0,     0,     0,   173,     0,
+       0,     0,     0,    57,     0,     0,     0,     0,     0,     0,
+     337,   411,     0,     0,     0,   114,     0,  1052,     0,     0,
+       0,     0,    36,     0,   916,     0,     0,    39,   491,   909,
+     909,    42,     0,     0,   714,     0,     0,     0,     0,     0,
+      43,    44,     0,     0,   114,   300,   173,     0,     0,     0,
+       0,   337,     0,   211,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    45,  1545,     0,   573,
+       0,     0,     0,  1545,    47,    48,   209,     0,   577,     0,
+       0,   580,     0,   337,     0,     0,     0,     0,   211,  1545,
+       0,     0,   454,  1545,     0,     0,     0,   211,     0,     0,
+       0,     0,     0,     0,   632,   632,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   300,  1456,   173,     0,     0,     0,   510,   510,
+     510,   510,   510,   510,   510,   510,   510,   510,   510,   510,
+     510,   510,   510,   510,   510,   510,     0,   411,   173,     0,
+       0,   419,   173,     0,     0,   211,     0,     0,     0,     0,
+       0,     0,   649,     0,     0,   211,     0,     0,  1000,  1052,
+     211,  1052,     0,  1052,     0,     0,     0,     0,     0,     0,
+    1164,  1166,  1168,     0,     0,     0,     0,     0,   114,     0,
+       0,     0,     0,     0,   909,     0,     0,     0,     0,     0,
+       0,     0,     0,  1066,   256,     0,     0,     0,     0,     0,
+       8,     9,    10,    11,    12,     0,   901,     0,   902,     0,
+      39,     0,   178,   179,    42,     0,   905,   906,     0,   411,
+       0,   911,     0,    43,    44,   337,     0,     0,     0,     0,
+       0,   649,    33,     0,     0,     0,   209,     0,   921,     0,
+       0,     0,     0,   925,     0,     0,     0,     0,   211,  1050,
+      39,   409,   178,   179,    42,     0,     0,    47,    48,     0,
+      36,    74,   599,    43,    44,    39,     0,   178,   179,    42,
+    1051,     0,     0,     8,     9,    10,    11,    12,    43,    44,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   180,
+     300,     0,   510,     0,     0,    74,     0,    47,    48,     0,
+       0,   114,     0,     0,   600,    33,   601,     0,     0,  1052,
+     573,   573,    47,    48,     0,     0,     0,   510,     0,     0,
+       0,     0,   632,     0,     0,     0,     0,   114,     0,     0,
+     218,     0,  1000,    36,     0,     0,     0,     0,    39,     0,
+     178,   179,    42,     0,     0,     0,     0,   510,     0,     0,
+       0,    43,    44,    39,     0,   178,   179,    42,  1207,     0,
+     985,     0,   986,   987,   988,     0,    43,    44,   632,   632,
+       0,     0,     0,     0,     0,     0,     0,  1050,     0,   409,
+     300,  1039,     0,     0,     0,    47,    48,     0,     0,     0,
+       0,     0,   255,     0,     0,     0,     0,  1045,   173,     0,
+      47,    48,     0,     0,   874,     0,     0,     0,   878,     0,
+       0,  1052,     0,     0,     0,   346,     0,   173,   211,     0,
+    1072,     0,   114,     0,     0,     0,     0,     0,     0,     0,
+     173,     0,     0,     0,     8,     9,    10,    11,    12,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1264,     8,
+       9,    10,    11,    12,  1094,     0,     0,     0,     0,  1104,
+     261,   114,     0,     0,  1107,     0,    33,     0,     0,  1112,
+    1113,     0,     0,     0,  1115,     0,  1116,  1117,     0,     0,
+    1120,    33,     0,     0,   256,     0,     0,   446,     0,  1135,
+       0,     0,     0,     0,    36,   632,     0,     0,     0,    39,
+      66,   118,    74,    42,     0,  1149,  1150,    74,     0,    36,
+     261,     0,    43,    44,    39,     0,   178,   179,    42,     0,
+     510,     0,     0,     0,     0,   114,   573,    43,    44,     0,
+       0,     0,   510,     0,    66,  1415,     0,  1178,   713,     0,
+    1180,     0,     0,   114,     0,     0,    47,    48,     0,     0,
+     114,   157,   114,  1505,   114,   409,     0,     0,     0,     0,
+       0,    47,    48,     0,     0,     0,     0,     0,     0,   217,
+       0,   510,     0,   533,   534,   535,   536,   537,   538,   539,
+     540,   541,   542,   543,     0,     0,  1506,   261,     0,     0,
+       0,     0,   114,  1213,   114,     0,     0,     0,   591,  1217,
+    1218,     0,     0,     0,   218,     0,   249,   544,  1225,     0,
+     114,     0,     0,  1232,     0,     0,  1506,  1506,  1236,     0,
+     209,   510,     0,     0,   591,     0,     0,     0,   591,     0,
+       0,  1244,     0,   300,     0,     0,     0,     0,     0,   173,
+       0,     0,     0,     0,     0,   322,  1506,  1251,     0,  1253,
+    1254,  1255,  1256,   249,   342,     8,     9,    10,    11,    12,
+       0,     0,     0,     0,  1263,     0,  1149,     0,     0,     0,
+     209,     0,     0,     0,     0,     0,     0,    74,     0,     0,
+       0,   402,     0,     0,     0,     0,     0,    33,     0,     0,
+       0,   346,     0,     0,     0,  1110,    74,   422,  1292,  1293,
+     427,   429,     0,     0,    74,   157,     0,     0,     0,     0,
+       0,  1123,     0,     0,     0,    36,     0,   510,   510,     0,
+      39,   346,   178,   179,    42,     0,   445,     0,     0,     0,
+     448,   218,   449,    43,    44,   455,     0,     0,     0,     0,
+     346,    66,    74,     0,     0,     0,   469,   209,     0,     0,
+       0,     0,     0,     0,     0,     0,   477,     0,     0,   180,
+       0,     0,  1328,  1329,   429,     0,     0,    47,    48,     0,
+       0,     0,  1339,     0,     0,     0,     0,     0,   173,     0,
+       0,   173,   173,   173,     0,   346,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     411,     0,   211,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     8,     9,    10,
+      11,    12,   249,     0,     0,     0,  1378,   590,  1379,  1380,
+    1381,     0,     0,   625,     0,     0,     0,   591,   346,     0,
+    1385,     0,   211,     0,     0,     0,     0,     0,  1396,    33,
+       0,   169,     0,   634,     0,     0,     0,   634,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   591,     0,     0,     0,    36,  1418,     0,
+       0,     0,    39,   591,   178,   179,    42,     0,     0,   591,
+       0,     0,   346,   346,     0,    43,    44,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   469,    79,   346,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   211,
+     342,   255,  1459,  1460,     0,   469,   411,   346,     0,    47,
+      48,     0,     0,   469,     0,  1465,     0,     0,    74,     0,
+       0,    79,  1465,   173,     0,     0,     0,     0,   510,     0,
+     692,     0,    74,   429,     0,     0,   346,     0,     0,  1490,
+     702,     0,     0,     0,     0,     0,     0,     0,     0,   707,
+       0,    66,     0,     0,     0,     0,   220,  1504,     0,     0,
+       0,     0,  1510,   429,     0,     0,     0,   429,     0,     0,
+       0,     0,     0,     0,   346,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     510,     0,     0,     0,   342,  1537,     0,  1538,     0,     0,
+       0,     0,   510,   510,     0,     0,     0,     0,     0,  1368,
+     346,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     346,   346,     0,     0,   591,     0,   510,   218,     0,     0,
+       0,     0,   346,     0,   173,  1563,  1564,     0,   783,     0,
+       0,   350,     0,     0,     0,     0,     0,     0,  1571,  1572,
+       0,     0,     0,     0,     0,     0,   634,   795,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   813,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   173,     0,     0,   173,     0,
+       0,     0,   590,     0,     0,     0,    74,   837,   510,     0,
+       0,     0,   590,     0,     0,     0,     0,     0,   634,     0,
+       0,   342,   342,     0,     0,     0,   173,     0,     0,     0,
+     346,     0,     0,     0,     0,     0,     0,   342,    79,     0,
+       0,     0,     0,    79,   275,   276,   173,   277,     0,     0,
+       0,   173,     0,     0,     0,     0,   692,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   469,     0,     0,
+       0,   346,     0,   278,     0,     0,     0,     0,     0,   279,
+     173,   469,     0,   280,     0,   342,   281,   282,   272,   283,
+     284,   285,    43,    44,   913,   286,   287,   429,     0,     0,
+       0,     0,     0,   591,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   288,     0,
+     377,   346,   346,   707,   346,   346,    47,    48,   290,   291,
+     292,   293,     0,     0,   593,     0,     0,     0,     0,   777,
+     220,     0,    74,     0,     0,     0,     0,     0,     0,     0,
+     173,     0,     0,     0,     0,   173,     0,     0,     0,   692,
+     593,     0,     0,     0,   593,     0,     0,     0,     0,   692,
+     692,     0,     0,   634,     0,     0,   965,     0,   173,     0,
+     173,   692,   346,   346,   173,     0,     0,   173,     0,     0,
+       0,   976,     0,     0,     0,     0,     0,     0,     0,     0,
+     173,     0,     0,     0,   173,     0,     0,     0,     0,     0,
+       0,     0,     0,    79,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   350,     0,     0,
+       0,     0,    79,     0,     0,     0,     0,     0,     0,     0,
+      79,     0,     0,     0,     0,    66,     0,     0,   275,   276,
+       0,   277,     0,     0,     0,   346,     0,   350,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   220,     0,   795,
+       0,     0,    87,     0,     0,     0,   350,   278,    79,     0,
+       0,     0,     0,   645,     0,   138,   139,   280,     0,  1073,
+     281,   282,   272,   283,   284,   285,    43,    44,     0,   286,
+     287,     0,   429,   118,     0,     0,    87,     0,     0,     0,
+     707,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      74,   350,   288,     0,   646,     0,   647,   378,     0,     0,
+      47,    48,   290,   291,   292,   293,     0,     0,     0,     0,
+       0,   221,   590,     0,     0,     0,     0,     0,     0,     0,
+     346,     0,   346,     0,     0,   427,     0,     0,     0,     0,
+     692,   692,     0,   342,   342,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   346,
+       0,    66,     0,   593,   350,     0,     0,   346,   346,   346,
+       0,     0,     0,     0,     0,     0,     0,     0,   346,   346,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      74,     0,     0,     0,     0,     0,     0,     0,     0,   593,
+       0,   692,   692,     0,     0,     0,   362,     0,     0,   593,
+       0,     0,  1198,     0,     0,   593,     0,     0,   350,   350,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   350,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   350,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    79,     0,     0,     0,     0,     0,
+       0,   218,     0,     0,   707,     0,     0,     0,    79,     0,
+       0,     0,   350,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    87,     0,     0,     0,     0,    87,     0,
+       0,     0,     0,     0,     0,   346,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     350,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   346,     0,     0,     0,     0,    66,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    74,     0,     0,   350,     0,     0,     0,
+      74,     0,   591,     0,   591,     0,   350,   350,     0,   692,
+     593,   707,     0,   220,     0,     0,   118,     0,   350,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   594,
+       0,     0,     0,     0,     0,   221,     0,     0,   692,     0,
+       0,     0,   591,     0,   591,     0,   692,   692,   692,     0,
+       0,     0,     0,     0,     0,   594,     0,   342,   342,   594,
+      74,     0,     0,     0,     0,     0,     0,     0,     0,  1349,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    79,     0,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,     0,   350,     0,    87,     0,
+       0,   118,     0,     0,     0,     0,     0,    33,     0,     0,
+       0,     0,   362,     0,     0,     0,     0,    87,     0,     0,
+       0,     0,     0,     0,     0,    87,     0,     0,     0,     0,
+       0,   162,     0,   275,   276,    36,   277,   350,     0,     0,
+    1399,     0,   362,     0,     0,     0,   214,     0,     0,     0,
+       0,     0,   221,     0,     0,     0,     0,     0,     0,     0,
+       0,   362,   278,    87,     0,     0,     0,     0,   279,   593,
+       0,     0,   280,     0,   342,   281,   282,   272,   283,   284,
+     285,    43,    44,     0,   286,   287,     0,   350,   350,   127,
+     350,   350,     0,     0,   162,     0,     0,     0,   262,     0,
+       0,     0,     0,   692,   118,     0,   362,   288,    79,   377,
+       0,     0,   378,     0,     0,    47,    48,   290,   291,   292,
+     293,     0,  1349,     0,   162,     0,     0,     0,     0,  1349,
+       0,  1476,     0,  1476,   368,     0,     0,   373,     0,     0,
+       0,     0,     0,     0,   127,     0,     0,     0,   350,   350,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     127,     0,   127,     0,     0,     0,     0,     0,   594,   362,
+       0,  1476,     0,  1476,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   162,     0,   267,     0,  1349,
+       0,     0,     0,     0,     0,     0,  1535,   214,     0,     0,
+       0,     0,     0,     0,   594,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   594,     0,     0,     0,     0,     0,
+     594,   350,     0,   362,   362,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   373,     0,     0,     0,     0,   362,
+       0,   162,     0,     0,     0,     0,   127,     0,   127,   127,
+       0,     0,     0,   127,     0,   127,   127,     0,   362,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   523,    87,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     162,     0,     0,    87,     0,     0,    79,   362,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+       0,    28,    29,    30,     0,     0,   350,   597,   350,   127,
+       0,    33,   624,     0,     0,   362,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   350,     0,     0,     0,    36,
+       0,     0,     0,   350,   350,   350,   203,    41,     0,     0,
+       0,   362,     0,     0,   350,   350,     0,     0,     0,     0,
+       0,   362,   362,     0,     0,   594,    79,     0,   221,     0,
+       0,     0,     0,   362,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   127,     0,     0,     0,     0,
+       0,    47,    48,     0,   162,   162,     0,     0,     0,     0,
+     368,     0,     0,     0,   127,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   162,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    87,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   220,     0,   710,
+       0,     0,     0,     0,     0,     0,   127,     0,     0,     0,
+       0,   362,     0,     0,     0,   162,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   523,     0,   523,
+       0,   350,   523,     0,   162,   523,     0,     0,     0,     0,
+       0,     0,     0,     0,   368,     0,     0,     0,     0,     0,
+       0,     0,   362,     0,     0,     0,     0,     0,     0,     0,
+     350,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    79,
+       0,     0,     0,     0,   594,     0,    79,     0,   593,     0,
+     593,     0,     0,     0,     0,   162,     0,     0,     0,     0,
+       0,     0,   362,   362,     0,   362,   362,   368,     0,     0,
+     798,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    87,     0,     0,     0,     0,   593,     0,
+     593,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   597,     0,   207,     0,    79,     0,     0,     0,
+       0,     0,   597,   227,     0,   231,     0,   233,     0,     0,
+       0,   368,   368,   362,   362,   236,     0,     0,     0,     0,
+       0,     0,   127,   127,     0,     0,     0,   368,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   207,     0,   231,   233,
+     236,     0,     0,     0,     0,   127,     0,     0,   127,   127,
+     523,   127,     0,   127,   127,     0,     0,     0,   127,   127,
+       0,     0,     0,     0,     0,   368,     0,   910,     0,     0,
+       0,     0,     0,     0,     0,   207,   362,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   127,   710,     0,     0,   127,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   975,     0,     0,
+       8,     9,    10,    11,    12,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   207,     0,   231,   233,   236,
+       0,    87,     0,     0,     0,     0,     0,     0,     0,     0,
+     275,   276,    33,   277,     0,   624,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   207,     0,     0,
+       0,   362,   207,   362,     0,     0,     0,     0,     0,   278,
+      36,     0,     0,     0,     0,   279,     0,     0,     0,   280,
+       0,     0,   281,   282,   272,   283,   284,   285,    43,    44,
+     362,   286,   287,     0,     0,     0,     0,     0,   362,   362,
+     362,     0,     0,     0,     0,     0,     0,     0,     0,   362,
+     362,     0,     0,     0,   288,     0,   377,     0,     0,     0,
+       0,    87,   336,    48,   290,   291,   292,   293,     0,     0,
+     207,     0,     0,     0,     0,     0,     0,     0,     0,   368,
+     275,   276,     0,   277,   523,     0,     0,     0,   154,     0,
+     207,     0,     0,     0,     0,     0,   628,     0,   233,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   278,
+     236,     0,     0,     0,   162,   279,     0,     0,     0,   280,
+     710,     0,   281,   282,   272,   283,   284,   285,    43,    44,
+       0,   286,   287,     0,   241,     0,     0,     0,     0,     0,
+       0,     0,   221,     0,   246,     0,     0,     0,     0,     0,
+     207,     0,   597,     0,   288,     0,   377,     0,     0,     0,
+       0,   748,    47,    48,   290,   291,   292,   293,     0,     0,
+     207,     0,     0,   368,   368,   207,   362,   207,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   207,     0,     0,   207,   207,     0,     0,
+       0,     0,     0,   207,     0,   362,     0,     0,     0,     0,
+     384,     0,     0,     0,     0,     0,     0,   207,     0,     0,
+       0,     0,     0,   127,    87,   207,     0,     0,     0,     0,
+       0,    87,   416,   594,     0,   594,     0,     0,     0,   127,
+       0,     0,   127,   127,     0,  1133,   430,     0,     8,     9,
+      10,    11,    12,     0,     0,   435,     0,   523,     0,     0,
+       0,     0,     0,     0,     0,   443,     0,     0,     0,     0,
+       0,     0,     0,   594,     0,   594,     0,     0,   275,   276,
+      33,   277,     0,     0,   460,     0,     0,     0,     0,   471,
+       0,    87,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   479,     0,   710,     0,     0,   278,    36,     0,
+     493,     0,   497,   279,     0,   127,     0,   280,     0,     0,
+     281,   282,   272,   283,   284,   285,    43,    44,   127,   286,
+     287,   524,     0,   127,   127,     0,     0,     0,   207,     0,
+     628,   233,   236,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   288,     0,   377,     0,     0,     0,     0,     0,
+    1134,    48,   290,   291,   292,   293,     0,     0,     0,     0,
+       0,     0,   582,   207,   628,     0,     0,   587,     0,     0,
+     523,     0,   207,     0,     0,     0,     0,     0,     0,     0,
+     127,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   710,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   641,     0,     0,     0,   642,   643,     0,   644,
+       0,     0,     0,     0,     0,     0,   655,   656,     0,   657,
+     658,     0,   659,     0,   660,     0,     0,     0,     0,     0,
+     207,     0,     0,   275,   276,     0,   277,   368,   368,     0,
+     207,   582,   127,     0,     0,   207,     0,     0,     0,   676,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   127,   278,     0,     0,     0,     0,     0,   279,     0,
+       0,     0,   280,   687,     0,   281,   282,   272,   283,   284,
+     285,    43,    44,     0,   286,   287,     0,     0,     0,     0,
+       0,     0,   332,   363,     0,     0,     0,     0,   701,     0,
+       0,     0,     0,     0,     0,   705,     0,   288,     0,   377,
+     460,     0,   937,     0,     0,    47,    48,   290,   291,   292,
+     293,   207,     0,     0,   412,     0,     0,     0,     0,   214,
+       0,   412,     0,   207,     0,     0,     0,     0,     0,     0,
+       0,     0,   275,   276,     0,   277,     0,     0,     0,     0,
+     743,   207,     0,     0,     0,     0,     0,   127,     0,     0,
+       0,     0,   754,     0,   368,     0,     0,     0,     0,     0,
+       0,   278,     0,     0,     0,   207,     0,   279,     0,   214,
+       0,   280,     0,     0,   281,   282,   272,   283,   284,   285,
+      43,    44,     0,   286,   287,     0,     0,   412,     0,   779,
+       0,   275,   276,     0,   277,     0,     0,     0,   789,     0,
+       0,   790,     0,     0,     0,     0,   288,     0,   377,     0,
+       0,   523,     0,   523,    47,    48,   290,   291,   292,   293,
+     278,     0,     0,   811,     0,     0,   279,     0,     0,     0,
+     280,     0,     0,   281,   282,   272,   283,   284,   285,    43,
+      44,   207,   286,   287,     0,   412,   373,     0,     0,     0,
+       0,   523,     0,   523,   412,   578,     0,   412,   581,     0,
+       0,     0,     0,     0,     0,   507,   363,   377,   854,     0,
+     614,     0,     0,    47,    48,   290,   291,   292,   293,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   162,   207,     0,     0,   638,     0,     0,     0,
+       0,     0,     0,     0,   207,   889,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   412,     0,     0,     0,   412,     0,     0,
+       0,     0,     0,   241,     0,     0,     0,     0,     0,     0,
+     314,     0,     0,     0,     0,     0,     0,     0,   922,   923,
+     338,     0,     0,     0,     0,     0,     0,     0,   930,   363,
+       0,   380,   380,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   943,     0,     0,     0,     0,   947,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   207,     0,     0,     0,   412,     0,     0,   363,     0,
+       0,     1,     2,   202,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,  -307,   980,
+      28,    29,    30,    31,     0,     0,   981,    32,     0,   475,
+      33,     0,     0,   363,     0,     0,     0,     0,     0,     0,
+       0,     0,   983,     0,   984,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   994,    36,     0,
+      37,     0,    38,   998,     0,    40,    41,     0,     0,  -307,
+       0,     0,     0,     0,  1041,     0,   412,   412,  1042,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   793,   363,     0,     0,     0,
+       0,     0,     0,     0,    46,     0,   207,     0,     0,   614,
+      47,    48,   614,   614,     0,     0,     0,     0,     0,   614,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   832,
+       0,   363,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   363,     0,     0,     0,     0,     0,     0,     0,     0,
+     363,   363,   275,   276,   380,   277,     0,     0,     0,     0,
+       0,     0,  1114,     0,     0,     0,   363,     0,     0,     0,
+     412,   875,     0,     0,   412,   879,     0,     0,     0,     0,
+       0,   278,     0,   882,     0,     0,     0,   279,     0,     0,
+       0,   280,     0,   352,   281,   282,   272,   283,   284,   285,
+      43,    44,     0,   286,   287,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   363,   614,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   512,   314,   377,  1179,
+       0,     0,     0,     0,    47,    48,   290,   291,   292,   293,
+       0,     0,     0,     0,     0,     0,     0,   704,     0,     0,
+       0,     0,   363,     0,     0,     0,     0,   207,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1209,     0,     0,     0,     0,  1211,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1216,     0,     0,     0,
+     740,     0,   412,     0,     0,     0,     0,     0,     0,     0,
+     749,     0,     0,     0,     0,   740,     0,   207,   740,   614,
+    1238,   614,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   758,   614,  1246,     0,     0,     0,  1247,     0,     0,
+    1248,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1257,  1258,     0,     0,
+       0,   787,     0,     0,     0,     0,     0,     0,   338,     0,
+       0,     0,     0,   749,  1269,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   352,     0,   812,     0,
+       0,   352,   352,     0,   207,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   363,     0,
+       0,     0,   352,     0,     0,   412,   352,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   614,   614,     0,
+     853,     0,     0,     0,     0,     0,     0,     0,   380,  1315,
+       0,     0,   353,     0,     0,     0,     0,     0,     0,   363,
+       0,     0,     0,   207,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   412,  1111,     0,     0,     0,     0,     0,     0,   352,
+       0,   363,     0,     0,     0,     0,     0,   412,  1124,     0,
+     614,   614,  1131,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   363,   363,     0,     0,     0,     0,     0,   352,
+       0,     0,     0,     0,     0,     0,     0,     0,  1372,   740,
+    1373,     0,     0,     0,     0,     0,     0,     0,   352,   749,
+    1376,   936,  1377,     0,   939,     0,     0,     0,     0,     0,
+     946,     0,     0,     0,     0,     0,     0,  1384,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1403,  1405,   412,     0,   412,
+       0,   412,     0,   352,     0,     0,   412,     0,  1413,     0,
+       0,   963,   964,  1414,     0,     0,  1216,     0,     0,     0,
+       0,     0,   614,     0,     0,     0,     0,   338,     0,     0,
+       0,     0,  1432,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  1439,     0,     0,  1441,     0,  1443,  1445,  1447,
+       0,     0,     0,     0,     0,   353,     0,     0,     0,     0,
+     353,   353,     0,   363,     0,   352,   352,     0,     0,   352,
+     992,     0,     0,     0,   380,     0,     0,     0,     0,     0,
+       0,   353,     0,   275,   276,   353,   277,  1481,     0,  1483,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,  1216,
+       0,   352,     0,     0,   352,   338,     0,     0,     0,  1499,
+       0,   352,   278,   352,     0,     0,     0,   352,   279,     0,
+     352,   352,   280,     0,     0,   281,   282,   272,   283,   284,
+     285,    43,    44,     0,   286,   287,   352,     0,     0,     0,
+     314,     0,   412,     0,     0,     0,   338,   412,   353,     0,
+       0,     0,     0,   380,     0,   352,     0,   515,   939,   377,
+     363,   740,     0,     0,     0,    47,    48,   290,   291,   292,
+     293,   352,     0,     0,     0,     0,     0,     0,   353,     0,
+       0,  1118,     0,     0,   352,     0,   352,     0,     0,     0,
+       0,     0,  1136,     0,     0,     0,     0,   353,     0,     0,
+       0,     0,     0,     0,     0,     0,   363,   363,     0,     0,
+       0,     0,   380,     0,  1153,     0,     0,     0,     0,     0,
+       0,     0,   352,     0,     0,     0,     0,     0,     0,   939,
+     939,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     125,     0,   353,     0,     0,   412,  1369,     0,     0,   412,
+       0,     0,     0,     0,     0,     0,  1184,     0,   352,     0,
+       0,     0,     0,     0,   354,     0,     0,     0,   352,   352,
+       0,     0,   352,     0,   352,   352,     0,     0,     0,     0,
+     352,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   234,     0,     0,     0,     0,
+       0,     0,     0,     0,   353,   353,     0,     0,   353,   939,
+       0,   244,     0,   245,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     853,     0,     0,   363,     0,     0,     0,     0,     0,     0,
+     353,     0,     0,   353,   275,   276,     0,   277,  1249,  1250,
+     353,     0,   353,     0,     0,     0,   353,     0,     0,   353,
+     353,     0,     0,     0,     0,     0,     0,     0,   352,     0,
+       0,     0,     0,   278,     0,   353,     0,     0,     0,   279,
+       0,     0,     0,   280,     0,     0,   281,   282,   272,   283,
+     284,   285,    43,    44,   353,   286,   287,     0,     0,   413,
+     414,     0,     0,     0,   418,     0,   420,   421,     0,   352,
+     353,     0,     0,     0,     0,     0,     0,     0,   288,     0,
+     377,     0,     0,   353,   412,   353,   703,    48,   290,   291,
+     292,   293,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   352,     0,     0,   352,     0,     0,   354,     0,     0,
+       0,     0,   354,   354,   412,   412,     0,     0,     0,   352,
+     352,   353,   352,   352,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   354,     0,     0,     0,   354,     0,     0,
+       0,     0,     0,     0,   412,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   353,     0,  1359,
+       0,     0,     0,   740,     0,     0,     0,   353,   353,     0,
+       0,   353,     0,   353,   353,     0,     0,     0,     0,   353,
+     352,   352,     0,     0,     0,     0,     0,     0,     0,   275,
+     276,     0,   277,     0,     0,     0,     0,     0,     0,     0,
+     354,     0,     0,     0,     0,     0,   585,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   278,     0,
+       0,     0,     0,     0,   279,   629,     0,     0,   280,     0,
+     354,   281,   282,   272,   283,   284,   285,    43,    44,     0,
+     286,   287,     0,     0,     0,     0,     0,     0,     0,   354,
+       0,     0,     0,   352,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   288,     0,   377,     0,   353,     0,     0,
+       0,   336,    48,   290,   291,   292,   293,   670,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   354,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   353,     0,
+       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
+     353,     0,     0,   353,    33,   894,     0,     0,   352,     0,
+     352,     0,     0,     0,     0,     0,   354,   354,   353,   353,
+     354,   353,   353,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    36,     0,     0,     0,     0,   352,     0,    40,
+      41,     0,     0,     0,     0,   352,   352,   352,     0,     0,
+       0,     0,   354,     0,     0,   354,   352,   352,   314,     0,
+       0,     0,   354,     0,   354,     0,     0,     0,   354,     0,
+       0,   354,   354,     0,     0,     0,     0,     0,   736,   353,
+     353,     0,   895,     0,    47,    48,     0,   354,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   785,   786,     0,   354,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   354,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   354,   818,   354,     0,   821,
+     822,     0,   825,     0,   827,   828,     0,     0,     0,   830,
+     831,     0,   353,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   352,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   873,     0,     0,     0,   877,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   354,
+       0,     0,   352,     0,     0,     0,     0,     0,     0,   354,
+     354,     0,     0,   354,     0,   354,   354,     0,     0,     0,
+       0,   354,     0,     0,     0,     0,     0,     0,     0,     0,
+     352,     0,   352,     0,     0,     0,     0,   353,     0,   353,
+       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,   352,   353,    28,    29,    30,
+     352,     0,   352,     0,   353,   353,   353,    33,     0,     0,
+       0,     0,     0,     0,     0,   353,   353,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    36,     0,     0,     0,   354,
+       0,     0,    40,    41,     0,     0,     0,     0,     0,     0,
+    -541,     0,     0,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    -299,     0,   342,   344,     0,     0,     0,     0,     0,    66,
-       0,     0,    33,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   171,     0,     0,   171,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   671,
-      36,   685,     0,   342,     0,     0,   116,     0,     0,     0,
-       0,  -299,     0,     0,     0,   171,     0,     0,     0,     0,
-       0,    85,     0,     0,     0,   344,     0,     0,   671,     0,
-       0,     0,   218,     0,     0,   171,   671,   671,   671,     0,
-     171,     0,     0,     0,     0,     0,     0,   339,   339,     0,
-       0,     0,     0,   342,   342,    85,   342,   342,     0,  1324,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   171,
-     344,   344,     0,     0,    74,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   344,     0,     0,     0,
-     219,     0,     0,     0,     0,     0,     0,     0,    79,     0,
-       0,   116,     0,     0,     0,   344,     0,     0,     0,     0,
-       0,     0,   345,     0,   342,   342,    77,    79,     0,     0,
-       0,     0,     0,     0,     0,    79,     0,     0,     0,     0,
-      77,     0,     0,   344,     0,     0,     0,     0,   171,     0,
-    1374,     0,   345,   171,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     345,     0,    79,     0,     0,     0,   171,     0,   171,     0,
-       0,   344,   171,   352,   339,   171,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   342,   171,     0,
-       0,     0,   171,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   671,   116,   345,     0,   344,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   344,   344,     0,
-       0,     0,  1324,   217,     0,     0,     0,     0,   344,  1324,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,     0,    74,    28,    29,    30,     0,     0,     0,     0,
-      85,     0,     0,    33,     0,    85,     0,   345,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   342,     0,   342,     0,     0,     0,  1324,     0,
-      77,    36,     0,     0,     0,  1509,    39,     0,   201,    41,
-      42,     0,     0,     0,     0,     0,     0,     0,     0,    43,
-      44,   342,   345,   345,   344,     0,     0,     0,     0,   342,
-     342,   342,     0,     0,     0,     0,     0,     0,   345,     0,
-     342,   342,     0,     0,     0,    45,     0,   258,     0,     0,
-       0,     0,    74,    47,    48,     0,     0,   345,     0,     0,
-       0,     0,     0,     0,     0,   344,     0,     0,    79,     0,
-       0,   219,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    79,     0,     0,   345,     0,     0,     0,     0,
+     354,   247,    28,    29,    30,    31,     0,    47,    48,    32,
+       0,     0,    33,    34,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   354,     0,     0,   354,     0,    35,     0,     0,
+      36,     0,    37,     0,    38,    39,     0,    40,    41,    42,
+     354,   354,     0,   354,   354,     0,     0,     0,    43,    44,
+       0,     0,   353,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,  -307,    45,     0,    46,     0,     0,     0,
+       0,   353,    47,    48,     0,    33,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   354,   354,     0,     0,     0,     0,     0,     0,   353,
+       0,   353,     0,    36,  1109,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  -307,     0,     0,     0,     0,     0,
+    1122,     0,     0,  1126,  1129,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   353,     0,     0,     0,     0,   353,
+       0,   353,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,   354,   334,    29,    30,     0,     0,
+       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1188,     0,     0,     0,
+       0,     0,     0,    36,     0,     0,     0,     0,     0,     0,
+     203,    41,     0,     0,  1205,  1206,     0,     0,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
+      31,     0,     0,     0,    32,    47,    48,    33,    34,   354,
+       0,   354,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1126,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    35,     0,     0,    36,     0,    37,   354,    38,
+      39,     0,    40,    41,    42,     0,   354,   354,   354,     0,
+       0,     0,     0,    43,    44,     0,     0,   354,   354,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    45,
+       0,    46,     0,  1290,     0,  -545,     0,    47,    48,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  1300,     0,     0,     0,     1,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,    31,     0,
+       0,     0,    32,   275,   276,    33,  1001,  1002,     0,  1003,
+       0,     0,  1004,  1005,  1006,  1007,  1008,  1009,  1010,  1011,
+       0,     0,     0,  1012,     0,     0,     0,  1013,  1014,     0,
+    1015,     0,   278,    36,     0,    37,     0,    38,  1016,     0,
+    1017,  1018,  1019,     0,   354,   281,   282,   272,   283,   284,
+     285,    43,    44,     0,   286,   287,     0,     0,  1367,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   354,     0,     0,     0,   288,     0,   289,
+       0,     0,   168,     0,     0,    47,    48,   290,   291,   292,
+     293,     0,     0,     0,     0,  1020,     0,     0,     0,     0,
+    -134,   354,     0,   354,     0,     0,     0,     0,     1,     2,
+     202,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,     0,   354,    28,    29,    30,
+      31,   354,     0,   354,    32,   275,   276,    33,   277,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,  -308,
+       0,     0,     0,     0,   278,    36,     0,    37,     0,    38,
+     279,    33,    40,    41,   280,     0,     0,   281,   282,   272,
+     283,   284,   285,    43,    44,     0,   286,   287,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   288,
+    -308,   289,     0,     0,     0,     0,     0,    47,    48,   290,
+     291,   292,   293,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  -134,     1,     2,   202,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-       0,     0,    28,    29,    30,   344,   344,     0,   344,   344,
-       0,     0,    33,   345,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   216,     0,     0,    77,    85,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      36,   352,     0,     0,     0,     0,    85,   201,    41,   345,
-       0,     0,     0,     0,    85,     0,     0,   342,     0,   345,
-     345,     0,     0,     0,     0,   218,   344,   344,     0,     0,
-     345,   352,     0,     0,     0,   273,   274,     0,   275,     0,
-       0,     0,     0,     0,     0,   160,   342,     0,     0,   352,
-       0,    85,    47,    48,     0,     0,     0,     0,     0,     0,
-     212,     0,     0,     0,   276,    74,     0,     0,     0,     0,
-     277,     0,    74,     0,   278,     0,     0,   279,   280,   270,
-     281,   282,   283,    43,    44,     0,   284,   285,     0,     0,
-       0,     0,    79,     0,   352,     0,     0,     0,     0,   344,
-       0,     0,     0,     0,     0,     0,   160,     0,     0,   286,
-     260,   367,     0,     0,     0,     0,   345,    47,    48,   288,
-     289,   290,   291,     0,     0,     0,     0,     0,     0,     0,
-     755,    74,     0,     0,     0,     0,   160,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   358,     0,     0,   363,
-       0,     0,     0,     0,     0,     0,   352,   345,     0,     0,
-       0,     0,     0,     0,    77,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,  -300,     0,     0,     0,
-       0,     0,     0,     0,   344,     0,   344,   160,    33,     0,
-       0,   352,   352,     0,     0,     0,     0,   345,   345,   212,
-     345,   345,     0,     0,     0,     0,     0,   352,     0,     0,
-       0,     0,     0,   344,     0,     0,    36,     0,    79,     0,
-       0,   344,   344,   344,     0,     0,   352,  -300,     0,     0,
-       0,     0,   344,   344,     0,     0,   363,    85,     0,     0,
-       0,     0,     0,   160,    77,     0,     0,     0,     0,     0,
-       0,    85,     0,     0,   352,     0,     0,     0,   345,   345,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     512,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   160,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   352,     0,     8,     9,    10,    11,    12,    13,
+       0,     0,    28,    29,    30,    31,     0,     0,     0,    32,
+     275,   276,    33,   277,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,     0,     0,     0,     0,   581,     0,
-       0,     0,     0,   607,     0,   217,    33,     0,   352,     0,
-       0,   345,     0,     0,     0,     0,     0,     0,   352,   352,
-       0,     0,     0,     0,   219,     0,     0,     0,     0,   352,
-       0,     0,     0,     0,    36,     0,     0,     0,     0,   344,
-       0,     0,     0,     0,     0,   205,     0,     0,     0,     0,
-       0,     0,     0,     0,   225,     0,   229,     0,   231,     0,
-       0,     0,     0,     0,   234,     0,     0,     0,   344,     0,
-       0,     0,     0,     0,     0,     0,    79,     0,   160,   160,
-       0,     0,     0,     0,   358,     0,     0,    77,     0,     0,
-       0,    85,     0,     0,    77,   205,     0,   229,   231,   234,
-       0,     0,     0,     0,     0,   160,   345,     0,   345,     0,
-       0,     0,     0,     0,     0,   352,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   688,     0,   205,   345,     0,     0,     0,     0,
-       0,     0,     0,   345,   345,   345,     0,     0,   160,     0,
-       0,     0,     0,    77,   345,   345,   352,     0,     0,     0,
-     512,     0,   512,     0,     0,   512,    79,   160,   512,     0,
-       0,     0,     0,     0,     0,     0,     0,   358,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   205,     0,   229,   231,   234,     0,
-       0,     0,     0,     0,     0,     0,   352,   352,     0,   352,
-     352,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   205,    85,   160,     0,
-       0,   205,     0,     0,     0,     0,     0,     0,     0,   358,
-       0,     0,   775,     0,     0,     0,     0,   218,     0,     0,
-       0,     0,     0,     0,     0,     0,   312,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   335,   352,   352,     0,
-     581,     0,     0,     0,     0,   581,     0,   370,   370,     0,
-       0,   345,     0,     0,   358,   358,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   205,
-     358,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     345,     0,     0,     0,     0,     0,     0,     0,   205,     0,
-       0,     0,     0,   229,   231,     0,     0,     0,     0,    79,
-       0,   234,     0,   512,     0,     0,    79,     0,   152,     0,
-     352,     0,     0,     0,     0,     0,     0,   358,     0,   885,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   464,     0,     0,     0,     0,
-       0,   205,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   239,     0,     0,   688,     0,     0,     0,     0,
-       0,   205,   244,     0,     0,    79,   205,     0,   205,     0,
-       0,     0,     0,     0,     0,    85,     0,     0,     0,     0,
-       0,     0,     0,     0,   205,     0,     0,   205,   205,     0,
-       0,     0,     0,     0,   205,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   352,   607,   352,   205,     0,
-       0,     0,     0,     0,     0,   205,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   374,     0,
-       0,     0,     0,     0,   352,     0,     0,     0,     0,     0,
-       0,     0,   352,   352,   352,     0,     0,     0,     0,     0,
-     406,     0,   370,   352,   352,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   420,    85,     0,     0,     0,     0,
-       0,     0,     0,   425,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   433,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   358,     0,
-       0,     0,   450,   512,     0,     0,     0,   460,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     468,     0,     0,     0,     0,   312,     0,   205,   482,     0,
-     486,     0,     0,   160,     0,     0,     0,     0,     0,   688,
-       0,     0,     0,     0,   682,     0,   219,     0,     0,   513,
-       0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
-       0,     0,   205,     0,     0,     0,     0,     0,     0,     0,
-       0,   581,     0,     0,     0,     0,     0,     0,     0,     0,
-     352,     0,     0,     0,     0,     0,     0,   718,     0,     0,
-     571,     0,   358,   358,   575,     0,     0,   727,     0,     0,
-       0,     0,   718,     0,     0,   718,     0,     0,     0,   352,
-       0,     0,     0,     0,     0,     0,     0,     0,   736,     0,
-     205,     0,   620,     0,     0,     0,   621,   622,    85,   623,
-       0,     0,     0,     0,   205,    85,   634,   635,     0,   636,
-     637,     0,   638,     0,   639,     0,     0,     0,   765,     0,
-       0,     0,     0,     0,     0,   335,     0,     0,     0,   727,
-       0,   571,     0,     0,     0,     0,     0,     0,   950,   655,
-     789,     8,     9,    10,    11,    12,   512,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   666,    85,     0,     0,     0,     0,     0,
-       0,   273,   274,    33,   275,     0,     0,   828,     0,     0,
-     205,     0,     0,     0,     0,   370,     0,     0,   680,     0,
-       0,   205,     0,   688,   683,     0,     0,     0,     0,   450,
-     276,    36,     0,     0,     0,     0,   277,     0,     0,   205,
-     278,     0,     0,   279,   280,   270,   281,   282,   283,    43,
-      44,     0,   284,   285,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   721,
-       0,     0,     0,     0,     0,   286,     0,   367,     0,     0,
-       0,   732,     0,   333,    48,   288,   289,   290,   291,     0,
-       0,     0,     0,     0,     0,   718,     0,   273,   274,   512,
-     275,     0,     0,     0,     0,   727,     0,   911,     0,     0,
-     914,     0,     0,     0,     0,     0,   921,     0,   757,     0,
-     688,     0,     0,     0,     0,     0,   276,   767,     0,     0,
-     768,     0,   624,     0,   136,   137,   278,   205,     0,   279,
-     280,   270,   281,   282,   283,    43,    44,   788,   284,   285,
-       0,     0,     0,     0,     0,     0,   938,   939,     0,   273,
-     274,     0,   275,     0,     0,     0,   358,   358,     0,     0,
-       0,   286,   335,   625,     0,   626,   368,     0,     0,    47,
-      48,   288,   289,   290,   291,     0,     0,   829,   276,   205,
-       0,     0,     0,     0,   277,     0,     0,     0,   278,     0,
-     205,   279,   280,   270,   281,   282,   283,    43,    44,     0,
-     284,   285,     0,   967,     0,     0,     0,   370,     0,     0,
-       0,     0,     0,     0,   864,     0,     0,     0,     0,     0,
-       0,     0,     0,   286,     0,   367,     0,     0,   368,     0,
-       0,    47,    48,   288,   289,   290,   291,     0,   335,     0,
-       0,   239,     0,     0,     0,     0,     0,     0,   212,     0,
-       0,     0,     0,     0,     0,     0,   897,   898,     0,     0,
-       0,     0,     0,     0,     0,     0,   905,     0,   330,   353,
-       0,     0,     0,   312,     0,     0,     0,     0,     0,   335,
-     918,     0,     0,   358,     0,   922,   370,   205,     0,     0,
-       0,   914,     0,     0,   718,     0,     0,     0,   212,     0,
-     402,     0,     0,     0,     0,     0,     0,   402,     0,     0,
-       0,     0,     0,     0,  1093,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1111,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     512,     0,   512,     0,     0,   370,   955,  1128,     0,     0,
-       0,     0,     0,   956,     0,     0,     0,     0,     0,     0,
-       0,     0,   914,   914,     0,     0,     0,   958,     0,   959,
-       0,     0,     0,   402,     0,     0,     0,     0,     0,   512,
-       0,   512,   969,     0,     0,     0,     0,     0,   973,  1159,
-       0,     0,     0,   125,     0,     0,     0,     0,     0,  1016,
-       0,     0,     0,  1017,     0,     0,     0,     0,     0,     0,
-       0,     0,   205,     0,     0,     0,     0,     0,     0,     0,
-     160,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   402,     0,     0,     0,     0,     0,     0,     0,     0,
-     402,   567,   914,   402,   570,     0,     0,   125,     0,     0,
-       0,   353,     0,     0,     0,   598,     0,     0,     0,     0,
-       0,     0,   125,   828,   125,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   617,     0,     0,     0,     0,     0,
-       0,  1224,  1225,     0,     0,     0,     0,  1089,     0,   265,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   402,     0,     0,     0,   402,     0,     0,   497,     0,
-     499,   502,     0,     0,     0,     0,     0,     0,   123,   505,
-     506,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   499,   499,     0,     0,   353,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   125,     0,
-     125,   125,     0,     0,  1154,   125,     0,   125,   125,     0,
-       0,     0,     0,   205,     0,     0,     0,     0,     0,   499,
-       0,     0,   232,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   402,     0,     0,   353,     0,   242,     0,   243,
-       0,     0,     0,     0,     0,     0,  1184,     0,     0,     0,
-       0,  1186,     0,     0,   499,     0,     0,     0,     0,     0,
-       0,  1191,     0,   205,     0,     0,     0,     0,     0,     0,
-       0,   125,     0,     0,     0,     0,     0,     0,     0,     0,
-     353,     0,  1334,     0,     0,  1213,   718,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1221,     0,
-       0,     0,  1222,     0,     0,  1223,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1232,  1233,   402,   402,   403,   404,     0,     0,     0,
-     408,     0,   410,   411,     0,     0,     0,     0,     0,  1244,
-       0,   770,   353,     0,     0,     0,     0,     0,     0,     0,
-       0,   598,     0,     0,   598,   598,     0,     0,     0,     0,
-       0,   598,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   809,     0,   353,     0,     0,     0,     0,   353,     0,
-       0,     0,     0,     0,     0,     0,     0,   353,   353,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   205,     0,
-       0,     0,     0,   353,  1290,     0,     0,   402,   850,     0,
-     125,   402,   854,     0,     0,     0,     0,     0,     0,     0,
-     857,     0,   499,   499,   499,   499,   499,   499,   499,   499,
-     499,   499,   499,   499,   499,   499,   499,   499,   499,   499,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     353,   598,     0,     0,     0,     0,     0,     0,     8,     9,
+      24,    25,    26,    27,     0,     0,    28,    29,    30,   278,
+      36,     0,    37,     0,    38,   279,    33,    40,    41,   280,
+       0,     0,   281,   282,   272,   283,   284,   285,    43,    44,
+       0,   286,   287,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    36,     0,     0,     0,     0,     0,
+       0,    40,    41,     0,   288,     0,   289,     0,     0,     0,
+       0,     0,    47,    48,   290,   291,   292,   293,     2,   202,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,     0,     0,   334,    29,    30,     0,
+       0,     0,     0,     0,   275,   276,    33,   277,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
-      28,    29,    30,  1347,     0,  1348,     0,     0,   353,     0,
-      33,     0,     0,     0,     0,  1351,     0,  1352,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1359,     0,     0,     0,     0,     0,    36,     0,
-     312,     0,     0,   109,     0,    40,    41,     0,   402,     0,
-    1378,  1380,     0,     0,     0,   649,    43,    44,     0,     0,
-       0,     0,     0,  1388,   598,     0,   598,     0,  1389,     0,
-       0,  1191,     0,     0,     0,     0,     0,   598,     0,     0,
-       0,     0,     0,     0,    46,     0,     0,  1407,     0,     0,
-      47,    48,     0,     0,     0,   125,   125,  1414,     0,     0,
-    1416,     0,  1418,  1420,  1422,   499,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   125,     0,     0,   125,   125,     0,   125,
-     499,   125,   125,     0,     0,     0,   125,   125,     0,     0,
-       0,     0,  1455,     0,  1457,     0,     0,     0,     0,     0,
-       0,   353,     0,     0,  1191,     0,     0,     0,   402,     0,
-     499,     0,     0,     0,  1473,     0,     0,     0,     0,     0,
-     598,   598,     0,     0,     0,   125,     0,     0,     0,   125,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   353,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   402,  1086,     0,     0,     0,     0,
-     763,   764,     0,     0,   353,     0,     0,     0,     0,     0,
-     402,  1099,     0,   598,   598,  1106,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   353,   353,     0,   795,     0,
-       0,   798,   799,     0,   802,     0,   804,   805,     0,     0,
-       0,   807,   808,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   199,     2,   200,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-     848,    28,    29,    30,   852,     0,     0,     0,     0,     0,
-     402,    33,   402,     0,   402,     0,     0,     0,     0,   402,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     499,     0,     0,     0,     0,   598,     0,     0,     0,    36,
-       0,    37,   499,    38,     0,  -522,   201,    41,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,     0,   353,    28,    29,    30,
-      31,   499,     0,     0,    32,   202,     0,    33,    34,     0,
-       0,    47,    48,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    35,     0,     0,    36,     0,    37,     0,    38,
-      39,     0,    40,    41,    42,     0,     0,     0,     0,     0,
-       0,   499,     0,    43,    44,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   402,     0,     0,     0,    45,
-     402,    46,   125,     0,     0,     0,     0,    47,    48,     0,
-       0,     0,     0,   353,     0,     0,     0,     0,   125,     0,
-       0,   125,   125,     2,   200,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-       0,    28,    29,    30,     0,     0,     0,     0,     0,   353,
-     353,    33,     0,     0,     0,     0,     0,   499,   499,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
-       0,    37,     0,    38,   125,     0,    40,    41,   402,  1344,
-       0,     0,   402,     0,     0,     0,     0,   125,     0,     0,
-       0,     0,   125,   125,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1084,     0,     0,
-       0,     0,     0,     0,  -407,   662,     0,     0,     0,     0,
-       0,    47,    48,  1097,     0,     0,  1101,  1104,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   125,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   353,     0,     0,     0,
-       0,     1,     2,   200,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,  -299,  1163,
-      28,    29,    30,    31,     0,     0,     0,    32,     0,     0,
-      33,   125,     0,     0,     0,     0,     0,  1180,  1181,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     125,     0,     0,     0,     0,     0,     0,     0,    36,     0,
-      37,     0,    38,     0,     0,    40,    41,     0,     0,  -299,
-       0,     0,     0,     0,     0,     0,     0,   402,     0,     0,
-       0,     0,  1108,     0,     0,     8,     9,    10,    11,    12,
-       0,     0,     0,     0,  1101,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    46,     0,   402,   402,   499,     0,
-      47,    48,     0,     0,     0,   273,   274,    33,   275,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   402,     0,     0,     0,
-       0,     0,     0,     0,   276,    36,   125,     0,     0,     0,
-     277,     0,     0,     0,   278,     0,  1265,   279,   280,   270,
-     281,   282,   283,    43,    44,     0,   284,   285,     0,     0,
-     499,     0,     0,     0,     0,  1275,     0,     0,     0,     0,
-       0,     0,   499,   499,     0,     0,     0,     0,     0,   286,
-       0,   367,     0,     0,     0,     0,     0,  1109,    48,   288,
-     289,   290,   291,     0,     0,   499,     0,     0,     0,     0,
-       0,     0,     1,     2,   200,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-       0,    28,    29,    30,    31,     0,     0,     0,    32,   273,
-     274,    33,   976,   977,     0,   978,     0,     0,   979,   980,
-     981,   982,   983,   984,   985,   986,     0,     0,     0,   987,
-       0,  1342,     0,   988,   989,     0,   990,   499,   276,    36,
-       0,    37,     0,    38,   991,     0,   992,   993,   994,     0,
-       0,   279,   280,   270,   281,   282,   283,    43,    44,     0,
-     284,   285,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   286,     0,   287,     0,     0,   166,     0,
-       0,    47,    48,   288,   289,   290,   291,     0,     0,     0,
-       0,   995,     0,     0,     0,     0,  -134,     1,     2,   200,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,     0,     0,    28,    29,    30,    31,
-       0,     0,     0,    32,   273,   274,    33,   275,     8,     9,
+     334,    29,    30,   278,    36,     0,    37,     0,    38,   279,
+      33,    40,    41,   280,     0,     0,   281,   282,   272,   283,
+     284,   285,    43,    44,     0,   286,   287,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
+       0,     0,     0,     0,     0,    40,    41,     0,   288,     0,
+     335,     0,     0,     0,     0,   748,   336,    48,   290,   291,
+     292,   293,     2,   202,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
-      28,    29,    30,   276,    36,     0,    37,     0,    38,   277,
-      33,    40,    41,   278,     0,     0,   279,   280,   270,   281,
-     282,   283,    43,    44,     0,   284,   285,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
-       0,     0,     0,     0,     0,    40,    41,     0,   286,     0,
-     287,     0,     0,     0,     0,     0,    47,    48,   288,   289,
-     290,   291,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  -134,     1,     2,   200,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-       0,    28,    29,    30,    31,     0,     0,     0,    32,   273,
-     274,    33,   275,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,     0,     0,    28,    29,    30,   276,    36,
-       0,    37,     0,    38,   277,    33,    40,    41,   278,     0,
-       0,   279,   280,   270,   281,   282,   283,    43,    44,     0,
-     284,   285,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    36,     0,     0,     0,     0,     0,     0,
-     201,    41,     0,   286,     0,   287,     0,     0,     0,     0,
-       0,    47,    48,   288,   289,   290,   291,     2,   200,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
-       0,     0,     0,   273,   274,    33,   275,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   276,    36,     0,    37,     0,    38,   277,     0,
-      40,    41,   278,     0,     0,   279,   280,   270,   281,   282,
-     283,    43,    44,     0,   284,   285,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   286,     0,   332,
-       0,     0,     0,     0,   726,   333,    48,   288,   289,   290,
-     291,     2,   200,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
-      29,    30,     0,     0,     0,     0,     0,   273,   274,    33,
-     275,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   276,    36,     0,    37,
-       0,    38,   277,     0,    40,    41,   278,     0,     0,   279,
-     280,   270,   281,   282,   283,    43,    44,     0,   284,   285,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   286,     0,   332,     0,     0,     0,     0,   726,    47,
-      48,   288,   289,   290,   291,     2,   200,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
-       0,   273,   274,    33,   275,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     276,    36,     0,    37,     0,    38,   277,     0,    40,    41,
-     278,     0,     0,   279,   280,   270,   281,   282,   283,    43,
-      44,     0,   284,   285,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   286,     0,   332,     0,     0,
-       0,     0,     0,   333,    48,   288,   289,   290,   291,     2,
-     200,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
-       0,     0,     0,     0,     0,   273,   274,    33,   275,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   276,    36,     0,    37,     0,    38,
-     277,     0,   201,    41,   278,     0,     0,   279,   280,   270,
-     281,   282,   283,    43,    44,     0,   284,   285,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   286,
-       0,   935,     0,     0,     0,     0,     0,   936,    48,   288,
-     289,   290,   291,     2,   200,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-       0,    28,    29,    30,     0,     0,     0,     0,     0,   273,
-     274,    33,   275,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   276,    36,
-       0,    37,     0,    38,   277,     0,   201,    41,   278,     0,
-       0,   279,   280,   270,   281,   282,   283,    43,    44,     0,
-     284,   285,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   286,     0,   367,     0,     0,     0,     0,
-       0,    47,    48,   288,   289,   290,   291,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,     0,     0,    28,    29,    30,    31,
-       0,     0,     0,    32,     0,     0,    33,    34,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    35,     0,     0,    36,     0,    37,     0,    38,    39,
-       0,    40,    41,    42,     0,     0,     0,     0,     0,     0,
-       0,     0,    43,    44,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    45,     0,
-      46,     0,     0,     0,  -526,     0,    47,    48,     1,     2,
+     334,    29,    30,     0,     0,     0,     0,     0,   275,   276,
+      33,   277,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,    28,    29,    30,   278,    36,     0,
+      37,     0,    38,   279,    33,    40,    41,   280,     0,     0,
+     281,   282,   272,   283,   284,   285,    43,    44,     0,   286,
+     287,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    36,     0,     0,     0,     0,     0,     0,   203,
+      41,     0,   288,     0,   335,     0,     0,     0,     0,   748,
+      47,    48,   290,   291,   292,   293,     2,   202,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,   334,    29,    30,     0,     0,     0,
+       0,     0,   275,   276,    33,   277,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   278,    36,     0,    37,     0,    38,   279,     0,    40,
+      41,   280,     0,     0,   281,   282,   272,   283,   284,   285,
+      43,    44,     0,   286,   287,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   288,     0,   335,     0,
+       0,     0,     0,     0,   336,    48,   290,   291,   292,   293,
+       2,   202,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,     0,     0,   334,    29,
+      30,     0,     0,     0,     0,     0,   275,   276,    33,   277,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   278,    36,     0,    37,     0,
+      38,   279,     0,   203,    41,   280,     0,     0,   281,   282,
+     272,   283,   284,   285,    43,    44,     0,   286,   287,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     288,     0,   960,     0,     0,     0,     0,     0,   961,    48,
+     290,   291,   292,   293,     2,   202,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,   334,    29,    30,     0,     0,     0,     0,     0,
+     275,   276,    33,   277,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   278,
+      36,     0,    37,     0,    38,   279,     0,   203,    41,   280,
+       0,     0,   281,   282,   272,   283,   284,   285,    43,    44,
+       0,   286,   287,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   288,     0,   377,     0,     0,     0,
+       0,     0,    47,    48,   290,   291,   292,   293,     1,     2,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
@@ -2623,6 +2706,6 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    45,
-       0,    46,     0,     0,     0,     0,     0,    47,    48,   199,
-       2,   200,     4,     5,     6,     7,     8,     9,    10,    11,
+       0,    46,     0,     0,     0,     0,     0,    47,    48,   201,
+       2,   202,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
@@ -2631,10 +2714,10 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    36,     0,    37,     0,
-      38,    39,     0,   201,    41,    42,     0,     0,     0,     0,
+      38,    39,     0,   203,    41,    42,     0,     0,     0,     0,
        0,     0,     0,     0,    43,    44,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      45,     0,   202,     0,     0,     0,     0,     0,    47,    48,
-       1,     2,   200,     4,     5,     6,     7,     8,     9,    10,
+      45,     0,   204,     0,     0,     0,     0,     0,    47,    48,
+       1,     2,   202,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
@@ -2643,993 +2726,1115 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
-       0,    38,     0,     0,    40,    41,     2,   200,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+       0,    38,     0,     0,    40,    41,   201,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
+       0,     0,     0,    46,     0,    33,     0,     0,     0,    47,
+      48,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
+     203,    41,     2,   202,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
+      28,    29,    30,     0,     0,     0,     0,     0,     0,   204,
+      33,     0,     0,     0,     0,    47,    48,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
+      37,     0,    38,    39,     0,   203,    41,    42,     0,     0,
+       0,     0,     0,     0,     0,     0,    43,    44,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    45,     0,   204,     0,     0,     0,     0,     0,
+      47,    48,     2,   202,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
+     334,    29,    30,     0,     0,     0,     0,     0,     0,     0,
+      33,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
+      37,     0,    38,     0,     0,    40,    41,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,   334,    29,    30,     0,     0,
+       0,     0,     0,  -426,   683,    33,     0,     0,     0,     0,
+      47,    48,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
+      40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1336,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   683,
+       0,     0,     0,     0,     0,    47,    48,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,   334,    29,    30,     0,     0,
+       0,     0,     0,     0,     0,    33,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
+      29,    30,     0,    36,     0,    37,     0,    38,     0,    33,
+      40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1338,     0,     0,    36,     0,     0,
+       0,     0,     0,     0,    40,    41,     0,     0,     0,   683,
+       0,     0,     0,     0,     0,    47,    48,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    46,     0,   334,    29,    30,     0,    47,
+      48,     0,     0,     0,     0,    33,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
+     203,    41,     2,   202,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
+     334,    29,    30,     0,     0,     0,     0,     0,     0,   260,
+      33,     0,     0,     0,     0,    47,    48,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
+      37,     0,    38,     0,     0,    40,    41,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
+       0,     0,     0,     0,   683,    33,     0,     0,     0,     0,
+      47,    48,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
+     203,    41,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
-       0,     0,     0,    46,    33,     0,     0,     0,     0,    47,
-      48,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    36,     0,    37,     0,    38,    39,     0,   201,
-      41,    42,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   275,   276,    33,   277,     0,     0,     0,   204,
+       0,     0,     0,     0,     0,    47,    48,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   278,    36,     0,     0,     0,     0,   279,     0,    40,
+      41,   280,     0,     0,   281,   282,   272,   283,   284,   285,
+      43,    44,     0,   286,   287,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   288,     0,   518,     0,
+       0,   168,     0,     0,    47,    48,   290,   291,   292,   293,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,    28,    29,    30,     0,     0,     0,     0,     0,
+     275,   276,    33,   277,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   278,
+      36,     0,     0,     0,     0,   279,     0,    40,    41,   280,
+       0,     0,   281,   282,   272,   283,   284,   285,    43,    44,
+       0,   286,   287,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   288,   -40,   289,     0,     0,     0,
+       0,     0,    47,    48,   290,   291,   292,   293,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
+      28,    29,    30,     0,     0,     0,     0,     0,   275,   276,
+      33,   277,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   278,    36,     0,
+       0,     0,     0,   279,     0,    40,    41,   280,     0,     0,
+     281,   282,   272,   283,   284,   285,    43,    44,     0,   286,
+     287,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   288,     0,   289,     0,     0,     0,     0,     0,
+      47,    48,   290,   291,   292,   293,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,     0,     0,   334,    29,
+      30,     0,     0,     0,     0,     0,   275,   276,    33,   277,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   278,    36,     0,     0,     0,
+       0,   279,     0,    40,    41,   280,     0,     0,   281,   282,
+     272,   283,   284,   285,    43,    44,     0,   286,   287,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     288,     0,   335,     0,     0,     0,     0,     0,    47,    48,
+     290,   291,   292,   293,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,     0,     0,   334,    29,    30,     0,
+       0,     0,     0,     0,   275,   276,    33,   277,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   278,    36,     0,     0,     0,     0,   279,
+       0,    40,    41,   280,     0,     0,   281,   282,   272,   283,
+     284,   285,    43,    44,     0,   286,   287,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   288,     0,
+     377,     0,     0,     0,     0,     0,    47,    48,   290,   291,
+     292,   293,   463,     2,   202,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+       0,    28,    29,    30,     0,     0,     0,     0,     0,     0,
+       0,    33,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,    28,    29,    30,     0,     0,    36,
+       0,    37,     0,    38,    33,     0,    40,    41,     0,     0,
+       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    36,     0,    28,    29,    30,    39,     0,    40,
+      41,    42,     0,     0,    33,     0,     0,     0,    -3,     0,
       43,    44,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    45,     0,   202,     0,
-       0,     0,     0,     0,    47,    48,     2,   200,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,     8,     9,    10,    11,
+       0,     0,    36,     0,     0,     0,    45,    39,    46,   203,
+      41,    42,     0,     0,    47,    48,     0,     0,     0,     0,
+      43,    44,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    45,     0,   260,     0,
+       0,     0,     0,     0,    47,    48,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
-      30,     0,    36,     0,    37,     0,    38,     0,    33,    40,
-      41,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1311,     0,     0,    36,     0,     0,     0,
-       0,     0,     0,    40,    41,     0,     0,     0,   662,     0,
-       0,     0,     0,     0,    47,    48,     2,   200,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,   245,     0,    28,    29,    30,     0,    47,    48,
-       0,     0,     0,     0,    33,     0,     8,     9,    10,    11,
+      30,     0,     0,     0,     0,     0,     0,     0,    33,     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,    26,    27,     0,     0,    28,    29,
-      30,     0,    36,     0,    37,     0,    38,     0,    33,    40,
-      41,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1313,     0,     0,    36,     0,     0,     0,
-       0,     0,     0,    40,    41,     0,     0,     0,   662,     0,
-       0,     0,     0,     0,    47,    48,     2,   200,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    46,     0,    28,    29,    30,     0,    47,    48,
-       0,     0,     0,     0,    33,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    36,     0,    37,     0,    38,     0,     0,   201,
-      41,     2,   200,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
-      29,    30,     0,     0,     0,     0,     0,     0,   258,    33,
-       0,     0,     0,     0,    47,    48,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
-       0,    38,     0,     0,    40,    41,     2,   200,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
-       0,     0,     0,   662,    33,     0,     0,     0,     0,    47,
-      48,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    36,     0,    37,     0,    38,     0,     0,   201,
-      41,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      22,    23,    24,    25,    26,    27,    36,     0,    28,    29,
+      30,   111,     0,    40,    41,     0,     0,     0,    33,   894,
+       0,     0,     0,     0,    43,    44,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    36,     0,     0,     0,
+       0,     0,    46,    40,    41,     0,     0,     0,    47,    48,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
-       0,   273,   274,    33,   275,     0,     0,     0,   202,     0,
-       0,     0,     0,     0,    47,    48,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     276,    36,     0,     0,     0,     0,   277,     0,    40,    41,
-     278,     0,     0,   279,   280,   270,   281,   282,   283,    43,
-      44,     0,   284,   285,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   286,     0,   507,     0,     0,
-     166,     0,     0,    47,    48,   288,   289,   290,   291,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-       0,    28,    29,    30,     0,     0,     0,     0,     0,   273,
-     274,    33,   275,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   276,    36,
-       0,     0,     0,     0,   277,     0,    40,    41,   278,     0,
-       0,   279,   280,   270,   281,   282,   283,    43,    44,     0,
-     284,   285,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   286,   -40,   287,     0,     0,     0,     0,
-       0,    47,    48,   288,   289,   290,   291,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
-      29,    30,     0,     0,     0,     0,     0,   273,   274,    33,
-     275,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   276,    36,     0,     0,
-       0,     0,   277,     0,    40,    41,   278,     0,     0,   279,
-     280,   270,   281,   282,   283,    43,    44,     0,   284,   285,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   286,     0,   287,     0,     0,     0,     0,     0,    47,
-      48,   288,   289,   290,   291,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
-       0,     0,     0,     0,     0,   273,   274,    33,   275,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   276,    36,     0,     0,     0,     0,
-     277,     0,    40,    41,   278,     0,     0,   279,   280,   270,
-     281,   282,   283,    43,    44,     0,   284,   285,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   286,
-       0,   332,     0,     0,     0,     0,     0,    47,    48,   288,
-     289,   290,   291,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
-       0,     0,     0,   273,   274,    33,   275,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   276,    36,     0,     0,     0,     0,   277,     0,
-      40,    41,   278,     0,     0,   279,   280,   270,   281,   282,
-     283,    43,    44,     0,   284,   285,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   286,     0,   367,
-       0,     0,     0,     0,     0,    47,    48,   288,   289,   290,
-     291,   453,     2,   200,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
-      28,    29,    30,     0,     0,     0,     0,     0,     0,     0,
-      33,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,     0,     0,    28,    29,    30,     0,     0,    36,     0,
-      37,     0,    38,    33,   869,    40,    41,     0,     0,     0,
+       0,     0,   736,    33,   894,     0,  1208,     0,    47,    48,
        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    36,     0,    28,    29,    30,     0,     0,    40,    41,
-       0,     0,     0,    33,     0,     0,     0,    -3,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    36,     0,     0,     0,     0,     0,   714,   201,    41,
-       0,  1269,     0,    47,    48,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
-      30,     0,     0,     0,     0,     0,     0,   258,    33,     0,
-       0,     0,     0,    47,    48,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    36,     0,    28,    29,
-      30,     0,     0,    40,    41,     0,     0,     0,    33,     8,
+       0,     0,     0,    33,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,     0,     0,    28,    29,    30,     0,
+       0,    36,     0,     0,     0,     0,    33,   736,   203,    41,
+       0,  1294,     0,    47,    48,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    36,     0,     0,     0,     0,     0,
+       0,    40,    41,     0,     0,     0,     0,   260,     0,     0,
+       0,     0,     0,    47,    48,     0,     0,     0,     0,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-       0,    28,    29,    30,     0,     0,    36,     0,     0,     0,
-       0,    33,   328,    40,    41,     0,     0,     0,    47,    48,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
-       0,     0,     0,     0,     0,     0,    40,    41,     0,     0,
-       0,     0,   714,     0,     0,     0,     0,     0,    47,    48,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   662,     0,     0,     0,     0,
-       0,    47,    48,     2,   200,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-       0,    28,    29,    30,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,   273,   274,     0,   275,   977,     0,   978,
-       0,     0,   979,   980,   981,   982,   983,   984,   985,   986,
-       0,     0,  1503,   987,     0,     0,     0,   988,   989,    36,
-     990,    37,   276,    38,     0,     0,    40,    41,   991,     0,
-     169,   170,   994,     0,     0,   279,   280,   270,   281,   282,
-     283,    43,    44,     0,   284,   285,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  -420,     0,     0,   286,     0,   367,
-       0,     0,   166,     0,     0,    47,    48,   288,   289,   290,
-     291,     0,     0,   273,   274,   995,   275,   977,     0,   978,
-    -134,     0,   979,   980,   981,   982,   983,   984,   985,   986,
-       0,     0,     0,   987,     0,     0,     0,   988,   989,     0,
-     990,     0,   276,     0,     0,     0,     0,     0,   991,     0,
-     169,   170,   994,     0,     0,   279,   280,   270,   281,   282,
-     283,    43,    44,     0,   284,   285,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   286,     0,   367,
-       0,     0,   166,     0,     0,    47,    48,   288,   289,   290,
-     291,     0,     0,     0,     0,   995,     0,     0,     0,     0,
-    -134,     2,   200,     4,     5,     6,     7,     8,     9,    10,
+     330,   334,    29,    30,     0,     0,    47,    48,     0,     0,
+       0,    33,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,   334,    29,    30,     0,     0,    36,
+       0,     0,     0,     0,    33,     0,    40,    41,     0,     0,
+       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    36,     0,    28,    29,    30,     0,     0,    40,
+      41,     0,     0,     0,    33,   247,     0,     0,     0,     0,
+       0,    47,    48,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    36,     0,     0,     0,     0,     0,   330,    40,
+      41,     0,     0,     0,    47,    48,     0,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
-      29,    30,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,   273,   274,     0,   275,   977,     0,   978,  1363,  1364,
-     979,   980,   981,   982,   983,   984,   985,   986,     0,     0,
-    1503,   987,     0,     0,     0,   988,   989,    36,   990,    37,
-     276,    38,     0,     0,    40,    41,   991,     0,   169,   170,
-     994,     0,     0,   279,   280,   270,   281,   282,   283,    43,
-      44,     0,   284,   285,     0,     0,     0,     0,  1276,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   286,     0,   367,     0,     0,
-     166,     0,     0,    47,    48,   288,   289,   290,   291,     0,
-       0,   273,   274,   995,   275,   977,     0,   978,  1363,  1364,
-     979,   980,   981,   982,   983,   984,   985,   986,     0,     0,
-       0,   987,     0,     0,     0,   988,   989,     0,   990,     0,
-     276,     0,     0,     0,     0,     0,   991,     0,   169,   170,
-     994,     0,     0,   279,   280,   270,   281,   282,   283,    43,
-      44,     0,   284,   285,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   286,     0,   367,     0,     0,
-     166,     0,     0,    47,    48,   288,   289,   290,   291,     0,
-       0,   273,   274,   995,   275,   977,     0,   978,     0,     0,
-     979,   980,   981,   982,   983,   984,   985,   986,     0,     0,
-       0,   987,     0,     0,     0,   988,   989,     0,   990,     0,
-     276,     0,     0,     0,     0,     0,   991,     0,   169,   170,
-     994,     0,     0,   279,   280,   270,   281,   282,   283,    43,
-      44,     0,   284,   285,     0,     0,     0,     0,     0,     0,
-     273,   274,     0,   275,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   286,     0,   367,     0,     0,
-     166,     0,     0,    47,    48,   288,   289,   290,   291,   276,
-       0,     0,     0,   995,     0,   277,     0,     0,     0,   278,
-       0,     0,   279,   280,   270,   281,   282,   283,    43,    44,
-       0,   284,   285,     0,     0,     0,     0,     0,     0,   273,
-     274,     0,   275,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   286,     0,   367,     0,     0,     0,
-       0,   726,    47,    48,   288,   289,   290,   291,   276,     0,
-       0,     0,     0,     0,   277,     0,     0,     0,   278,     0,
-       0,   279,   280,   270,   281,   282,   283,    43,    44,     0,
-     284,   285,     0,     0,     0,     0,     0,     0,   273,   274,
-       0,   275,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   286,     0,   367,     0,     0,   912,     0,
-       0,    47,    48,   288,   289,   290,   291,   276,     0,     0,
-       0,     0,     0,   277,     0,     0,     0,   278,     0,     0,
-     279,   280,   270,   281,   282,   283,    43,    44,     0,   284,
-     285,     0,     0,     0,     0,     0,     0,   273,   274,     0,
-     275,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   286,     0,   367,     0,     0,     0,     0,     0,
-      47,    48,   288,   289,   290,   291,   276,     0,     0,     0,
-       0,     0,   277,     0,     0,     0,   278,     0,     0,   279,
-     280,   270,   281,   282,   283,    43,    44,     0,   284,   285,
-       0,     0,     0,     0,     0,     0,   273,   274,     0,   275,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   496,     0,   367,     0,     0,     0,     0,     0,    47,
-      48,   288,   289,   290,   291,   276,     0,     0,     0,     0,
-       0,   277,     0,     0,     0,   278,     0,     0,   279,   280,
-     270,   281,   282,   283,    43,    44,     0,   284,   285,     0,
-       0,     0,     0,     0,     0,   273,   274,     0,   275,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     501,     0,   367,     0,     0,     0,     0,     0,    47,    48,
-     288,   289,   290,   291,   276,     0,     0,     0,     0,     0,
-     277,     0,     0,     0,   278,     0,     0,   279,   280,   270,
-     281,   282,   283,    43,    44,     0,   284,   285,     0,     0,
-       0,     0,     0,     0,   273,   274,     0,   275,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   504,
-       0,   367,     0,     0,     0,     0,     0,    47,    48,   288,
-     289,   290,   291,   276,     0,     0,     0,     0,     0,   277,
-       0,     0,     0,   278,     0,     0,   279,   280,   270,   281,
-     282,   283,    43,    44,     0,   284,   285,     0,     0,     0,
-       0,     0,     0,   273,   274,     0,   275,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   286,     0,
-     367,     0,     0,     0,     0,     0,   681,    48,   288,   289,
-     290,   291,   276,     0,     0,     0,     0,     0,   277,     0,
-       0,     0,   278,     0,     0,   279,   280,   270,   281,   282,
-     283,    43,    44,     0,   284,   285,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   286,     0,   367,
-       0,     0,     0,     0,     0,   333,    48,   288,   289,   290,
-     291,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,   334,
+      29,    30,     0,     0,     0,     0,     0,     0,   736,    33,
+       0,     0,     0,     0,    47,    48,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    36,     0,   334,
+      29,    30,     0,     0,   203,    41,     0,     0,     0,    33,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,   334,    29,    30,     0,     0,    36,     0,     0,
+       0,     0,    33,   260,    40,    41,     0,     0,     0,    47,
+      48,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      36,     0,     0,     0,     0,     0,     0,    40,    41,     0,
+       0,     0,     0,   683,     0,     0,     0,     0,     0,    47,
+      48,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   736,     0,     0,     0,
+       0,     0,    47,    48,     2,   202,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,   334,    29,    30,     0,     0,     0,     0,     0,
+       0,     0,    33,     0,   275,   276,     0,   277,  1002,     0,
+    1003,     0,     0,  1004,  1005,  1006,  1007,  1008,  1009,  1010,
+    1011,     0,     0,  1529,  1012,     0,     0,     0,  1013,  1014,
+      36,  1015,    37,   278,    38,     0,     0,    40,    41,  1016,
+       0,   171,   172,  1019,     0,     0,   281,   282,   272,   283,
+     284,   285,    43,    44,     0,   286,   287,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  -439,     0,     0,   288,     0,
+     377,     0,     0,   168,     0,     0,    47,    48,   290,   291,
+     292,   293,     0,     0,   275,   276,  1020,   277,  1002,     0,
+    1003,  -134,     0,  1004,  1005,  1006,  1007,  1008,  1009,  1010,
+    1011,     0,     0,     0,  1012,     0,     0,     0,  1013,  1014,
+       0,  1015,     0,   278,     0,     0,     0,     0,     0,  1016,
+       0,   171,   172,  1019,     0,     0,   281,   282,   272,   283,
+     284,   285,    43,    44,     0,   286,   287,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   288,     0,
+     377,     0,     0,   168,     0,     0,    47,    48,   290,   291,
+     292,   293,     0,     0,     0,     0,  1020,     0,     0,     0,
+       0,  -134,     2,   202,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
+     334,    29,    30,     0,     0,     0,     0,     0,     0,     0,
+      33,     0,   275,   276,     0,   277,  1002,     0,  1003,  1388,
+    1389,  1004,  1005,  1006,  1007,  1008,  1009,  1010,  1011,     0,
+       0,  1529,  1012,     0,     0,     0,  1013,  1014,    36,  1015,
+      37,   278,    38,     0,     0,    40,    41,  1016,     0,   171,
+     172,  1019,     0,     0,   281,   282,   272,   283,   284,   285,
+      43,    44,     0,   286,   287,     0,     0,     0,     0,  1301,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   288,     0,   377,     0,
+       0,   168,     0,     0,    47,    48,   290,   291,   292,   293,
+       0,     0,   275,   276,  1020,   277,  1002,     0,  1003,  1388,
+    1389,  1004,  1005,  1006,  1007,  1008,  1009,  1010,  1011,     0,
+       0,     0,  1012,     0,     0,     0,  1013,  1014,     0,  1015,
+       0,   278,     0,     0,     0,     0,     0,  1016,     0,   171,
+     172,  1019,     0,     0,   281,   282,   272,   283,   284,   285,
+      43,    44,     0,   286,   287,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   288,     0,   377,     0,
+       0,   168,     0,     0,    47,    48,   290,   291,   292,   293,
+       0,     0,   275,   276,  1020,   277,  1002,     0,  1003,     0,
+       0,  1004,  1005,  1006,  1007,  1008,  1009,  1010,  1011,     0,
+       0,     0,  1012,     0,     0,     0,  1013,  1014,     0,  1015,
+       0,   278,     0,     0,     0,     0,     0,  1016,     0,   171,
+     172,  1019,     0,     0,   281,   282,   272,   283,   284,   285,
+      43,    44,     0,   286,   287,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   288,     0,   377,     0,
+       0,   168,     0,     0,    47,    48,   290,   291,   292,   293,
+       0,     0,     0,     0,  1020,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
+       0,     0,     0,     0,     0,     0,     0,    33,   201,     2,
+     202,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    36,     0,    28,    29,    30,
+     111,     0,    40,    41,     0,     0,     0,    33,     0,     0,
+       0,     0,     0,    43,    44,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    36,     0,    37,     0,    38,
+       0,     0,   203,    41,   463,     2,   202,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
-       0,     0,     0,    33,   199,     2,   200,     4,     5,     6,
+       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    36,     0,    37,     0,    38,     0,     0,    40,    41,
+       2,   202,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,     0,     0,   334,    29,
+      30,     0,     0,     0,     0,     0,     0,     0,    33,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    36,     0,    37,     0,
+      38,     0,     0,   203,    41,     2,   202,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    36,     0,    28,    29,    30,   109,     0,    40,    41,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,    43,
-      44,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    36,     0,    37,     0,    38,     0,     0,   201,    41,
-     453,     2,   200,     4,     5,     6,     7,     8,     9,    10,
+      27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
+       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    36,     0,    37,     0,    38,     0,     0,   203,    41,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,    28,    29,    30,   482,   483,   484,   485,     0,
+       0,     0,    33,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      36,     0,     0,     0,     0,     0,     0,    40,    41
+};
+
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-1346))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
+static const yytype_int16 yycheck[] =
+{
+       0,     1,     0,    45,   180,    45,     1,   180,     1,   200,
+     117,   180,    51,    45,   180,   451,   603,   180,     0,   651,
+     180,  1050,   180,   341,   532,   722,   603,   479,   900,   165,
+     166,    31,    32,   183,    34,   215,    34,   341,  1010,     0,
+      34,   622,   865,  1388,   600,    45,  1050,  1050,     1,  1311,
+    1097,    51,    34,    51,   514,    45,   983,   984,    58,   568,
+     600,   106,   865,    63,    66,    63,    66,    45,    66,    69,
+    1392,    69,   600,    34,    69,   114,   493,     0,     1,   255,
+     497,    66,   255,    67,    42,   337,   255,   416,   479,   255,
+     197,   154,   255,   600,    45,   255,    42,   255,    51,    47,
+      48,   251,   252,   600,    30,   144,   435,   107,   153,    54,
+     110,    34,   600,    90,   443,   342,   246,   117,  1463,   363,
+     600,   984,    42,   367,   337,   125,   100,  1052,   424,   425,
+     114,     0,  1269,   118,    42,   137,   604,  1056,   180,  1058,
+     180,   118,   610,    47,    48,   145,    69,   145,   180,    84,
+     363,   224,  1414,   106,   367,    81,   114,   157,   116,   157,
+     134,   114,   101,   181,   237,    34,   205,    56,   486,   114,
+     116,   119,   157,   713,  1496,  1047,   114,   101,  1001,  1501,
+     180,   181,    42,   181,  1231,   713,  1233,  1234,   127,   288,
+     180,   144,   133,   114,   114,   136,   116,   197,  1001,   495,
+     153,     0,   180,   127,  1526,   205,   114,   205,   116,    98,
+      42,  1533,     0,   255,   214,   255,   120,   217,   514,   217,
+      51,   114,   261,   255,   224,   733,   813,   479,   408,   180,
+     112,   181,   217,   713,   234,    34,   813,   237,   256,  1013,
+    1014,   241,   242,   241,   800,   947,    34,   241,   201,   242,
+     641,   642,   205,    42,   136,   255,   256,    45,   256,   241,
+     800,   300,   262,    51,   249,   265,   657,   114,   115,   254,
+       0,     1,   800,  1198,   783,    63,     0,    42,    66,   575,
+     241,    69,   114,   114,   116,   246,   416,   332,   920,    47,
+      48,   743,   994,   800,    84,  1432,   114,  1269,   337,   603,
+     189,   114,  1439,   800,    34,   435,   256,   114,   261,   117,
+      34,   264,   800,   443,   705,   422,    42,   135,   241,  1093,
+     800,   428,   322,   212,   322,   114,   116,   116,   642,   136,
+    1257,  1258,   909,   222,   802,   288,    66,   121,   115,    69,
+     340,   341,   586,   657,   121,    69,   119,   300,  1211,   114,
+    1501,   116,   743,   137,  1051,     0,  1179,   145,   687,    42,
+      42,   119,  1499,   590,   364,     3,    42,   430,   368,   157,
+     622,  1501,   241,   586,   205,  1347,  1179,   246,   378,   332,
+     632,   962,  1533,   117,   402,   424,   425,   121,   114,    34,
+     116,   705,   180,   181,   638,  1258,  1526,  1443,   625,   288,
+     143,   908,   402,  1533,   402,     0,   115,   634,   507,   622,
+     509,   908,   451,   512,   124,   125,   515,   205,    42,   632,
+     908,    66,   422,   115,   154,   638,   135,     3,   428,   217,
+     261,   114,   114,   116,   116,  1481,   121,  1483,   114,    34,
+     116,   460,   241,   135,   429,   722,  1269,   246,   121,     0,
+    1147,  1148,   402,   241,   114,   416,   495,  1384,    42,   477,
+    1092,   524,   135,   463,  1436,   692,  1438,   255,   468,   300,
+     463,   424,   425,   115,   435,   514,  1505,   477,   930,   477,
+     707,   481,   443,   481,   469,   945,   486,   217,   924,   489,
+     114,   743,   116,   135,   494,   813,  1073,     0,   451,   481,
+     777,  1505,  1505,   971,   972,   922,   116,   122,   118,   813,
+     463,   241,   115,   128,   129,   136,   652,   241,   121,    10,
+     481,  1384,   246,  1466,   587,   135,   526,   477,  1500,  1472,
+     114,   531,   116,   526,   322,   115,   575,   115,   531,   930,
+     493,   121,   495,   121,   497,   114,   114,   416,   116,   793,
+    1475,   440,   659,   341,   507,  1498,   509,   687,   481,   512,
+    1503,   514,   515,   670,     0,     1,   435,   115,   795,    97,
+      98,   701,   217,   121,   443,   121,   465,   854,   641,   642,
+     793,  1506,   114,   622,    75,   585,    77,    78,   121,   641,
+     642,   137,   983,   632,   657,   913,   241,   121,    34,   121,
+     600,   115,   115,   603,   137,   657,    84,    75,   121,  1432,
+    1535,   135,   481,  1315,   402,   137,  1439,   416,   507,   114,
+      88,    89,   575,   512,   624,    75,   515,    77,    78,   629,
+      66,   114,   114,    69,   116,   488,   435,    51,    88,    89,
+     122,   123,   705,   643,   443,   277,   241,   647,   116,    63,
+     114,   246,    66,   705,   136,    69,   656,   676,   658,   659,
+     660,   121,  1114,   121,   121,   658,   116,   660,   300,   301,
+     670,   115,   852,   950,  1376,  1377,  1499,   137,   930,   137,
+     137,    75,   481,   114,    10,    11,    12,    13,    14,   121,
+     114,  1388,   416,   481,    88,    89,   121,   342,   486,   699,
+     430,   114,   337,   135,   115,   337,   699,   115,   343,   121,
+     962,   435,   137,   713,   714,   115,    42,   702,   587,   443,
+     720,   998,   858,  1114,   724,   137,   687,   115,   363,   121,
+     880,   145,   367,    95,    96,   115,   120,   690,   965,   121,
+     701,   121,   121,   157,    70,   137,   470,   379,   115,   962,
+     114,   481,   605,  1450,   121,   137,   609,   481,   137,  1211,
+     779,   121,   615,    75,   717,  1462,  1463,   181,   130,   131,
+     789,   790,   115,   114,  1051,   116,    88,    89,   121,  1287,
+      67,   217,   801,   636,   975,   121,   675,   640,   114,  1486,
+     116,   205,   115,   114,   524,   684,   122,   123,   121,   688,
+     800,   137,   114,   217,   116,   241,   114,    10,    11,    12,
+      13,    14,   600,   813,    70,   603,   119,    73,   687,   121,
+      76,   416,    78,   115,   469,   115,   889,   115,   137,   121,
+      86,   121,   701,   121,     3,   137,   481,   137,    75,    42,
+     435,    10,    11,    12,    13,    14,   117,   114,   443,   116,
+     121,    88,    89,   288,   137,   122,   123,   587,   858,   690,
+     996,  1558,  1114,  1043,   864,   865,  1257,    70,   117,   115,
+    1147,  1148,   121,    42,  1050,   121,   115,  1050,   896,   116,
+     115,  1050,   121,   865,  1050,   924,   481,  1050,   687,   114,
+    1050,   116,  1050,    75,    93,    94,   896,   122,   123,   899,
+      82,    70,   701,    85,   865,    87,    88,    89,   322,   115,
+     117,   641,   642,   913,   121,   121,   548,   549,   550,   119,
+     983,   984,    84,   962,   115,   713,   714,   657,   923,   672,
+     121,   931,   117,   114,   116,   114,   121,   937,   931,   115,
+    1484,   894,   865,   943,  1488,   121,   896,   947,   120,   121,
+     943,   586,   208,    75,   947,    77,    78,    79,   115,  1211,
+     123,   980,   981,   687,   121,   132,    88,    89,   133,   922,
+     923,   924,    75,   115,   116,   705,  1083,   701,    99,    82,
+     625,   116,    85,   836,    87,    88,    89,   622,   402,   424,
+     425,   117,   114,   117,   994,   115,   865,   632,    61,    62,
+     923,   994,   891,   638,  1004,   120,   121,  1007,  1008,  1009,
+      47,    48,   800,   116,    10,    11,    12,    13,    14,  1001,
+     889,   115,  1041,  1042,   115,   813,  1098,  1099,    75,   115,
+    1048,   115,    79,   115,  1052,   114,   115,   116,  1038,   137,
+    1001,    88,    89,   551,   552,   481,    42,   692,  1048,   114,
+    1050,   117,  1052,   555,   556,   557,   558,   702,   114,   115,
+     116,   914,   707,   894,  1064,   116,   865,   114,    75,   116,
+      77,    78,   507,   119,    70,   122,   123,   512,  1001,   119,
+     515,    88,    89,  1083,   553,   554,  1522,   136,   344,   345,
+     121,   347,   687,   349,   114,   115,   116,  1097,  1048,   114,
+     115,   116,  1052,   136,  1097,   361,   701,   114,   896,   119,
+     114,  1388,   119,   137,  1067,   747,   559,   560,   114,   117,
+     116,   115,   115,  1012,   135,   913,   122,   123,   117,     3,
+      75,   566,  1001,   117,    79,   865,    10,    11,    12,    13,
+      14,   865,   121,    88,    89,   135,  1209,   135,    31,    75,
+     795,    77,    78,    79,  1154,    61,    62,    63,   793,   889,
+     115,   796,    88,    89,   115,   119,   115,   120,    42,   114,
+     120,   114,   120,  1450,   121,   115,   115,   122,   123,  1179,
+    1198,     0,     1,   439,   121,  1462,  1463,   115,   115,   121,
+    1209,   115,   115,   923,  1257,  1258,    70,  1179,  1198,   115,
+     115,   115,  1001,    75,   115,    77,    78,    79,   115,  1486,
+      75,   137,    77,    78,    79,    34,    88,    89,  1179,  1238,
+     865,  1216,   115,    88,    89,   115,    45,  1246,  1247,  1248,
+     115,  1231,    51,  1233,  1234,   115,  1067,  1190,  1231,   115,
+    1233,  1234,   115,   120,    63,   115,    31,    66,  1198,  1476,
+      69,   115,   136,   983,   984,    75,  1179,    77,    78,    79,
+    1048,   119,  1050,  1216,  1052,   137,  1373,   115,    88,    89,
+     865,  1001,    75,   117,    77,    78,    79,  1001,   121,   117,
+     115,  1558,  1300,   115,   121,    88,    89,   106,   119,   115,
+    1290,    58,   115,  1216,   114,   114,   116,   121,   117,   118,
+    1300,   115,   122,   123,    75,   121,    77,    78,  1269,   114,
+    1179,    11,   114,   114,   114,  1315,  1311,    88,    89,   122,
+     965,  1384,  1315,   114,   135,   144,   145,   962,   135,  1505,
+     962,   135,  1505,   121,   153,   154,  1505,   120,   157,  1505,
+     107,  1341,  1505,   110,  1344,  1505,  1269,  1505,   119,   115,
+    1300,   137,   115,    75,   135,  1350,  1001,   135,  1311,  1190,
+      82,   180,   181,    85,  1349,    87,    88,    89,  1475,  1001,
+     115,   133,  1372,  1373,   120,   119,  1376,  1377,   197,   120,
+    1179,   115,   117,  1376,  1377,   121,   205,   117,  1311,  1278,
+     115,   115,  1392,   120,  1413,   115,    32,  1397,   217,    75,
+    1269,    77,    78,    79,   117,   117,  1001,    66,   117,   115,
+    1198,    50,    88,    89,  1399,   117,    75,    86,    75,  1414,
+      77,    78,   241,   117,   117,   115,  1426,  1350,   115,   865,
+     249,    88,    89,   137,   137,   254,   255,   256,   114,   137,
+     137,   137,   261,     3,   115,   115,   676,   214,   120,  1179,
+      10,    11,    12,    13,    14,  1179,   120,   114,   114,   118,
+     115,  1414,   119,  1505,   117,  1505,   117,   117,   865,   288,
+    1269,  1432,   117,  1505,   117,  1475,   117,  1477,  1439,   117,
+     115,   300,    42,  1522,  1477,   114,  1216,   923,  1506,   125,
+     114,  1414,    63,   114,   119,   262,  1496,   316,   157,   115,
+     115,  1501,   101,   322,   117,  1505,  1506,   117,  1506,  1432,
+      70,   115,  1300,   332,   117,   115,  1439,  1535,   337,   101,
+     114,   114,   341,   342,  1524,   137,  1526,  1257,  1258,   120,
+    1530,   115,   115,  1533,  1179,  1535,   115,  1535,  1499,  1269,
+     115,   121,    45,  1286,   363,  1269,  1546,   135,   367,   779,
+    1550,  1440,   137,  1442,   115,   101,  1506,   115,   217,   789,
+     790,   137,   101,  1432,   137,  1001,   135,   137,  1568,  1522,
+    1439,   801,   117,   340,    75,  1568,  1499,   115,    79,  1579,
+     137,  1311,   115,   402,  1179,  1535,  1579,    88,    89,    66,
+     249,  1480,   135,  1482,   114,   254,   121,   364,   234,   120,
+     117,   368,   117,   422,   117,   424,   425,  1004,   137,   428,
+    1441,   430,  1443,   114,   137,   115,   114,  1360,   120,  1349,
+    1350,   122,   123,   120,  1269,   115,  1350,   115,   135,   265,
+    1499,   115,   451,  1432,   115,   115,   114,    54,   137,    56,
+    1439,   118,    59,    60,    61,  1534,   137,  1536,   115,   468,
+    1481,   137,  1483,   561,  1384,   137,   565,  1020,   477,    76,
+     479,   562,   481,   563,   942,  1554,  1555,   486,  1411,  1399,
+     564,  1463,    89,    90,  1269,  1179,   495,  1352,  1550,  1279,
+     157,  1543,  1439,   342,  1414,  1489,  1038,  1048,   507,   894,
+     509,  1300,  1058,   512,   724,   514,   515,   916,   858,   937,
+    1499,   653,  1432,   717,  1349,   524,    75,   915,  1432,  1439,
+    1216,   481,   567,    82,   732,  1439,    85,  1505,    87,    88,
+      89,   567,   567,  1158,  1159,    75,  1161,    77,    78,    79,
+      -1,    -1,  1167,    -1,    -1,  1170,    -1,    -1,    88,    89,
+     217,  1484,   378,  1179,    -1,  1488,  1489,   116,   567,   568,
+     980,   981,    -1,    -1,  1399,    -1,   575,   234,     4,     5,
+       6,     7,     8,     9,    -1,   182,    -1,   586,   587,  1499,
+     429,   590,   249,  1516,    -1,  1499,    -1,   254,    -1,    -1,
+    1216,   600,  1179,    -1,   603,    -1,   445,  1432,    75,    -1,
+      77,    78,    79,    -1,  1439,    -1,  1539,    -1,    -1,    -1,
+    1543,    88,    89,   622,    -1,    -1,  1441,    -1,  1443,    -1,
+     469,  1041,  1042,   632,    -1,   634,    -1,    -1,    75,   638,
+      77,    78,   641,   642,  1567,    -1,    72,   114,    74,   116,
+      -1,    88,    89,  1269,    -1,   122,   123,  1432,   657,    -1,
+     659,    -1,    -1,    -1,  1439,    -1,  1481,    -1,  1483,   136,
+      -1,   670,    -1,   489,  1499,    -1,    -1,   624,   494,    75,
+      -1,    77,    78,    79,    -1,   342,    -1,    -1,    -1,    -1,
+      -1,   690,    88,    89,    -1,  1311,   643,    -1,     4,     5,
+       6,     7,     8,     9,    -1,    -1,   705,   706,   707,   656,
+      -1,   137,    -1,  1290,   713,   714,    -1,    -1,   114,    -1,
+     116,    -1,    58,    -1,  1499,    -1,   122,   123,  1343,    35,
+      -1,    -1,    -1,  1349,  1350,   275,    -1,   277,   278,   336,
+      -1,   338,    -1,    -1,   743,    -1,   286,   287,    86,    -1,
+      -1,   590,    90,    91,    92,    -1,    -1,    -1,   355,   356,
+     300,   301,    -1,    -1,  1341,    -1,    72,  1344,    74,   585,
+      -1,   107,   429,    -1,   110,    -1,   114,    -1,   116,    -1,
+     118,   119,    -1,  1399,   783,    -1,   625,     4,     5,     6,
+       7,     8,     9,    -1,   793,   634,   795,   337,  1414,    -1,
+      -1,   800,    86,    -1,    -1,    -1,    90,    91,    92,    -1,
+      -1,    -1,   469,   629,   813,  1392,  1432,    -1,   185,    -1,
+    1397,    -1,    -1,  1439,    -1,   192,    -1,    -1,  1238,    -1,
+     114,   647,   116,    -1,   118,   119,  1246,  1247,  1248,   379,
+      -1,    -1,    10,    11,    12,    13,    14,    -1,    75,  1426,
+      77,    78,    -1,   692,    -1,    72,    -1,    74,    -1,    -1,
+      -1,    88,    89,   702,    -1,    -1,   865,    -1,   707,    -1,
+      -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,   214,    -1,
+      -1,    -1,    -1,  1499,    -1,    -1,    -1,    -1,    -1,    -1,
+     889,   258,    -1,    -1,    -1,   894,    -1,   896,    -1,    -1,
+      -1,    -1,    70,    -1,   720,    -1,    -1,    75,   724,   908,
+     909,    79,    -1,    -1,   913,    -1,    -1,    -1,    -1,    -1,
+      88,    89,    -1,    -1,   923,   924,   262,    -1,    -1,    -1,
+      -1,   930,    -1,   590,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,  1524,    -1,   316,
+      -1,    -1,    -1,  1530,   122,   123,   795,    -1,   325,    -1,
+      -1,   328,    -1,   962,    -1,    -1,    -1,    -1,   625,  1546,
+      -1,    -1,   629,  1550,    -1,    -1,    -1,   634,    -1,    -1,
+      -1,    -1,    -1,    -1,   983,   984,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1001,  1413,   340,    -1,    -1,    -1,   548,   549,
+     550,   551,   552,   553,   554,   555,   556,   557,   558,   559,
+     560,   561,   562,   563,   564,   565,    -1,   394,   364,    -1,
+      -1,   398,   368,    -1,    -1,   692,    -1,    -1,    -1,    -1,
+      -1,    -1,   858,    -1,    -1,   702,    -1,    -1,   864,  1048,
+     707,  1050,    -1,  1052,    -1,    -1,    -1,    -1,    -1,    -1,
+    1007,  1008,  1009,    -1,    -1,    -1,    -1,    -1,  1067,    -1,
+      -1,    -1,    -1,    -1,  1073,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   899,  1083,    -1,    -1,    -1,    -1,    -1,
+      10,    11,    12,    13,    14,    -1,   693,    -1,   695,    -1,
+      75,    -1,    77,    78,    79,    -1,   703,   704,    -1,   476,
+      -1,   708,    -1,    88,    89,  1114,    -1,    -1,    -1,    -1,
+      -1,   937,    42,    -1,    -1,    -1,   965,    -1,   725,    -1,
+      -1,    -1,    -1,   730,    -1,    -1,    -1,    -1,   795,   114,
+      75,   116,    77,    78,    79,    -1,    -1,   122,   123,    -1,
+      70,     0,   749,    88,    89,    75,    -1,    77,    78,    79,
+     135,    -1,    -1,    10,    11,    12,    13,    14,    88,    89,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
+    1179,    -1,   722,    -1,    -1,    34,    -1,   122,   123,    -1,
+      -1,  1190,    -1,    -1,   114,    42,   116,    -1,    -1,  1198,
+     567,   568,   122,   123,    -1,    -1,    -1,   747,    -1,    -1,
+      -1,    -1,  1211,    -1,    -1,    -1,    -1,  1216,    -1,    -1,
+      69,    -1,  1038,    70,    -1,    -1,    -1,    -1,    75,    -1,
+      77,    78,    79,    -1,    -1,    -1,    -1,   777,    -1,    -1,
+      -1,    88,    89,    75,    -1,    77,    78,    79,  1064,    -1,
+     847,    -1,   849,   850,   851,    -1,    88,    89,  1257,  1258,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,
+    1269,   868,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,
+      -1,    -1,   114,    -1,    -1,    -1,    -1,   884,   624,    -1,
+     122,   123,    -1,    -1,   661,    -1,    -1,    -1,   665,    -1,
+      -1,  1300,    -1,    -1,    -1,   154,    -1,   643,   965,    -1,
+     907,    -1,  1311,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     656,    -1,    -1,    -1,    10,    11,    12,    13,    14,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1154,    10,
+      11,    12,    13,    14,   941,    -1,    -1,    -1,    -1,   946,
+    1349,  1350,    -1,    -1,   951,    -1,    42,    -1,    -1,   956,
+     957,    -1,    -1,    -1,   961,    -1,   963,   964,    -1,    -1,
+     967,    42,    -1,    -1,  1373,    -1,    -1,   226,    -1,   976,
+      -1,    -1,    -1,    -1,    70,  1384,    -1,    -1,    -1,    75,
+       0,     1,   241,    79,    -1,   992,   993,   246,    -1,    70,
+    1399,    -1,    88,    89,    75,    -1,    77,    78,    79,    -1,
+     950,    -1,    -1,    -1,    -1,  1414,   783,    88,    89,    -1,
+      -1,    -1,   962,    -1,    34,  1372,    -1,  1024,   114,    -1,
+    1027,    -1,    -1,  1432,    -1,    -1,   122,   123,    -1,    -1,
+    1439,    51,  1441,   114,  1443,   116,    -1,    -1,    -1,    -1,
+      -1,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    69,
+      -1,  1001,    -1,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,    -1,    -1,  1475,  1476,    -1,    -1,
+      -1,    -1,  1481,  1080,  1483,    -1,    -1,    -1,   337,  1086,
+    1087,    -1,    -1,    -1,   343,    -1,   106,   136,  1095,    -1,
+    1499,    -1,    -1,  1100,    -1,    -1,  1505,  1506,  1105,    -1,
+    1349,  1051,    -1,    -1,   363,    -1,    -1,    -1,   367,    -1,
+      -1,  1118,    -1,  1522,    -1,    -1,    -1,    -1,    -1,   865,
+      -1,    -1,    -1,    -1,    -1,   145,  1535,  1134,    -1,  1136,
+    1137,  1138,  1139,   153,   154,    10,    11,    12,    13,    14,
+      -1,    -1,    -1,    -1,  1151,    -1,  1153,    -1,    -1,    -1,
+    1399,    -1,    -1,    -1,    -1,    -1,    -1,   416,    -1,    -1,
+      -1,   181,    -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,
+      -1,   430,    -1,    -1,    -1,   952,   435,   197,  1185,  1186,
+     200,   201,    -1,    -1,   443,   205,    -1,    -1,    -1,    -1,
+      -1,   968,    -1,    -1,    -1,    70,    -1,  1147,  1148,    -1,
+      75,   460,    77,    78,    79,    -1,   226,    -1,    -1,    -1,
+     230,   470,   232,    88,    89,   235,    -1,    -1,    -1,    -1,
+     479,   241,   481,    -1,    -1,    -1,   246,  1476,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   256,    -1,    -1,   114,
+      -1,    -1,  1249,  1250,   264,    -1,    -1,   122,   123,    -1,
+      -1,    -1,  1259,    -1,    -1,    -1,    -1,    -1,  1004,    -1,
+      -1,  1007,  1008,  1009,    -1,   524,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1057,    -1,  1349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
+      13,    14,   332,    -1,    -1,    -1,  1323,   337,  1325,  1326,
+    1327,    -1,    -1,   343,    -1,    -1,    -1,   586,   587,    -1,
+    1337,    -1,  1399,    -1,    -1,    -1,    -1,    -1,  1345,    42,
+      -1,  1348,    -1,   363,    -1,    -1,    -1,   367,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   622,    -1,    -1,    -1,    70,  1375,    -1,
+      -1,    -1,    75,   632,    77,    78,    79,    -1,    -1,   638,
+      -1,    -1,   641,   642,    -1,    88,    89,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   416,     0,   657,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1476,
+     430,   114,  1419,  1420,    -1,   435,  1193,   676,    -1,   122,
+     123,    -1,    -1,   443,    -1,  1432,    -1,    -1,   687,    -1,
+      -1,    34,  1439,  1179,    -1,    -1,    -1,    -1,  1388,    -1,
+     460,    -1,   701,   463,    -1,    -1,   705,    -1,    -1,  1456,
+     470,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   479,
+      -1,   481,    -1,    -1,    -1,    -1,    69,  1474,    -1,    -1,
+      -1,    -1,  1479,   493,    -1,    -1,    -1,   497,    -1,    -1,
+      -1,    -1,    -1,    -1,   743,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1450,    -1,    -1,    -1,   524,  1512,    -1,  1514,    -1,    -1,
+      -1,    -1,  1462,  1463,    -1,    -1,    -1,    -1,    -1,  1296,
+     779,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     789,   790,    -1,    -1,   793,    -1,  1486,   796,    -1,    -1,
+      -1,    -1,   801,    -1,  1290,  1552,  1553,    -1,   568,    -1,
+      -1,   154,    -1,    -1,    -1,    -1,    -1,    -1,  1565,  1566,
+      -1,    -1,    -1,    -1,    -1,    -1,   586,   587,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   603,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1341,    -1,    -1,  1344,    -1,
+      -1,    -1,   622,    -1,    -1,    -1,   865,   627,  1558,    -1,
+      -1,    -1,   632,    -1,    -1,    -1,    -1,    -1,   638,    -1,
+      -1,   641,   642,    -1,    -1,    -1,  1372,    -1,    -1,    -1,
+     889,    -1,    -1,    -1,    -1,    -1,    -1,   657,   241,    -1,
+      -1,    -1,    -1,   246,    40,    41,  1392,    43,    -1,    -1,
+      -1,  1397,    -1,    -1,    -1,    -1,   676,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   687,    -1,    -1,
+      -1,   930,    -1,    69,    -1,    -1,    -1,    -1,    -1,    75,
+    1426,   701,    -1,    79,    -1,   705,    82,    83,    84,    85,
+      86,    87,    88,    89,   714,    91,    92,   717,    -1,    -1,
+      -1,    -1,    -1,   962,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
+     116,   980,   981,   743,   983,   984,   122,   123,   124,   125,
+     126,   127,    -1,    -1,   337,    -1,    -1,    -1,    -1,   135,
+     343,    -1,  1001,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1496,    -1,    -1,    -1,    -1,  1501,    -1,    -1,    -1,   779,
+     363,    -1,    -1,    -1,   367,    -1,    -1,    -1,    -1,   789,
+     790,    -1,    -1,   793,    -1,    -1,   796,    -1,  1524,    -1,
+    1526,   801,  1041,  1042,  1530,    -1,    -1,  1533,    -1,    -1,
+      -1,   811,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1546,    -1,    -1,    -1,  1550,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   430,    -1,    -1,
+      -1,    -1,   435,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     443,    -1,    -1,    -1,    -1,   865,    -1,    -1,    40,    41,
+      -1,    43,    -1,    -1,    -1,  1114,    -1,   460,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   470,    -1,   889,
+      -1,    -1,     0,    -1,    -1,    -1,   479,    69,   481,    -1,
+      -1,    -1,    -1,    75,    -1,    77,    78,    79,    -1,   909,
+      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
+      92,    -1,   922,   923,    -1,    -1,    34,    -1,    -1,    -1,
+     930,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1179,   524,   114,    -1,   116,    -1,   118,   119,    -1,    -1,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+      -1,    69,   962,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1209,    -1,  1211,    -1,    -1,   975,    -1,    -1,    -1,    -1,
+     980,   981,    -1,   983,   984,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1238,
+      -1,  1001,    -1,   586,   587,    -1,    -1,  1246,  1247,  1248,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1257,  1258,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1269,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   622,
+      -1,  1041,  1042,    -1,    -1,    -1,   154,    -1,    -1,   632,
+      -1,    -1,  1052,    -1,    -1,   638,    -1,    -1,   641,   642,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   657,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   676,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   687,    -1,    -1,    -1,    -1,    -1,
+      -1,  1350,    -1,    -1,  1114,    -1,    -1,    -1,   701,    -1,
+      -1,    -1,   705,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   241,    -1,    -1,    -1,    -1,   246,    -1,
+      -1,    -1,    -1,    -1,    -1,  1384,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     743,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1413,    -1,    -1,    -1,    -1,  1179,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1432,    -1,    -1,   779,    -1,    -1,    -1,
+    1439,    -1,  1441,    -1,  1443,    -1,   789,   790,    -1,  1209,
+     793,  1211,    -1,   796,    -1,    -1,  1216,    -1,   801,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   337,
+      -1,    -1,    -1,    -1,    -1,   343,    -1,    -1,  1238,    -1,
+      -1,    -1,  1481,    -1,  1483,    -1,  1246,  1247,  1248,    -1,
+      -1,    -1,    -1,    -1,    -1,   363,    -1,  1257,  1258,   367,
+    1499,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1269,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   865,    -1,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    -1,   889,    -1,   416,    -1,
+      -1,  1311,    -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,
+      -1,    -1,   430,    -1,    -1,    -1,    -1,   435,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   443,    -1,    -1,    -1,    -1,
+      -1,    51,    -1,    40,    41,    70,    43,   930,    -1,    -1,
+    1350,    -1,   460,    -1,    -1,    -1,    66,    -1,    -1,    -1,
+      -1,    -1,   470,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   479,    69,   481,    -1,    -1,    -1,    -1,    75,   962,
+      -1,    -1,    79,    -1,  1384,    82,    83,    84,    85,    86,
+      87,    88,    89,    -1,    91,    92,    -1,   980,   981,    28,
+     983,   984,    -1,    -1,   114,    -1,    -1,    -1,   118,    -1,
+      -1,    -1,    -1,  1413,  1414,    -1,   524,   114,  1001,   116,
+      -1,    -1,   119,    -1,    -1,   122,   123,   124,   125,   126,
+     127,    -1,  1432,    -1,   144,    -1,    -1,    -1,    -1,  1439,
+      -1,  1441,    -1,  1443,   154,    -1,    -1,   157,    -1,    -1,
+      -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,  1041,  1042,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      99,    -1,   101,    -1,    -1,    -1,    -1,    -1,   586,   587,
+      -1,  1481,    -1,  1483,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   205,    -1,   126,    -1,  1499,
+      -1,    -1,    -1,    -1,    -1,    -1,  1506,   217,    -1,    -1,
+      -1,    -1,    -1,    -1,   622,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   632,    -1,    -1,    -1,    -1,    -1,
+     638,  1114,    -1,   641,   642,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   254,    -1,    -1,    -1,    -1,   657,
+      -1,   261,    -1,    -1,    -1,    -1,   185,    -1,   187,   188,
+      -1,    -1,    -1,   192,    -1,   194,   195,    -1,   676,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   288,   687,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     300,    -1,    -1,   701,    -1,    -1,  1179,   705,    -1,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
-      29,    30,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
-       0,    38,     0,     0,    40,    41,     2,   200,     4,     5,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
+      -1,    32,    33,    34,    -1,    -1,  1209,   337,  1211,   258,
+      -1,    42,   342,    -1,    -1,   743,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1238,    -1,    -1,    -1,    70,
+      -1,    -1,    -1,  1246,  1247,  1248,    77,    78,    -1,    -1,
+      -1,   779,    -1,    -1,  1257,  1258,    -1,    -1,    -1,    -1,
+      -1,   789,   790,    -1,    -1,   793,  1269,    -1,   796,    -1,
+      -1,    -1,    -1,   801,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   334,    -1,    -1,    -1,    -1,
+      -1,   122,   123,    -1,   424,   425,    -1,    -1,    -1,    -1,
+     430,    -1,    -1,    -1,   353,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   451,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   865,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1350,    -1,   479,
+      -1,    -1,    -1,    -1,    -1,    -1,   405,    -1,    -1,    -1,
+      -1,   889,    -1,    -1,    -1,   495,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   507,    -1,   509,
+      -1,  1384,   512,    -1,   514,   515,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   524,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   930,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1432,
+      -1,    -1,    -1,    -1,   962,    -1,  1439,    -1,  1441,    -1,
+    1443,    -1,    -1,    -1,    -1,   575,    -1,    -1,    -1,    -1,
+      -1,    -1,   980,   981,    -1,   983,   984,   587,    -1,    -1,
+     590,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1001,    -1,    -1,    -1,    -1,  1481,    -1,
+    1483,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   622,    -1,    66,    -1,  1499,    -1,    -1,    -1,
+      -1,    -1,   632,    75,    -1,    77,    -1,    79,    -1,    -1,
+      -1,   641,   642,  1041,  1042,    87,    -1,    -1,    -1,    -1,
+      -1,    -1,   571,   572,    -1,    -1,    -1,   657,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,   120,   121,
+     122,    -1,    -1,    -1,    -1,   604,    -1,    -1,   607,   608,
+     690,   610,    -1,   612,   613,    -1,    -1,    -1,   617,   618,
+      -1,    -1,    -1,    -1,    -1,   705,    -1,   707,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   157,  1114,    -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,   661,   743,    -1,    -1,   665,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,    -1,    -1,
+      10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   217,    -1,   219,   220,   221,
+      -1,  1179,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      40,    41,    42,    43,    -1,   795,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   249,    -1,    -1,
+      -1,  1209,   254,  1211,    -1,    -1,    -1,    -1,    -1,    69,
+      70,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,
+      -1,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
+    1238,    91,    92,    -1,    -1,    -1,    -1,    -1,  1246,  1247,
+    1248,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1257,
+    1258,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,
+      -1,  1269,   122,   123,   124,   125,   126,   127,    -1,    -1,
+     322,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   889,
+      40,    41,    -1,    43,   894,    -1,    -1,    -1,    46,    -1,
+     342,    -1,    -1,    -1,    -1,    -1,   348,    -1,   350,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
+     362,    -1,    -1,    -1,   924,    75,    -1,    -1,    -1,    79,
+     930,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
+      -1,    91,    92,    -1,    92,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1350,    -1,   102,    -1,    -1,    -1,    -1,    -1,
+     402,    -1,   962,    -1,   114,    -1,   116,    -1,    -1,    -1,
+      -1,   121,   122,   123,   124,   125,   126,   127,    -1,    -1,
+     422,    -1,    -1,   983,   984,   427,  1384,   429,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   445,    -1,    -1,   448,   449,    -1,    -1,
+      -1,    -1,    -1,   455,    -1,  1413,    -1,    -1,    -1,    -1,
+     168,    -1,    -1,    -1,    -1,    -1,    -1,   469,    -1,    -1,
+      -1,    -1,    -1,   952,  1432,   477,    -1,    -1,    -1,    -1,
+      -1,  1439,   190,  1441,    -1,  1443,    -1,    -1,    -1,   968,
+      -1,    -1,   971,   972,    -1,     7,   204,    -1,    10,    11,
+      12,    13,    14,    -1,    -1,   213,    -1,  1067,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   223,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1481,    -1,  1483,    -1,    -1,    40,    41,
+      42,    43,    -1,    -1,   242,    -1,    -1,    -1,    -1,   247,
+      -1,  1499,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   260,    -1,  1114,    -1,    -1,    69,    70,    -1,
+     268,    -1,   270,    75,    -1,  1044,    -1,    79,    -1,    -1,
+      82,    83,    84,    85,    86,    87,    88,    89,  1057,    91,
+      92,   289,    -1,  1062,  1063,    -1,    -1,    -1,   590,    -1,
+     592,   593,   594,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+      -1,    -1,   330,   625,   626,    -1,    -1,   335,    -1,    -1,
+    1190,    -1,   634,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1211,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   370,    -1,    -1,    -1,   374,   375,    -1,   377,
+      -1,    -1,    -1,    -1,    -1,    -1,   384,   385,    -1,   387,
+     388,    -1,   390,    -1,   392,    -1,    -1,    -1,    -1,    -1,
+     692,    -1,    -1,    40,    41,    -1,    43,  1257,  1258,    -1,
+     702,   409,  1181,    -1,    -1,   707,    -1,    -1,    -1,   417,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1200,    69,    -1,    -1,    -1,    -1,    -1,    75,    -1,
+      -1,    -1,    79,   441,    -1,    82,    83,    84,    85,    86,
+      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
+      -1,    -1,   153,   154,    -1,    -1,    -1,    -1,   466,    -1,
+      -1,    -1,    -1,    -1,    -1,   473,    -1,   114,    -1,   116,
+     478,    -1,   119,    -1,    -1,   122,   123,   124,   125,   126,
+     127,   783,    -1,    -1,   185,    -1,    -1,    -1,    -1,  1349,
+      -1,   192,    -1,   795,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    40,    41,    -1,    43,    -1,    -1,    -1,    -1,
+     518,   813,    -1,    -1,    -1,    -1,    -1,  1296,    -1,    -1,
+      -1,    -1,   530,    -1,  1384,    -1,    -1,    -1,    -1,    -1,
+      -1,    69,    -1,    -1,    -1,   837,    -1,    75,    -1,  1399,
+      -1,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
+      88,    89,    -1,    91,    92,    -1,    -1,   258,    -1,   567,
+      -1,    40,    41,    -1,    43,    -1,    -1,    -1,   576,    -1,
+      -1,   579,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
+      -1,  1441,    -1,  1443,   122,   123,   124,   125,   126,   127,
+      69,    -1,    -1,   601,    -1,    -1,    75,    -1,    -1,    -1,
+      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
+      89,   913,    91,    92,    -1,   316,  1476,    -1,    -1,    -1,
+      -1,  1481,    -1,  1483,   325,   326,    -1,   328,   329,    -1,
+      -1,    -1,    -1,    -1,    -1,   114,   337,   116,   646,    -1,
+     341,    -1,    -1,   122,   123,   124,   125,   126,   127,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1522,   965,    -1,    -1,   367,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   976,   683,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   394,    -1,    -1,    -1,   398,    -1,    -1,
+      -1,    -1,    -1,   711,    -1,    -1,    -1,    -1,    -1,    -1,
+     144,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   726,   727,
+     154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   736,   430,
+      -1,   165,   166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   750,    -1,    -1,    -1,    -1,   755,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1073,    -1,    -1,    -1,   476,    -1,    -1,   479,    -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,    28,    29,    30,   817,
+      32,    33,    34,    35,    -1,    -1,   824,    39,    -1,   253,
+      42,    -1,    -1,   524,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   840,    -1,   842,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   855,    70,    -1,
+      72,    -1,    74,   861,    -1,    77,    78,    -1,    -1,    81,
+      -1,    -1,    -1,    -1,   872,    -1,   567,   568,   876,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   586,   587,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   116,    -1,  1198,    -1,    -1,   600,
+     122,   123,   603,   604,    -1,    -1,    -1,    -1,    -1,   610,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   620,
+      -1,   622,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   632,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     641,   642,    40,    41,   378,    43,    -1,    -1,    -1,    -1,
+      -1,    -1,   960,    -1,    -1,    -1,   657,    -1,    -1,    -1,
+     661,   662,    -1,    -1,   665,   666,    -1,    -1,    -1,    -1,
+      -1,    69,    -1,   674,    -1,    -1,    -1,    75,    -1,    -1,
+      -1,    79,    -1,   154,    82,    83,    84,    85,    86,    87,
+      88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   705,   706,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,   451,   116,  1027,
+      -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   471,    -1,    -1,
+      -1,    -1,   743,    -1,    -1,    -1,    -1,  1349,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1069,    -1,    -1,    -1,    -1,  1074,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1084,    -1,    -1,    -1,
+     514,    -1,   783,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     524,    -1,    -1,    -1,    -1,   529,    -1,  1399,   532,   800,
+    1108,   802,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   545,   813,  1121,    -1,    -1,    -1,  1125,    -1,    -1,
+    1128,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1144,  1145,    -1,    -1,
+      -1,   575,    -1,    -1,    -1,    -1,    -1,    -1,   582,    -1,
+      -1,    -1,    -1,   587,  1162,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   337,    -1,   602,    -1,
+      -1,   342,   343,    -1,  1476,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   889,    -1,
+      -1,    -1,   363,    -1,    -1,   896,   367,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   908,   909,    -1,
+     644,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   652,  1227,
+      -1,    -1,   154,    -1,    -1,    -1,    -1,    -1,    -1,   930,
+      -1,    -1,    -1,  1535,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   952,   953,    -1,    -1,    -1,    -1,    -1,    -1,   430,
+      -1,   962,    -1,    -1,    -1,    -1,    -1,   968,   969,    -1,
+     971,   972,   973,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   983,   984,    -1,    -1,    -1,    -1,    -1,   460,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1306,   733,
+    1308,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   479,   743,
+    1318,   745,  1320,    -1,   748,    -1,    -1,    -1,    -1,    -1,
+     754,    -1,    -1,    -1,    -1,    -1,    -1,  1335,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1353,  1354,  1048,    -1,  1050,
+      -1,  1052,    -1,   524,    -1,    -1,  1057,    -1,  1366,    -1,
+      -1,   795,   796,  1371,    -1,    -1,  1374,    -1,    -1,    -1,
+      -1,    -1,  1073,    -1,    -1,    -1,    -1,   811,    -1,    -1,
+      -1,    -1,  1390,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1400,    -1,    -1,  1403,    -1,  1405,  1406,  1407,
+      -1,    -1,    -1,    -1,    -1,   337,    -1,    -1,    -1,    -1,
+     342,   343,    -1,  1114,    -1,   586,   587,    -1,    -1,   590,
+     854,    -1,    -1,    -1,   858,    -1,    -1,    -1,    -1,    -1,
+      -1,   363,    -1,    40,    41,   367,    43,  1445,    -1,  1447,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1457,
+      -1,   622,    -1,    -1,   625,   889,    -1,    -1,    -1,  1467,
+      -1,   632,    69,   634,    -1,    -1,    -1,   638,    75,    -1,
+     641,   642,    79,    -1,    -1,    82,    83,    84,    85,    86,
+      87,    88,    89,    -1,    91,    92,   657,    -1,    -1,    -1,
+     924,    -1,  1193,    -1,    -1,    -1,   930,  1198,   430,    -1,
+      -1,    -1,    -1,   937,    -1,   676,    -1,   114,   942,   116,
+    1211,   945,    -1,    -1,    -1,   122,   123,   124,   125,   126,
+     127,   692,    -1,    -1,    -1,    -1,    -1,    -1,   460,    -1,
+      -1,   965,    -1,    -1,   705,    -1,   707,    -1,    -1,    -1,
+      -1,    -1,   976,    -1,    -1,    -1,    -1,   479,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1257,  1258,    -1,    -1,
+      -1,    -1,   996,    -1,   998,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   743,    -1,    -1,    -1,    -1,    -1,    -1,  1013,
+    1014,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      28,    -1,   524,    -1,    -1,  1296,  1297,    -1,    -1,  1300,
+      -1,    -1,    -1,    -1,    -1,    -1,  1040,    -1,   779,    -1,
+      -1,    -1,    -1,    -1,   154,    -1,    -1,    -1,   789,   790,
+      -1,    -1,   793,    -1,   795,   796,    -1,    -1,    -1,    -1,
+     801,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   586,   587,    -1,    -1,   590,  1093,
+      -1,    99,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1114,    -1,    -1,  1384,    -1,    -1,    -1,    -1,    -1,    -1,
+     622,    -1,    -1,   625,    40,    41,    -1,    43,  1132,  1133,
+     632,    -1,   634,    -1,    -1,    -1,   638,    -1,    -1,   641,
+     642,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   889,    -1,
+      -1,    -1,    -1,    69,    -1,   657,    -1,    -1,    -1,    75,
+      -1,    -1,    -1,    79,    -1,    -1,    82,    83,    84,    85,
+      86,    87,    88,    89,   676,    91,    92,    -1,    -1,   187,
+     188,    -1,    -1,    -1,   192,    -1,   194,   195,    -1,   930,
+     692,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
+     116,    -1,    -1,   705,  1475,   707,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   962,    -1,    -1,   965,    -1,    -1,   337,    -1,    -1,
+      -1,    -1,   342,   343,  1505,  1506,    -1,    -1,    -1,   980,
+     981,   743,   983,   984,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   363,    -1,    -1,    -1,   367,    -1,    -1,
+      -1,    -1,    -1,    -1,  1535,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   779,    -1,  1283,
+      -1,    -1,    -1,  1287,    -1,    -1,    -1,   789,   790,    -1,
+      -1,   793,    -1,   795,   796,    -1,    -1,    -1,    -1,   801,
+    1041,  1042,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,
+      41,    -1,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     430,    -1,    -1,    -1,    -1,    -1,   334,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
+      -1,    -1,    -1,    -1,    75,   353,    -1,    -1,    79,    -1,
+     460,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
+      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   479,
+      -1,    -1,    -1,  1114,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   114,    -1,   116,    -1,   889,    -1,    -1,
+      -1,   122,   123,   124,   125,   126,   127,   405,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   524,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   930,    -1,
+      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
+     962,    -1,    -1,   965,    42,    43,    -1,    -1,  1209,    -1,
+    1211,    -1,    -1,    -1,    -1,    -1,   586,   587,   980,   981,
+     590,   983,   984,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    70,    -1,    -1,    -1,    -1,  1238,    -1,    77,
+      78,    -1,    -1,    -1,    -1,  1246,  1247,  1248,    -1,    -1,
+      -1,    -1,   622,    -1,    -1,   625,  1257,  1258,  1522,    -1,
+      -1,    -1,   632,    -1,   634,    -1,    -1,    -1,   638,    -1,
+      -1,   641,   642,    -1,    -1,    -1,    -1,    -1,   116,  1041,
+    1042,    -1,   120,    -1,   122,   123,    -1,   657,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   571,   572,    -1,   676,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   692,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   705,   604,   707,    -1,   607,
+     608,    -1,   610,    -1,   612,   613,    -1,    -1,    -1,   617,
+     618,    -1,  1114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   743,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1384,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   661,    -1,    -1,    -1,   665,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   779,
+      -1,    -1,  1413,    -1,    -1,    -1,    -1,    -1,    -1,   789,
+     790,    -1,    -1,   793,    -1,   795,   796,    -1,    -1,    -1,
+      -1,   801,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1441,    -1,  1443,    -1,    -1,    -1,    -1,  1209,    -1,  1211,
+      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,  1476,  1238,    32,    33,    34,
+    1481,    -1,  1483,    -1,  1246,  1247,  1248,    42,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1257,  1258,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,   889,
+      -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,    -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,    28,    29,
+     930,   116,    32,    33,    34,    35,    -1,   122,   123,    39,
+      -1,    -1,    42,    43,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   962,    -1,    -1,   965,    -1,    67,    -1,    -1,
+      70,    -1,    72,    -1,    74,    75,    -1,    77,    78,    79,
+     980,   981,    -1,   983,   984,    -1,    -1,    -1,    88,    89,
+      -1,    -1,  1384,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,   114,    -1,   116,    -1,    -1,    -1,
+      -1,  1413,   122,   123,    -1,    42,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1041,  1042,    -1,    -1,    -1,    -1,    -1,    -1,  1441,
+      -1,  1443,    -1,    70,   952,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,
+     968,    -1,    -1,   971,   972,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1476,    -1,    -1,    -1,    -1,  1481,
+      -1,  1483,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,  1114,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1044,    -1,    -1,    -1,
+      -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    78,    -1,    -1,  1062,  1063,    -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,    28,    29,    -1,    -1,    32,    33,    34,
+      35,    -1,    -1,    -1,    39,   122,   123,    42,    43,  1209,
+      -1,  1211,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    -1,    70,    -1,    72,  1238,    74,
+      75,    -1,    77,    78,    79,    -1,  1246,  1247,  1248,    -1,
+      -1,    -1,    -1,    88,    89,    -1,    -1,  1257,  1258,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
+      -1,   116,    -1,  1181,    -1,   120,    -1,   122,   123,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1200,    -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,    28,    29,    -1,    -1,    32,    33,    34,    35,    -1,
+      -1,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
+      -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
+      -1,    -1,    -1,    60,    -1,    -1,    -1,    64,    65,    -1,
+      67,    -1,    69,    70,    -1,    72,    -1,    74,    75,    -1,
+      77,    78,    79,    -1,  1384,    82,    83,    84,    85,    86,
+      87,    88,    89,    -1,    91,    92,    -1,    -1,  1296,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1413,    -1,    -1,    -1,   114,    -1,   116,
+      -1,    -1,   119,    -1,    -1,   122,   123,   124,   125,   126,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+     137,  1441,    -1,  1443,    -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,    28,    29,    -1,  1476,    32,    33,    34,
+      35,  1481,    -1,  1483,    39,    40,    41,    42,    43,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      -1,    -1,    -1,    -1,    69,    70,    -1,    72,    -1,    74,
+      75,    42,    77,    78,    79,    -1,    -1,    82,    83,    84,
+      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
+      81,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   137,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    32,    33,    34,    35,    -1,    -1,    -1,    39,
+      40,    41,    42,    43,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    69,
+      70,    -1,    72,    -1,    74,    75,    42,    77,    78,    79,
+      -1,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
+      -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    78,    -1,   114,    -1,   116,    -1,    -1,    -1,
+      -1,    -1,   122,   123,   124,   125,   126,   127,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    36,     0,    37,     0,    38,     0,     0,   201,
-      41,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,     0,     0,    28,    29,    30,   471,   472,   473,   474,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    36,     0,     0,     0,     0,     0,     0,    40,    41
-};
-
-#define yypact_value_is_default(yystate) \
-  ((yystate) == (-1330))
-
-#define yytable_value_is_error(yytable_value) \
-  YYID (0)
-
-static const yytype_int16 yycheck[] =
-{
-       0,     1,     0,   178,     1,    45,   115,   178,     1,   441,
-     198,    45,    51,   213,   521,    45,   178,   178,     0,   178,
-    1025,   178,   178,   152,   338,   338,  1025,   163,   164,   334,
-    1025,    31,    32,   181,    34,   840,    34,   503,   606,   958,
-     959,   840,   875,   985,   353,    45,   104,   141,   357,   587,
-     584,    51,    34,    51,   557,   588,   630,    34,    58,   959,
-      45,   594,  1286,    63,   700,    63,    66,    45,    66,    69,
-      30,    69,    69,   112,   584,   587,  1363,    45,   253,   179,
-     584,   482,   253,   922,   584,   486,   195,   179,  1027,  1418,
-       0,   253,   253,   151,   253,   655,   253,   253,    42,   244,
-     406,   249,   250,   142,    66,   105,   988,   989,   108,   286,
-      42,    42,     0,  1244,    42,   115,   286,   584,    42,   425,
-      67,    81,   584,   123,    34,    84,  1455,   433,  1457,   468,
-     969,   620,   621,    47,    48,    45,    54,   621,   178,   414,
-     415,    51,   584,   143,   178,   143,    34,   636,   178,    47,
-      48,  1438,   636,    63,   254,   155,    66,   155,   114,    69,
-      75,   475,   254,   468,   203,  1389,   114,   114,   116,   114,
-     114,   976,   116,    88,    89,   137,    56,   976,   178,   179,
-     100,   179,   114,   114,   116,   116,  1068,   112,   116,  1022,
-     114,   136,   116,   178,   683,   195,   114,   757,   398,   683,
-     178,   116,    42,   203,   711,   203,   120,   767,   768,   484,
-     178,   136,   212,   253,   134,   215,    96,   215,   778,   253,
-     259,   119,   222,   253,   691,  1072,   121,   114,   503,   691,
-     114,   115,   232,   143,  1173,   235,    90,   414,   415,   239,
-     240,   239,   137,   777,    42,   155,   779,   240,   135,   691,
-       0,    42,   790,   253,   254,   477,   254,   239,   761,   298,
-     260,   406,   239,   263,   118,   574,   114,   777,   178,   179,
-       0,     1,   330,   777,   587,   114,  1407,   777,   790,    84,
-     425,   620,   621,  1414,    34,   121,  1186,   117,   433,   564,
-     117,   420,   392,   203,   121,   334,  1367,   636,    58,   135,
-     392,   606,  1244,   412,    34,   215,   611,   187,   617,   418,
-     777,   116,   115,  1232,  1233,   777,   114,    42,   116,   496,
-     320,   895,   320,   114,   501,   116,   496,   504,   498,   239,
-     210,   501,   135,  1233,   504,   777,    66,   337,   338,    69,
-     220,   275,  1473,   253,   683,   105,   884,    42,   108,  1154,
-      42,   239,   115,    42,   354,  1154,   244,   115,   358,  1206,
-     666,  1208,  1209,   121,   298,   299,   466,   589,   368,   937,
-      42,   593,   135,   883,   466,   414,   415,   599,   555,   883,
-    1322,   114,   721,   883,   513,  1475,   121,   121,   115,   114,
-    1026,   116,   392,   615,   392,   955,   956,   619,  1475,  1470,
-     334,  1441,   441,   137,  1475,   101,   286,  1447,   135,   114,
-     320,   116,   412,   946,   947,   101,   721,  1507,   418,   114,
-     119,   116,   114,  1500,   116,   114,     3,   116,   338,  1500,
-    1507,   127,  1472,    47,    48,   369,  1507,  1477,     3,  1244,
-    1359,   127,   114,    51,   116,   484,   575,     0,   121,   115,
-       0,  1290,   212,   453,   920,   121,  1016,  1017,   458,  1359,
-     453,   770,   135,    10,   503,   114,   466,   899,   466,  1411,
-     470,  1413,   470,   136,  1479,   475,   790,   790,   478,   840,
-    1479,    42,   392,   483,  1479,   215,  1122,  1123,   470,   239,
-     121,   620,   621,  1067,   244,   631,   897,    84,    95,    96,
-     260,   121,     0,     1,   112,   119,   137,   636,   115,   239,
-    1048,  1450,  1351,  1352,   121,   515,   133,   137,   406,   136,
-     520,   666,   515,   121,   116,   564,   118,   520,    75,   638,
-      77,    78,  1474,   130,   131,   680,    34,   425,   222,   137,
-     649,  1480,   121,   135,    51,   433,   114,   121,   121,   115,
-     430,   235,   121,   114,   683,   116,    63,   651,   137,    66,
-     470,   115,    69,   137,   137,   475,   905,   606,   137,   121,
-    1509,    69,   611,   114,   888,   455,    75,   337,    77,    78,
-      79,   121,   470,   121,   584,   137,  1031,   587,  1033,    88,
-      89,   813,   121,   575,   354,   203,   114,   137,   358,   137,
-     905,   114,  1407,   537,   538,   539,   121,   607,   137,  1414,
-      10,    11,    12,    13,    14,    75,   496,    75,   979,   958,
-     135,   501,   622,   122,   504,   114,   626,   827,    88,    89,
-      88,    89,   937,   114,   121,   635,   143,   637,   638,   639,
-     115,    75,    42,   117,   637,    79,   639,   121,   155,   649,
-     137,   259,   115,  1213,    88,    89,   406,   114,   116,   116,
-    1458,  1221,  1222,  1223,  1462,   122,   123,   889,  1473,   117,
-      70,   115,   179,   121,   584,   425,   115,   587,   678,   136,
-     114,   114,   116,   433,   114,   678,   124,   125,   122,   123,
-     298,   691,   692,   122,     0,     1,   203,   833,   698,   128,
-     129,   114,   702,   116,     0,     1,   120,   855,   215,   122,
-     123,   115,    75,   115,   114,   114,   116,   121,   468,   121,
-     470,    67,   122,   123,   121,    88,    89,  1363,    34,     4,
-       5,     6,     7,     8,     9,   864,   115,   115,    34,    45,
-     470,   239,   121,   121,   114,    51,   115,   137,   115,   114,
-    1089,   114,   121,   116,   121,  1262,   137,    63,    97,    98,
-      66,   137,   950,    69,     4,     5,     6,     7,     8,     9,
-      66,   871,   117,    69,   654,   119,   121,   777,   666,   871,
-     115,   691,   692,   663,  1089,   119,   121,   667,   115,  1425,
-     790,   725,   680,  1154,   121,    35,   117,    72,   104,    74,
-     121,  1437,  1438,   120,   121,   115,   112,   115,   115,   115,
-     116,   121,     3,   320,   121,   114,   115,   116,  1018,    10,
-      11,    12,    13,    14,  1460,   115,    93,    94,  1388,   958,
-     959,   121,    72,   833,    74,   971,   142,   143,   115,   839,
-     840,    84,   115,   114,   121,   151,   152,   607,   121,   155,
-    1025,    42,   132,   115,  1025,   115,   152,   114,   840,   121,
-     899,   121,   622,  1025,  1025,   123,  1025,   777,  1025,  1025,
-     115,   871,   178,   179,   874,   635,   121,   115,   116,    70,
-     790,  1186,   864,   120,   121,   392,    61,    62,   888,   195,
-     114,   115,   116,  1232,    47,    48,  1532,   203,   937,  1073,
-    1074,   898,   540,   541,  1265,   133,   906,   542,   543,   215,
-      99,   116,   912,   906,   548,   549,   666,   117,   918,   215,
-     117,   115,   922,  1023,   137,   918,   114,  1027,   115,   922,
-     680,  1023,   115,   239,   115,  1027,   114,    75,   116,    77,
-      78,   247,   115,   239,   122,   123,   252,   253,   254,  1058,
-      88,    89,   840,   259,   115,  1316,  1133,  1134,  1319,  1136,
-      75,   871,    77,    78,    79,  1142,   117,   116,  1145,   969,
-     136,   721,   470,    88,    89,   119,   969,   119,   888,   979,
-     286,   119,   982,   983,   984,   121,   866,   114,   115,   116,
-       3,   136,   298,   119,   976,   114,   137,    10,    11,    12,
-      13,    14,    32,   937,   115,    75,  1367,   115,   314,    79,
-     117,  1372,   117,  1013,   320,   114,   115,   116,    88,    89,
-     700,   117,   137,  1023,   330,  1025,   135,  1027,   334,    42,
-     121,   135,   338,   339,   135,    75,    31,    77,    78,  1039,
-    1401,   115,   976,   115,   114,   120,   119,   353,    88,    89,
-     115,   357,   122,   123,   120,  1184,   120,    70,  1058,   121,
-     114,   669,   115,    70,  1496,   115,    73,   115,   115,    76,
-     121,    78,  1072,  1173,   115,   755,   116,    84,   115,  1072,
-     115,  1173,   544,   545,   546,   547,   392,   121,   976,     3,
-     840,   115,   115,   123,   115,   115,    10,    11,    12,    13,
-      14,   115,   120,  1232,  1233,   115,   412,   987,   414,   415,
-     840,   115,   418,  1023,   420,  1025,   115,  1027,    75,   115,
-      77,    78,    79,   115,   420,   115,    75,    31,    42,  1129,
-     136,    88,    89,    82,   115,   441,    85,  1498,    87,    88,
-      89,  1318,   119,  1504,    10,    11,    12,    13,    14,   829,
-     115,   121,   458,   117,  1154,   905,    70,   117,   119,  1520,
-     466,   115,   468,  1524,   470,   115,   121,  1261,   898,   475,
-     115,   114,  1154,  1173,   470,  1275,    42,   115,   484,   121,
-     137,   121,   115,  1275,    61,    62,    63,   114,   114,   114,
-     496,   114,   498,   121,  1191,   501,    11,   503,   504,   206,
-     135,   135,   232,   135,    70,   120,  1206,   513,  1208,  1209,
-     115,   135,   115,  1206,   135,  1208,  1209,   513,    75,   137,
-      77,    78,   982,   983,   984,   115,   976,   133,   120,   120,
-    1359,    88,    89,   263,    75,   119,    77,    78,    79,  1348,
-     115,  1335,    75,   117,   117,   925,   976,    88,    89,    82,
-     556,   557,    85,   121,    87,    88,    89,    75,   564,    77,
-      78,   869,  1244,  1173,   115,  1265,  1154,   115,   574,   575,
-      88,    89,   578,   114,   117,  1275,   115,   117,   584,   575,
-     117,   587,   117,   116,   115,   117,    50,     1,   117,  1286,
-    1290,   137,  1386,   973,   120,   137,   114,  1290,   115,   137,
-     606,   119,   115,   137,  1479,   611,   115,   613,  1479,   137,
-     115,   617,   120,   120,   620,   621,  1316,  1479,  1479,  1319,
-    1479,   117,  1479,  1479,   620,   621,    86,   117,  1325,   117,
-     636,   117,   638,   117,   341,   117,   343,    51,   368,  1089,
-     636,  1450,   840,   649,   115,   115,  1026,  1347,  1348,   117,
-      63,  1351,  1352,   114,   119,   114,  1244,   114,  1351,  1352,
-     114,   117,   115,   669,  1458,  1275,   115,  1367,  1462,  1463,
-     117,   115,  1372,  1253,   117,   115,   101,   683,   684,   685,
-    1480,   101,   114,   114,   120,   691,   692,   683,  1480,   137,
-     104,   115,  1389,   115,   115,   121,  1490,   115,   112,    45,
-     898,  1401,   135,   137,  1154,   115,   115,   137,   101,  1509,
-     101,   117,   135,   115,   115,   721,   114,  1509,   137,  1513,
-     137,   137,   429,  1517,  1154,  1407,   121,   135,   142,   117,
-     120,   117,  1414,   137,  1042,   117,  1186,   151,   137,  1479,
-      66,   115,  1122,  1123,   114,  1479,   115,  1541,   478,  1479,
-    1450,  1451,     0,   483,   120,   761,   120,  1496,  1451,   115,
-     135,  1191,   115,   115,   770,   137,   772,   115,   115,   114,
-    1470,   777,   137,   995,   137,  1475,   137,   553,   976,  1479,
-    1480,   550,  1480,    75,   790,   199,    34,    79,   551,   203,
-     116,  1473,   552,   554,  1244,   917,    88,    89,  1498,    75,
-    1500,    77,    78,    79,  1504,  1438,   450,  1507,  1154,  1509,
-    1327,  1509,    88,    89,  1244,  1524,  1254,  1463,    66,  1407,
-    1520,  1517,   114,  1414,  1524,  1013,  1414,   869,  1023,   155,
-     122,   123,  1275,  1033,   840,  1415,   891,  1417,   114,   702,
-     116,   912,  1542,   632,   840,   259,   122,   123,   262,  1542,
-     833,  1191,   695,  1553,   890,   710,  1286,  1165,   864,   135,
-    1553,   470,   556,   869,    -1,   871,    -1,   556,   864,  1479,
-     556,    -1,   286,    -1,  1454,    -1,  1456,   883,   884,    -1,
-      -1,    -1,   888,    -1,   298,  1473,    -1,  1347,    -1,   215,
-      -1,    75,   898,   899,  1324,  1325,   626,    -1,    82,   905,
-      -1,    85,   898,    87,    88,    89,   232,    54,    -1,    56,
-      -1,    -1,    59,    60,    61,    -1,   330,    -1,    -1,    -1,
-     334,   247,    75,    -1,    77,    78,   252,    -1,  1508,    76,
-    1510,   937,   116,    -1,    -1,    88,    89,    -1,    -1,   353,
-      87,    88,    -1,   357,  1374,    -1,    -1,    -1,  1528,  1529,
-      -1,    -1,   958,   959,    -1,    -1,  1154,  1407,    -1,  1389,
-      -1,   114,   958,   959,  1414,    -1,   119,   215,   698,    -1,
-     976,    -1,   702,    -1,    -1,    -1,    -1,  1407,    -1,    -1,
-     976,    -1,    -1,  1363,  1414,    -1,    -1,    -1,    -1,    -1,
-      -1,   239,    -1,  1191,    10,    11,    12,    13,    14,    -1,
-     414,   415,    75,    -1,    77,    78,    79,    -1,    -1,    -1,
-      -1,   655,    -1,   339,    -1,    88,    89,  1023,    75,  1025,
-      -1,  1027,    -1,  1473,    -1,    82,    42,   441,    85,    -1,
-      87,    88,    89,   180,    -1,    -1,  1042,    -1,    -1,   453,
-      -1,   114,  1048,  1473,    -1,  1425,  1244,    66,    -1,   122,
-     123,    -1,  1058,    -1,    70,    -1,    75,  1437,  1438,   116,
-       4,     5,     6,     7,     8,     9,    -1,    -1,   482,    -1,
-     484,    -1,   486,    -1,    -1,    66,    -1,    -1,    -1,    -1,
-    1460,    -1,   496,  1089,   498,    -1,    -1,   501,  1286,   503,
-     504,   339,    -1,   419,    -1,    -1,    -1,   116,   114,    -1,
-     116,    -1,    -1,   833,    -1,    -1,   122,   123,  1416,   839,
-    1418,    -1,    -1,   757,    -1,    -1,    -1,    -1,    75,    -1,
-      77,    78,    79,   767,   768,   116,    -1,  1325,    72,    -1,
-      74,    88,    89,   459,   778,    -1,   155,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   874,    -1,    -1,  1455,  1154,  1457,
-     564,    -1,  1532,    -1,    -1,    -1,    -1,   114,  1154,  1165,
-     574,    -1,    -1,    -1,   155,   122,   123,  1173,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,    -1,
-    1186,    -1,   912,    -1,    -1,  1191,   333,    -1,   335,    -1,
-      -1,  1389,   606,   137,    -1,  1191,   215,   611,    -1,   346,
-     347,    -1,   136,   617,    75,    -1,    77,    78,    79,  1407,
-      -1,   459,    -1,    -1,    -1,    -1,  1414,    88,    89,    -1,
-      -1,    -1,   470,    -1,   215,    -1,  1232,  1233,   247,    -1,
-      -1,    -1,    -1,   252,   183,    -1,  1232,  1233,  1244,    -1,
-      86,   190,    -1,   114,    90,    91,    92,    -1,  1244,    -1,
-      -1,    -1,   578,    -1,    -1,   669,   247,    -1,    -1,    -1,
-      -1,   252,    -1,    75,    -1,    77,    78,    79,   114,  1275,
-     116,    -1,   118,   119,    -1,  1473,    88,    89,    -1,    -1,
-    1286,   695,   608,  1013,    -1,    -1,    -1,   613,    -1,    -1,
-    1286,    -1,    -1,    86,    -1,    -1,    -1,    90,    91,    92,
-      -1,    -1,    10,    11,    12,    13,    14,   256,    -1,  1039,
-      -1,   955,   956,    -1,    -1,    -1,    -1,    -1,  1324,  1325,
-     339,   114,    -1,   116,    -1,   118,   119,    -1,  1324,  1325,
-      -1,    -1,    -1,    75,    42,    77,    78,    79,    -1,    -1,
-      -1,    -1,  1348,    -1,    -1,   671,    88,    89,   339,    -1,
-      -1,    -1,    -1,  1359,    -1,    -1,   770,    -1,    -1,   685,
-     608,    -1,    70,  1359,    -1,   314,    -1,    75,  1374,    77,
-      78,    79,  1016,  1017,   323,    -1,    -1,   326,  1374,    -1,
-      88,    89,    -1,  1389,    -1,    10,    11,    12,    13,    14,
-      -1,    -1,    -1,  1389,    -1,    -1,    -1,    -1,    -1,  1129,
-     419,  1407,    -1,    -1,    -1,    -1,   114,    -1,  1414,    -1,
-    1416,  1407,  1418,    -1,   122,   123,   435,    42,  1414,    -1,
-      -1,    -1,    -1,   671,    -1,    -1,    -1,    -1,   419,    -1,
-      -1,    -1,    -1,    -1,    -1,   384,    -1,   685,    -1,   388,
-     459,    -1,    -1,    -1,  1450,    70,   772,    -1,    -1,  1455,
-      75,  1457,    77,    78,    79,   869,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    89,    -1,    -1,  1473,   459,    -1,
-      -1,    -1,    -1,  1479,  1480,    -1,    -1,  1473,    -1,    -1,
-      -1,    -1,    -1,   897,   898,   899,    -1,    -1,    -1,   114,
-    1496,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,    -1,
-      -1,    -1,    -1,  1509,    75,    -1,    77,    78,    79,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   465,    88,    89,    -1,
-      -1,    -1,    -1,   937,   772,   672,    -1,   674,    -1,    -1,
-      -1,    -1,    -1,    -1,   681,   682,    -1,    -1,    -1,   686,
-    1184,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,
-      -1,   122,   123,    -1,    -1,    -1,   703,    -1,    -1,   578,
-      -1,   708,    -1,    -1,    -1,   136,    58,    -1,    -1,  1213,
-      10,    11,    12,    13,    14,    -1,    -1,  1221,  1222,  1223,
-     727,    -1,    -1,    -1,    -1,    -1,    -1,   578,    -1,   608,
-      -1,    -1,   840,    -1,   613,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    42,    -1,    -1,    -1,    -1,   556,   557,    -1,
-      -1,    -1,    -1,   105,   940,    -1,   108,   608,    -1,    -1,
-      -1,    -1,   613,    -1,    -1,    -1,    -1,    -1,  1042,    -1,
-      70,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,
-      -1,    -1,   671,    -1,    -1,     0,     1,    -1,    10,    11,
-      12,    13,    14,    -1,    -1,    -1,   685,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   114,   822,   116,   824,   825,   826,
-     671,    -1,   122,   123,    -1,    -1,    -1,    -1,    -1,    34,
-      42,   640,   940,    -1,   685,   644,   843,    -1,    -1,    -1,
-      75,    -1,    77,    78,    79,    -1,    51,    -1,    -1,    -1,
-      -1,    -1,   859,    88,    89,    -1,    -1,    -1,    70,    -1,
-     212,    -1,    -1,    75,    69,    77,    78,    79,   976,    -1,
-      -1,    -1,    -1,    -1,    -1,   882,    88,    89,    -1,   114,
-      -1,   116,    -1,    -1,  1388,    -1,    -1,   122,   123,    -1,
-      -1,  1165,    -1,   772,    -1,    -1,    -1,    -1,    -1,   104,
-      -1,    -1,   114,    -1,   116,    -1,    -1,    -1,   260,   916,
-     122,   123,    -1,    -1,   921,    -1,    -1,  1191,    -1,   926,
-      -1,   772,    -1,    -1,   931,   932,    -1,    -1,    -1,   936,
-      -1,   938,   939,    -1,    -1,   942,    -1,    -1,   143,    10,
-      11,    12,    13,    14,   951,    -1,   151,   152,    -1,    -1,
-      -1,    -1,   761,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     967,   968,    75,    -1,    77,    78,    79,    -1,    -1,    -1,
-      -1,    42,    -1,    -1,   179,    88,    89,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   337,    -1,    -1,    -1,    -1,
-     195,    -1,   999,   198,   199,  1002,    -1,    -1,   203,    70,
-      -1,   114,   354,   116,    75,    -1,   358,    -1,    79,   122,
-     123,    -1,  1286,    -1,    -1,    -1,    -1,    88,    89,   224,
-      -1,    -1,    -1,   228,    -1,   230,    -1,    -1,   233,    -1,
-      -1,    -1,    -1,    -1,   239,    -1,    -1,    -1,    -1,   244,
-      -1,    -1,    -1,   114,    -1,    -1,  1154,    -1,  1055,   254,
-      -1,   122,   123,    -1,  1061,  1062,    -1,   262,    -1,    -1,
-      -1,   940,    -1,  1070,    -1,    -1,    -1,    -1,  1075,    -1,
-      -1,    -1,    -1,  1080,    -1,    -1,    -1,    -1,     0,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1093,    -1,    -1,   940,
-      10,    11,    12,    13,    14,    -1,    10,    11,    12,    13,
-      14,    -1,  1109,    -1,  1111,  1112,  1113,  1114,    -1,    -1,
-      -1,    -1,    34,    -1,    -1,  1389,    -1,    -1,   927,  1126,
-      -1,  1128,    42,    -1,    -1,   330,    -1,    -1,    42,   334,
-      -1,    -1,    -1,    -1,   943,   340,  1244,    -1,  1324,    -1,
-      -1,    -1,  1416,    -1,  1418,    -1,    -1,    69,   353,    -1,
-      70,    -1,   357,  1160,  1161,    75,    70,    77,    78,    79,
-      -1,    75,    -1,    -1,    -1,    79,    -1,    -1,    88,    89,
-      -1,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,    -1,
-      -1,  1455,    -1,  1457,    -1,    -1,    -1,    -1,  1374,    -1,
-      -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,    -1,    -1,
-     114,   406,   122,   123,    -1,    -1,    -1,    -1,   122,   123,
-      -1,    -1,    -1,    -1,    -1,   420,  1324,  1224,  1225,    -1,
-     425,    -1,  1496,  1032,    -1,    -1,    -1,  1234,   433,    -1,
-     152,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   450,    -1,    -1,   453,    -1,
-      -1,    -1,    -1,    -1,    -1,   607,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   468,    -1,   470,  1374,    -1,    -1,    -1,
-     622,    -1,    -1,    -1,    -1,    -1,    -1,   482,    -1,    -1,
-      -1,   486,    -1,   635,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1298,    -1,  1300,  1301,  1302,    -1,    -1,    -1,  1407,
-      -1,    -1,   224,    -1,    -1,  1312,  1414,    -1,   513,    -1,
-      -1,    -1,    -1,  1320,    -1,    -1,  1323,   239,    -1,    -1,
-      -1,    -1,   244,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,  1350,    -1,    32,    33,    34,    -1,    -1,
-      -1,    -1,   557,    -1,    -1,    42,    43,    -1,    -1,  1168,
-      -1,    -1,    -1,    -1,    -1,  1473,    -1,    -1,    -1,   574,
-     575,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   587,    70,    -1,    -1,    -1,  1394,  1395,    -1,
-      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1407,   606,    -1,    -1,    -1,    -1,   611,  1414,    -1,    -1,
-      -1,    -1,   617,    -1,    -1,   620,   621,    -1,   340,    -1,
-      -1,    -1,    -1,    -1,  1431,    -1,    -1,    -1,    -1,   116,
-       0,   636,    -1,   120,    -1,   122,   123,    -1,    -1,    -1,
-      -1,    -1,  1449,    -1,    -1,  1324,  1453,    -1,    -1,    -1,
-     655,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   666,  1271,    -1,    34,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1324,    -1,   680,    -1,    -1,   683,  1486,
-      -1,  1488,    -1,    -1,   406,    -1,    -1,   692,   840,    -1,
-     695,    -1,    -1,    -1,    -1,  1374,    -1,    -1,   420,    69,
-      -1,    -1,    -1,   425,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   433,    -1,    -1,    -1,    -1,   721,    -1,    -1,  1526,
-    1527,    -1,    -1,  1374,    -1,    -1,    -1,    -1,   450,    -1,
-      -1,    -1,  1539,  1540,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   468,    -1,   470,    -1,
-      -1,    -1,   757,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   767,   768,    -1,   770,    -1,    -1,   773,    -1,
-      -1,    -1,    -1,   778,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   152,   788,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   513,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
-      33,    34,    -1,    -1,    -1,    -1,    -1,   979,    -1,    42,
-     982,   983,   984,    -1,    -1,   840,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   575,    -1,    -1,    -1,    70,    -1,   864,
-      -1,    -1,    75,    -1,    77,    78,    79,    -1,    -1,   239,
-      -1,    -1,     0,    -1,   244,    88,    89,    -1,    -1,   884,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   897,   898,    -1,    -1,    -1,    -1,   620,   621,
-     905,   114,    -1,   116,    -1,    -1,    34,    -1,    -1,   122,
-     123,    -1,    -1,    -1,   636,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   937,   655,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    69,    -1,    -1,   666,   950,    -1,    -1,    -1,    -1,
-     955,   956,    -1,   958,   959,    -1,    -1,    -1,   680,    -1,
-      -1,   683,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     340,   976,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,   721,
-      -1,    -1,  1154,    -1,    -1,    42,    43,    -1,    -1,    -1,
-      -1,  1016,  1017,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1027,    -1,   152,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    70,    -1,   757,   406,    -1,    -1,    -1,
-      77,    78,    -1,    -1,    -1,   767,   768,    -1,    -1,    -1,
-     420,   773,    -1,    -1,    -1,   425,   778,    -1,    -1,    -1,
-      -1,    -1,    -1,   433,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,
-     450,    -1,    -1,   120,  1089,   122,   123,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   468,    -1,
-     470,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   239,    -1,  1265,    -1,    -1,   244,    -1,   840,    -1,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    -1,   864,   513,    -1,    -1,    -1,    -1,    -1,  1154,
-      -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1316,    -1,    -1,  1319,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1184,
-      70,  1186,    -1,   905,    -1,    -1,  1191,    -1,    -1,    -1,
-      -1,    81,    -1,    -1,    -1,  1347,    -1,    -1,    -1,    -1,
-      -1,     0,    -1,    -1,    -1,   575,    -1,    -1,  1213,    -1,
-      -1,    -1,   340,    -1,    -1,  1367,  1221,  1222,  1223,    -1,
-    1372,    -1,    -1,    -1,    -1,    -1,    -1,  1232,  1233,    -1,
-      -1,    -1,    -1,   955,   956,    34,   958,   959,    -1,  1244,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1401,
-     620,   621,    -1,    -1,   976,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   636,    -1,    -1,    -1,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   406,    -1,
-      -1,  1286,    -1,    -1,    -1,   655,    -1,    -1,    -1,    -1,
-      -1,    -1,   420,    -1,  1016,  1017,   666,   425,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,    -1,
-     680,    -1,    -1,   683,    -1,    -1,    -1,    -1,  1470,    -1,
-    1325,    -1,   450,  1475,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     468,    -1,   470,    -1,    -1,    -1,  1498,    -1,  1500,    -1,
-      -1,   721,  1504,   152,  1359,  1507,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1089,  1520,    -1,
-      -1,    -1,  1524,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1388,  1389,   513,    -1,   757,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   767,   768,    -1,
-      -1,    -1,  1407,   773,    -1,    -1,    -1,    -1,   778,  1414,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    -1,  1154,    32,    33,    34,    -1,    -1,    -1,    -1,
-     239,    -1,    -1,    42,    -1,   244,    -1,   575,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1184,    -1,  1186,    -1,    -1,    -1,  1473,    -1,
-     840,    70,    -1,    -1,    -1,  1480,    75,    -1,    77,    78,
-      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
-      89,  1213,   620,   621,   864,    -1,    -1,    -1,    -1,  1221,
-    1222,  1223,    -1,    -1,    -1,    -1,    -1,    -1,   636,    -1,
-    1232,  1233,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
-      -1,    -1,  1244,   122,   123,    -1,    -1,   655,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   905,    -1,    -1,   666,    -1,
-      -1,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   680,    -1,    -1,   683,    -1,    -1,    -1,    -1,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      -1,    -1,    32,    33,    34,   955,   956,    -1,   958,   959,
-      -1,    -1,    42,   721,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1325,    -1,    -1,   976,   406,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      70,   420,    -1,    -1,    -1,    -1,   425,    77,    78,   757,
-      -1,    -1,    -1,    -1,   433,    -1,    -1,  1359,    -1,   767,
-     768,    -1,    -1,    -1,    -1,   773,  1016,  1017,    -1,    -1,
-     778,   450,    -1,    -1,    -1,    40,    41,    -1,    43,    -1,
-      -1,    -1,    -1,    -1,    -1,    51,  1388,    -1,    -1,   468,
-      -1,   470,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,
-      66,    -1,    -1,    -1,    69,  1407,    -1,    -1,    -1,    -1,
-      75,    -1,  1414,    -1,    79,    -1,    -1,    82,    83,    84,
-      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
-      -1,    -1,   840,    -1,   513,    -1,    -1,    -1,    -1,  1089,
-      -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,   114,
-     116,   116,    -1,    -1,    -1,    -1,   864,   122,   123,   124,
-     125,   126,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     135,  1473,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   152,    -1,    -1,   155,
-      -1,    -1,    -1,    -1,    -1,    -1,   575,   905,    -1,    -1,
-      -1,    -1,    -1,    -1,  1154,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1184,    -1,  1186,   203,    42,    -1,
-      -1,   620,   621,    -1,    -1,    -1,    -1,   955,   956,   215,
-     958,   959,    -1,    -1,    -1,    -1,    -1,   636,    -1,    -1,
-      -1,    -1,    -1,  1213,    -1,    -1,    70,    -1,   976,    -1,
-      -1,  1221,  1222,  1223,    -1,    -1,   655,    81,    -1,    -1,
-      -1,    -1,  1232,  1233,    -1,    -1,   252,   666,    -1,    -1,
-      -1,    -1,    -1,   259,  1244,    -1,    -1,    -1,    -1,    -1,
-      -1,   680,    -1,    -1,   683,    -1,    -1,    -1,  1016,  1017,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     286,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   721,    -1,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    -1,    -1,    -1,    -1,   334,    -1,
-      -1,    -1,    -1,   339,    -1,  1325,    42,    -1,   757,    -1,
-      -1,  1089,    -1,    -1,    -1,    -1,    -1,    -1,   767,   768,
-      -1,    -1,    -1,    -1,   773,    -1,    -1,    -1,    -1,   778,
-      -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,  1359,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    75,    -1,    77,    -1,    79,    -1,
-      -1,    -1,    -1,    -1,    85,    -1,    -1,    -1,  1388,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1154,    -1,   414,   415,
-      -1,    -1,    -1,    -1,   420,    -1,    -1,  1407,    -1,    -1,
-      -1,   840,    -1,    -1,  1414,   116,    -1,   118,   119,   120,
-      -1,    -1,    -1,    -1,    -1,   441,  1184,    -1,  1186,    -1,
-      -1,    -1,    -1,    -1,    -1,   864,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   468,    -1,   155,  1213,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1221,  1222,  1223,    -1,    -1,   484,    -1,
-      -1,    -1,    -1,  1473,  1232,  1233,   905,    -1,    -1,    -1,
-     496,    -1,   498,    -1,    -1,   501,  1244,   503,   504,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   513,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   215,    -1,   217,   218,   219,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   955,   956,    -1,   958,
-     959,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   247,   976,   564,    -1,
-      -1,   252,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   575,
-      -1,    -1,   578,    -1,    -1,    -1,    -1,  1325,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   152,  1016,  1017,    -1,
-     606,    -1,    -1,    -1,    -1,   611,    -1,   163,   164,    -1,
-      -1,  1359,    -1,    -1,   620,   621,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   320,
-     636,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1388,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   339,    -1,
-      -1,    -1,    -1,   344,   345,    -1,    -1,    -1,    -1,  1407,
-      -1,   352,    -1,   669,    -1,    -1,  1414,    -1,    46,    -1,
-    1089,    -1,    -1,    -1,    -1,    -1,    -1,   683,    -1,   685,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   251,    -1,    -1,    -1,    -1,
-      -1,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    90,    -1,    -1,   721,    -1,    -1,    -1,    -1,
-      -1,   412,   100,    -1,    -1,  1473,   417,    -1,   419,    -1,
-      -1,    -1,    -1,    -1,    -1,  1154,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   435,    -1,    -1,   438,   439,    -1,
-      -1,    -1,    -1,    -1,   445,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1184,   772,  1186,   459,    -1,
-      -1,    -1,    -1,    -1,    -1,   466,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   166,    -1,
-      -1,    -1,    -1,    -1,  1213,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1221,  1222,  1223,    -1,    -1,    -1,    -1,    -1,
-     188,    -1,   368,  1232,  1233,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   202,  1244,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   211,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   221,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   864,    -1,
-      -1,    -1,   240,   869,    -1,    -1,    -1,   245,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     258,    -1,    -1,    -1,    -1,   441,    -1,   578,   266,    -1,
-     268,    -1,    -1,   899,    -1,    -1,    -1,    -1,    -1,   905,
-      -1,    -1,    -1,    -1,   460,    -1,  1325,    -1,    -1,   287,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   608,    -1,    -1,
-      -1,    -1,   613,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   937,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1359,    -1,    -1,    -1,    -1,    -1,    -1,   503,    -1,    -1,
-     328,    -1,   958,   959,   332,    -1,    -1,   513,    -1,    -1,
-      -1,    -1,   518,    -1,    -1,   521,    -1,    -1,    -1,  1388,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   534,    -1,
-     671,    -1,   360,    -1,    -1,    -1,   364,   365,  1407,   367,
-      -1,    -1,    -1,    -1,   685,  1414,   374,   375,    -1,   377,
-     378,    -1,   380,    -1,   382,    -1,    -1,    -1,   564,    -1,
-      -1,    -1,    -1,    -1,    -1,   571,    -1,    -1,    -1,   575,
-      -1,   399,    -1,    -1,    -1,    -1,    -1,    -1,     7,   407,
-     586,    10,    11,    12,    13,    14,  1042,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   431,  1473,    -1,    -1,    -1,    -1,    -1,
-      -1,    40,    41,    42,    43,    -1,    -1,   623,    -1,    -1,
-     761,    -1,    -1,    -1,    -1,   631,    -1,    -1,   456,    -1,
-      -1,   772,    -1,  1089,   462,    -1,    -1,    -1,    -1,   467,
-      69,    70,    -1,    -1,    -1,    -1,    75,    -1,    -1,   790,
-      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
-      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   507,
-      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
-      -1,   519,    -1,   122,   123,   124,   125,   126,   127,    -1,
-      -1,    -1,    -1,    -1,    -1,   711,    -1,    40,    41,  1165,
-      43,    -1,    -1,    -1,    -1,   721,    -1,   723,    -1,    -1,
-     726,    -1,    -1,    -1,    -1,    -1,   732,    -1,   556,    -1,
-    1186,    -1,    -1,    -1,    -1,    -1,    69,   565,    -1,    -1,
-     568,    -1,    75,    -1,    77,    78,    79,   888,    -1,    82,
-      83,    84,    85,    86,    87,    88,    89,   585,    91,    92,
-      -1,    -1,    -1,    -1,    -1,    -1,   772,   773,    -1,    40,
-      41,    -1,    43,    -1,    -1,    -1,  1232,  1233,    -1,    -1,
-      -1,   114,   788,   116,    -1,   118,   119,    -1,    -1,   122,
-     123,   124,   125,   126,   127,    -1,    -1,   625,    69,   940,
-      -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,    -1,
-     951,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
-      91,    92,    -1,   829,    -1,    -1,    -1,   833,    -1,    -1,
-      -1,    -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,
-      -1,   122,   123,   124,   125,   126,   127,    -1,   864,    -1,
-      -1,   689,    -1,    -1,    -1,    -1,    -1,    -1,  1324,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   704,   705,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   714,    -1,   151,   152,
-      -1,    -1,    -1,   899,    -1,    -1,    -1,    -1,    -1,   905,
-     728,    -1,    -1,  1359,    -1,   733,   912,  1048,    -1,    -1,
-      -1,   917,    -1,    -1,   920,    -1,    -1,    -1,  1374,    -1,
-     183,    -1,    -1,    -1,    -1,    -1,    -1,   190,    -1,    -1,
-      -1,    -1,    -1,    -1,   940,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   951,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1416,    -1,  1418,    -1,    -1,   971,   794,   973,    -1,    -1,
-      -1,    -1,    -1,   801,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   988,   989,    -1,    -1,    -1,   815,    -1,   817,
-      -1,    -1,    -1,   256,    -1,    -1,    -1,    -1,    -1,  1455,
-      -1,  1457,   830,    -1,    -1,    -1,    -1,    -1,   836,  1015,
-      -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,    -1,   847,
-      -1,    -1,    -1,   851,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1496,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   314,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     323,   324,  1068,   326,   327,    -1,    -1,    82,    -1,    -1,
-      -1,   334,    -1,    -1,    -1,   338,    -1,    -1,    -1,    -1,
-      -1,    -1,    97,  1089,    99,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   357,    -1,    -1,    -1,    -1,    -1,
-      -1,  1107,  1108,    -1,    -1,    -1,    -1,   935,    -1,   124,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   384,    -1,    -1,    -1,   388,    -1,    -1,   273,    -1,
-     275,   276,    -1,    -1,    -1,    -1,    -1,    -1,    28,   284,
-     285,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   298,   299,    -1,    -1,   420,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,    -1,
-     185,   186,    -1,    -1,  1002,   190,    -1,   192,   193,    -1,
-      -1,    -1,    -1,  1324,    -1,    -1,    -1,    -1,    -1,   334,
-      -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   465,    -1,    -1,   468,    -1,    97,    -1,    99,
-      -1,    -1,    -1,    -1,    -1,    -1,  1044,    -1,    -1,    -1,
-      -1,  1049,    -1,    -1,   369,    -1,    -1,    -1,    -1,    -1,
-      -1,  1059,    -1,  1374,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   256,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     513,    -1,  1258,    -1,    -1,  1083,  1262,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1096,    -1,
-      -1,    -1,  1100,    -1,    -1,  1103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1119,  1120,   556,   557,   185,   186,    -1,    -1,    -1,
-     190,    -1,   192,   193,    -1,    -1,    -1,    -1,    -1,  1137,
-      -1,   574,   575,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   584,    -1,    -1,   587,   588,    -1,    -1,    -1,    -1,
-      -1,   594,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   604,    -1,   606,    -1,    -1,    -1,    -1,   611,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   620,   621,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1509,    -1,
-      -1,    -1,    -1,   636,  1202,    -1,    -1,   640,   641,    -1,
-     395,   644,   645,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     653,    -1,   537,   538,   539,   540,   541,   542,   543,   544,
-     545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     683,   684,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
-      32,    33,    34,  1281,    -1,  1283,    -1,    -1,   721,    -1,
-      42,    -1,    -1,    -1,    -1,  1293,    -1,  1295,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1310,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-    1496,    -1,    -1,    75,    -1,    77,    78,    -1,   761,    -1,
-    1328,  1329,    -1,    -1,    -1,   395,    88,    89,    -1,    -1,
-      -1,    -1,    -1,  1341,   777,    -1,   779,    -1,  1346,    -1,
-      -1,  1349,    -1,    -1,    -1,    -1,    -1,   790,    -1,    -1,
-      -1,    -1,    -1,    -1,   116,    -1,    -1,  1365,    -1,    -1,
-     122,   123,    -1,    -1,    -1,   560,   561,  1375,    -1,    -1,
-    1378,    -1,  1380,  1381,  1382,   700,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   588,    -1,    -1,   591,   592,    -1,   594,
-     725,   596,   597,    -1,    -1,    -1,   601,   602,    -1,    -1,
-      -1,    -1,  1420,    -1,  1422,    -1,    -1,    -1,    -1,    -1,
-      -1,   864,    -1,    -1,  1432,    -1,    -1,    -1,   871,    -1,
-     755,    -1,    -1,    -1,  1442,    -1,    -1,    -1,    -1,    -1,
-     883,   884,    -1,    -1,    -1,   640,    -1,    -1,    -1,   644,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   905,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   927,   928,    -1,    -1,    -1,    -1,
-     560,   561,    -1,    -1,   937,    -1,    -1,    -1,    -1,    -1,
-     943,   944,    -1,   946,   947,   948,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   958,   959,    -1,   588,    -1,
-      -1,   591,   592,    -1,   594,    -1,   596,   597,    -1,    -1,
-      -1,   601,   602,    -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,    28,    29,    -1,
-     640,    32,    33,    34,   644,    -1,    -1,    -1,    -1,    -1,
-    1023,    42,  1025,    -1,  1027,    -1,    -1,    -1,    -1,  1032,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     925,    -1,    -1,    -1,    -1,  1048,    -1,    -1,    -1,    70,
-      -1,    72,   937,    74,    -1,     0,    77,    78,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    -1,  1089,    32,    33,    34,
-      35,   976,    -1,    -1,    39,   116,    -1,    42,    43,    -1,
-      -1,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    -1,    70,    -1,    72,    -1,    74,
-      75,    -1,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,
-      -1,  1026,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1168,    -1,    -1,    -1,   114,
-    1173,   116,   927,    -1,    -1,    -1,    -1,   122,   123,    -1,
-      -1,    -1,    -1,  1186,    -1,    -1,    -1,    -1,   943,    -1,
-      -1,   946,   947,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
-      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,  1232,
-    1233,    42,    -1,    -1,    -1,    -1,    -1,  1122,  1123,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-      -1,    72,    -1,    74,  1019,    -1,    77,    78,  1271,  1272,
-      -1,    -1,  1275,    -1,    -1,    -1,    -1,  1032,    -1,    -1,
-      -1,    -1,  1037,  1038,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   927,    -1,    -1,
-      -1,    -1,    -1,    -1,   115,   116,    -1,    -1,    -1,    -1,
-      -1,   122,   123,   943,    -1,    -1,   946,   947,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1094,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1359,    -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,    28,    29,    30,  1019,
-      32,    33,    34,    35,    -1,    -1,    -1,    39,    -1,    -1,
-      42,  1156,    -1,    -1,    -1,    -1,    -1,  1037,  1038,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1175,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-      72,    -1,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1450,    -1,    -1,
-      -1,    -1,     7,    -1,    -1,    10,    11,    12,    13,    14,
-      -1,    -1,    -1,    -1,  1094,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   116,    -1,  1479,  1480,  1363,    -1,
-     122,   123,    -1,    -1,    -1,    40,    41,    42,    43,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1509,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    69,    70,  1271,    -1,    -1,    -1,
-      75,    -1,    -1,    -1,    79,    -1,  1156,    82,    83,    84,
-      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
-    1425,    -1,    -1,    -1,    -1,  1175,    -1,    -1,    -1,    -1,
-      -1,    -1,  1437,  1438,    -1,    -1,    -1,    -1,    -1,   114,
-      -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
-     125,   126,   127,    -1,    -1,  1460,    -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,    28,    29,    -1,
-      -1,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
-      41,    42,    43,    44,    -1,    46,    -1,    -1,    49,    50,
-      51,    52,    53,    54,    55,    56,    -1,    -1,    -1,    60,
-      -1,  1271,    -1,    64,    65,    -1,    67,  1532,    69,    70,
-      -1,    72,    -1,    74,    75,    -1,    77,    78,    79,    -1,
-      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
-      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,
-      -1,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
-      -1,   132,    -1,    -1,    -1,    -1,   137,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    35,
-      -1,    -1,    -1,    39,    40,    41,    42,    43,    10,    11,
+      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    -1,
+      -1,    -1,    -1,    -1,    40,    41,    42,    43,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
@@ -3639,93 +3844,55 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
       -1,    -1,    -1,    -1,    -1,    77,    78,    -1,   114,    -1,
-     116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
-     126,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   137,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
-      -1,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
-      41,    42,    43,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    -1,    -1,    32,    33,    34,    69,    70,
-      -1,    72,    -1,    74,    75,    42,    77,    78,    79,    -1,
-      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
-      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      77,    78,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,
-      -1,   122,   123,   124,   125,   126,   127,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
-      -1,    -1,    -1,    40,    41,    42,    43,    -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,    69,    70,    -1,    72,    -1,    74,    75,    -1,
-      77,    78,    79,    -1,    -1,    82,    83,    84,    85,    86,
-      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,
-      -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,   126,
-     127,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
-      33,    34,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,
-      43,    -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,    69,    70,    -1,    72,
-      -1,    74,    75,    -1,    77,    78,    79,    -1,    -1,    82,
-      83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   114,    -1,   116,    -1,    -1,    -1,    -1,   121,   122,
-     123,   124,   125,   126,   127,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
-      -1,    40,    41,    42,    43,    -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,
-      69,    70,    -1,    72,    -1,    74,    75,    -1,    77,    78,
-      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
-      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
-      -1,    -1,    -1,   122,   123,   124,   125,   126,   127,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
-      -1,    -1,    -1,    -1,    -1,    40,    41,    42,    43,    -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,    69,    70,    -1,    72,    -1,    74,
-      75,    -1,    77,    78,    79,    -1,    -1,    82,    83,    84,
-      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
-      -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
-     125,   126,   127,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
-      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    40,
-      41,    42,    43,    -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,    69,    70,
-      -1,    72,    -1,    74,    75,    -1,    77,    78,    79,    -1,
-      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
-      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,
-      -1,   122,   123,   124,   125,   126,   127,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    35,
-      -1,    -1,    -1,    39,    -1,    -1,    42,    43,    -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,    -1,    70,    -1,    72,    -1,    74,    75,
-      -1,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
-     116,    -1,    -1,    -1,   120,    -1,   122,   123,     3,     4,
+     116,    -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,
+     126,   127,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    40,    41,
+      42,    43,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    -1,    -1,    32,    33,    34,    69,    70,    -1,
+      72,    -1,    74,    75,    42,    77,    78,    79,    -1,    -1,
+      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
+      92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
+      78,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,   121,
+     122,   123,   124,   125,   126,   127,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
+      -1,    -1,    40,    41,    42,    43,    -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,    69,    70,    -1,    72,    -1,    74,    75,    -1,    77,
+      78,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
+      88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
+      -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,   127,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
+      34,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,    43,
+      -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,    69,    70,    -1,    72,    -1,
+      74,    75,    -1,    77,    78,    79,    -1,    -1,    82,    83,
+      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
+     124,   125,   126,   127,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+      40,    41,    42,    43,    -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,    69,
+      70,    -1,    72,    -1,    74,    75,    -1,    77,    78,    79,
+      -1,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
+      -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,
+      -1,    -1,   122,   123,   124,   125,   126,   127,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
@@ -3759,290 +3926,312 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,
-      -1,    74,    -1,    -1,    77,    78,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      -1,    74,    -1,    -1,    77,    78,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,   116,    -1,    42,    -1,    -1,    -1,   122,
+     123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,
+      77,    78,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,   116,
+      42,    -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
+      72,    -1,    74,    75,    -1,    77,    78,    79,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,
+     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,    28,    29,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      42,    -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,    70,    -1,
+      72,    -1,    74,    -1,    -1,    77,    78,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,   115,   116,    42,    -1,    -1,    -1,    -1,
+     122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,
+      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,
+      -1,    -1,    -1,    -1,    -1,   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,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    42,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
+      33,    34,    -1,    70,    -1,    72,    -1,    74,    -1,    42,
+      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   101,    -1,    -1,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,   116,
+      -1,    -1,    -1,    -1,    -1,   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,    28,    29,   116,    -1,    32,    33,    34,    -1,   122,
+     123,    -1,    -1,    -1,    -1,    42,    -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,    70,    -1,    72,    -1,    74,    -1,    -1,
+      77,    78,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,   116,
+      42,    -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
+      72,    -1,    74,    -1,    -1,    77,    78,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,   116,    42,    -1,    -1,    -1,    -1,
+     122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,
+      77,    78,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
-      -1,    -1,    -1,   116,    42,    -1,    -1,    -1,    -1,   122,
-     123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    70,    -1,    72,    -1,    74,    75,    -1,    77,
-      78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    40,    41,    42,    43,    -1,    -1,    -1,   116,
+      -1,    -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    69,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,
+      78,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
+      88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
-      -1,    -1,    -1,    -1,   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,
-      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    42,    -1,    10,    11,    12,    13,
+      -1,   119,    -1,    -1,   122,   123,   124,   125,   126,   127,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+      40,    41,    42,    43,    -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,    69,
+      70,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,    79,
+      -1,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
+      -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   114,   115,   116,    -1,    -1,    -1,
+      -1,    -1,   122,   123,   124,   125,   126,   127,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    40,    41,
+      42,    43,    -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,    69,    70,    -1,
+      -1,    -1,    -1,    75,    -1,    77,    78,    79,    -1,    -1,
+      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
+      92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,
+     122,   123,   124,   125,   126,   127,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
-      34,    -1,    70,    -1,    72,    -1,    74,    -1,    42,    77,
-      78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   101,    -1,    -1,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    78,    -1,    -1,    -1,   116,    -1,
-      -1,    -1,    -1,    -1,   122,   123,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      34,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,    43,
+      -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,    69,    70,    -1,    -1,    -1,
+      -1,    75,    -1,    77,    78,    79,    -1,    -1,    82,    83,
+      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
+     124,   125,   126,   127,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    -1,
+      -1,    -1,    -1,    -1,    40,    41,    42,    43,    -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,    69,    70,    -1,    -1,    -1,    -1,    75,
+      -1,    77,    78,    79,    -1,    -1,    82,    83,    84,    85,
+      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
+     116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
+     126,   127,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
+      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    42,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,   116,    -1,    32,    33,    34,    -1,   122,   123,
-      -1,    -1,    -1,    -1,    42,    -1,    10,    11,    12,    13,
+      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    70,
+      -1,    72,    -1,    74,    42,    -1,    77,    78,    -1,    -1,
+      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    70,    -1,    32,    33,    34,    75,    -1,    77,
+      78,    79,    -1,    -1,    42,    -1,    -1,    -1,   119,    -1,
+      88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    70,    -1,    -1,    -1,   114,    75,   116,    77,
+      78,    79,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,
+      88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
+      -1,    -1,    -1,    -1,   122,   123,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
-      34,    -1,    70,    -1,    72,    -1,    74,    -1,    42,    77,
-      78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   101,    -1,    -1,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    78,    -1,    -1,    -1,   116,    -1,
-      -1,    -1,    -1,    -1,   122,   123,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -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,    28,    29,    70,    -1,    32,    33,
+      34,    75,    -1,    77,    78,    -1,    -1,    -1,    42,    43,
+      -1,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,
+      -1,    -1,   116,    77,    78,    -1,    -1,    -1,   122,   123,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
+      -1,    -1,   116,    42,    43,    -1,   120,    -1,   122,   123,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    70,    -1,    32,    33,    34,    -1,    -1,    77,    78,
+      -1,    -1,    -1,    42,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    -1,
+      -1,    70,    -1,    -1,    -1,    -1,    42,   116,    77,    78,
+      -1,   120,    -1,   122,   123,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    78,    -1,    -1,    -1,    -1,   116,    -1,    -1,
+      -1,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
+     116,    32,    33,    34,    -1,    -1,   122,   123,    -1,    -1,
+      -1,    42,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,   116,    -1,    32,    33,    34,    -1,   122,   123,
-      -1,    -1,    -1,    -1,    42,    -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,    70,    -1,    72,    -1,    74,    -1,    -1,    77,
-      78,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    70,
+      -1,    -1,    -1,    -1,    42,    -1,    77,    78,    -1,    -1,
+      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    70,    -1,    32,    33,    34,    -1,    -1,    77,
+      78,    -1,    -1,    -1,    42,   116,    -1,    -1,    -1,    -1,
+      -1,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,   116,    77,
+      78,    -1,    -1,    -1,   122,   123,    -1,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
       33,    34,    -1,    -1,    -1,    -1,    -1,    -1,   116,    42,
-      -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,
-      -1,    74,    -1,    -1,    77,    78,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
-      -1,    -1,    -1,   116,    42,    -1,    -1,    -1,    -1,   122,
+      -1,    -1,    -1,    -1,   122,   123,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    70,    -1,    32,
+      33,    34,    -1,    -1,    77,    78,    -1,    -1,    -1,    42,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    32,    33,    34,    -1,    -1,    70,    -1,    -1,
+      -1,    -1,    42,   116,    77,    78,    -1,    -1,    -1,   122,
      123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,    77,
-      78,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
-      -1,    40,    41,    42,    43,    -1,    -1,    -1,   116,    -1,
-      -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      69,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,
-      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
-      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
-     119,    -1,    -1,   122,   123,   124,   125,   126,   127,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
-      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    40,
-      41,    42,    43,    -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,    69,    70,
-      -1,    -1,    -1,    -1,    75,    -1,    77,    78,    79,    -1,
-      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
-      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   114,   115,   116,    -1,    -1,    -1,    -1,
-      -1,   122,   123,   124,   125,   126,   127,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
-      33,    34,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,
-      43,    -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,    69,    70,    -1,    -1,
-      -1,    -1,    75,    -1,    77,    78,    79,    -1,    -1,    82,
-      83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
-     123,   124,   125,   126,   127,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
-      -1,    -1,    -1,    -1,    -1,    40,    41,    42,    43,    -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,    69,    70,    -1,    -1,    -1,    -1,
-      75,    -1,    77,    78,    79,    -1,    -1,    82,    83,    84,
-      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
-      -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
-     125,   126,   127,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
-      -1,    -1,    -1,    40,    41,    42,    43,    -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,    69,    70,    -1,    -1,    -1,    -1,    75,    -1,
-      77,    78,    79,    -1,    -1,    82,    83,    84,    85,    86,
-      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,
-      -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,
-     127,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,
+      -1,    -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
+     123,    -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,   116,    -1,    -1,    -1,
+      -1,    -1,   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,    28,    29,
+      -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    42,    -1,    40,    41,    -1,    43,    44,    -1,
+      46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
+      56,    -1,    -1,    59,    60,    -1,    -1,    -1,    64,    65,
+      70,    67,    72,    69,    74,    -1,    -1,    77,    78,    75,
+      -1,    77,    78,    79,    -1,    -1,    82,    83,    84,    85,
+      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   115,    -1,    -1,   114,    -1,
+     116,    -1,    -1,   119,    -1,    -1,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    40,    41,   132,    43,    44,    -1,
+      46,   137,    -1,    49,    50,    51,    52,    53,    54,    55,
+      56,    -1,    -1,    -1,    60,    -1,    -1,    -1,    64,    65,
+      -1,    67,    -1,    69,    -1,    -1,    -1,    -1,    -1,    75,
+      -1,    77,    78,    79,    -1,    -1,    82,    83,    84,    85,
+      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
+     116,    -1,    -1,   119,    -1,    -1,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,
+      -1,   137,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
       32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      42,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      42,    -1,    40,    41,    -1,    43,    44,    -1,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
+      -1,    59,    60,    -1,    -1,    -1,    64,    65,    70,    67,
+      72,    69,    74,    -1,    -1,    77,    78,    75,    -1,    77,
+      78,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
+      88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,   101,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
+      -1,   119,    -1,    -1,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    40,    41,   132,    43,    44,    -1,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
+      -1,    -1,    60,    -1,    -1,    -1,    64,    65,    -1,    67,
+      -1,    69,    -1,    -1,    -1,    -1,    -1,    75,    -1,    77,
+      78,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
+      88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
+      -1,   119,    -1,    -1,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    40,    41,   132,    43,    44,    -1,    46,    -1,
+      -1,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
+      -1,    -1,    60,    -1,    -1,    -1,    64,    65,    -1,    67,
+      -1,    69,    -1,    -1,    -1,    -1,    -1,    75,    -1,    77,
+      78,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
+      88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
+      -1,   119,    -1,    -1,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,   132,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    70,    -1,    32,    33,    34,
+      75,    -1,    77,    78,    -1,    -1,    -1,    42,    -1,    -1,
+      -1,    -1,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    70,    -1,    72,    -1,    74,
+      -1,    -1,    77,    78,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    -1,    -1,    32,    33,    34,    -1,    -1,    70,    -1,
-      72,    -1,    74,    42,    43,    77,    78,    -1,    -1,    -1,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    70,    -1,    32,    33,    34,    -1,    -1,    77,    78,
-      -1,    -1,    -1,    42,    -1,    -1,    -1,   119,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    70,    -1,    -1,    -1,    -1,    -1,   116,    77,    78,
-      -1,   120,    -1,   122,   123,    -1,    10,    11,    12,    13,
+      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    42,    -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,    70,    -1,    72,    -1,    74,    -1,    -1,    77,    78,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
-      34,    -1,    -1,    -1,    -1,    -1,    -1,   116,    42,    -1,
-      -1,    -1,    -1,   122,   123,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    70,    -1,    32,    33,
-      34,    -1,    -1,    77,    78,    -1,    -1,    -1,    42,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
-      -1,    32,    33,    34,    -1,    -1,    70,    -1,    -1,    -1,
-      -1,    42,   116,    77,    78,    -1,    -1,    -1,   122,   123,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,    -1,
-      -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
-      -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,   116,    -1,    -1,    -1,    -1,
-      -1,   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,    28,    29,    -1,
-      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    42,    -1,    40,    41,    -1,    43,    44,    -1,    46,
-      -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
-      -1,    -1,    59,    60,    -1,    -1,    -1,    64,    65,    70,
-      67,    72,    69,    74,    -1,    -1,    77,    78,    75,    -1,
-      77,    78,    79,    -1,    -1,    82,    83,    84,    85,    86,
-      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   115,    -1,    -1,   114,    -1,   116,
-      -1,    -1,   119,    -1,    -1,   122,   123,   124,   125,   126,
-     127,    -1,    -1,    40,    41,   132,    43,    44,    -1,    46,
-     137,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
-      -1,    -1,    -1,    60,    -1,    -1,    -1,    64,    65,    -1,
-      67,    -1,    69,    -1,    -1,    -1,    -1,    -1,    75,    -1,
-      77,    78,    79,    -1,    -1,    82,    83,    84,    85,    86,
-      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,
-      -1,    -1,   119,    -1,    -1,   122,   123,   124,   125,   126,
-     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
-     137,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
-      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
-      -1,    40,    41,    -1,    43,    44,    -1,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    -1,    -1,
-      59,    60,    -1,    -1,    -1,    64,    65,    70,    67,    72,
-      69,    74,    -1,    -1,    77,    78,    75,    -1,    77,    78,
-      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
-      89,    -1,    91,    92,    -1,    -1,    -1,    -1,   101,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
-     119,    -1,    -1,   122,   123,   124,   125,   126,   127,    -1,
-      -1,    40,    41,   132,    43,    44,    -1,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    -1,    -1,
-      -1,    60,    -1,    -1,    -1,    64,    65,    -1,    67,    -1,
-      69,    -1,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,
-      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
-      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
-     119,    -1,    -1,   122,   123,   124,   125,   126,   127,    -1,
-      -1,    40,    41,   132,    43,    44,    -1,    46,    -1,    -1,
-      49,    50,    51,    52,    53,    54,    55,    56,    -1,    -1,
-      -1,    60,    -1,    -1,    -1,    64,    65,    -1,    67,    -1,
-      69,    -1,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,
-      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
-      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
-      40,    41,    -1,    43,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
-     119,    -1,    -1,   122,   123,   124,   125,   126,   127,    69,
-      -1,    -1,    -1,   132,    -1,    75,    -1,    -1,    -1,    79,
-      -1,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
-      -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    40,
-      41,    -1,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,
-      -1,   121,   122,   123,   124,   125,   126,   127,    69,    -1,
-      -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,    -1,
-      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
-      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,
-      -1,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,
-      -1,   122,   123,   124,   125,   126,   127,    69,    -1,    -1,
-      -1,    -1,    -1,    75,    -1,    -1,    -1,    79,    -1,    -1,
-      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
-      92,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,    -1,
-      43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,
-     122,   123,   124,   125,   126,   127,    69,    -1,    -1,    -1,
-      -1,    -1,    75,    -1,    -1,    -1,    79,    -1,    -1,    82,
-      83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
-      -1,    -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    43,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
-     123,   124,   125,   126,   127,    69,    -1,    -1,    -1,    -1,
-      -1,    75,    -1,    -1,    -1,    79,    -1,    -1,    82,    83,
-      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
-      -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    43,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
-     124,   125,   126,   127,    69,    -1,    -1,    -1,    -1,    -1,
-      75,    -1,    -1,    -1,    79,    -1,    -1,    82,    83,    84,
-      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
-      -1,    -1,    -1,    -1,    40,    41,    -1,    43,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
-      -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
-     125,   126,   127,    69,    -1,    -1,    -1,    -1,    -1,    75,
-      -1,    -1,    -1,    79,    -1,    -1,    82,    83,    84,    85,
-      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
-      -1,    -1,    -1,    40,    41,    -1,    43,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
-     116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
-     126,   127,    69,    -1,    -1,    -1,    -1,    -1,    75,    -1,
-      -1,    -1,    79,    -1,    -1,    82,    83,    84,    85,    86,
-      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,
-      -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,
-     127,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -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,    70,    -1,    72,    -1,
+      74,    -1,    -1,    77,    78,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    42,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    70,    -1,    32,    33,    34,    75,    -1,    77,    78,
-      -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    88,
-      89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    42,    -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,    70,    -1,    72,    -1,    74,    -1,    -1,    77,    78,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
-      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
-      -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,    70,    -1,    72,
-      -1,    74,    -1,    -1,    77,    78,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    42,    -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,    70,    -1,    72,    -1,    74,    -1,    -1,    77,
-      78,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    -1,    -1,    32,    33,    34,    35,    36,    37,    38,
-      -1,    -1,    -1,    42,    -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,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    32,    33,    34,    35,    36,    37,    38,    -1,
+      -1,    -1,    42,    -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,
+      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78
 };
 
@@ -4057,154 +4246,157 @@
       77,    78,    79,    88,    89,   114,   116,   122,   123,   142,
      145,   157,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   232,   233,   234,   235,   236,   237,   239,
-     240,   241,   242,   243,   244,   245,   247,   248,   249,   250,
-     251,   252,   254,   262,   289,   290,   291,   299,   302,   308,
-     309,   311,   313,   314,   320,   325,   329,   330,   331,   332,
-     333,   334,   335,   336,   356,   373,   374,   375,   376,    75,
-     144,   145,   157,   223,   225,   233,   235,   244,   248,   250,
-     290,    84,   114,   318,   319,   320,    75,    77,    78,    79,
-     143,   144,   279,   280,   300,   301,    77,    78,   280,   114,
-     311,   114,   114,   157,   325,   330,   331,   332,   334,   335,
-     336,   117,   139,   226,   233,   235,   329,   333,   372,   373,
-     376,   377,   140,   112,   136,   283,   119,   140,   181,    77,
-      78,   142,   278,   140,   140,   140,    77,    78,   114,   157,
-     231,   315,   324,   325,   326,   327,   328,   329,   333,   337,
-     338,   339,   340,   341,   347,     3,    30,    81,   246,     3,
-       5,    77,   116,   157,   225,   236,   240,   242,   251,   291,
-     329,   333,   376,   223,   225,   235,   244,   248,   250,   290,
-     329,   333,    35,   241,   241,   236,   242,   140,   241,   236,
-     241,   236,   318,   241,   236,   121,   140,   140,     0,   139,
-     114,   181,   318,   318,   139,   116,   233,   235,   374,   278,
-     278,   136,   235,   114,   157,   315,   325,   329,   116,   157,
-     376,   312,   238,   119,   280,   320,   114,   296,   114,   114,
-      84,   146,   147,    40,    41,    43,    69,    75,    79,    82,
-      83,    85,    86,    87,    91,    92,   114,   116,   124,   125,
-     126,   127,   141,   145,   146,   148,   149,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   172,   175,   233,   281,   282,   298,   372,   377,
-     235,   115,   115,   115,   115,   115,   115,   115,   116,   233,
-     356,   374,   116,   122,   157,   172,   225,   226,   232,   235,
-     239,   240,   244,   247,   248,   250,   268,   269,   273,   274,
-     275,   276,   290,   356,   368,   369,   370,   371,   376,   377,
-     114,   329,   333,   376,   114,   121,   137,   116,   119,   157,
-     172,   284,   284,   120,   139,   121,   137,   114,   121,   137,
-     121,   137,   121,   137,   325,   326,   327,   328,   338,   339,
-     340,   341,   235,   324,   337,   121,   140,    67,   317,   116,
-     318,   355,   356,   318,   318,   181,   139,   114,   318,   355,
-     318,   318,   235,   315,   114,   114,   234,   235,   233,   235,
-     139,   233,   372,   377,   181,   139,   278,   283,   225,   240,
-     329,   333,   181,   139,   300,   235,   244,   137,   235,   235,
-      78,   114,   119,   280,   291,   235,   300,   137,   137,   311,
-     139,   144,   277,     3,   140,   215,   216,   230,   232,   235,
-     139,   317,   114,   317,   172,   325,   235,   114,   139,   278,
-     119,    35,    36,    37,    38,   233,   292,   293,   295,   264,
-     280,   263,   139,   133,   136,   297,   139,    10,    75,    77,
-      78,   321,   322,   323,   115,    84,   114,   156,   114,   156,
-     159,   114,   156,   114,   114,   156,   156,   116,   172,   177,
-     181,   281,   376,   139,    86,    90,    91,    92,   114,   116,
-     118,   119,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   136,   174,   159,   159,   122,   128,   129,
-     124,   125,    93,    94,    95,    96,   130,   131,    97,    98,
-     123,   132,   133,    99,   100,   134,   114,   157,   351,   352,
-     353,   354,   355,   115,   121,   114,   355,   356,   114,   355,
-     356,   139,   233,   374,   117,   139,   140,   233,   235,   367,
-     368,   376,   377,   140,   114,   116,   136,   157,   325,   342,
-     343,   344,   345,   346,   347,   348,   349,   350,   356,   357,
-     358,   359,   360,   361,   362,   379,   157,   376,   235,   140,
-     140,   157,   233,   235,   369,   278,   233,   356,   369,   278,
-     139,   139,   139,   139,    75,   116,   118,   145,   280,   284,
-     285,   286,   287,   288,   139,   139,   139,   139,   139,   139,
-     115,   115,   115,   115,   115,   115,   115,   324,   337,   318,
-     137,   114,   283,   117,   215,   139,   315,   177,   282,   177,
-     282,   315,   116,   215,   317,   181,   139,   215,   298,   255,
-     253,   235,   270,   271,   272,   275,   276,   115,   121,   181,
-     139,   122,   172,   139,   232,   235,   269,   368,   376,   309,
-     310,   114,   157,   342,   115,   121,   379,   280,   121,   378,
-     136,   265,   119,   292,   114,   119,   280,   282,   292,   115,
-     121,   114,   137,   281,   116,   281,   281,   151,   172,   282,
-     281,   139,   115,   121,   115,   115,   121,   172,   116,   144,
-     150,   151,   139,   116,   144,   150,   172,   159,   159,   159,
-     160,   160,   161,   161,   162,   162,   162,   162,   163,   163,
-     164,   165,   166,   167,   168,   135,   177,   139,   352,   353,
-     354,   235,   351,   318,   318,   172,   282,   139,   139,   233,
-     356,   369,   235,   239,   117,   376,   117,   114,   139,   325,
-     343,   344,   345,   348,   358,   359,   360,   117,   139,   172,
-     235,   342,   346,   357,   114,   318,   361,   379,   318,   318,
-     379,   114,   318,   361,   318,   318,   379,   318,   318,   356,
-     233,   367,   377,   278,   117,   121,   117,   121,   379,   233,
-     369,   379,   266,   267,   268,   269,   266,   278,   172,   139,
-     116,   280,   135,   121,   378,   284,   116,   135,   288,    31,
-     217,   218,   278,   266,   144,   315,   144,   114,   318,   355,
-     356,   114,   318,   355,   356,   315,   146,   356,   181,   270,
-     115,   115,   115,   115,   139,   181,   215,   181,   115,    43,
-     120,   233,   256,   257,   372,   119,   140,   140,   144,   230,
-     140,   140,   266,   114,   157,   376,   140,   120,   235,   293,
-     294,   280,   120,   170,   171,   264,   140,   139,   139,   114,
-     140,   115,   322,   150,   115,   139,   121,   115,   115,   115,
-     115,   172,   119,   159,   172,   173,   176,   121,   139,   115,
-     121,   172,   139,   120,   170,   135,   270,   115,   115,   115,
-     351,   270,   270,   233,   369,   116,   122,   157,   172,   172,
-     235,   348,   270,   115,   115,   115,   115,   115,   115,   115,
-       7,   235,   342,   346,   357,   139,   139,   379,   139,   139,
-     140,   140,   140,   140,   283,   170,   171,   172,   316,   139,
-     284,   286,   120,   139,   219,   280,    43,    44,    46,    49,
-      50,    51,    52,    53,    54,    55,    56,    60,    64,    65,
-      67,    75,    77,    78,    79,   132,   145,   177,   178,   179,
-     180,   181,   182,   183,   185,   186,   198,   200,   201,   206,
-     220,   278,   314,    31,   140,   136,   139,   139,   317,   115,
-     140,   181,   119,   233,   257,   114,   135,   157,   258,   259,
-     261,   324,   325,   337,   355,   363,   364,   365,   366,   121,
-     137,   280,   255,   115,   121,   117,   117,   140,   235,   121,
-     379,   296,   265,   378,   115,   292,   223,   225,   233,   304,
-     305,   306,   307,   298,   115,   115,   144,   285,   121,   140,
-     176,    82,    85,    87,   144,   152,   153,   154,   151,   140,
-     152,   170,   140,   114,   318,   355,   356,   140,   140,   139,
-     140,   140,   140,   172,   115,   140,   114,   318,   355,   356,
-     114,   318,   361,   114,   318,   361,   356,   234,     7,   122,
-     140,   172,   270,   270,   269,   273,   273,   274,   115,   121,
-     121,   115,   101,   127,   140,   140,   152,   284,   172,   121,
-     137,   220,   314,   114,   114,   179,   114,   114,   137,   278,
-     137,   278,   122,   278,   178,   114,   181,   173,   173,    11,
-     207,   149,   137,   140,   139,   140,   135,   219,   115,   172,
-     270,   270,   283,   318,   115,   255,   258,   137,   325,   364,
-     365,   366,   171,   235,   363,   121,   137,   260,   261,   260,
-     318,   318,   280,   120,   139,   115,   139,   120,   140,   315,
-     120,   139,   140,   140,   115,   119,   115,   378,   173,   117,
-     140,   155,   116,   153,   155,   155,   121,   140,    90,   118,
-     117,   140,   115,   139,   115,   115,   117,   117,   117,   140,
-     115,   139,   139,   139,   172,   172,   140,   117,   140,   140,
-     140,   140,   139,   139,   171,   171,   117,   117,   140,   280,
-     177,   177,    50,   177,   139,   137,   137,   177,   137,   137,
-     177,    61,    62,    63,   202,   203,   204,   137,    66,   137,
-      54,   114,   119,   183,   120,   318,   137,   140,   140,   120,
-     137,   115,   115,   115,   363,   318,   101,   275,   276,   115,
-     305,   121,   137,   121,   137,   120,   303,   120,   117,    86,
-     139,   153,   117,   116,   153,   116,   153,   117,   270,   117,
-     270,   270,   270,   140,   140,   117,   117,   115,   115,   117,
-     121,   101,   269,   101,   140,   117,   115,   115,   114,   115,
-     178,   199,   220,   224,   235,   239,   137,   115,   114,   114,
-     181,   204,    61,    62,   172,   114,   146,   150,   179,   115,
-     115,   114,   318,   355,   356,   259,   119,   139,   139,   304,
-     152,   139,   139,   140,   140,   140,   140,   117,   117,   139,
-     140,   117,   179,    47,    48,   119,   189,   190,   191,   177,
-     179,   140,   115,   178,   235,   119,   191,   101,   139,   101,
-     139,   114,   114,   137,   146,   115,   135,   120,   139,   139,
-     278,   315,   120,   140,   152,   152,   115,   115,   115,   115,
-     273,    45,   171,   187,   188,   316,   135,   139,   179,   189,
-     115,   137,   179,   137,   139,   115,   139,   115,   139,   101,
-     139,   101,   139,   135,   137,   116,   146,   208,   209,   210,
-     137,   270,   304,   117,   140,   140,   179,   101,   121,   135,
-     140,   213,   214,   220,   137,   178,   178,   213,   181,   205,
-     233,   372,   181,   205,   115,   139,   115,   139,   135,   171,
-     114,   115,   135,   121,   140,   120,   117,   117,   171,   187,
-     190,   192,   193,   139,   137,   190,   194,   195,   140,   114,
-     157,   315,   363,   144,   140,   181,   205,   181,   205,   208,
-     117,   171,   137,   208,   210,   115,   114,   179,   184,   120,
-     190,   220,   178,    59,   184,   197,   120,   190,   115,   235,
-     115,   140,   140,   135,   146,   115,   115,   135,   298,   179,
-     184,   137,   196,   197,   184,   197,   181,   181,   115,   115,
-     146,   211,   114,   137,   211,   115,   196,   140,   140,   181,
-     181,   121,   135,   171,   115,   140,   140,   146,   144,   212,
-     115,   137,   115,   121,   137,   144
+     228,   229,   230,   232,   234,   236,   237,   238,   239,   241,
+     242,   243,   244,   245,   246,   247,   249,   250,   253,   254,
+     255,   257,   259,   260,   268,   270,   296,   297,   298,   306,
+     309,   315,   316,   318,   320,   321,   327,   332,   336,   337,
+     338,   339,   340,   341,   342,   343,   363,   380,   381,   382,
+     383,    75,   144,   145,   157,   223,   225,   234,   237,   246,
+     250,   254,   297,    84,   114,   325,   326,   327,    75,    77,
+      78,    79,   143,   144,   286,   287,   307,   308,    77,    78,
+     287,   114,   318,   114,   114,   157,   332,   337,   338,   339,
+     341,   342,   343,   117,   139,   226,   234,   237,   336,   340,
+     379,   380,   383,   384,   140,   112,   136,   290,   119,   140,
+     181,    77,    78,   142,   285,   140,   140,   140,    77,    78,
+     114,   157,   231,   322,   331,   332,   333,   334,   335,   336,
+     340,   344,   345,   346,   347,   348,   354,     3,    30,    81,
+     248,     3,     5,    77,   116,   157,   225,   238,   242,   244,
+     255,   298,   336,   340,   383,   223,   225,   237,   246,   250,
+     254,   297,   336,   340,    35,   243,   243,   238,   244,   140,
+     243,   238,   243,   238,   325,   243,   238,   121,   140,   140,
+       0,   139,   114,   181,   325,   325,   139,   116,   234,   237,
+     381,   285,   285,   136,   237,   114,   157,   322,   332,   336,
+     116,   157,   383,   319,   240,   119,   287,   327,   114,   303,
+     114,   114,    84,   146,   147,    40,    41,    43,    69,    75,
+      79,    82,    83,    85,    86,    87,    91,    92,   114,   116,
+     124,   125,   126,   127,   141,   145,   146,   148,   149,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   172,   175,   234,   288,   289,   305,
+     379,   384,   237,   115,   115,   115,   115,   115,   115,   115,
+     116,   234,   363,   381,    32,   116,   122,   157,   172,   225,
+     226,   233,   237,   241,   242,   245,   246,   251,   252,   253,
+     254,   256,   259,   260,   270,   275,   276,   280,   281,   282,
+     283,   296,   297,   363,   375,   376,   377,   378,   383,   384,
+     114,   336,   340,   383,   114,   121,   137,   116,   119,   157,
+     172,   291,   291,   120,   139,   121,   137,   114,   121,   137,
+     121,   137,   121,   137,   332,   333,   334,   335,   345,   346,
+     347,   348,   237,   331,   344,   121,   140,    67,   324,   116,
+     325,   362,   363,   325,   325,   181,   139,   114,   325,   362,
+     325,   325,   237,   322,   114,   114,   236,   237,   234,   237,
+     139,   234,   379,   384,   181,   139,   285,   290,   225,   242,
+     336,   340,   181,   139,   307,   237,   246,   137,   237,   237,
+      78,   114,   119,   287,   298,   237,   307,   137,   137,   318,
+     139,   144,   284,     3,   140,   215,   216,   230,   232,   237,
+     241,   139,   324,   114,   324,   172,   332,   237,   114,   139,
+     285,   119,    35,    36,    37,    38,   234,   299,   300,   302,
+     271,   287,   269,   139,   133,   136,   304,   139,    10,    75,
+      77,    78,   328,   329,   330,   115,    84,   114,   156,   114,
+     156,   159,   114,   156,   114,   114,   156,   156,   116,   172,
+     177,   181,   288,   383,   139,    86,    90,    91,    92,   114,
+     116,   118,   119,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   136,   174,   159,   159,   122,   128,
+     129,   124,   125,    93,    94,    95,    96,   130,   131,    97,
+      98,   123,   132,   133,    99,   100,   134,   114,   157,   358,
+     359,   360,   361,   362,   115,   121,   114,   362,   363,   114,
+     362,   363,   139,   234,   381,   325,   117,   139,   140,   235,
+     237,   246,   252,   254,   297,   374,   375,   383,   384,   140,
+     114,   116,   136,   157,   332,   349,   350,   351,   352,   353,
+     354,   355,   356,   357,   363,   364,   365,   366,   367,   368,
+     369,   386,   157,   256,   383,   237,   252,   243,   238,   325,
+     140,   140,   157,   235,   237,   376,   285,   235,   363,   376,
+     285,   139,   139,   139,   139,    75,   116,   118,   145,   287,
+     291,   292,   293,   294,   295,   139,   139,   139,   139,   139,
+     139,   115,   115,   115,   115,   115,   115,   115,   331,   344,
+     325,   137,   114,   290,   117,   215,   139,   322,   177,   289,
+     177,   289,   322,   116,   215,   324,   181,   139,   215,   305,
+     261,   258,   237,   277,   278,   279,   282,   283,   115,   121,
+     181,   139,   237,   122,   172,   139,   233,   237,   276,   375,
+     383,   316,   317,   114,   157,   349,   115,   121,   386,   287,
+     121,   385,   136,   272,   119,   299,   114,   119,   287,   289,
+     299,   115,   121,   114,   137,   288,   116,   288,   288,   151,
+     172,   289,   288,   139,   115,   121,   115,   115,   121,   172,
+     116,   144,   150,   151,   139,   116,   144,   150,   172,   159,
+     159,   159,   160,   160,   161,   161,   162,   162,   162,   162,
+     163,   163,   164,   165,   166,   167,   168,   135,   177,   139,
+     359,   360,   361,   237,   358,   325,   325,   172,   289,   139,
+     139,   287,   235,   363,   376,   237,   241,   117,   383,   117,
+     114,   139,   332,   350,   351,   352,   355,   365,   366,   367,
+     117,   139,   172,   237,   349,   353,   364,   114,   325,   368,
+     386,   325,   325,   386,   114,   325,   368,   325,   325,   386,
+     325,   325,   363,   235,   374,   384,   285,   237,   287,   117,
+     121,   117,   121,   386,   235,   376,   386,   273,   274,   275,
+     276,   273,   285,   172,   139,   116,   287,   135,   121,   385,
+     291,   116,   135,   295,    31,   217,   218,   285,   273,   144,
+     322,   144,   114,   325,   362,   363,   114,   325,   362,   363,
+     322,   146,   363,   181,   277,   115,   115,   115,   115,   139,
+     181,   215,   181,   115,    43,   120,   234,   262,   263,   379,
+     119,   140,   140,   144,   230,   140,   140,   273,   114,   157,
+     383,   140,   120,   237,   300,   301,   287,   120,   170,   171,
+     271,   140,   139,   139,   114,   140,   115,   329,   150,   115,
+     139,   121,   115,   115,   115,   115,   172,   119,   159,   172,
+     173,   176,   121,   139,   115,   121,   172,   139,   120,   170,
+     135,   277,   115,   115,   115,   358,   277,   277,   235,   376,
+     116,   122,   157,   172,   172,   237,   355,   277,   115,   115,
+     115,   115,   115,   115,   115,     7,   237,   349,   353,   364,
+     139,   139,   386,   139,   139,   140,   140,   140,   140,   290,
+     170,   171,   172,   323,   139,   291,   293,   120,   139,   219,
+     287,    43,    44,    46,    49,    50,    51,    52,    53,    54,
+      55,    56,    60,    64,    65,    67,    75,    77,    78,    79,
+     132,   145,   177,   178,   179,   180,   181,   182,   183,   185,
+     186,   198,   200,   201,   206,   220,   285,   321,    31,   140,
+     136,   139,   139,   324,   115,   140,   181,   119,   234,   263,
+     114,   135,   157,   264,   265,   267,   331,   332,   344,   362,
+     370,   371,   372,   373,   121,   137,   287,   261,   115,   121,
+     117,   117,   140,   237,   121,   386,   303,   272,   385,   115,
+     299,   223,   225,   234,   311,   312,   313,   314,   305,   115,
+     115,   144,   292,   121,   140,   176,    82,    85,    87,   144,
+     152,   153,   154,   151,   140,   152,   170,   140,   114,   325,
+     362,   363,   140,   140,   139,   140,   140,   140,   172,   115,
+     140,   114,   325,   362,   363,   114,   325,   368,   114,   325,
+     368,   363,   236,     7,   122,   140,   172,   277,   277,   276,
+     280,   280,   281,   115,   121,   121,   115,   101,   127,   140,
+     140,   152,   291,   172,   121,   137,   220,   321,   114,   114,
+     179,   114,   114,   137,   285,   137,   285,   122,   285,   178,
+     114,   181,   173,   173,    11,   207,   149,   137,   140,   139,
+     140,   135,   219,   115,   172,   277,   277,   290,   325,   115,
+     261,   264,   137,   332,   371,   372,   373,   171,   237,   370,
+     121,   137,   266,   267,   266,   325,   325,   287,   120,   139,
+     115,   139,   120,   140,   322,   120,   139,   140,   140,   115,
+     119,   115,   385,   173,   117,   140,   155,   116,   153,   155,
+     155,   121,   140,    90,   118,   117,   140,   115,   139,   115,
+     115,   117,   117,   117,   140,   115,   139,   139,   139,   172,
+     172,   140,   117,   140,   140,   140,   140,   139,   139,   171,
+     171,   117,   117,   140,   287,   177,   177,    50,   177,   139,
+     137,   137,   177,   137,   137,   177,    61,    62,    63,   202,
+     203,   204,   137,    66,   137,    54,   114,   119,   183,   120,
+     325,   137,   140,   140,   120,   137,   115,   115,   115,   370,
+     325,   101,   282,   283,   115,   312,   121,   137,   121,   137,
+     120,   310,   120,   117,    86,   139,   153,   117,   116,   153,
+     116,   153,   117,   277,   117,   277,   277,   277,   140,   140,
+     117,   117,   115,   115,   117,   121,   101,   276,   101,   140,
+     117,   115,   115,   114,   115,   178,   199,   220,   224,   237,
+     241,   137,   115,   114,   114,   181,   204,    61,    62,   172,
+     114,   146,   150,   179,   115,   115,   114,   325,   362,   363,
+     265,   119,   139,   139,   311,   152,   139,   139,   140,   140,
+     140,   140,   117,   117,   139,   140,   117,   179,    47,    48,
+     119,   189,   190,   191,   177,   179,   140,   115,   178,   237,
+     119,   191,   101,   139,   101,   139,   114,   114,   137,   146,
+     115,   135,   120,   139,   139,   285,   322,   120,   140,   152,
+     152,   115,   115,   115,   115,   280,    45,   171,   187,   188,
+     323,   135,   139,   179,   189,   115,   137,   179,   137,   139,
+     115,   139,   115,   139,   101,   139,   101,   139,   135,   137,
+     116,   146,   208,   209,   210,   137,   277,   311,   117,   140,
+     140,   179,   101,   121,   135,   140,   213,   214,   220,   137,
+     178,   178,   213,   181,   205,   235,   237,   379,   181,   205,
+     115,   139,   115,   139,   135,   171,   114,   115,   135,   121,
+     140,   120,   117,   117,   171,   187,   190,   192,   193,   139,
+     137,   190,   194,   195,   140,   114,   157,   322,   370,   144,
+     140,   181,   205,   181,   205,   208,   117,   171,   137,   208,
+     210,   115,   114,   179,   184,   120,   190,   220,   178,    59,
+     184,   197,   120,   190,   115,   237,   115,   140,   140,   135,
+     146,   115,   115,   135,   305,   179,   184,   137,   196,   197,
+     184,   197,   181,   181,   115,   115,   146,   211,   114,   137,
+     211,   115,   196,   140,   140,   181,   181,   121,   135,   171,
+     115,   140,   140,   146,   144,   212,   115,   137,   115,   121,
+     137,   144
 };
 
@@ -6244,5 +6436,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 982 "parser.yy"
+#line 978 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6254,5 +6446,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 987 "parser.yy"
+#line 983 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6261,5 +6453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 989 "parser.yy"
+#line 985 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6271,33 +6463,33 @@
 
 /* Line 1806 of yacc.c  */
+#line 994 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
+    break;
+
+  case 222:
+
+/* Line 1806 of yacc.c  */
+#line 996 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
+    break;
+
+  case 223:
+
+/* Line 1806 of yacc.c  */
 #line 998 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
-    break;
-
-  case 222:
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
+    break;
+
+  case 224:
 
 /* Line 1806 of yacc.c  */
 #line 1000 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
-    break;
-
-  case 223:
+    { (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 225:
 
 /* Line 1806 of yacc.c  */
 #line 1002 "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 224:
-
-/* Line 1806 of yacc.c  */
-#line 1004 "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 225:
-
-/* Line 1806 of yacc.c  */
-#line 1006 "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;
@@ -6306,5 +6498,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1011 "parser.yy"
+#line 1007 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6313,5 +6505,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1013 "parser.yy"
+#line 1009 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6320,5 +6512,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1018 "parser.yy"
+#line 1014 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -6327,5 +6519,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1025 "parser.yy"
+#line 1021 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6334,5 +6526,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1030 "parser.yy"
+#line 1026 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -6341,5 +6533,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1032 "parser.yy"
+#line 1028 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
     break;
@@ -6348,5 +6540,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1037 "parser.yy"
+#line 1033 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -6355,5 +6547,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1039 "parser.yy"
+#line 1035 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -6362,5 +6554,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1042 "parser.yy"
+#line 1038 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
@@ -6369,5 +6561,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1047 "parser.yy"
+#line 1043 "parser.yy"
     {
 			(yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) );
@@ -6379,5 +6571,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1052 "parser.yy"
+#line 1048 "parser.yy"
     {
 			(yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) );
@@ -6389,5 +6581,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1062 "parser.yy"
+#line 1058 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
@@ -6396,5 +6588,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1069 "parser.yy"
+#line 1065 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6403,5 +6595,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1074 "parser.yy"
+#line 1070 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
@@ -6410,5 +6602,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1081 "parser.yy"
+#line 1077 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6417,5 +6609,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1095 "parser.yy"
+#line 1091 "parser.yy"
     {}
     break;
@@ -6424,5 +6616,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1096 "parser.yy"
+#line 1092 "parser.yy"
     {}
     break;
@@ -6431,5 +6623,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1125 "parser.yy"
+#line 1121 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6441,5 +6633,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1132 "parser.yy"
+#line 1128 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6451,5 +6643,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1137 "parser.yy"
+#line 1133 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6461,5 +6653,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1147 "parser.yy"
+#line 1143 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6471,5 +6663,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1152 "parser.yy"
+#line 1148 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6481,5 +6673,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1157 "parser.yy"
+#line 1153 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6491,5 +6683,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1165 "parser.yy"
+#line 1161 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6501,5 +6693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1170 "parser.yy"
+#line 1166 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6511,5 +6703,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1175 "parser.yy"
+#line 1171 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6521,5 +6713,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1180 "parser.yy"
+#line 1176 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6531,5 +6723,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1185 "parser.yy"
+#line 1181 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6541,5 +6733,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1216 "parser.yy"
+#line 1212 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6550,5 +6742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1220 "parser.yy"
+#line 1216 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6559,12 +6751,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 1223 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
+    break;
+
+  case 274:
+
+/* Line 1806 of yacc.c  */
 #line 1227 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 274:
-
-/* Line 1806 of yacc.c  */
-#line 1231 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6573,5 +6765,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1236 "parser.yy"
+#line 1232 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6583,5 +6775,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1241 "parser.yy"
+#line 1237 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6593,5 +6785,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1246 "parser.yy"
+#line 1242 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6603,5 +6795,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1257 "parser.yy"
+#line 1253 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6613,5 +6805,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1262 "parser.yy"
+#line 1258 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6623,5 +6815,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1267 "parser.yy"
+#line 1263 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6633,5 +6825,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1272 "parser.yy"
+#line 1268 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6643,5 +6835,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1277 "parser.yy"
+#line 1273 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6653,5 +6845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1286 "parser.yy"
+#line 1282 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6663,5 +6855,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1291 "parser.yy"
+#line 1287 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6673,5 +6865,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1321 "parser.yy"
+#line 1317 "parser.yy"
     {
 			(yyval.decl) = distAttr( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].decl) );
@@ -6682,5 +6874,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1333 "parser.yy"
+#line 1329 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6692,5 +6884,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1338 "parser.yy"
+#line 1334 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6699,57 +6891,57 @@
     break;
 
-  case 299:
-
-/* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
+  case 307:
+
+/* Line 1806 of yacc.c  */
+#line 1380 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 302:
-
-/* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
+  case 310:
+
+/* Line 1806 of yacc.c  */
+#line 1392 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 305:
-
-/* Line 1806 of yacc.c  */
-#line 1382 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
-    break;
-
-  case 306:
-
-/* Line 1806 of yacc.c  */
-#line 1384 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
-    break;
-
-  case 307:
-
-/* Line 1806 of yacc.c  */
-#line 1386 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
-    break;
-
-  case 308:
-
-/* Line 1806 of yacc.c  */
-#line 1388 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
-    break;
-
-  case 309:
-
-/* Line 1806 of yacc.c  */
-#line 1390 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
-    break;
-
-  case 310:
-
-/* Line 1806 of yacc.c  */
-#line 1392 "parser.yy"
+  case 313:
+
+/* Line 1806 of yacc.c  */
+#line 1402 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeQualifier( DeclarationNode::Const ); }
+    break;
+
+  case 314:
+
+/* Line 1806 of yacc.c  */
+#line 1404 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeQualifier( DeclarationNode::Restrict ); }
+    break;
+
+  case 315:
+
+/* Line 1806 of yacc.c  */
+#line 1406 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeQualifier( DeclarationNode::Volatile ); }
+    break;
+
+  case 316:
+
+/* Line 1806 of yacc.c  */
+#line 1408 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeQualifier( DeclarationNode::Lvalue ); }
+    break;
+
+  case 317:
+
+/* Line 1806 of yacc.c  */
+#line 1410 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeQualifier( DeclarationNode::Atomic ); }
+    break;
+
+  case 318:
+
+/* Line 1806 of yacc.c  */
+#line 1412 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6757,8 +6949,8 @@
     break;
 
-  case 311:
-
-/* Line 1806 of yacc.c  */
-#line 1396 "parser.yy"
+  case 319:
+
+/* Line 1806 of yacc.c  */
+#line 1416 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6767,222 +6959,187 @@
     break;
 
-  case 313:
-
-/* Line 1806 of yacc.c  */
-#line 1405 "parser.yy"
+  case 321:
+
+/* Line 1806 of yacc.c  */
+#line 1425 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 314:
-
-/* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
+  case 322:
+
+/* Line 1806 of yacc.c  */
+#line 1427 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 316:
-
-/* Line 1806 of yacc.c  */
-#line 1418 "parser.yy"
+  case 324:
+
+/* Line 1806 of yacc.c  */
+#line 1438 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 317:
-
-/* Line 1806 of yacc.c  */
-#line 1423 "parser.yy"
+  case 325:
+
+/* Line 1806 of yacc.c  */
+#line 1443 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
 
-  case 318:
-
-/* Line 1806 of yacc.c  */
-#line 1425 "parser.yy"
+  case 326:
+
+/* Line 1806 of yacc.c  */
+#line 1445 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
 
-  case 319:
-
-/* Line 1806 of yacc.c  */
-#line 1427 "parser.yy"
+  case 327:
+
+/* Line 1806 of yacc.c  */
+#line 1447 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
 
-  case 320:
-
-/* Line 1806 of yacc.c  */
-#line 1429 "parser.yy"
+  case 328:
+
+/* Line 1806 of yacc.c  */
+#line 1449 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
 
-  case 321:
-
-/* Line 1806 of yacc.c  */
-#line 1432 "parser.yy"
-    { (yyval.decl) = new DeclarationNode; (yyval.decl)->isInline = true; }
-    break;
-
-  case 322:
-
-/* Line 1806 of yacc.c  */
-#line 1434 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
-    break;
-
-  case 323:
-
-/* Line 1806 of yacc.c  */
-#line 1437 "parser.yy"
-    { (yyval.decl) = new DeclarationNode; (yyval.decl)->isNoreturn = true; }
-    break;
-
-  case 324:
-
-/* Line 1806 of yacc.c  */
-#line 1439 "parser.yy"
+  case 329:
+
+/* Line 1806 of yacc.c  */
+#line 1451 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
 
-  case 325:
-
-/* Line 1806 of yacc.c  */
-#line 1444 "parser.yy"
+  case 330:
+
+/* Line 1806 of yacc.c  */
+#line 1454 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFuncSpecifier( DeclarationNode::Inline ); }
+    break;
+
+  case 331:
+
+/* Line 1806 of yacc.c  */
+#line 1456 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFuncSpecifier( DeclarationNode::Fortran ); }
+    break;
+
+  case 332:
+
+/* Line 1806 of yacc.c  */
+#line 1458 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFuncSpecifier( DeclarationNode::Noreturn ); }
+    break;
+
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1463 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
 
-  case 326:
-
-/* Line 1806 of yacc.c  */
-#line 1446 "parser.yy"
+  case 334:
+
+/* Line 1806 of yacc.c  */
+#line 1465 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
 
-  case 327:
-
-/* Line 1806 of yacc.c  */
-#line 1448 "parser.yy"
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1467 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
 
-  case 328:
-
-/* Line 1806 of yacc.c  */
-#line 1450 "parser.yy"
+  case 336:
+
+/* Line 1806 of yacc.c  */
+#line 1469 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
 
-  case 329:
-
-/* Line 1806 of yacc.c  */
-#line 1452 "parser.yy"
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1471 "parser.yy"
     { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Long ); }
     break;
 
-  case 330:
-
-/* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
+  case 338:
+
+/* Line 1806 of yacc.c  */
+#line 1473 "parser.yy"
     { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Short ); }
     break;
 
-  case 331:
-
-/* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+  case 339:
+
+/* Line 1806 of yacc.c  */
+#line 1475 "parser.yy"
     { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Signed ); }
     break;
 
-  case 332:
-
-/* Line 1806 of yacc.c  */
-#line 1458 "parser.yy"
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1477 "parser.yy"
     { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); }
     break;
 
-  case 333:
-
-/* Line 1806 of yacc.c  */
-#line 1460 "parser.yy"
+  case 341:
+
+/* Line 1806 of yacc.c  */
+#line 1479 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
 
-  case 334:
-
-/* Line 1806 of yacc.c  */
-#line 1462 "parser.yy"
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1481 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
 
-  case 335:
-
-/* Line 1806 of yacc.c  */
-#line 1464 "parser.yy"
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1483 "parser.yy"
     { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Complex ); }
     break;
 
-  case 336:
-
-/* Line 1806 of yacc.c  */
-#line 1466 "parser.yy"
+  case 344:
+
+/* Line 1806 of yacc.c  */
+#line 1485 "parser.yy"
     { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); }
     break;
 
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1468 "parser.yy"
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1487 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
 
-  case 338:
-
-/* Line 1806 of yacc.c  */
-#line 1470 "parser.yy"
+  case 346:
+
+/* Line 1806 of yacc.c  */
+#line 1489 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Zero ); }
     break;
 
-  case 339:
-
-/* Line 1806 of yacc.c  */
-#line 1472 "parser.yy"
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1491 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::One ); }
     break;
 
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1479 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 342:
-
-/* Line 1806 of yacc.c  */
-#line 1481 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1483 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 344:
-
-/* Line 1806 of yacc.c  */
-#line 1485 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 346:
-
-/* Line 1806 of yacc.c  */
-#line 1491 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 348:
+  case 349:
 
 /* Line 1806 of yacc.c  */
@@ -6991,5 +7148,5 @@
     break;
 
-  case 349:
+  case 350:
 
 /* Line 1806 of yacc.c  */
@@ -6998,110 +7155,103 @@
     break;
 
-  case 350:
+  case 351:
 
 /* Line 1806 of yacc.c  */
 #line 1502 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1504 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1510 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 356:
+
+/* Line 1806 of yacc.c  */
+#line 1517 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1519 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1521 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1507 "parser.yy"
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1526 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
 
-  case 352:
-
-/* Line 1806 of yacc.c  */
-#line 1509 "parser.yy"
+  case 360:
+
+/* Line 1806 of yacc.c  */
+#line 1528 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 353:
-
-/* Line 1806 of yacc.c  */
-#line 1511 "parser.yy"
+  case 361:
+
+/* Line 1806 of yacc.c  */
+#line 1530 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 354:
-
-/* Line 1806 of yacc.c  */
-#line 1513 "parser.yy"
+  case 362:
+
+/* Line 1806 of yacc.c  */
+#line 1532 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1519 "parser.yy"
+  case 364:
+
+/* Line 1806 of yacc.c  */
+#line 1538 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 357:
-
-/* Line 1806 of yacc.c  */
-#line 1521 "parser.yy"
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1540 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 358:
-
-/* Line 1806 of yacc.c  */
-#line 1523 "parser.yy"
+  case 366:
+
+/* Line 1806 of yacc.c  */
+#line 1542 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 360:
-
-/* Line 1806 of yacc.c  */
-#line 1529 "parser.yy"
+  case 368:
+
+/* Line 1806 of yacc.c  */
+#line 1548 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 361:
-
-/* Line 1806 of yacc.c  */
-#line 1531 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 363:
-
-/* Line 1806 of yacc.c  */
-#line 1537 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 364:
-
-/* Line 1806 of yacc.c  */
-#line 1539 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 365:
-
-/* Line 1806 of yacc.c  */
-#line 1541 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 366:
-
-/* Line 1806 of yacc.c  */
-#line 1546 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 367:
-
-/* Line 1806 of yacc.c  */
-#line 1548 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 368:
+  case 369:
 
 /* Line 1806 of yacc.c  */
@@ -7113,12 +7263,110 @@
 
 /* Line 1806 of yacc.c  */
+#line 1556 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 372:
+
+/* Line 1806 of yacc.c  */
+#line 1558 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 373:
+
+/* Line 1806 of yacc.c  */
 #line 1560 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 375:
+
+/* Line 1806 of yacc.c  */
+#line 1566 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 376:
+
+/* Line 1806 of yacc.c  */
+#line 1568 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 378:
+
+/* Line 1806 of yacc.c  */
+#line 1574 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 379:
+
+/* Line 1806 of yacc.c  */
+#line 1576 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 380:
+
+/* Line 1806 of yacc.c  */
+#line 1578 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 381:
+
+/* Line 1806 of yacc.c  */
+#line 1583 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
+    break;
+
+  case 382:
+
+/* Line 1806 of yacc.c  */
+#line 1585 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 383:
+
+/* Line 1806 of yacc.c  */
+#line 1587 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 388:
+
+/* Line 1806 of yacc.c  */
+#line 1602 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), nullptr, nullptr, (yyvsp[(4) - (5)].decl), true )->addQualifiers( (yyvsp[(2) - (5)].decl) ); }
     break;
 
-  case 372:
-
-/* Line 1806 of yacc.c  */
-#line 1562 "parser.yy"
+  case 389:
+
+/* Line 1806 of yacc.c  */
+#line 1604 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) ); }
+    break;
+
+  case 390:
+
+/* Line 1806 of yacc.c  */
+#line 1606 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), (yyvsp[(3) - (7)].tok), nullptr, (yyvsp[(6) - (7)].decl), true )->addQualifiers( (yyvsp[(2) - (7)].decl) ); }
+    break;
+
+  case 391:
+
+/* Line 1806 of yacc.c  */
+#line 1608 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (8)].aggKey), nullptr, (yyvsp[(4) - (8)].en), (yyvsp[(7) - (8)].decl), false )->addQualifiers( (yyvsp[(2) - (8)].decl) ); }
+    break;
+
+  case 393:
+
+/* Line 1806 of yacc.c  */
+#line 1614 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) );
@@ -7127,64 +7375,43 @@
     break;
 
-  case 373:
-
-/* Line 1806 of yacc.c  */
-#line 1567 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) ); }
-    break;
-
-  case 374:
-
-/* Line 1806 of yacc.c  */
-#line 1569 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), (yyvsp[(3) - (7)].tok), nullptr, (yyvsp[(6) - (7)].decl), true )->addQualifiers( (yyvsp[(2) - (7)].decl) ); }
-    break;
-
-  case 375:
-
-/* Line 1806 of yacc.c  */
-#line 1571 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (8)].aggKey), nullptr, (yyvsp[(4) - (8)].en), (yyvsp[(7) - (8)].decl), false )->addQualifiers( (yyvsp[(2) - (8)].decl) ); }
-    break;
-
-  case 376:
-
-/* Line 1806 of yacc.c  */
-#line 1573 "parser.yy"
+  case 394:
+
+/* Line 1806 of yacc.c  */
+#line 1619 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) ); }
     break;
 
-  case 377:
-
-/* Line 1806 of yacc.c  */
-#line 1578 "parser.yy"
+  case 395:
+
+/* Line 1806 of yacc.c  */
+#line 1624 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
 
-  case 378:
-
-/* Line 1806 of yacc.c  */
-#line 1580 "parser.yy"
+  case 396:
+
+/* Line 1806 of yacc.c  */
+#line 1626 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
 
-  case 379:
-
-/* Line 1806 of yacc.c  */
-#line 1585 "parser.yy"
+  case 397:
+
+/* Line 1806 of yacc.c  */
+#line 1631 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 380:
-
-/* Line 1806 of yacc.c  */
-#line 1587 "parser.yy"
+  case 398:
+
+/* Line 1806 of yacc.c  */
+#line 1633 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 382:
-
-/* Line 1806 of yacc.c  */
-#line 1593 "parser.yy"
+  case 400:
+
+/* Line 1806 of yacc.c  */
+#line 1639 "parser.yy"
     {
 			distExt( (yyvsp[(2) - (3)].decl) );								// mark all fields in list
@@ -7193,16 +7420,16 @@
     break;
 
-  case 383:
-
-/* Line 1806 of yacc.c  */
-#line 1598 "parser.yy"
+  case 401:
+
+/* Line 1806 of yacc.c  */
+#line 1644 "parser.yy"
     {
 			(yyval.decl) = distAttr( (yyvsp[(1) - (3)].decl), (yyvsp[(2) - (3)].decl) ); }
     break;
 
-  case 384:
-
-/* Line 1806 of yacc.c  */
-#line 1601 "parser.yy"
+  case 402:
+
+/* Line 1806 of yacc.c  */
+#line 1647 "parser.yy"
     {
 			distExt( (yyvsp[(3) - (4)].decl) );								// mark all fields in list
@@ -7211,256 +7438,256 @@
     break;
 
-  case 386:
-
-/* Line 1806 of yacc.c  */
-#line 1610 "parser.yy"
+  case 404:
+
+/* Line 1806 of yacc.c  */
+#line 1656 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
 
-  case 387:
-
-/* Line 1806 of yacc.c  */
-#line 1612 "parser.yy"
+  case 405:
+
+/* Line 1806 of yacc.c  */
+#line 1658 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 388:
-
-/* Line 1806 of yacc.c  */
-#line 1614 "parser.yy"
+  case 406:
+
+/* Line 1806 of yacc.c  */
+#line 1660 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
 
-  case 390:
-
-/* Line 1806 of yacc.c  */
-#line 1620 "parser.yy"
+  case 408:
+
+/* Line 1806 of yacc.c  */
+#line 1666 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(4) - (4)].decl)->addQualifiers( (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
-  case 391:
-
-/* Line 1806 of yacc.c  */
-#line 1625 "parser.yy"
+  case 409:
+
+/* Line 1806 of yacc.c  */
+#line 1671 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
 
-  case 392:
-
-/* Line 1806 of yacc.c  */
-#line 1627 "parser.yy"
+  case 410:
+
+/* Line 1806 of yacc.c  */
+#line 1673 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
 
-  case 393:
-
-/* Line 1806 of yacc.c  */
-#line 1630 "parser.yy"
+  case 411:
+
+/* Line 1806 of yacc.c  */
+#line 1676 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 394:
-
-/* Line 1806 of yacc.c  */
-#line 1633 "parser.yy"
+  case 412:
+
+/* Line 1806 of yacc.c  */
+#line 1679 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 396:
-
-/* Line 1806 of yacc.c  */
-#line 1639 "parser.yy"
+  case 414:
+
+/* Line 1806 of yacc.c  */
+#line 1685 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
 
-  case 397:
-
-/* Line 1806 of yacc.c  */
-#line 1641 "parser.yy"
+  case 415:
+
+/* Line 1806 of yacc.c  */
+#line 1687 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
-  case 398:
-
-/* Line 1806 of yacc.c  */
-#line 1646 "parser.yy"
+  case 416:
+
+/* Line 1806 of yacc.c  */
+#line 1692 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
-  case 399:
-
-/* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( nullptr, (yyvsp[(4) - (6)].decl) )->addQualifiers( (yyvsp[(2) - (6)].decl) ); }
-    break;
-
-  case 400:
-
-/* Line 1806 of yacc.c  */
-#line 1653 "parser.yy"
+  case 417:
+
+/* Line 1806 of yacc.c  */
+#line 1697 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( nullptr, (yyvsp[(4) - (6)].decl), true )->addQualifiers( (yyvsp[(2) - (6)].decl) ); }
+    break;
+
+  case 418:
+
+/* Line 1806 of yacc.c  */
+#line 1699 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) ); }
+    break;
+
+  case 419:
+
+/* Line 1806 of yacc.c  */
+#line 1701 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(3) - (8)].tok), (yyvsp[(6) - (8)].decl), true )->addQualifiers( (yyvsp[(2) - (8)].decl) ); }
+    break;
+
+  case 421:
+
+/* Line 1806 of yacc.c  */
+#line 1707 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) );
-			(yyval.decl) = DeclarationNode::newEnum( (yyvsp[(3) - (3)].tok), 0 )->addQualifiers( (yyvsp[(2) - (3)].decl) );
+			(yyval.decl) = DeclarationNode::newEnum( (yyvsp[(3) - (3)].tok), 0, false )->addQualifiers( (yyvsp[(2) - (3)].decl) );
 		}
     break;
 
-  case 401:
-
-/* Line 1806 of yacc.c  */
-#line 1658 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) ); }
-    break;
-
-  case 402:
-
-/* Line 1806 of yacc.c  */
-#line 1660 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(3) - (8)].tok), (yyvsp[(6) - (8)].decl) )->addQualifiers( (yyvsp[(2) - (8)].decl) ); }
-    break;
-
-  case 403:
-
-/* Line 1806 of yacc.c  */
-#line 1665 "parser.yy"
+  case 422:
+
+/* Line 1806 of yacc.c  */
+#line 1715 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 404:
-
-/* Line 1806 of yacc.c  */
-#line 1667 "parser.yy"
+  case 423:
+
+/* Line 1806 of yacc.c  */
+#line 1717 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
-  case 405:
-
-/* Line 1806 of yacc.c  */
-#line 1672 "parser.yy"
+  case 424:
+
+/* Line 1806 of yacc.c  */
+#line 1722 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
 
-  case 406:
-
-/* Line 1806 of yacc.c  */
-#line 1674 "parser.yy"
+  case 425:
+
+/* Line 1806 of yacc.c  */
+#line 1724 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
-  case 407:
-
-/* Line 1806 of yacc.c  */
-#line 1681 "parser.yy"
+  case 426:
+
+/* Line 1806 of yacc.c  */
+#line 1731 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1689 "parser.yy"
+  case 430:
+
+/* Line 1806 of yacc.c  */
+#line 1739 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1691 "parser.yy"
+  case 431:
+
+/* Line 1806 of yacc.c  */
+#line 1741 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 413:
-
-/* Line 1806 of yacc.c  */
-#line 1693 "parser.yy"
+  case 432:
+
+/* Line 1806 of yacc.c  */
+#line 1743 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 415:
-
-/* Line 1806 of yacc.c  */
-#line 1701 "parser.yy"
+  case 434:
+
+/* Line 1806 of yacc.c  */
+#line 1751 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 416:
-
-/* Line 1806 of yacc.c  */
-#line 1703 "parser.yy"
+  case 435:
+
+/* Line 1806 of yacc.c  */
+#line 1753 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 417:
-
-/* Line 1806 of yacc.c  */
-#line 1705 "parser.yy"
+  case 436:
+
+/* Line 1806 of yacc.c  */
+#line 1755 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     break;
 
-  case 419:
-
-/* Line 1806 of yacc.c  */
-#line 1711 "parser.yy"
+  case 438:
+
+/* Line 1806 of yacc.c  */
+#line 1761 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 420:
-
-/* Line 1806 of yacc.c  */
-#line 1716 "parser.yy"
+  case 439:
+
+/* Line 1806 of yacc.c  */
+#line 1766 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 423:
-
-/* Line 1806 of yacc.c  */
-#line 1723 "parser.yy"
+  case 442:
+
+/* Line 1806 of yacc.c  */
+#line 1773 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 426:
-
-/* Line 1806 of yacc.c  */
-#line 1730 "parser.yy"
+  case 445:
+
+/* Line 1806 of yacc.c  */
+#line 1780 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 427:
-
-/* Line 1806 of yacc.c  */
-#line 1732 "parser.yy"
+  case 446:
+
+/* Line 1806 of yacc.c  */
+#line 1782 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 429:
-
-/* Line 1806 of yacc.c  */
-#line 1741 "parser.yy"
+  case 448:
+
+/* Line 1806 of yacc.c  */
+#line 1791 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
-  case 430:
-
-/* Line 1806 of yacc.c  */
-#line 1744 "parser.yy"
+  case 449:
+
+/* Line 1806 of yacc.c  */
+#line 1794 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
-  case 431:
-
-/* Line 1806 of yacc.c  */
-#line 1746 "parser.yy"
+  case 450:
+
+/* Line 1806 of yacc.c  */
+#line 1796 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
 
-  case 436:
-
-/* Line 1806 of yacc.c  */
-#line 1756 "parser.yy"
+  case 455:
+
+/* Line 1806 of yacc.c  */
+#line 1806 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 438:
-
-/* Line 1806 of yacc.c  */
-#line 1762 "parser.yy"
+  case 457:
+
+/* Line 1806 of yacc.c  */
+#line 1813 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7469,8 +7696,8 @@
     break;
 
-  case 439:
-
-/* Line 1806 of yacc.c  */
-#line 1767 "parser.yy"
+  case 458:
+
+/* Line 1806 of yacc.c  */
+#line 1818 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7479,260 +7706,260 @@
     break;
 
-  case 440:
-
-/* Line 1806 of yacc.c  */
-#line 1775 "parser.yy"
+  case 459:
+
+/* Line 1806 of yacc.c  */
+#line 1826 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addInitializer( (yyvsp[(2) - (2)].en) ? new InitializerNode( (yyvsp[(2) - (2)].en) ) : nullptr ); }
     break;
 
-  case 441:
-
-/* Line 1806 of yacc.c  */
-#line 1777 "parser.yy"
+  case 460:
+
+/* Line 1806 of yacc.c  */
+#line 1828 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( (yyvsp[(3) - (3)].en) ? new InitializerNode( (yyvsp[(3) - (3)].en) ) : nullptr ); }
     break;
 
-  case 442:
-
-/* Line 1806 of yacc.c  */
-#line 1786 "parser.yy"
+  case 461:
+
+/* Line 1806 of yacc.c  */
+#line 1837 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 443:
-
-/* Line 1806 of yacc.c  */
-#line 1788 "parser.yy"
+  case 462:
+
+/* Line 1806 of yacc.c  */
+#line 1839 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 455:
-
-/* Line 1806 of yacc.c  */
-#line 1813 "parser.yy"
+  case 474:
+
+/* Line 1806 of yacc.c  */
+#line 1864 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 458:
-
-/* Line 1806 of yacc.c  */
-#line 1823 "parser.yy"
+  case 477:
+
+/* Line 1806 of yacc.c  */
+#line 1874 "parser.yy"
     { (yyval.in) = nullptr; }
     break;
 
-  case 459:
-
-/* Line 1806 of yacc.c  */
-#line 1825 "parser.yy"
+  case 478:
+
+/* Line 1806 of yacc.c  */
+#line 1876 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
 
-  case 460:
-
-/* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
+  case 479:
+
+/* Line 1806 of yacc.c  */
+#line 1878 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     break;
 
-  case 461:
-
-/* Line 1806 of yacc.c  */
-#line 1831 "parser.yy"
+  case 480:
+
+/* Line 1806 of yacc.c  */
+#line 1882 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
 
-  case 462:
-
-/* Line 1806 of yacc.c  */
-#line 1832 "parser.yy"
+  case 481:
+
+/* Line 1806 of yacc.c  */
+#line 1883 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
 
-  case 463:
-
-/* Line 1806 of yacc.c  */
-#line 1837 "parser.yy"
+  case 482:
+
+/* Line 1806 of yacc.c  */
+#line 1888 "parser.yy"
     { (yyval.in) = nullptr; }
     break;
 
-  case 465:
-
-/* Line 1806 of yacc.c  */
-#line 1839 "parser.yy"
+  case 484:
+
+/* Line 1806 of yacc.c  */
+#line 1890 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
 
-  case 466:
-
-/* Line 1806 of yacc.c  */
-#line 1840 "parser.yy"
+  case 485:
+
+/* Line 1806 of yacc.c  */
+#line 1891 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
     break;
 
-  case 467:
-
-/* Line 1806 of yacc.c  */
-#line 1842 "parser.yy"
+  case 486:
+
+/* Line 1806 of yacc.c  */
+#line 1893 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
-  case 469:
-
-/* Line 1806 of yacc.c  */
-#line 1858 "parser.yy"
+  case 488:
+
+/* Line 1806 of yacc.c  */
+#line 1909 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     break;
 
-  case 471:
-
-/* Line 1806 of yacc.c  */
-#line 1864 "parser.yy"
+  case 490:
+
+/* Line 1806 of yacc.c  */
+#line 1915 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
-  case 472:
-
-/* Line 1806 of yacc.c  */
-#line 1870 "parser.yy"
+  case 491:
+
+/* Line 1806 of yacc.c  */
+#line 1921 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
     break;
 
-  case 473:
-
-/* Line 1806 of yacc.c  */
-#line 1873 "parser.yy"
+  case 492:
+
+/* Line 1806 of yacc.c  */
+#line 1924 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
 
-  case 474:
-
-/* Line 1806 of yacc.c  */
-#line 1875 "parser.yy"
+  case 493:
+
+/* Line 1806 of yacc.c  */
+#line 1926 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
 
-  case 475:
-
-/* Line 1806 of yacc.c  */
-#line 1877 "parser.yy"
+  case 494:
+
+/* Line 1806 of yacc.c  */
+#line 1928 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
     break;
 
-  case 476:
-
-/* Line 1806 of yacc.c  */
-#line 1879 "parser.yy"
+  case 495:
+
+/* Line 1806 of yacc.c  */
+#line 1930 "parser.yy"
     { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
 
-  case 478:
-
-/* Line 1806 of yacc.c  */
-#line 1903 "parser.yy"
+  case 497:
+
+/* Line 1806 of yacc.c  */
+#line 1954 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 479:
-
-/* Line 1806 of yacc.c  */
-#line 1905 "parser.yy"
+  case 498:
+
+/* Line 1806 of yacc.c  */
+#line 1956 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 480:
-
-/* Line 1806 of yacc.c  */
-#line 1907 "parser.yy"
+  case 499:
+
+/* Line 1806 of yacc.c  */
+#line 1958 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 482:
-
-/* Line 1806 of yacc.c  */
-#line 1913 "parser.yy"
+  case 501:
+
+/* Line 1806 of yacc.c  */
+#line 1964 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 483:
-
-/* Line 1806 of yacc.c  */
-#line 1915 "parser.yy"
+  case 502:
+
+/* Line 1806 of yacc.c  */
+#line 1966 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 484:
-
-/* Line 1806 of yacc.c  */
-#line 1920 "parser.yy"
+  case 503:
+
+/* Line 1806 of yacc.c  */
+#line 1971 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 486:
-
-/* Line 1806 of yacc.c  */
-#line 1926 "parser.yy"
+  case 505:
+
+/* Line 1806 of yacc.c  */
+#line 1977 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 487:
-
-/* Line 1806 of yacc.c  */
-#line 1931 "parser.yy"
+  case 506:
+
+/* Line 1806 of yacc.c  */
+#line 1982 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
 
-  case 488:
-
-/* Line 1806 of yacc.c  */
-#line 1933 "parser.yy"
+  case 507:
+
+/* Line 1806 of yacc.c  */
+#line 1984 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 490:
-
-/* Line 1806 of yacc.c  */
-#line 1939 "parser.yy"
+  case 509:
+
+/* Line 1806 of yacc.c  */
+#line 1990 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Otype; }
     break;
 
-  case 491:
-
-/* Line 1806 of yacc.c  */
-#line 1941 "parser.yy"
+  case 510:
+
+/* Line 1806 of yacc.c  */
+#line 1992 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
 
-  case 492:
-
-/* Line 1806 of yacc.c  */
-#line 1943 "parser.yy"
+  case 511:
+
+/* Line 1806 of yacc.c  */
+#line 1994 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
-  case 493:
-
-/* Line 1806 of yacc.c  */
-#line 1945 "parser.yy"
+  case 512:
+
+/* Line 1806 of yacc.c  */
+#line 1996 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ttype; }
     break;
 
-  case 494:
-
-/* Line 1806 of yacc.c  */
-#line 1950 "parser.yy"
+  case 513:
+
+/* Line 1806 of yacc.c  */
+#line 2001 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 495:
-
-/* Line 1806 of yacc.c  */
-#line 1952 "parser.yy"
+  case 514:
+
+/* Line 1806 of yacc.c  */
+#line 2003 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 496:
-
-/* Line 1806 of yacc.c  */
-#line 1957 "parser.yy"
+  case 515:
+
+/* Line 1806 of yacc.c  */
+#line 2008 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7741,78 +7968,78 @@
     break;
 
-  case 497:
-
-/* Line 1806 of yacc.c  */
-#line 1962 "parser.yy"
+  case 516:
+
+/* Line 1806 of yacc.c  */
+#line 2013 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
 
-  case 498:
-
-/* Line 1806 of yacc.c  */
-#line 1964 "parser.yy"
+  case 517:
+
+/* Line 1806 of yacc.c  */
+#line 2015 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 499:
-
-/* Line 1806 of yacc.c  */
-#line 1969 "parser.yy"
+  case 518:
+
+/* Line 1806 of yacc.c  */
+#line 2020 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
     break;
 
-  case 501:
-
-/* Line 1806 of yacc.c  */
-#line 1972 "parser.yy"
+  case 520:
+
+/* Line 1806 of yacc.c  */
+#line 2023 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     break;
 
-  case 502:
-
-/* Line 1806 of yacc.c  */
-#line 1974 "parser.yy"
+  case 521:
+
+/* Line 1806 of yacc.c  */
+#line 2025 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
 
-  case 503:
-
-/* Line 1806 of yacc.c  */
-#line 1979 "parser.yy"
+  case 522:
+
+/* Line 1806 of yacc.c  */
+#line 2030 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 504:
-
-/* Line 1806 of yacc.c  */
-#line 1981 "parser.yy"
+  case 523:
+
+/* Line 1806 of yacc.c  */
+#line 2032 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 505:
-
-/* Line 1806 of yacc.c  */
-#line 1983 "parser.yy"
+  case 524:
+
+/* Line 1806 of yacc.c  */
+#line 2034 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 506:
-
-/* Line 1806 of yacc.c  */
-#line 1988 "parser.yy"
+  case 525:
+
+/* Line 1806 of yacc.c  */
+#line 2039 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 507:
-
-/* Line 1806 of yacc.c  */
-#line 1990 "parser.yy"
+  case 526:
+
+/* Line 1806 of yacc.c  */
+#line 2041 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 508:
-
-/* Line 1806 of yacc.c  */
-#line 1995 "parser.yy"
+  case 527:
+
+/* Line 1806 of yacc.c  */
+#line 2046 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7821,8 +8048,8 @@
     break;
 
-  case 509:
-
-/* Line 1806 of yacc.c  */
-#line 2000 "parser.yy"
+  case 528:
+
+/* Line 1806 of yacc.c  */
+#line 2051 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7831,8 +8058,8 @@
     break;
 
-  case 510:
-
-/* Line 1806 of yacc.c  */
-#line 2008 "parser.yy"
+  case 529:
+
+/* Line 1806 of yacc.c  */
+#line 2059 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7841,8 +8068,8 @@
     break;
 
-  case 511:
-
-/* Line 1806 of yacc.c  */
-#line 2013 "parser.yy"
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 2064 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7851,8 +8078,8 @@
     break;
 
-  case 512:
-
-/* Line 1806 of yacc.c  */
-#line 2018 "parser.yy"
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 2069 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7862,15 +8089,15 @@
     break;
 
-  case 514:
-
-/* Line 1806 of yacc.c  */
-#line 2028 "parser.yy"
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2079 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 517:
-
-/* Line 1806 of yacc.c  */
-#line 2038 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2089 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7879,8 +8106,8 @@
     break;
 
-  case 518:
-
-/* Line 1806 of yacc.c  */
-#line 2043 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2094 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7889,8 +8116,8 @@
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 2048 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2099 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7899,8 +8126,8 @@
     break;
 
-  case 520:
-
-/* Line 1806 of yacc.c  */
-#line 2056 "parser.yy"
+  case 539:
+
+/* Line 1806 of yacc.c  */
+#line 2107 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7909,8 +8136,8 @@
     break;
 
-  case 521:
-
-/* Line 1806 of yacc.c  */
-#line 2061 "parser.yy"
+  case 540:
+
+/* Line 1806 of yacc.c  */
+#line 2112 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7919,36 +8146,36 @@
     break;
 
-  case 522:
-
-/* Line 1806 of yacc.c  */
-#line 2071 "parser.yy"
+  case 541:
+
+/* Line 1806 of yacc.c  */
+#line 2122 "parser.yy"
     {}
     break;
 
-  case 523:
-
-/* Line 1806 of yacc.c  */
-#line 2073 "parser.yy"
+  case 542:
+
+/* Line 1806 of yacc.c  */
+#line 2124 "parser.yy"
     { parseTree = parseTree ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);	}
     break;
 
-  case 525:
-
-/* Line 1806 of yacc.c  */
-#line 2079 "parser.yy"
+  case 544:
+
+/* Line 1806 of yacc.c  */
+#line 2130 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
 
-  case 526:
-
-/* Line 1806 of yacc.c  */
-#line 2084 "parser.yy"
+  case 545:
+
+/* Line 1806 of yacc.c  */
+#line 2135 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 530:
-
-/* Line 1806 of yacc.c  */
-#line 2092 "parser.yy"
+  case 549:
+
+/* Line 1806 of yacc.c  */
+#line 2143 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newAsmStmt( new StatementNode( build_asmstmt( false, (yyvsp[(3) - (5)].constant), 0 ) ) );
@@ -7956,8 +8183,8 @@
     break;
 
-  case 531:
-
-/* Line 1806 of yacc.c  */
-#line 2096 "parser.yy"
+  case 550:
+
+/* Line 1806 of yacc.c  */
+#line 2147 "parser.yy"
     {
 			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
@@ -7966,8 +8193,8 @@
     break;
 
-  case 532:
-
-/* Line 1806 of yacc.c  */
-#line 2101 "parser.yy"
+  case 551:
+
+/* Line 1806 of yacc.c  */
+#line 2152 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7977,8 +8204,8 @@
     break;
 
-  case 533:
-
-/* Line 1806 of yacc.c  */
-#line 2107 "parser.yy"
+  case 552:
+
+/* Line 1806 of yacc.c  */
+#line 2158 "parser.yy"
     {
 			distExt( (yyvsp[(2) - (2)].decl) );								// mark all fields in list
@@ -7987,8 +8214,8 @@
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2121 "parser.yy"
+  case 554:
+
+/* Line 1806 of yacc.c  */
+#line 2172 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7998,8 +8225,8 @@
     break;
 
-  case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2127 "parser.yy"
+  case 555:
+
+/* Line 1806 of yacc.c  */
+#line 2178 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8009,8 +8236,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2136 "parser.yy"
+  case 556:
+
+/* Line 1806 of yacc.c  */
+#line 2187 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8020,8 +8247,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2142 "parser.yy"
+  case 557:
+
+/* Line 1806 of yacc.c  */
+#line 2193 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8031,8 +8258,8 @@
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2148 "parser.yy"
+  case 558:
+
+/* Line 1806 of yacc.c  */
+#line 2199 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8042,8 +8269,8 @@
     break;
 
-  case 540:
-
-/* Line 1806 of yacc.c  */
-#line 2154 "parser.yy"
+  case 559:
+
+/* Line 1806 of yacc.c  */
+#line 2205 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8053,8 +8280,8 @@
     break;
 
-  case 541:
-
-/* Line 1806 of yacc.c  */
-#line 2160 "parser.yy"
+  case 560:
+
+/* Line 1806 of yacc.c  */
+#line 2211 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8064,8 +8291,8 @@
     break;
 
-  case 542:
-
-/* Line 1806 of yacc.c  */
-#line 2168 "parser.yy"
+  case 561:
+
+/* Line 1806 of yacc.c  */
+#line 2219 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8075,8 +8302,8 @@
     break;
 
-  case 543:
-
-/* Line 1806 of yacc.c  */
-#line 2174 "parser.yy"
+  case 562:
+
+/* Line 1806 of yacc.c  */
+#line 2225 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8086,8 +8313,8 @@
     break;
 
-  case 544:
-
-/* Line 1806 of yacc.c  */
-#line 2182 "parser.yy"
+  case 563:
+
+/* Line 1806 of yacc.c  */
+#line 2233 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8097,8 +8324,8 @@
     break;
 
-  case 545:
-
-/* Line 1806 of yacc.c  */
-#line 2188 "parser.yy"
+  case 564:
+
+/* Line 1806 of yacc.c  */
+#line 2239 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8108,22 +8335,22 @@
     break;
 
-  case 549:
-
-/* Line 1806 of yacc.c  */
-#line 2203 "parser.yy"
+  case 568:
+
+/* Line 1806 of yacc.c  */
+#line 2254 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 550:
-
-/* Line 1806 of yacc.c  */
-#line 2208 "parser.yy"
+  case 569:
+
+/* Line 1806 of yacc.c  */
+#line 2259 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 551:
-
-/* Line 1806 of yacc.c  */
-#line 2210 "parser.yy"
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2261 "parser.yy"
     {
 			DeclarationNode * name = new DeclarationNode();
@@ -8133,85 +8360,85 @@
     break;
 
-  case 552:
-
-/* Line 1806 of yacc.c  */
-#line 2219 "parser.yy"
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2270 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 555:
-
-/* Line 1806 of yacc.c  */
-#line 2226 "parser.yy"
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2277 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 556:
-
-/* Line 1806 of yacc.c  */
-#line 2231 "parser.yy"
+  case 575:
+
+/* Line 1806 of yacc.c  */
+#line 2282 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (6)].decl); }
     break;
 
-  case 558:
-
-/* Line 1806 of yacc.c  */
-#line 2237 "parser.yy"
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2288 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 559:
-
-/* Line 1806 of yacc.c  */
-#line 2242 "parser.yy"
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2293 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 560:
-
-/* Line 1806 of yacc.c  */
-#line 2244 "parser.yy"
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2295 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttribute( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 561:
-
-/* Line 1806 of yacc.c  */
-#line 2246 "parser.yy"
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2297 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttribute( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 565:
-
-/* Line 1806 of yacc.c  */
-#line 2254 "parser.yy"
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2305 "parser.yy"
     { (yyval.tok) = Token{ new string( "__const__" ) }; }
     break;
 
-  case 566:
-
-/* Line 1806 of yacc.c  */
-#line 2289 "parser.yy"
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2340 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 568:
-
-/* Line 1806 of yacc.c  */
-#line 2292 "parser.yy"
+  case 587:
+
+/* Line 1806 of yacc.c  */
+#line 2343 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 569:
-
-/* Line 1806 of yacc.c  */
-#line 2294 "parser.yy"
+  case 588:
+
+/* Line 1806 of yacc.c  */
+#line 2345 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2299 "parser.yy"
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2350 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8220,428 +8447,428 @@
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2304 "parser.yy"
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2355 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2309 "parser.yy"
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2360 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2311 "parser.yy"
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2362 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2313 "parser.yy"
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2364 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2318 "parser.yy"
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2369 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2320 "parser.yy"
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2371 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2322 "parser.yy"
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2373 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2324 "parser.yy"
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2375 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2329 "parser.yy"
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2380 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2331 "parser.yy"
+  case 599:
+
+/* Line 1806 of yacc.c  */
+#line 2382 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2340 "parser.yy"
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2391 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2343 "parser.yy"
+  case 602:
+
+/* Line 1806 of yacc.c  */
+#line 2394 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2348 "parser.yy"
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2399 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2350 "parser.yy"
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2401 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2352 "parser.yy"
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2403 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 587:
-
-/* Line 1806 of yacc.c  */
-#line 2357 "parser.yy"
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2408 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 588:
-
-/* Line 1806 of yacc.c  */
-#line 2359 "parser.yy"
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2410 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2361 "parser.yy"
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2412 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2366 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2417 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2368 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2419 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 592:
-
-/* Line 1806 of yacc.c  */
-#line 2370 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2421 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2388 "parser.yy"
+  case 615:
+
+/* Line 1806 of yacc.c  */
+#line 2439 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2390 "parser.yy"
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2441 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2392 "parser.yy"
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2443 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2397 "parser.yy"
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2448 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2399 "parser.yy"
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2450 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2401 "parser.yy"
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2452 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 602:
-
-/* Line 1806 of yacc.c  */
-#line 2406 "parser.yy"
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2457 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2408 "parser.yy"
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2459 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2410 "parser.yy"
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2461 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2425 "parser.yy"
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2476 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2428 "parser.yy"
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2479 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2430 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2481 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2436 "parser.yy"
+  case 629:
+
+/* Line 1806 of yacc.c  */
+#line 2487 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2441 "parser.yy"
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2492 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2443 "parser.yy"
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2494 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2445 "parser.yy"
+  case 632:
+
+/* Line 1806 of yacc.c  */
+#line 2496 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2450 "parser.yy"
+  case 633:
+
+/* Line 1806 of yacc.c  */
+#line 2501 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 615:
-
-/* Line 1806 of yacc.c  */
-#line 2452 "parser.yy"
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2503 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2454 "parser.yy"
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2505 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2456 "parser.yy"
+  case 636:
+
+/* Line 1806 of yacc.c  */
+#line 2507 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2461 "parser.yy"
+  case 637:
+
+/* Line 1806 of yacc.c  */
+#line 2512 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2463 "parser.yy"
+  case 638:
+
+/* Line 1806 of yacc.c  */
+#line 2514 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2465 "parser.yy"
+  case 639:
+
+/* Line 1806 of yacc.c  */
+#line 2516 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2475 "parser.yy"
+  case 640:
+
+/* Line 1806 of yacc.c  */
+#line 2526 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2478 "parser.yy"
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2529 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2480 "parser.yy"
+  case 643:
+
+/* Line 1806 of yacc.c  */
+#line 2531 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2485 "parser.yy"
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2536 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2487 "parser.yy"
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2538 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2540 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2494 "parser.yy"
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2545 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 629:
-
-/* Line 1806 of yacc.c  */
-#line 2496 "parser.yy"
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2547 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2498 "parser.yy"
+  case 649:
+
+/* Line 1806 of yacc.c  */
+#line 2549 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2551 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 632:
-
-/* Line 1806 of yacc.c  */
-#line 2505 "parser.yy"
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2556 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 633:
-
-/* Line 1806 of yacc.c  */
-#line 2507 "parser.yy"
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2558 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 634:
-
-/* Line 1806 of yacc.c  */
-#line 2509 "parser.yy"
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2560 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2522 "parser.yy"
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2573 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 637:
-
-/* Line 1806 of yacc.c  */
-#line 2525 "parser.yy"
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2576 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 638:
-
-/* Line 1806 of yacc.c  */
-#line 2527 "parser.yy"
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2578 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 639:
-
-/* Line 1806 of yacc.c  */
-#line 2532 "parser.yy"
+  case 658:
+
+/* Line 1806 of yacc.c  */
+#line 2583 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8650,8 +8877,8 @@
     break;
 
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2537 "parser.yy"
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2588 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8660,680 +8887,680 @@
     break;
 
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2545 "parser.yy"
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2596 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 642:
-
-/* Line 1806 of yacc.c  */
-#line 2547 "parser.yy"
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2598 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2549 "parser.yy"
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2600 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2554 "parser.yy"
+  case 663:
+
+/* Line 1806 of yacc.c  */
+#line 2605 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2556 "parser.yy"
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2607 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2561 "parser.yy"
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2612 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2563 "parser.yy"
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2614 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 649:
-
-/* Line 1806 of yacc.c  */
-#line 2581 "parser.yy"
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2632 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2583 "parser.yy"
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2634 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2588 "parser.yy"
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2639 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
+  case 671:
+
+/* Line 1806 of yacc.c  */
+#line 2641 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2592 "parser.yy"
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2643 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2594 "parser.yy"
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2645 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2596 "parser.yy"
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2647 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2602 "parser.yy"
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2653 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 658:
-
-/* Line 1806 of yacc.c  */
-#line 2604 "parser.yy"
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2655 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2606 "parser.yy"
+  case 678:
+
+/* Line 1806 of yacc.c  */
+#line 2657 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2611 "parser.yy"
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2662 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
     break;
 
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2613 "parser.yy"
+  case 680:
+
+/* Line 1806 of yacc.c  */
+#line 2664 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2615 "parser.yy"
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2666 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 663:
-
-/* Line 1806 of yacc.c  */
-#line 2621 "parser.yy"
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2672 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2623 "parser.yy"
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2674 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2629 "parser.yy"
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2680 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
 
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2631 "parser.yy"
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2682 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
 
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2633 "parser.yy"
+  case 687:
+
+/* Line 1806 of yacc.c  */
+#line 2684 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
 
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2635 "parser.yy"
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2686 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
 
-  case 671:
-
-/* Line 1806 of yacc.c  */
-#line 2670 "parser.yy"
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2721 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2672 "parser.yy"
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2723 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2677 "parser.yy"
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2728 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( nullptr ); }
     break;
 
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2679 "parser.yy"
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2730 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2681 "parser.yy"
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2732 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( nullptr ) ); }
     break;
 
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2683 "parser.yy"
+  case 695:
+
+/* Line 1806 of yacc.c  */
+#line 2734 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2685 "parser.yy"
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2736 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2691 "parser.yy"
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2742 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 680:
-
-/* Line 1806 of yacc.c  */
-#line 2693 "parser.yy"
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2744 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2695 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2746 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2700 "parser.yy"
+  case 701:
+
+/* Line 1806 of yacc.c  */
+#line 2751 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
     break;
 
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2702 "parser.yy"
+  case 702:
+
+/* Line 1806 of yacc.c  */
+#line 2753 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2704 "parser.yy"
+  case 703:
+
+/* Line 1806 of yacc.c  */
+#line 2755 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2711 "parser.yy"
+  case 705:
+
+/* Line 1806 of yacc.c  */
+#line 2762 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2722 "parser.yy"
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2773 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2725 "parser.yy"
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2776 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2727 "parser.yy"
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2778 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
 
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2730 "parser.yy"
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2781 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2732 "parser.yy"
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2783 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
 
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2734 "parser.yy"
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2785 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
 
-  case 695:
-
-/* Line 1806 of yacc.c  */
-#line 2749 "parser.yy"
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2800 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2751 "parser.yy"
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2802 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2756 "parser.yy"
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2807 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2758 "parser.yy"
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2809 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2760 "parser.yy"
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2811 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2762 "parser.yy"
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2813 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2764 "parser.yy"
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2815 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 703:
-
-/* Line 1806 of yacc.c  */
-#line 2770 "parser.yy"
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2821 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 704:
-
-/* Line 1806 of yacc.c  */
-#line 2772 "parser.yy"
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2823 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 705:
-
-/* Line 1806 of yacc.c  */
-#line 2774 "parser.yy"
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2825 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 706:
-
-/* Line 1806 of yacc.c  */
-#line 2779 "parser.yy"
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2830 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2781 "parser.yy"
+  case 726:
+
+/* Line 1806 of yacc.c  */
+#line 2832 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 710:
-
-/* Line 1806 of yacc.c  */
-#line 2791 "parser.yy"
+  case 729:
+
+/* Line 1806 of yacc.c  */
+#line 2842 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 713:
-
-/* Line 1806 of yacc.c  */
-#line 2801 "parser.yy"
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2853 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2803 "parser.yy"
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2855 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2805 "parser.yy"
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2857 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2807 "parser.yy"
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2859 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2809 "parser.yy"
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2861 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2811 "parser.yy"
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2863 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2818 "parser.yy"
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2870 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2820 "parser.yy"
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2872 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2822 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2874 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2824 "parser.yy"
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2876 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2826 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2878 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2829 "parser.yy"
+  case 743:
+
+/* Line 1806 of yacc.c  */
+#line 2881 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2831 "parser.yy"
+  case 744:
+
+/* Line 1806 of yacc.c  */
+#line 2883 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2833 "parser.yy"
+  case 745:
+
+/* Line 1806 of yacc.c  */
+#line 2885 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2835 "parser.yy"
+  case 746:
+
+/* Line 1806 of yacc.c  */
+#line 2887 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 728:
-
-/* Line 1806 of yacc.c  */
-#line 2837 "parser.yy"
+  case 747:
+
+/* Line 1806 of yacc.c  */
+#line 2889 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 729:
-
-/* Line 1806 of yacc.c  */
-#line 2842 "parser.yy"
+  case 748:
+
+/* Line 1806 of yacc.c  */
+#line 2894 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 730:
-
-/* Line 1806 of yacc.c  */
-#line 2844 "parser.yy"
+  case 749:
+
+/* Line 1806 of yacc.c  */
+#line 2896 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 731:
-
-/* Line 1806 of yacc.c  */
-#line 2849 "parser.yy"
+  case 750:
+
+/* Line 1806 of yacc.c  */
+#line 2901 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
 
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2851 "parser.yy"
+  case 751:
+
+/* Line 1806 of yacc.c  */
+#line 2903 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
 
-  case 734:
-
-/* Line 1806 of yacc.c  */
-#line 2878 "parser.yy"
+  case 753:
+
+/* Line 1806 of yacc.c  */
+#line 2930 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 738:
-
-/* Line 1806 of yacc.c  */
-#line 2889 "parser.yy"
+  case 757:
+
+/* Line 1806 of yacc.c  */
+#line 2941 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2891 "parser.yy"
+  case 758:
+
+/* Line 1806 of yacc.c  */
+#line 2943 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2893 "parser.yy"
+  case 759:
+
+/* Line 1806 of yacc.c  */
+#line 2945 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2895 "parser.yy"
+  case 760:
+
+/* Line 1806 of yacc.c  */
+#line 2947 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2897 "parser.yy"
+  case 761:
+
+/* Line 1806 of yacc.c  */
+#line 2949 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 743:
-
-/* Line 1806 of yacc.c  */
-#line 2899 "parser.yy"
+  case 762:
+
+/* Line 1806 of yacc.c  */
+#line 2951 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 744:
-
-/* Line 1806 of yacc.c  */
-#line 2906 "parser.yy"
+  case 763:
+
+/* Line 1806 of yacc.c  */
+#line 2958 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 745:
-
-/* Line 1806 of yacc.c  */
-#line 2908 "parser.yy"
+  case 764:
+
+/* Line 1806 of yacc.c  */
+#line 2960 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 746:
-
-/* Line 1806 of yacc.c  */
-#line 2910 "parser.yy"
+  case 765:
+
+/* Line 1806 of yacc.c  */
+#line 2962 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 747:
-
-/* Line 1806 of yacc.c  */
-#line 2912 "parser.yy"
+  case 766:
+
+/* Line 1806 of yacc.c  */
+#line 2964 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 748:
-
-/* Line 1806 of yacc.c  */
-#line 2914 "parser.yy"
+  case 767:
+
+/* Line 1806 of yacc.c  */
+#line 2966 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 749:
-
-/* Line 1806 of yacc.c  */
-#line 2916 "parser.yy"
+  case 768:
+
+/* Line 1806 of yacc.c  */
+#line 2968 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 750:
-
-/* Line 1806 of yacc.c  */
-#line 2921 "parser.yy"
+  case 769:
+
+/* Line 1806 of yacc.c  */
+#line 2973 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 751:
-
-/* Line 1806 of yacc.c  */
-#line 2928 "parser.yy"
+  case 770:
+
+/* Line 1806 of yacc.c  */
+#line 2980 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
 
-  case 752:
-
-/* Line 1806 of yacc.c  */
-#line 2930 "parser.yy"
+  case 771:
+
+/* Line 1806 of yacc.c  */
+#line 2982 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
 
-  case 755:
-
-/* Line 1806 of yacc.c  */
-#line 2954 "parser.yy"
+  case 774:
+
+/* Line 1806 of yacc.c  */
+#line 3006 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
 
-  case 756:
-
-/* Line 1806 of yacc.c  */
-#line 2956 "parser.yy"
+  case 775:
+
+/* Line 1806 of yacc.c  */
+#line 3008 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9342,5 +9569,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9345 "Parser/parser.cc"
+#line 9572 "Parser/parser.cc"
       default: break;
     }
@@ -9573,5 +9800,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2959 "parser.yy"
+#line 3011 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/Parser/parser.yy	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 16 15:56:33 2017
-// Update Count     : 2186
+// Last Modified On : Fri Mar  3 21:35:28 2017
+// Update Count     : 2222
 //
 
@@ -196,5 +196,5 @@
 
 %type<aggKey> aggregate_key
-%type<decl>  aggregate_type
+%type<decl> aggregate_type aggregate_type_nobody
 
 %type<decl> assertion assertion_list_opt
@@ -207,9 +207,9 @@
 
 %type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list
-%type<decl> declaration_specifier declarator declaring_list
-
-%type<decl> elaborated_type
-
-%type<decl> enumerator_list enum_type
+%type<decl> declaration_specifier declaration_specifier_nobody declarator declaring_list
+
+%type<decl> elaborated_type elaborated_type_nobody
+
+%type<decl> enumerator_list enum_type enum_type_nobody
 %type<en> enumerator_value_opt
 
@@ -251,5 +251,5 @@
 %type<decl> storage_class storage_class_list
 
-%type<decl> sue_declaration_specifier sue_type_specifier
+%type<decl> sue_declaration_specifier sue_declaration_specifier_nobody sue_type_specifier sue_type_specifier_nobody
 
 %type<tclass> type_class
@@ -268,5 +268,5 @@
 %type<en> type_name_list
 
-%type<decl> type_qualifier type_qualifier_name type_qualifier_list type_qualifier_list_opt type_specifier
+%type<decl> type_qualifier type_qualifier_name type_qualifier_list type_qualifier_list_opt type_specifier type_specifier_nobody
 
 %type<decl> variable_declarator variable_ptr variable_array variable_function
@@ -973,16 +973,12 @@
 
 exception_declaration:
-		// A semantic check is required to ensure type_specifier does not create a new type, e.g.:
-		//
-		//		catch ( struct { int i; } x ) ...
-		//
-		// This new type cannot catch any thrown type because of name equivalence among types.
-	type_specifier
-	| type_specifier declarator
+		// No SUE declaration in parameter list.
+	type_specifier_nobody
+	| type_specifier_nobody declarator
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			$$ = $2->addType( $1 );
 		}
-	| type_specifier variable_abstract_declarator
+	| type_specifier_nobody variable_abstract_declarator
 		{ $$ = $2->addType( $1 ); }
 	| cfa_abstract_declarator_tuple no_attr_identifier	// CFA
@@ -1349,7 +1345,31 @@
 	;
 
-type_specifier:											// declaration specifier - storage class
+declaration_specifier_nobody:							// type specifier + storage class - {...}
+		// Preclude SUE declarations in restricted scopes:
+		//
+		//    int f( struct S { int i; } s1, Struct S s2 ) { struct S s3; ... }
+		//
+		// because it is impossible to call f due to name equivalence.
+	basic_declaration_specifier
+	| sue_declaration_specifier_nobody
+	| typedef_declaration_specifier
+	| typegen_declaration_specifier
+	;
+
+type_specifier:											// type specifier
 	basic_type_specifier
 	| sue_type_specifier
+	| typedef_type_specifier
+	| typegen_type_specifier
+	;
+
+type_specifier_nobody:									// type specifier - {...}
+		// Preclude SUE declarations in restricted scopes:
+		//
+		//    int f( struct S { int i; } s1, Struct S s2 ) { struct S s3; ... }
+		//
+		// because it is impossible to call f due to name equivalence.
+	basic_type_specifier
+	| sue_type_specifier_nobody
 	| typedef_type_specifier
 	| typegen_type_specifier
@@ -1380,13 +1400,13 @@
 type_qualifier_name:
 	CONST
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+		{ $$ = DeclarationNode::newTypeQualifier( DeclarationNode::Const ); }
 	| RESTRICT
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
+		{ $$ = DeclarationNode::newTypeQualifier( DeclarationNode::Restrict ); }
 	| VOLATILE
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
+		{ $$ = DeclarationNode::newTypeQualifier( DeclarationNode::Volatile ); }
 	| LVALUE											// CFA
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
+		{ $$ = DeclarationNode::newTypeQualifier( DeclarationNode::Lvalue ); }
 	| ATOMIC
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
+		{ $$ = DeclarationNode::newTypeQualifier( DeclarationNode::Atomic ); }
 	| FORALL '('
 		{
@@ -1428,14 +1448,13 @@
 	| REGISTER
 		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
-	| INLINE											// C99
-		//{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
-		{ $$ = new DeclarationNode; $$->isInline = true; }
-	| FORTRAN											// C99
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
-	| NORETURN											// C11
-		//{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
-		{ $$ = new DeclarationNode; $$->isNoreturn = true; }
 	| THREADLOCAL										// C11
 		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
+		// Put function specifiers here to simplify parsing rules, but separate them semantically.
+	| INLINE											// C99
+		{ $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Inline ); }
+	| FORTRAN											// C99
+		{ $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Fortran ); }
+	| NORETURN											// C11
+		{ $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Noreturn ); }
 	;
 
@@ -1514,5 +1533,5 @@
 	;
 
-sue_declaration_specifier:
+sue_declaration_specifier:								// struct, union, enum + storage class + type specifier
 	sue_type_specifier
 	| declaration_qualifier_list sue_type_specifier
@@ -1524,9 +1543,27 @@
 	;
 
-sue_type_specifier:
-	elaborated_type										// struct, union, enum
+sue_type_specifier:										// struct, union, enum + type specifier
+	elaborated_type
 	| type_qualifier_list elaborated_type
 		{ $$ = $2->addQualifiers( $1 ); }
 	| sue_type_specifier type_qualifier
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+sue_declaration_specifier_nobody:						// struct, union, enum - {...} + storage class + type specifier
+	sue_type_specifier_nobody
+	| declaration_qualifier_list sue_type_specifier_nobody
+		{ $$ = $2->addQualifiers( $1 ); }
+	| sue_declaration_specifier_nobody storage_class	// remaining OBSOLESCENT (see 2)
+		{ $$ = $1->addQualifiers( $2 ); }
+	| sue_declaration_specifier_nobody storage_class type_qualifier_list
+		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
+	;
+
+sue_type_specifier_nobody:								// struct, union, enum - {...} + type specifier
+	elaborated_type_nobody
+	| type_qualifier_list elaborated_type_nobody
+		{ $$ = $2->addQualifiers( $1 ); }
+	| sue_type_specifier_nobody type_qualifier
 		{ $$ = $1->addQualifiers( $2 ); }
 	;
@@ -1551,17 +1588,17 @@
 	;
 
-elaborated_type:
+elaborated_type:										// struct, union, enum
 	aggregate_type
 	| enum_type
 	;
 
-aggregate_type:
+elaborated_type_nobody:									// struct, union, enum - {...}
+	aggregate_type_nobody
+	| enum_type_nobody
+	;
+
+aggregate_type:											// struct, union
 	aggregate_key attribute_list_opt '{' field_declaration_list '}'
 		{ $$ = DeclarationNode::newAggregate( $1, nullptr, nullptr, $4, true )->addQualifiers( $2 ); }
-	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
-		{
-			typedefTable.makeTypedef( *$3 );
-			$$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 );
-		}
 	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
 		{ typedefTable.makeTypedef( *$3 ); }
@@ -1570,4 +1607,13 @@
 	| aggregate_key attribute_list_opt '(' type_name_list ')' '{' field_declaration_list '}' // CFA
 		{ $$ = DeclarationNode::newAggregate( $1, nullptr, $4, $7, false )->addQualifiers( $2 ); }
+	| aggregate_type_nobody
+	;
+
+aggregate_type_nobody:									// struct, union - {...}
+	aggregate_key attribute_list_opt no_attr_identifier_or_type_name
+		{
+			typedefTable.makeTypedef( *$3 );
+			$$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 );
+		}
 	| aggregate_key attribute_list_opt typegen_name		// CFA, S/R conflict
 		{ $$ = $3->addQualifiers( $2 ); }
@@ -1647,16 +1693,20 @@
 	;
 
-enum_type:
+enum_type:												// enum
 	ENUM attribute_list_opt '{' enumerator_list comma_opt '}'
-		{ $$ = DeclarationNode::newEnum( nullptr, $4 )->addQualifiers( $2 ); }
-	| ENUM attribute_list_opt no_attr_identifier_or_type_name
-		{
-			typedefTable.makeTypedef( *$3 );
-			$$ = DeclarationNode::newEnum( $3, 0 )->addQualifiers( $2 );
-		}
+		{ $$ = DeclarationNode::newEnum( nullptr, $4, true )->addQualifiers( $2 ); }
 	| ENUM attribute_list_opt no_attr_identifier_or_type_name
 		{ typedefTable.makeTypedef( *$3 ); }
 	  '{' enumerator_list comma_opt '}'
-		{ $$ = DeclarationNode::newEnum( $3, $6 )->addQualifiers( $2 ); }
+		{ $$ = DeclarationNode::newEnum( $3, $6, true )->addQualifiers( $2 ); }
+	| enum_type_nobody
+	;
+
+enum_type_nobody:										// enum - {...}
+	ENUM attribute_list_opt no_attr_identifier_or_type_name
+		{
+			typedefTable.makeTypedef( *$3 );
+			$$ = DeclarationNode::newEnum( $3, 0, false )->addQualifiers( $2 );
+		}
 	;
 
@@ -1759,10 +1809,11 @@
 
 parameter_declaration:
-	declaration_specifier identifier_parameter_declarator assignment_opt
+		// No SUE declaration in parameter list.
+	declaration_specifier_nobody identifier_parameter_declarator assignment_opt
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			$$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr );
 		}
-	| declaration_specifier type_parameter_redeclarator assignment_opt
+	| declaration_specifier_nobody type_parameter_redeclarator assignment_opt
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -1772,7 +1823,7 @@
 
 abstract_parameter_declaration:
-	declaration_specifier assignment_opt
+	declaration_specifier_nobody assignment_opt
 		{ $$ = $1->addInitializer( $2 ? new InitializerNode( $2 ) : nullptr ); }
-	| declaration_specifier abstract_parameter_declarator assignment_opt
+	| declaration_specifier_nobody abstract_parameter_declarator assignment_opt
 		{ $$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr ); }
 	;
@@ -2798,7 +2849,8 @@
 
 cfa_identifier_parameter_ptr:							// CFA
-	ptrref_operator type_specifier
+		// No SUE declaration in parameter list.
+	ptrref_operator type_specifier_nobody
 		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator type_specifier
+	| type_qualifier_list ptrref_operator type_specifier_nobody
 		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
 	| ptrref_operator cfa_abstract_function
@@ -2815,13 +2867,13 @@
 		// Only the first dimension can be empty or have qualifiers. Empty dimension must be factored out due to
 		// shift/reduce conflict with new-style empty (void) function return type.
-	'[' ']' type_specifier
+	'[' ']' type_specifier_nobody
 		{ $$ = $3->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-	| cfa_array_parameter_1st_dimension type_specifier
+	| cfa_array_parameter_1st_dimension type_specifier_nobody
 		{ $$ = $2->addNewArray( $1 ); }
-	| '[' ']' multi_array_dimension type_specifier
+	| '[' ']' multi_array_dimension type_specifier_nobody
 		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-	| cfa_array_parameter_1st_dimension multi_array_dimension type_specifier
+	| cfa_array_parameter_1st_dimension multi_array_dimension type_specifier_nobody
 		{ $$ = $3->addNewArray( $2 )->addNewArray( $1 ); }
-	| multi_array_dimension type_specifier
+	| multi_array_dimension type_specifier_nobody
 		{ $$ = $2->addNewArray( $1 ); }
 
Index: c/Parser/parser.yy.new
===================================================================
--- src/Parser/parser.yy.new	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ 	(revision )
@@ -1,2951 +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.
-//
-// cfa.y --
-//
-// Author           : Peter A. Buhr
-// Created On       : Sat Sep  1 20:22:55 2001
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Feb  4 19:15:25 2017
-// Update Count     : 2318
-//
-
-// This grammar is based on the ANSI99/11 C grammar, specifically parts of EXPRESSION and STATEMENTS, and on the C
-// grammar by James A. Roskind, specifically parts of DECLARATIONS and EXTERNAL DEFINITIONS.  While parts have been
-// copied, important changes have been made in all sections; these changes are sufficient to constitute a new grammar.
-// In particular, this grammar attempts to be more syntactically precise, i.e., it parses less incorrect language syntax
-// that must be subsequently rejected by semantic checks.  Nevertheless, there are still several semantic checks
-// required and many are noted in the grammar. Finally, the grammar is extended with GCC and CFA language extensions.
-
-// Acknowledgments to Richard Bilson, Glen Ditchfield, and Rodolfo Gabriel Esteves who all helped when I got stuck with
-// the grammar.
-
-// The root language for this grammar is ANSI99/11 C. All of ANSI99/11 is parsed, except for:
-//
-// 1. designation with '=' (use ':' instead)
-//
-// Most of the syntactic extensions from ANSI90 to ANSI11 C are marked with the comment "C99/C11". This grammar also has
-// two levels of extensions. The first extensions cover most of the GCC C extensions, except for:
-//
-// 1. designation with and without '=' (use ':' instead)
-// 2. attributes not allowed in parenthesis of declarator
-//
-// All of the syntactic extensions for GCC C are marked with the comment "GCC". The second extensions are for Cforall
-// (CFA), which fixes several of C's outstanding problems and extends C with many modern language concepts. All of the
-// syntactic extensions for CFA C are marked with the comment "CFA". As noted above, there is one unreconcileable
-// parsing problem between C99 and CFA with respect to designators; this is discussed in detail before the "designation"
-// grammar rule.
-
-%{
-#define YYDEBUG_LEXER_TEXT (yylval)						// lexer loads this up each time
-#define YYDEBUG 1										// get the pretty debugging code to compile
-
-#undef __GNUC_MINOR__
-
-#include <cstdio>
-#include <stack>
-#include "lex.h"
-#include "parser.h"
-#include "ParseNode.h"
-#include "TypedefTable.h"
-#include "TypeData.h"
-#include "LinkageSpec.h"
-using namespace std;
-
-extern DeclarationNode * parseTree;
-extern LinkageSpec::Spec linkage;
-extern TypedefTable typedefTable;
-
-stack< LinkageSpec::Spec > linkageStack;
-
-void appendStr( string *to, 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
-
-DeclarationNode * distAttr( DeclarationNode * specifier, DeclarationNode * declList ) { 
-	// distribute declaration_specifier across all declared variables, e.g., static, const, __attribute__.
-	DeclarationNode * cur = declList, * cl = specifier->clone();
-	cur->addType( specifier );
-	for ( cur = dynamic_cast< DeclarationNode * >( cur->get_next() ); cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ) ) {
-		cl->cloneBaseType( cur );
-	} // for
-	delete cl;
-	return declList;
-} // distAttr
-
-void distExt( DeclarationNode * declaration ) { 
-	// distribute EXTENSION across all declarations.
-	for ( DeclarationNode *iter = declaration; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {
-		iter->set_extension( true );
-	} // for
-} // distExt
-%}
-
-//************************* TERMINAL TOKENS ********************************
-
-// keywords
-%token TYPEDEF
-%token AUTO EXTERN REGISTER STATIC
-%token INLINE											// C99
-%token FORTRAN											// C99, extension ISO/IEC 9899:1999 Section J.5.9(1)
-%token CONST VOLATILE
-%token RESTRICT											// C99
-%token FORALL LVALUE									// CFA
-%token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED ZERO_T ONE_T
-%token VALIST											// GCC
-%token BOOL COMPLEX IMAGINARY							// C99
-%token TYPEOF LABEL										// GCC
-%token ENUM STRUCT UNION
-%token OTYPE FTYPE DTYPE TTYPE TRAIT							// CFA
-%token SIZEOF OFFSETOF
-%token ATTRIBUTE EXTENSION								// GCC
-%token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN
-%token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT	// CFA
-%token ASM												// C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
-%token ALIGNAS ALIGNOF ATOMIC GENERIC NORETURN STATICASSERT THREADLOCAL // C11
-
-// names and constants: lexer differentiates between identifier and typedef names
-%token<tok> IDENTIFIER			QUOTED_IDENTIFIER		TYPEDEFname				TYPEGENname
-%token<tok> ATTR_IDENTIFIER		ATTR_TYPEDEFname		ATTR_TYPEGENname
-%token<tok> INTEGERconstant		CHARACTERconstant		STRINGliteral
-// Floating point constant is broken into three kinds of tokens because of the ambiguity with tuple indexing and
-// overloading constants 0/1, e.g., x.1 is lexed as (x)(.1), where (.1) is a factional constant, but is semantically
-// converted into the tuple index (.)(1). e.g., 3.x
-%token<tok>	REALDECIMALconstant	REALFRACTIONconstant	FLOATINGconstant
-%token<tok> ZERO				ONE						// CFA
-
-// multi-character operators
-%token ARROW											// ->
-%token ICR DECR											// ++	--
-%token LS RS											// <<	>>
-%token LE GE EQ NE										// <=	>=	==	!=
-%token ANDAND OROR										// &&	||
-%token ELLIPSIS											// ...
-
-%token MULTassign	DIVassign	MODassign				// *=	/=	%=/
-%token PLUSassign	MINUSassign							// +=	-=
-%token LSassign		RSassign							// <<=	>>=
-%token ANDassign	ERassign	ORassign				// &=	^=	|=
-
-%token ATassign											// @=
-
-// Types declaration
-%union
-{
-	Token tok;
-	ParseNode * pn;
-	ExpressionNode * en;
-	DeclarationNode * decl;
-	DeclarationNode::Aggregate aggKey;
-	DeclarationNode::TypeClass tclass;
-	StatementNode * sn;
-	ConstantExpr * constant;
-	ForCtl * fctl;
-	LabelNode * label;
-	InitializerNode * in;
-	OperKinds op;
-	std::string * str;
-	bool flag;
-}
-
-%type<tok> identifier  no_01_identifier  no_attr_identifier zero_one
-%type<tok> identifier_or_type_name  no_attr_identifier_or_type_name  no_01_identifier_or_type_name  attr_name
-%type<constant> string_literal
-%type<str> string_literal_list
-
-// expressions
-%type<en> constant
-%type<en> tuple							tuple_expression_list
-%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
-%type<en> relational_expression			equality_expression			AND_expression				exclusive_OR_expression
-%type<en> inclusive_OR_expression		logical_AND_expression		logical_OR_expression		conditional_expression
-%type<en> constant_expression			assignment_expression		assignment_expression_opt
-%type<en> comma_expression				comma_expression_opt
-%type<en> argument_expression_list		argument_expression			assignment_opt
-%type<fctl> for_control_expression
-%type<en> subrange
-%type<decl> asm_name_opt
-%type<en> asm_operands_opt asm_operands_list asm_operand
-%type<label> label_list
-%type<en> asm_clobbers_list_opt
-%type<flag> asm_volatile_opt
-
-// statements
-%type<sn> labeled_statement				compound_statement			expression_statement		selection_statement
-%type<sn> iteration_statement			jump_statement				exception_statement			asm_statement
-%type<sn> fall_through_opt				fall_through
-%type<sn> statement						statement_list
-%type<sn> block_item_list				block_item
-%type<sn> case_clause
-%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<sn> handler_list					handler_clause				finally_clause
-
-// declarations
-%type<decl> abstract_declarator abstract_ptr abstract_array abstract_function array_dimension multi_array_dimension
-%type<decl> abstract_parameter_declarator abstract_parameter_ptr abstract_parameter_array abstract_parameter_function array_parameter_dimension array_parameter_1st_dimension
-%type<decl> abstract_parameter_declaration
-
-%type<aggKey> aggregate_key
-%type<decl>  aggregate_type
-
-%type<decl> assertion assertion_list_opt
-
-%type<en>   bit_subrange_size_opt bit_subrange_size
-
-%type<decl> basic_declaration_specifier basic_type_name basic_type_specifier direct_type_name indirect_type_name
-
-%type<decl> trait_declaration trait_declaration_list trait_declaring_list trait_specifier
-
-%type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list
-%type<decl> declaration_specifier declarator declaring_list
-
-%type<decl> elaborated_type
-
-%type<decl> enumerator_list enum_type
-%type<en> enumerator_value_opt
-
-%type<decl> exception_declaration external_definition external_definition_list external_definition_list_opt
-
-%type<decl> field_declaration field_declaration_list field_declarator field_declaring_list
-%type<en> field field_list field_name fraction_constants
-
-%type<decl> external_function_definition function_definition function_array function_declarator function_no_ptr function_ptr
-
-%type<decl> identifier_parameter_array identifier_parameter_declarator identifier_parameter_function
-%type<decl> identifier_parameter_ptr identifier_list
-
-%type<decl> cfa_abstract_array cfa_abstract_declarator_no_tuple cfa_abstract_declarator_tuple
-%type<decl> cfa_abstract_function cfa_abstract_parameter_declaration cfa_abstract_parameter_list
-%type<decl> cfa_abstract_ptr cfa_abstract_tuple
-
-%type<decl> cfa_array_parameter_1st_dimension
-
-%type<decl> cfa_trait_declaring_list cfa_declaration cfa_field_declaring_list
-%type<decl> cfa_function_declaration cfa_function_return cfa_function_specifier
-
-%type<decl> cfa_identifier_parameter_array cfa_identifier_parameter_declarator_no_tuple
-%type<decl> cfa_identifier_parameter_declarator_tuple cfa_identifier_parameter_ptr
-
-%type<decl> cfa_parameter_declaration cfa_parameter_list cfa_parameter_type_list cfa_parameter_type_list_opt
-
-%type<decl> cfa_typedef_declaration cfa_variable_declaration cfa_variable_specifier
-
-%type<decl> c_declaration
-%type<decl> KR_function_declarator KR_function_no_ptr KR_function_ptr KR_function_array
-%type<decl> KR_declaration_list KR_declaration_list_opt
-
-%type<decl> parameter_declaration parameter_list parameter_type_list
-%type<decl> parameter_type_list_opt
-
-%type<decl> paren_identifier paren_type
-
-%type<decl> storage_class storage_class_list
-
-%type<decl> sue_declaration_specifier sue_type_specifier
-
-%type<tclass> type_class
-%type<decl> type_declarator type_declarator_name type_declaring_list
-
-%type<decl> typedef typedef_type_specifier typedef_declaration typedef_declaration_specifier typedef_expression
-
-%type<decl> variable_type_redeclarator type_ptr type_array type_function
-
-%type<decl> type_parameter_redeclarator type_parameter_ptr type_parameter_array type_parameter_function
-%type<decl> typegen_declaration_specifier typegen_type_specifier typegen_name
-
-%type<decl> type_name type_name_no_function
-%type<decl> type_parameter type_parameter_list
-
-%type<en> type_name_list
-
-%type<decl> type_qualifier type_qualifier_name type_qualifier_list type_qualifier_list_opt type_specifier
-
-%type<decl> variable_declarator variable_ptr variable_array variable_function
-%type<decl> variable_abstract_declarator variable_abstract_ptr variable_abstract_array variable_abstract_function
-
-%type<decl> attribute_list_opt attribute_list attribute_name_list attribute attribute_name
-
-%type<flag> extension_opt
-
-// initializers
-%type<in>  initializer initializer_list initializer_opt
-
-// designators
-%type<en>  designator designator_list designation
-
-
-// Handle single shift/reduce conflict for dangling else by shifting the ELSE token. For example, this string
-// is ambiguous:
-// .---------.				matches IF '(' comma_expression ')' statement
-// if ( C ) S1 else S2
-// `-----------------'		matches IF '(' comma_expression ')' statement ELSE statement */
-
-%nonassoc THEN	// rule precedence for IF '(' comma_expression ')' statement
-%nonassoc ELSE	// token precedence for start of else clause in IF statement
-
-%start translation_unit									// parse-tree root
-
-%%
-//************************* Namespace Management ********************************
-
-// The grammar in the ANSI C standard is not strictly context-free, since it relies upon the distinct terminal symbols
-// "identifier" and "TYPEDEFname" that are lexically identical.  While it is possible to write a purely context-free
-// grammar, such a grammar would obscure the relationship between syntactic and semantic constructs.  Hence, this
-// grammar uses the ANSI style.
-//
-// Cforall compounds this problem by introducing type names local to the scope of a declaration (for instance, those
-// introduced through "forall" qualifiers), and by introducing "type generators" -- parameterized types.  This latter
-// type name creates a third class of identifiers that must be distinguished by the scanner.
-//
-// Since the scanner cannot distinguish among the different classes of identifiers without some context information, it
-// accesses a data structure (TypedefTable) to allow classification of an identifier that it has just read.  Semantic
-// actions during the parser update this data structure when the class of identifiers change.
-//
-// Because the Cforall language is block-scoped, there is the possibility that an identifier can change its class in a
-// local scope; it must revert to its original class at the end of the block.  Since type names can be local to a
-// particular declaration, each declaration is itself a scope.  This requires distinguishing between type names that are
-// local to the current declaration scope and those that persist past the end of the declaration (i.e., names defined in
-// "typedef" or "otype" declarations).
-//
-// The non-terminals "push" and "pop" derive the empty string; their only use is to denote the opening and closing of
-// scopes.  Every push must have a matching pop, although it is regrettable the matching pairs do not always occur
-// within the same rule.  These non-terminals may appear in more contexts than strictly necessary from a semantic point
-// of view.  Unfortunately, these extra rules are necessary to prevent parsing conflicts -- the parser may not have
-// enough context and look-ahead information to decide whether a new scope is necessary, so the effect of these extra
-// rules is to open a new scope unconditionally.  As the grammar evolves, it may be neccesary to add or move around
-// "push" and "pop" nonterminals to resolve conflicts of this sort.
-
-push:
-		{ typedefTable.enterScope(); }
-	;
-
-pop:
-		{ typedefTable.leaveScope(); }
-	;
-
-//************************* CONSTANTS ********************************
-
-constant:
-		// ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
-	INTEGERconstant								{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
-	| REALDECIMALconstant						{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
-	| REALFRACTIONconstant						{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
-	| FLOATINGconstant							{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
-	| CHARACTERconstant							{ $$ = new ExpressionNode( build_constantChar( *$1 ) ); }
-	;
-
-identifier:
-	IDENTIFIER
-	| ATTR_IDENTIFIER									// CFA
-	| zero_one											// CFA
-	;
-
-no_01_identifier:
-	IDENTIFIER
-	| ATTR_IDENTIFIER									// CFA
-	;
-
-no_attr_identifier:
-	IDENTIFIER
-	| zero_one											// CFA
-	;
-
-zero_one:												// CFA
-	ZERO
-	| ONE
-	;
-
-string_literal:
-	string_literal_list							{ $$ = build_constantStr( *$1 ); }
-	;
-
-string_literal_list:									// juxtaposed strings are concatenated
-	STRINGliteral								{ $$ = $1; } // conversion from tok to str
-	| string_literal_list STRINGliteral
-		{
-			appendStr( $1, $2 );						// append 2nd juxtaposed string to 1st
-			delete $2;									// allocated by lexer
-			$$ = $1;									// conversion from tok to str
-		}
-	;
-
-//************************* EXPRESSIONS ********************************
-
-primary_expression:
-	IDENTIFIER											// typedef name cannot be used as a variable name
-		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
-	| zero_one
-		{ $$ = new ExpressionNode( build_constantZeroOne( *$1 ) ); }
-	| tuple
-	| '(' comma_expression ')'
-		{ $$ = $2; }
-	| '(' compound_statement ')'						// GCC, lambda expression
-		{ $$ = new ExpressionNode( build_valexpr( $2 ) ); }
-	;
-
-postfix_expression:
-	primary_expression
-	| postfix_expression '[' push assignment_expression pop ']'
-		// CFA, comma_expression disallowed in this context because it results in a common user error: subscripting a
-		// matrix with x[i,j] instead of x[i][j]. While this change is not backwards compatible, there seems to be
-		// 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 ExpressionNode( build_binary_val( OperKinds::Index, $1, $4 ) ); }
-	| postfix_expression '(' argument_expression_list ')'
-		{ $$ = new ExpressionNode( build_func( $1, $3 ) ); }
-	| postfix_expression '.' no_attr_identifier
-		{ $$ = new ExpressionNode( build_fieldSel( $1, build_varref( $3 ) ) ); }
-	| postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
-		{ $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $5 ) ) ); }
-	| postfix_expression REALFRACTIONconstant			// CFA, tuple index
-		{ $$ = new ExpressionNode( build_fieldSel( $1, build_field_name_REALFRACTIONconstant( *$2 ) ) ); }
-	| postfix_expression ARROW no_attr_identifier
-		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
-	| postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
-			{ $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $5 ) ) ); }
-	| postfix_expression ICR
-	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
-	| postfix_expression DECR
-	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); }
-	| '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
-		{ $$ = new ExpressionNode( build_compoundLiteral( $2, new InitializerNode( $5, true ) ) ); }
-	| postfix_expression '{' argument_expression_list '}' // CFA
-		{
-			Token fn;
-			fn.str = new std::string( "?{}" );			// location undefined - use location of '{'?
-			$$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ) );
-		}
-	;
-
-argument_expression_list:
-	argument_expression
-	| argument_expression_list ',' argument_expression
-		{ $$ = (ExpressionNode *)( $1->set_last( $3 )); }
-	;
-
-argument_expression:
-	// empty
-		{ $$ = nullptr; }								// use default argument
-	| assignment_expression
-	;
-
-field_list:												// CFA, tuple field selector
-	field
-	| field_list ',' field						{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
-	;
-
-field:													// CFA, tuple field selector
-	field_name
-	| REALDECIMALconstant field
-		{ $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *$1 ) ), maybeMoveBuild<Expression>( $2 ) ) ); }
-	| REALDECIMALconstant '[' push field_list pop ']'
-		{ $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *$1 ) ), build_tuple( $4 ) ) ); }
-	| field_name '.' field
-		{ $$ = new ExpressionNode( build_fieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
-	| field_name '.' '[' push field_list pop ']'
-		{ $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $5 ) ) ); }
-	| field_name ARROW field
-		{ $$ = new ExpressionNode( build_pfieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
-	| field_name ARROW '[' push field_list pop ']'
-		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $5 ) ) ); }
-	;
-
-field_name:
-	INTEGERconstant	fraction_constants
-		{ $$ = new ExpressionNode( build_field_name_fraction_constants( build_constantInteger( *$1 ), $2 ) ); }
-	| FLOATINGconstant fraction_constants
-		{ $$ = new ExpressionNode( build_field_name_fraction_constants( build_field_name_FLOATINGconstant( *$1 ), $2 ) ); }
-	| no_attr_identifier fraction_constants
-		{
-			if( (*$1) == "0" || (*$1) == "1" ) {
-				$$ = new ExpressionNode( build_field_name_fraction_constants( build_constantZeroOne( *$1 ), $2 ) );
-			} else {
-				$$ = new ExpressionNode( build_field_name_fraction_constants( build_varref( $1 ), $2 ) );
-			}
-		}
-	;
-
-fraction_constants:
-	// empty
-		{ $$ = nullptr; }
-	| fraction_constants REALFRACTIONconstant
-		{
-			Expression * constant = build_field_name_REALFRACTIONconstant( *$2 );
-			$$ = $1 != nullptr ? new ExpressionNode( build_fieldSel( $1,  constant ) ) : new ExpressionNode( constant );
-		}
-	;
-
-unary_expression:
-	postfix_expression
-		// first location where constant/string can have operator applied: sizeof 3/sizeof "abc" still requires
-		// semantics checks, e.g., ++3, 3--, *3, &&3
-	| constant
-		{ $$ = $1; }
-	| string_literal
-		{ $$ = new ExpressionNode( $1 ); }
-	| EXTENSION cast_expression							// GCC
-		{ $$ = $2->set_extension( true ); }
-		// '*' ('&') 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 ExpressionNode( build_unary_val( $1, $2 ) ); }
-	| ICR unary_expression
-	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::Incr, $2 ) ); }
-	| DECR unary_expression
-	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::Decr, $2 ) ); }
-	| SIZEOF unary_expression
-		{ $$ = new ExpressionNode( build_sizeOfexpr( $2 ) ); }
-	| SIZEOF '(' type_name_no_function ')'
-		{ $$ = 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 ExpressionNode( build_offsetOf( $3, build_varref( $5 ) ) ); }
-	| ATTR_IDENTIFIER
-		{ $$ = 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 ExpressionNode( build_attrtype( build_varref( $1 ), $3 ) ); }
-//	| ANDAND IDENTIFIER									// GCC, address of label
-//		{ $$ = new ExpressionNode( new OperatorNode( OperKinds::LabelAddress ), new ExpressionNode( build_varref( $2, true ) ); }
-	;
-
-ptrref_operator:
-	'*'											{ $$ = OperKinds::PointTo; }
-	| '&'										{ $$ = OperKinds::AddressOf; }
-		// GCC, address of label must be handled by semantic check for ref,ref,label
-//	| ANDAND									{ $$ = OperKinds::And; }
-	;
-
-unary_operator:
-	'+'											{ $$ = OperKinds::UnPlus; }
-	| '-'										{ $$ = OperKinds::UnMinus; }
-	| '!'										{ $$ = OperKinds::Neg; }
-	| '~'										{ $$ = OperKinds::BitNeg; }
-	;
-
-cast_expression:
-	unary_expression
-	| '(' type_name_no_function ')' cast_expression
-		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
-//	| '(' type_name_no_function ')' tuple
-//		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
-	;
-
-multiplicative_expression:
-	cast_expression
-	| multiplicative_expression '*' cast_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); }
-	| multiplicative_expression '/' cast_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Div, $1, $3 ) ); }
-	| multiplicative_expression '%' cast_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
-	;
-
-additive_expression:
-	multiplicative_expression
-	| additive_expression '+' multiplicative_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); }
-	| additive_expression '-' multiplicative_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); }
-	;
-
-shift_expression:
-	additive_expression
-	| shift_expression LS additive_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); }
-	| shift_expression RS additive_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); }
-	;
-
-relational_expression:
-	shift_expression
-	| relational_expression '<' shift_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); }
-	| relational_expression '>' shift_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); }
-	| relational_expression LE shift_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); }
-	| relational_expression GE shift_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); }
-	;
-
-equality_expression:
-	relational_expression
-	| equality_expression EQ relational_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); }
-	| equality_expression NE relational_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); }
-	;
-
-AND_expression:
-	equality_expression
-	| AND_expression '&' equality_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); }
-	;
-
-exclusive_OR_expression:
-	AND_expression
-	| exclusive_OR_expression '^' AND_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); }
-	;
-
-inclusive_OR_expression:
-	exclusive_OR_expression
-	| inclusive_OR_expression '|' exclusive_OR_expression
-		{ $$ = new ExpressionNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); }
-	;
-
-logical_AND_expression:
-	inclusive_OR_expression
-	| logical_AND_expression ANDAND inclusive_OR_expression
-		{ $$ = new ExpressionNode( build_and_or( $1, $3, true ) ); }
-	;
-
-logical_OR_expression:
-	logical_AND_expression
-	| logical_OR_expression OROR logical_AND_expression
-		{ $$ = new ExpressionNode( build_and_or( $1, $3, false ) ); }
-	;
-
-conditional_expression:
-	logical_OR_expression
-	| logical_OR_expression '?' comma_expression ':' conditional_expression
-		{ $$ = 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 ExpressionNode( build_cond( $1, $1, $4 ) ); }
-//	| logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
-//		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
-	;
-
-constant_expression:
-	conditional_expression
-	;
-
-assignment_expression:
-		// CFA, assignment is separated from assignment_operator to ensure no assignment operations for tuples
-	conditional_expression
-	| unary_expression assignment_operator assignment_expression
-		{ $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); }
-//	| tuple assignment_opt								// CFA, tuple expression
-//		{ $$ = ( $2 == 0 ) ? $1 : new ExpressionNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
-	;
-
-assignment_expression_opt:
-	// empty
-		{ $$ = nullptr; }
-	| assignment_expression
-	;
-
-assignment_operator:
-	'='											{ $$ = OperKinds::Assign; }
-	| ATassign									{ $$ = OperKinds::AtAssn; }
-	| 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; }
-	;
-
-tuple:													// CFA, tuple
-		// CFA, one assignment_expression is factored out of comma_expression to eliminate a shift/reduce conflict with
-		// comma_expression in cfa_identifier_parameter_array and cfa_abstract_array
-//	'[' ']'
-//		{ $$ = new ExpressionNode( build_tuple() ); }
-//	'[' push assignment_expression pop ']'
-//		{ $$ = new ExpressionNode( build_tuple( $3 ) ); }
-	'[' push ',' tuple_expression_list pop ']'
-		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); }
-	| '[' push assignment_expression ',' tuple_expression_list pop ']'
-		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); }
-	;
-
-tuple_expression_list:
-	assignment_expression_opt
-	| tuple_expression_list ',' assignment_expression_opt
-		{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
-	;
-
-comma_expression:
-	assignment_expression
-	| comma_expression ',' assignment_expression
-		{ $$ = new ExpressionNode( build_comma( $1, $3 ) ); }
-	;
-
-comma_expression_opt:
-	// empty
-		{ $$ = nullptr; }
-	| comma_expression
-	;
-
-//*************************** STATEMENTS *******************************
-
-statement:
-	labeled_statement
-	| compound_statement
-	| expression_statement						{ $$ = $1; }
-	| selection_statement
-	| iteration_statement
-	| jump_statement
-	| exception_statement
-	| asm_statement
-	| '^' postfix_expression '{' argument_expression_list '}' ';' // CFA
-		{
-			Token fn;
-			fn.str = new string( "^?{}" );				// location undefined
-			$$ = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) ) ) );
-		}
-	;
-
-labeled_statement:
-		// labels cannot be identifiers 0 or 1 or ATTR_IDENTIFIER
-	identifier_or_type_name ':' attribute_list_opt statement
-		{
-			$$ = $4->add_label( $1, $3 );
-		}
-	;
-
-compound_statement:
-	'{' '}'
-		{ $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); }
-	| '{'
-		// Two scopes are necessary because the block itself has a scope, but every declaration within the block also
-		// requires its own scope.
-	  push push
-	  local_label_declaration_opt						// GCC, local labels
-	  block_item_list									// C99, intermix declarations and statements
-	  pop '}'
-		{ $$ = new StatementNode( build_compound( $5 ) ); }
-	;
-
-block_item_list:										// C99
-	block_item
-	| block_item_list push block_item
-		{ if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } }
-	;
-
-block_item:
-	declaration											// CFA, new & old style declarations
-		{ $$ = new StatementNode( $1 ); }
-	| EXTENSION declaration								// GCC
-		{
-			distExt( $2 );
-			$$ = new StatementNode( $2 );
-		}
-	| function_definition
-		{ $$ = new StatementNode( $1 ); }
-	| EXTENSION function_definition						// GCC
-		{
-			distExt( $2 );
-			$$ = new StatementNode( $2 );
-		}
-	| statement pop
-	;
-
-statement_list:
-	statement
-	| statement_list statement
-		{ if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } }
-	;
-
-expression_statement:
-	comma_expression_opt ';'
-		{ $$ = new StatementNode( build_expr( $1 ) ); }
-	;
-
-selection_statement:
-	IF '(' comma_expression ')' statement				%prec THEN
-		// explicitly deal with the shift/reduce conflict on if/else
-		{ $$ = new StatementNode( build_if( $3, $5, nullptr ) ); }
-	| IF '(' comma_expression ')' statement ELSE statement
-		{ $$ = new StatementNode( build_if( $3, $5, $7 ) ); }
-	| SWITCH '(' comma_expression ')' case_clause		// CFA
-		{ $$ = new StatementNode( build_switch( $3, $5 ) ); }
-	| SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
-		{
-			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. The change also applies to choose
-			// statement.
-			$$ = $7 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
-		}
-	| CHOOSE '(' comma_expression ')' case_clause		// CFA
-		{ $$ = new StatementNode( build_switch( $3, $5 ) ); }
-	| CHOOSE '(' comma_expression ')' '{' push declaration_list_opt choose_clause_list_opt '}' // CFA
-		{
-			StatementNode *sw = new StatementNode( build_switch( $3, $8 ) );
-			$$ = $7 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
-		}
-	;
-
-// CASE and DEFAULT clauses are only allowed in the SWITCH statement, precluding Duff's device. In addition, a case
-// clause allows a list of values and subranges.
-
-case_value:												// CFA
-	constant_expression							{ $$ = $1; }
-	| constant_expression ELLIPSIS constant_expression	// GCC, subrange
-		{ $$ = new ExpressionNode( build_range( $1, $3 ) ); }
-	| subrange											// CFA, subrange
-	;
-
-case_value_list:										// CFA
-	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 ':'					{ $$ = $2; }
-	| DEFAULT ':'								{ $$ = new StatementNode( build_default() ); }
-		// A semantic check is required to ensure only one default clause per switch/choose statement.
-	;
-
-case_label_list:										// CFA
-	case_label
-	| case_label_list case_label				{ $$ = (StatementNode *)( $1->set_last( $2 )); }
-	;
-
-case_clause:											// CFA
-	case_label_list statement					{ $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); }
-	;
-
-switch_clause_list_opt:									// CFA
-	// empty
-		{ $$ = nullptr; }
-	| switch_clause_list
-	;
-
-switch_clause_list:										// CFA
-	case_label_list statement_list
-		{ $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); }
-	| switch_clause_list case_label_list statement_list
-		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( $3 ) ) ) ) ); }
-	;
-
-choose_clause_list_opt:									// CFA
-	// empty
-		{ $$ = nullptr; }
-	| choose_clause_list
-	;
-
-choose_clause_list:										// CFA
-	case_label_list fall_through
-		{ $$ = $1->append_last_case( $2 ); }
-	| case_label_list statement_list fall_through_opt
-		{ $$ = $1->append_last_case( new StatementNode( build_compound( (StatementNode *)$2->set_last( $3 ) ) ) ); }
-	| choose_clause_list case_label_list fall_through
-		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( $3 ))); }
-	| choose_clause_list case_label_list statement_list fall_through_opt
-		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( (StatementNode *)$3->set_last( $4 ) ) ) ) ) ); }
-	;
-
-fall_through_opt:										// CFA
-	// empty
-		{ $$ = new StatementNode( build_branch( BranchStmt::Break ) ); } // insert implicit break
-	| fall_through
-	;
-
-fall_through:											// CFA
-	FALLTHRU
-		{ $$ = nullptr; }
-	| FALLTHRU ';'
-		{ $$ = nullptr; }
-	;
-
-iteration_statement:
-	WHILE '(' comma_expression ')' statement
-		{ $$ = new StatementNode( build_while( $3, $5 ) ); }
-	| DO statement WHILE '(' comma_expression ')' ';'
-		{ $$ = new StatementNode( build_while( $5, $2, true ) ); }
-	| FOR '(' push for_control_expression ')' statement
-		{ $$ = new StatementNode( build_for( $4, $6 ) ); }
-	;
-
-for_control_expression:
-	comma_expression_opt pop ';' comma_expression_opt ';' comma_expression_opt
-		{ $$ = new ForCtl( $1, $4, $6 ); }
-	| declaration comma_expression_opt ';' comma_expression_opt // C99
-		{ $$ = new ForCtl( $1, $2, $4 ); }
- 	;
-
-jump_statement:
-	GOTO identifier_or_type_name ';'
-		{ $$ = 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( build_computedgoto( $3 ) ); }
-	| CONTINUE ';'
-		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
-		{ $$ = new StatementNode( build_branch( BranchStmt::Continue ) ); }
-	| CONTINUE identifier_or_type_name ';'				// 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( build_branch( $2, BranchStmt::Continue ) ); }
-	| BREAK ';'
-		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
-		{ $$ = new StatementNode( build_branch( BranchStmt::Break ) ); }
-	| BREAK identifier_or_type_name ';'					// 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( build_branch( $2, BranchStmt::Break ) ); }
-	| RETURN comma_expression_opt ';'
-		{ $$ = 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( build_try( $2, $3, 0 ) ); }
-	| TRY compound_statement finally_clause
-		{ $$ = new StatementNode( build_try( $2, 0, $3 ) ); }
-	| TRY compound_statement handler_list finally_clause
-		{ $$ = new StatementNode( build_try( $2, $3, $4 ) ); }
-	;
-
-handler_list:
-	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
-		{ $$ = new StatementNode( build_catch( 0, $5, true ) ); }
-	| handler_clause CATCH '(' ELLIPSIS ')' compound_statement
-		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }
-	| CATCHRESUME '(' ELLIPSIS ')' compound_statement
-		{ $$ = new StatementNode( build_catch( 0, $5, true ) ); }
-	| handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement
-		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }
-	;
-
-handler_clause:
-	CATCH '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = new StatementNode( build_catch( $5, $8 ) ); }
-	| handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
-	| CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = new StatementNode( build_catch( $5, $8 ) ); }
-	| handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
-	;
-
-finally_clause:
-	FINALLY compound_statement
-		{
-			$$ = new StatementNode( build_finally( $2 ) );
-		}
-	;
-
-exception_declaration:
-		// A semantic check is required to ensure type_specifier does not create a new type, e.g.:
-		//
-		//		catch ( struct { int i; } x ) ...
-		//
-		// This new type cannot catch any thrown type because of name equivalence among types.
-	type_specifier
-	| type_specifier declarator
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $2->addType( $1 );
-		}
-	| type_specifier variable_abstract_declarator
-		{ $$ = $2->addType( $1 ); }
-	| cfa_abstract_declarator_tuple no_attr_identifier	// CFA
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $1->addName( $2 );
-		}
-	| cfa_abstract_declarator_tuple						// CFA
-	;
-
-asm_statement:
-	ASM asm_volatile_opt '(' string_literal ')' ';'
-		{ $$ = new StatementNode( build_asmstmt( $2, $4, 0 ) ); }
-	| ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ')' ';' // remaining GCC
-		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6 ) ); }
-	| ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ':' asm_operands_opt ')' ';'
-		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8 ) ); }
-	| ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ':' asm_operands_opt ':' asm_clobbers_list_opt ')' ';'
-		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8, $10 ) ); }
-	| ASM asm_volatile_opt GOTO '(' string_literal ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';'
-		{ $$ = new StatementNode( build_asmstmt( $2, $5, 0, $8, $10, $12 ) ); }
-	;
-
-asm_volatile_opt:										// GCC
-	// empty
-		{ $$ = false; }
-	| VOLATILE
-		{ $$ = true; }
-	;
-
-asm_operands_opt:										// GCC
-	// empty
-		{ $$ = nullptr; }								// use default argument
-	| asm_operands_list
-	;
-
-asm_operands_list:										// GCC
-	asm_operand
-	| asm_operands_list ',' asm_operand
-		{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
-	;
-
-asm_operand:											// GCC
-	string_literal '(' constant_expression ')'
-		{ $$ = new ExpressionNode( build_asmexpr( 0, $1, $3 ) ); }
-	| '[' constant_expression ']' string_literal '(' constant_expression ')'
-		{ $$ = new ExpressionNode( build_asmexpr( $2, $4, $6 ) ); }
-	;
-
-asm_clobbers_list_opt:									// GCC
-	// empty
-		{ $$ = nullptr; }								// use default argument
-	| string_literal
-		{ $$ = new ExpressionNode( $1 ); }
-	| asm_clobbers_list_opt ',' string_literal
-		// set_last return ParseNode *
-		{ $$ = (ExpressionNode *)$1->set_last( new ExpressionNode( $3 ) ); }
-	;
-
-label_list:
-	no_attr_identifier
-		{
-			$$ = new LabelNode(); $$->labels.push_back( *$1 );
-			delete $1;									// allocated by lexer
-		}
-	| label_list ',' no_attr_identifier
-		{
-			$$ = $1; $1->labels.push_back( *$3 );
-			delete $3;									// allocated by lexer
-		}
-	;
-
-//******************************* DECLARATIONS *********************************
-
-declaration_list_opt:									// used at beginning of switch statement
-	pop
-		{ $$ = nullptr; }
-	| declaration_list
-	;
-
-declaration_list:
-	declaration
-	| declaration_list push declaration
-		{ $$ = $1->appendList( $3 ); }
-	;
-
-KR_declaration_list_opt:								// used to declare parameter types in K&R style functions
-	pop
-		{ $$ = nullptr; }
-	| KR_declaration_list
-	;
-
-KR_declaration_list:
-	c_declaration
-	| KR_declaration_list push c_declaration
-		{ $$ = $1->appendList( $3 ); }
-	;
-
-local_label_declaration_opt:							// GCC, local label
-	// empty
-	| local_label_declaration_list
-	;
-
-local_label_declaration_list:							// GCC, local label
-	LABEL local_label_list ';'
-	| local_label_declaration_list LABEL local_label_list ';'
-	;
-
-local_label_list:										// GCC, local label
-	no_attr_identifier_or_type_name				{}
-	| local_label_list ',' no_attr_identifier_or_type_name {}
-	;
-
-declaration:											// CFA, new & old style declarations
-	cfa_declaration
-	| c_declaration
-	;
-
-// C declaration syntax is notoriously confusing and error prone. Cforall provides its own type, variable and function
-// declarations. CFA declarations use the same declaration tokens as in C; however, CFA places declaration modifiers to
-// the left of the base type, while C declarations place modifiers to the right of the base type. CFA declaration
-// modifiers are interpreted from left to right and the entire type specification is distributed across all variables in
-// the declaration list (as in Pascal).  ANSI C and the new CFA declarations may appear together in the same program
-// block, but cannot be mixed within a specific declaration.
-//
-//			CFA					C
-//		[10] int x;			int x[10];		// array of 10 integers
-//		[10] * char y;		char *y[10];	// array of 10 pointers to char
-
-cfa_declaration:										// CFA
-	cfa_variable_declaration pop ';'
-	| cfa_typedef_declaration pop ';'
-	| cfa_function_declaration pop ';'
-	| type_declaring_list pop ';'
-	| trait_specifier pop ';'
-	;
-
-cfa_variable_declaration:								// CFA
-	cfa_variable_specifier initializer_opt
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $1->addInitializer( $2 );
-		}
-	| declaration_qualifier_list cfa_variable_specifier initializer_opt
-		// declaration_qualifier_list also includes type_qualifier_list, so a semantic check is necessary to preclude
-		// them as a type_qualifier cannot appear in that context.
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $2->addQualifiers( $1 )->addInitializer( $3 );;
-		}
-	| cfa_variable_declaration pop ',' push identifier_or_type_name initializer_opt
-		{
-			typedefTable.addToEnclosingScope( *$5, TypedefTable::ID );
-			$$ = $1->appendList( $1->cloneType( $5 )->addInitializer( $6 ) );
-		}
-	;
-
-cfa_variable_specifier:									// CFA
-		// A semantic check is required to ensure asm_name only appears on declarations with implicit or explicit static
-		// storage-class
-	cfa_abstract_declarator_no_tuple identifier_or_type_name asm_name_opt
-		{
-			typedefTable.setNextIdentifier( *$2 );
-			$$ = $1->addName( $2 )->addAsmName( $3 );
-		}
-	| cfa_abstract_tuple identifier_or_type_name asm_name_opt
-		{
-			typedefTable.setNextIdentifier( *$2 );
-			$$ = $1->addName( $2 )->addAsmName( $3 );
-		}
-	| type_qualifier_list cfa_abstract_tuple identifier_or_type_name asm_name_opt
-		{
-			typedefTable.setNextIdentifier( *$3 );
-			$$ = $2->addQualifiers( $1 )->addName( $3 )->addAsmName( $4 );
-		}
-	;
-
-cfa_function_declaration:								// CFA
-	cfa_function_specifier
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $1;
-		}
-	| type_qualifier_list cfa_function_specifier
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $2->addQualifiers( $1 );
-		}
-	| declaration_qualifier_list cfa_function_specifier
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $2->addQualifiers( $1 );
-		}
-	| declaration_qualifier_list type_qualifier_list cfa_function_specifier
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $3->addQualifiers( $1 )->addQualifiers( $2 );
-		}
-	| cfa_function_declaration pop ',' push identifier_or_type_name
-		{
-			typedefTable.addToEnclosingScope( *$5, TypedefTable::ID );
-			$$ = $1->appendList( $1->cloneType( $5 ) );
-		}
-	;
-
-cfa_function_specifier:									// CFA
-//	'[' ']' identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')' // S/R conflict
-//		{
-//			$$ = DeclarationNode::newFunction( $3, DeclarationNode::newTuple( 0 ), $6, 0, true );
-//		}
-//	'[' ']' identifier '(' push cfa_parameter_type_list_opt pop ')'
-//		{
-//			typedefTable.setNextIdentifier( *$5 );
-//			$$ = DeclarationNode::newFunction( $5, DeclarationNode::newTuple( 0 ), $8, 0, true );
-//		}
-//	| '[' ']' TYPEDEFname '(' push cfa_parameter_type_list_opt pop ')'
-//		{
-//			typedefTable.setNextIdentifier( *$5 );
-//			$$ = DeclarationNode::newFunction( $5, DeclarationNode::newTuple( 0 ), $8, 0, true );
-//		}
-//	| '[' ']' typegen_name
-		// identifier_or_type_name must be broken apart because of the sequence:
-		//
-		//   '[' ']' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
-		//   '[' ']' type_specifier
-		//
-		// type_specifier can resolve to just TYPEDEFname (e.g., typedef int T; int f( T );). Therefore this must be
-		// flattened to allow lookahead to the '(' without having to reduce identifier_or_type_name.
-	cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')'
-		// To obtain LR(1 ), this rule must be factored out from function return type (see cfa_abstract_declarator).
-		{
-			$$ = DeclarationNode::newFunction( $2, $1, $5, 0, true );
-		}
-	| cfa_function_return identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')'
-		{
-			$$ = DeclarationNode::newFunction( $2, $1, $5, 0, true );
-		}
-	;
-
-cfa_function_return:									// CFA
-	'[' push cfa_parameter_list pop ']'
-		{ $$ = DeclarationNode::newTuple( $3 ); }
-	| '[' push cfa_parameter_list pop ',' push cfa_abstract_parameter_list pop ']'
-		// To obtain LR(1 ), the last cfa_abstract_parameter_list is added into this flattened rule to lookahead to the
-		// ']'.
-		{ $$ = DeclarationNode::newTuple( $3->appendList( $7 ) ); }
-	;
-
-cfa_typedef_declaration:								// CFA
-	TYPEDEF cfa_variable_specifier
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::TD );
-			$$ = $2->addTypedef();
-		}
-	| TYPEDEF cfa_function_specifier
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::TD );
-			$$ = $2->addTypedef();
-		}
-	| cfa_typedef_declaration pop ',' push no_attr_identifier
-		{
-			typedefTable.addToEnclosingScope( *$5, TypedefTable::TD );
-			$$ = $1->appendList( $1->cloneType( $5 ) );
-		}
-	;
-
-// Traditionally typedef is part of storage-class specifier for syntactic convenience only. Here, it is factored out as
-// a separate form of declaration, which syntactically precludes storage-class specifiers and initialization.
-
-typedef_declaration:
-	TYPEDEF type_specifier declarator
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::TD );
-			$$ = $3->addType( $2 )->addTypedef();
-		}
-	| typedef_declaration pop ',' push declarator
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::TD );
-			$$ = $1->appendList( $1->cloneBaseType( $5 )->addTypedef() );
-		}
-	| type_qualifier_list TYPEDEF type_specifier declarator // remaining OBSOLESCENT (see 2 )
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::TD );
-			$$ = $4->addType( $3 )->addQualifiers( $1 )->addTypedef();
-		}
-	| type_specifier TYPEDEF declarator
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::TD );
-			$$ = $3->addType( $1 )->addTypedef();
-		}
-	| type_specifier TYPEDEF type_qualifier_list declarator
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::TD );
-			$$ = $4->addQualifiers( $1 )->addTypedef()->addType( $1 );
-		}
-	;
-
-typedef_expression:
-		// GCC, naming expression type: typedef name = exp; gives a name to the type of an expression
-	TYPEDEF no_attr_identifier '=' assignment_expression
-		{
-			typedefTable.addToEnclosingScope( *$2, TypedefTable::TD );
-			$$ = DeclarationNode::newName( 0 );			// unimplemented
-		}
-	| typedef_expression pop ',' push no_attr_identifier '=' assignment_expression
-		{
-			typedefTable.addToEnclosingScope( *$5, TypedefTable::TD );
-			$$ = DeclarationNode::newName( 0 );			// unimplemented
-		}
-	;
-
-c_declaration:
-	declaration_specifier declaring_list pop ';'
-		{
-			$$ = distAttr( $1, $2 );
-		}
-	| typedef_declaration pop ';'
-	| typedef_expression pop ';'						// GCC, naming expression type
-	| sue_declaration_specifier pop ';'
-	;
-
-declaring_list:
-		// A semantic check is required to ensure asm_name only appears on declarations with implicit or explicit static
-		// storage-class
-	declarator asm_name_opt initializer_opt
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $1->addAsmName( $2 )->addInitializer( $3 );
-		}
-	| declaring_list ',' attribute_list_opt declarator asm_name_opt initializer_opt
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $1->appendList( $4->addQualifiers( $3 )->addAsmName( $5 )->addInitializer( $6 ) );
-		}
-	;
-
-declaration_specifier:									// type specifier + storage class
-	basic_declaration_specifier
-	| sue_declaration_specifier
-	| typedef_declaration_specifier
-	| typegen_declaration_specifier
-	;
-
-type_specifier:											// declaration specifier - storage class
-	basic_type_specifier
-	| sue_type_specifier
-	| typedef_type_specifier
-	| typegen_type_specifier
-	;
-
-type_qualifier_list_opt:								// GCC, used in asm_statement
-	// empty
-		{ $$ = nullptr; }
-	| type_qualifier_list
-	;
-
-type_qualifier_list:
-		// A semantic check is necessary to ensure a type qualifier is appropriate for the kind of declaration.
-		//
-		// ISO/IEC 9899:1999 Section 6.7.3(4 ) : If the same qualifier appears more than once in the same
-		// specifier-qualifier-list, either directly or via one or more typedefs, the behavior is the same as if it
-		// appeared only once.
-	type_qualifier
-	| type_qualifier_list type_qualifier
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-type_qualifier:
-	type_qualifier_name
-	| attribute
-	;
-
-type_qualifier_name:
-	CONST
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Const ); }
-	| RESTRICT
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
-	| VOLATILE
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
-	| LVALUE											// CFA
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
-	| ATOMIC
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
-	| FORALL '('
-		{
-			typedefTable.enterScope();
-		}
-	  type_parameter_list ')'							// CFA
-		{
-			typedefTable.leaveScope();
-			$$ = DeclarationNode::newForall( $4 );
-		}
-	;
-
-declaration_qualifier_list:
-	storage_class_list
-	| type_qualifier_list storage_class_list			// remaining OBSOLESCENT (see 2 )
-		{ $$ = $1->addQualifiers( $2 ); }
-	| declaration_qualifier_list type_qualifier_list storage_class_list
-		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
-	;
-
-storage_class_list:
-		// A semantic check is necessary to ensure a storage class is appropriate for the kind of declaration and that
-		// only one of each is specified, except for inline, which can appear with the others.
-		//
-		// ISO/IEC 9899:1999 Section 6.7.1(2) : At most, one storage-class specifier may be given in the declaration
-		// specifiers in a declaration.
-	storage_class
-	| storage_class_list storage_class
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-storage_class:
-	EXTERN
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
-	| STATIC
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
-	| AUTO
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
-	| REGISTER
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
-	| INLINE											// C99
-		//{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
-		{ $$ = new DeclarationNode; $$->isInline = true; }
-	| FORTRAN											// C99
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
-	| NORETURN											// C11
-		//{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
-		{ $$ = new DeclarationNode; $$->isNoreturn = true; }
-	| THREADLOCAL										// C11
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
-	;
-
-basic_type_name:
-	CHAR
-		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Char ); }
-	| DOUBLE
-		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Double ); }
-	| FLOAT
-		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Float ); }
-	| INT
-		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Int ); }
-	| LONG
-		{ $$ = DeclarationNode::newLength( DeclarationNode::Long ); }
-	| SHORT
-		{ $$ = DeclarationNode::newLength( DeclarationNode::Short ); }
-	| SIGNED
-		{ $$ = DeclarationNode::newSignedNess( DeclarationNode::Signed ); }
-	| UNSIGNED
-		{ $$ = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); }
-	| VOID
-		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Void ); }
-	| BOOL												// C99
-		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
-	| COMPLEX											// C99
-		{ $$ = DeclarationNode::newComplexType( DeclarationNode::Complex ); }
-	| IMAGINARY											// C99
-		{ $$ = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); }
-	| VALIST											// GCC, __builtin_va_list
-		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
-	| ZERO_T
-		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::Zero ); }
-	| ONE_T
-		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::One ); }
-	;
-
-basic_declaration_specifier:
-		// A semantic check is necessary for conflicting storage classes.
-	basic_type_specifier
-	| declaration_qualifier_list basic_type_specifier
-		{ $$ = $2->addQualifiers( $1 ); }
-	| basic_declaration_specifier storage_class			// remaining OBSOLESCENT (see 2)
-		{ $$ = $1->addQualifiers( $2 ); }
-	| basic_declaration_specifier storage_class type_qualifier_list
-		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
-	| basic_declaration_specifier storage_class basic_type_specifier
-		{ $$ = $3->addQualifiers( $2 )->addType( $1 ); }
-	;
-
-basic_type_specifier:
-	direct_type_name
-	| type_qualifier_list_opt indirect_type_name type_qualifier_list_opt
-		{ $$ = $2->addQualifiers( $1 )->addQualifiers( $3 ); }
-	;
-
-direct_type_name:
-		// A semantic check is necessary for conflicting type qualifiers.
-	basic_type_name
-	| type_qualifier_list basic_type_name
-		{ $$ = $2->addQualifiers( $1 ); }
-	| direct_type_name type_qualifier
-		{ $$ = $1->addQualifiers( $2 ); }
-	| direct_type_name basic_type_name
-		{ $$ = $1->addType( $2 ); }
-	;
-
-indirect_type_name:
-	TYPEOF '(' type_name ')'							// GCC: typeof(x) y;
-		{ $$ = $3; }
-	| TYPEOF '(' comma_expression ')'					// GCC: typeof(a+b) y;
-		{ $$ = DeclarationNode::newTypeof( $3 ); }
-	| ATTR_TYPEGENname '(' type_name ')'				// CFA: e.g., @type(x) y;
-		{ $$ = DeclarationNode::newAttr( $1, $3 ); }
-	| ATTR_TYPEGENname '(' comma_expression ')'			// CFA: e.g., @type(a+b) y;
-		{ $$ = DeclarationNode::newAttr( $1, $3 ); }
-	;
-
-sue_declaration_specifier:
-	sue_type_specifier
-	| declaration_qualifier_list sue_type_specifier
-		{ $$ = $2->addQualifiers( $1 ); }
-	| sue_declaration_specifier storage_class			// remaining OBSOLESCENT (see 2)
-		{ $$ = $1->addQualifiers( $2 ); }
-	| sue_declaration_specifier storage_class type_qualifier_list
-		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
-	;
-
-sue_type_specifier:
-	elaborated_type										// struct, union, enum
-	| type_qualifier_list elaborated_type
-		{ $$ = $2->addQualifiers( $1 ); }
-	| sue_type_specifier type_qualifier
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-typedef_declaration_specifier:
-	typedef_type_specifier
-	| declaration_qualifier_list typedef_type_specifier
-		{ $$ = $2->addQualifiers( $1 ); }
-	| typedef_declaration_specifier storage_class		// remaining OBSOLESCENT (see 2)
-		{ $$ = $1->addQualifiers( $2 ); }
-	| typedef_declaration_specifier storage_class type_qualifier_list
-		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
-	;
-
-typedef_type_specifier:									// typedef types
-	TYPEDEFname
-		{ $$ = DeclarationNode::newFromTypedef( $1 ); }
-	| type_qualifier_list TYPEDEFname
-		{ $$ = DeclarationNode::newFromTypedef( $2 )->addQualifiers( $1 ); }
-	| typedef_type_specifier type_qualifier
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-elaborated_type:
-	aggregate_type
-	| enum_type
-	;
-
-aggregate_type:
-	aggregate_key attribute_list_opt '{' field_declaration_list '}'
-		{ $$ = DeclarationNode::newAggregate( $1, nullptr, nullptr, $4, true, $2 )->addQualifiers( $2 ); }
-	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
-		{
-			typedefTable.makeTypedef( *$3 );
-			$$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false, $2 )->addQualifiers( $2 );
-		}
-	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
-		{ typedefTable.makeTypedef( *$3 ); }
-	  '{' field_declaration_list '}'
-		{ $$ = DeclarationNode::newAggregate( $1, $3, nullptr, $6, true, $2 )->addQualifiers( $2 ); }
-	| aggregate_key attribute_list_opt '(' type_name_list ')' '{' field_declaration_list '}' // CFA
-		{ $$ = DeclarationNode::newAggregate( $1, nullptr, $4, $7, false, $2 )->addQualifiers( $2 ); }
-	| aggregate_key attribute_list_opt typegen_name		// CFA, S/R conflict
-		{ $$ = $3->addQualifiers( $2 ); }
-	;
-
-aggregate_key:
-	STRUCT
-		{ $$ = DeclarationNode::Struct; }
-	| UNION
-		{ $$ = DeclarationNode::Union; }
-	;
-
-field_declaration_list:
-	// empty
-		{ $$ = nullptr; }
-	| field_declaration_list field_declaration
-		{ $$ = $1 ? $1->appendList( $2 ) : $2; }
-	;
-
-field_declaration:
-	extension_opt cfa_field_declaring_list ';'			// CFA, new style field declaration
-		{ $$ = $2->set_extension( $1 ); }
-	| extension_opt type_specifier field_declaring_list ';'
-		{
-			if ( $1 ) distExt( $3 );					// mark all fields in list
-			$$ = distAttr( $2, $3 );
-		}
-	;
-
-cfa_field_declaring_list:								// CFA, new style field declaration
-	cfa_abstract_declarator_tuple						// CFA, no field name
-	| cfa_abstract_declarator_tuple no_attr_identifier_or_type_name
-		{ $$ = $1->addName( $2 ); }
-	| cfa_field_declaring_list ',' no_attr_identifier_or_type_name
-		{ $$ = $1->appendList( $1->cloneType( $3 ) ); }
-	| cfa_field_declaring_list ','						// CFA, no field name
-		{ $$ = $1->appendList( $1->cloneType( 0 ) ); }
-	;
-
-field_declaring_list:
-	field_declarator
-	| field_declaring_list ',' attribute_list_opt field_declarator
-		{ $$ = $1->appendList( $4->addQualifiers( $3 ) ); }
-	;
-
-field_declarator:
-	// empty
-		{ $$ = DeclarationNode::newName( 0 ); /* XXX */ } // CFA, no field name
-	| bit_subrange_size									// no field name
-		{ $$ = DeclarationNode::newBitfield( $1 ); }
-	| variable_declarator bit_subrange_size_opt
-		// A semantic check is required to ensure bit_subrange only appears on base type int.
-		{ $$ = $1->addBitfield( $2 ); }
-	| variable_type_redeclarator bit_subrange_size_opt
-		// A semantic check is required to ensure bit_subrange only appears on base type int.
-		{ $$ = $1->addBitfield( $2 ); }
-	| variable_abstract_declarator						// CFA, no field name
-	;
-
-bit_subrange_size_opt:
-	// empty
-		{ $$ = nullptr; }
-	| bit_subrange_size
-		{ $$ = $1; }
-	;
-
-bit_subrange_size:
-	':' constant_expression
-		{ $$ = $2; }
-	;
-
-enum_type:
-	ENUM attribute_list_opt '{' enumerator_list comma_opt '}'
-		{ $$ = DeclarationNode::newEnum( nullptr, $4 )->addQualifiers( $2 ); }
-	| ENUM attribute_list_opt no_attr_identifier_or_type_name
-		{
-			typedefTable.makeTypedef( *$3 );
-			$$ = DeclarationNode::newEnum( $3, 0 )->addQualifiers( $2 );
-		}
-	| ENUM attribute_list_opt no_attr_identifier_or_type_name
-		{ typedefTable.makeTypedef( *$3 ); }
-	  '{' enumerator_list comma_opt '}'
-		{ $$ = DeclarationNode::newEnum( $3, $6 )->addQualifiers( $2 ); }
-	;
-
-enumerator_list:
-	no_attr_identifier_or_type_name enumerator_value_opt
-		{ $$ = DeclarationNode::newEnumConstant( $1, $2 ); }
-	| enumerator_list ',' no_attr_identifier_or_type_name enumerator_value_opt
-		{ $$ = $1->appendList( DeclarationNode::newEnumConstant( $3, $4 ) ); }
-	;
-
-enumerator_value_opt:
-	// empty
-		{ $$ = nullptr; }
-	| '=' constant_expression
-		{ $$ = $2; }
-	;
-
-// Minimum of one parameter after which ellipsis is allowed only at the end.
-
-cfa_parameter_type_list_opt:							// CFA
-	// empty
-		{ $$ = nullptr; }
-	| cfa_parameter_type_list
-	;
-
-cfa_parameter_type_list:								// CFA, abstract + real
-	cfa_abstract_parameter_list
-	| cfa_parameter_list
-	| cfa_parameter_list pop ',' push cfa_abstract_parameter_list
-		{ $$ = $1->appendList( $5 ); }
-	| cfa_abstract_parameter_list pop ',' push ELLIPSIS
-		{ $$ = $1->addVarArgs(); }
-	| cfa_parameter_list pop ',' push ELLIPSIS
-		{ $$ = $1->addVarArgs(); }
-	;
-
-cfa_parameter_list:										// CFA
-		// To obtain LR(1) between cfa_parameter_list and cfa_abstract_tuple, the last cfa_abstract_parameter_list is
-		// factored out from cfa_parameter_list, flattening the rules to get lookahead to the ']'.
-	cfa_parameter_declaration
-	| cfa_abstract_parameter_list pop ',' push cfa_parameter_declaration
-		{ $$ = $1->appendList( $5 ); }
-	| cfa_parameter_list pop ',' push cfa_parameter_declaration
-		{ $$ = $1->appendList( $5 ); }
-	| cfa_parameter_list pop ',' push cfa_abstract_parameter_list pop ',' push cfa_parameter_declaration
-		{ $$ = $1->appendList( $5 )->appendList( $9 ); }
-	;
-
-cfa_abstract_parameter_list:							// CFA, new & old style abstract
-	cfa_abstract_parameter_declaration
-	| cfa_abstract_parameter_list pop ',' push cfa_abstract_parameter_declaration
-		{ $$ = $1->appendList( $5 ); }
-	;
-
-parameter_type_list_opt:
-	// empty
-		{ $$ = nullptr; }
-	| parameter_type_list
-	;
-
-parameter_type_list:
-	parameter_list
-	| parameter_list pop ',' push ELLIPSIS
-		{ $$ = $1->addVarArgs(); }
-	;
-
-parameter_list:											// abstract + real
-	abstract_parameter_declaration
-	| parameter_declaration
-	| parameter_list pop ',' push abstract_parameter_declaration
-		{ $$ = $1->appendList( $5 ); }
-	| parameter_list pop ',' push parameter_declaration
-		{ $$ = $1->appendList( $5 ); }
-	;
-
-// Provides optional identifier names (abstract_declarator/variable_declarator), no initialization, different semantics
-// for typedef name by using type_parameter_redeclarator instead of typedef_redeclarator, and function prototypes.
-
-cfa_parameter_declaration:								// CFA, new & old style parameter declaration
-	parameter_declaration
-	| cfa_identifier_parameter_declarator_no_tuple identifier_or_type_name assignment_opt
-		{ $$ = $1->addName( $2 ); }
-	| cfa_abstract_tuple identifier_or_type_name assignment_opt
-		// To obtain LR(1), these rules must be duplicated here (see cfa_abstract_declarator).
-		{ $$ = $1->addName( $2 ); }
-	| type_qualifier_list cfa_abstract_tuple identifier_or_type_name assignment_opt
-		{ $$ = $2->addName( $3 )->addQualifiers( $1 ); }
-	| cfa_function_specifier
-	;
-
-cfa_abstract_parameter_declaration:						// CFA, new & old style parameter declaration
-	abstract_parameter_declaration
-	| cfa_identifier_parameter_declarator_no_tuple
-	| cfa_abstract_tuple
-		// To obtain LR(1), these rules must be duplicated here (see cfa_abstract_declarator).
-	| type_qualifier_list cfa_abstract_tuple
-		{ $$ = $2->addQualifiers( $1 ); }
-	| cfa_abstract_function
-	;
-
-parameter_declaration:
-	declaration_specifier identifier_parameter_declarator assignment_opt
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr );
-		}
-	| declaration_specifier type_parameter_redeclarator assignment_opt
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr );
-		}
-	;
-
-abstract_parameter_declaration:
-	declaration_specifier
-	| declaration_specifier abstract_parameter_declarator
-		{ $$ = $2->addType( $1 ); }
-	;
-
-// ISO/IEC 9899:1999 Section 6.9.1(6) : "An identifier declared as a typedef name shall not be redeclared as a
-// parameter." Because the scope of the K&R-style parameter-list sees the typedef first, the following is based only on
-// identifiers.  The ANSI-style parameter-list can redefine a typedef name.
-
-identifier_list:										// K&R-style parameter list => no types
-	no_attr_identifier
-		{ $$ = DeclarationNode::newName( $1 ); }
-	| identifier_list ',' no_attr_identifier
-		{ $$ = $1->appendList( DeclarationNode::newName( $3 ) ); }
-	;
-
-identifier_or_type_name:
-	identifier
-	| TYPEDEFname
-	| TYPEGENname
-	;
-
-no_01_identifier_or_type_name:
-	no_01_identifier
-	| TYPEDEFname
-	| TYPEGENname
-	;
-
-no_attr_identifier_or_type_name:
-	no_attr_identifier
-	| TYPEDEFname
-	| TYPEGENname
-	;
-
-type_name_no_function:									// sizeof, alignof, cast (constructor)
-	cfa_abstract_declarator_tuple						// CFA
-	| type_specifier
-	| type_specifier abstract_declarator
-		{ $$ = $2->addType( $1 ); }
-	;
-
-type_name:												// typeof, assertion
-	type_name_no_function
-	| cfa_abstract_function								// CFA
-	;
-
-initializer_opt:
-	// empty
-		{ $$ = nullptr; }
-	| '=' initializer
-		{ $$ = $2; }
-	| ATassign initializer
-		{ $$ = $2->set_maybeConstructed( false ); }
-	;
-
-initializer:
-	assignment_expression						{ $$ = new InitializerNode( $1 ); }
-	| '{' initializer_list comma_opt '}'		{ $$ = new InitializerNode( $2, true ); }
-	;
-
-initializer_list:
-	// empty
-		{ $$ = nullptr; }
-	| initializer
-	| designation initializer					{ $$ = $2->set_designators( $1 ); }
-	| initializer_list ',' initializer			{ $$ = (InitializerNode *)( $1->set_last( $3 ) ); }
-	| initializer_list ',' designation initializer
-		{ $$ = (InitializerNode *)( $1->set_last( $4->set_designators( $3 ) ) ); }
-	;
-
-// There is an unreconcileable parsing problem between C99 and CFA with respect to designators. The problem is use of
-// '=' to separator the designator from the initializer value, as in:
-//
-//		int x[10] = { [1] = 3 };
-//
-// The string "[1] = 3" can be parsed as a designator assignment or a tuple assignment.  To disambiguate this case, CFA
-// changes the syntax from "=" to ":" as the separator between the designator and initializer. GCC does uses ":" for
-// field selection. The optional use of the "=" in GCC, or in this case ":", cannot be supported either due to
-// shift/reduce conflicts
-
-designation:
-	designator_list ':'									// C99, CFA uses ":" instead of "="
-	| no_attr_identifier_or_type_name ':'				// GCC, field name
-		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
-	;
-
-designator_list:										// C99
-	designator
-	| designator_list designator
-		{ $$ = (ExpressionNode *)( $1->set_last( $2 ) ); }
-	//| designator_list designator						{ $$ = new ExpressionNode( $1, $2 ); }
-	;
-
-designator:
-	'.' 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.
-		{ $$ = $3; }
-	| '[' push subrange pop ']'							// CFA, multiple array elements
-		{ $$ = $3; }
-	| '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements
-		{ $$ = new ExpressionNode( build_range( $3, $5 ) ); }
-	| '.' '[' push field_list pop ']'					// CFA, tuple field selector
-		{ $$ = $4; }
-	;
-
-// The CFA type system is based on parametric polymorphism, the ability to declare functions with type parameters,
-// rather than an object-oriented type system. This required four groups of extensions:
-//
-// Overloading: function, data, and operator identifiers may be overloaded.
-//
-// Type declarations: "type" is used to generate new types for declaring objects. Similarly, "dtype" is used for object
-//     and incomplete types, and "ftype" is used for function types. Type declarations with initializers provide
-//     definitions of new types. Type declarations with storage class "extern" provide opaque types.
-//
-// Polymorphic functions: A forall clause declares a type parameter. The corresponding argument is inferred at the call
-//     site. A polymorphic function is not a template; it is a function, with an address and a type.
-//
-// Specifications and Assertions: Specifications are collections of declarations parameterized by one or more
-//     types. They serve many of the purposes of abstract classes, and specification hierarchies resemble subclass
-//     hierarchies. Unlike classes, they can define relationships between types.  Assertions declare that a type or
-//     types provide the operations declared by a specification.  Assertions are normally used to declare requirements
-//     on type arguments of polymorphic functions.
-
-typegen_declaration_specifier:							// CFA
-	typegen_type_specifier
-	| declaration_qualifier_list typegen_type_specifier
-		{ $$ = $2->addQualifiers( $1 ); }
-	| typegen_declaration_specifier storage_class		// remaining OBSOLESCENT (see 2)
-		{ $$ = $1->addQualifiers( $2 ); }
-	| typegen_declaration_specifier storage_class type_qualifier_list
-		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
-	;
-
-typegen_type_specifier:									// CFA
-	typegen_name
-	| type_qualifier_list typegen_name
-		{ $$ = $2->addQualifiers( $1 ); }
-	| typegen_type_specifier type_qualifier
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-typegen_name:											// CFA
-	TYPEGENname '(' type_name_list ')'
-		{ $$ = DeclarationNode::newFromTypeGen( $1, $3 ); }
-	;
-
-type_parameter_list:									// CFA
-	type_parameter assignment_opt
-	| type_parameter_list ',' type_parameter assignment_opt
-		{ $$ = $1->appendList( $3 ); }
-	;
-
-type_parameter:											// CFA
-	type_class no_attr_identifier_or_type_name
-		{ typedefTable.addToEnclosingScope( *$2, TypedefTable::TD ); }
-	  assertion_list_opt
-		{ $$ = DeclarationNode::newTypeParam( $1, $2 )->addAssertions( $4 ); }
-	| type_specifier identifier_parameter_declarator
-	;
-
-type_class:												// CFA
-	OTYPE
-		{ $$ = DeclarationNode::Otype; }
-	| DTYPE
-		{ $$ = DeclarationNode::Dtype; }
-	| FTYPE
-		{ $$ = DeclarationNode::Ftype; }
-	| TTYPE
-		{ $$ = DeclarationNode::Ttype; }
-	;
-
-assertion_list_opt:										// CFA
-	// empty
-		{ $$ = nullptr; }
-	| assertion_list_opt assertion
-		{ $$ = $1 ? $1->appendList( $2 ) : $2; }
-	;
-
-assertion:												// CFA
-	'|' no_attr_identifier_or_type_name '(' type_name_list ')'
-		{
-			typedefTable.openTrait( *$2 );
-			$$ = DeclarationNode::newTraitUse( $2, $4 );
-		}
-	| '|' '{' push trait_declaration_list '}'
-		{ $$ = $4; }
-	| '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')'
-		{ $$ = nullptr; }
-	;
-
-type_name_list:											// CFA
-	type_name
-		{ $$ = new ExpressionNode( build_typevalue( $1 ) ); }
-	| assignment_expression
-	| type_name_list ',' type_name
-		{ $$ = (ExpressionNode *)( $1->set_last( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
-	| type_name_list ',' assignment_expression
-		{ $$ = (ExpressionNode *)( $1->set_last( $3 )); }
-	;
-
-type_declaring_list:									// CFA
-	OTYPE type_declarator
-		{ $$ = $2; }
-	| storage_class_list OTYPE type_declarator
-		{ $$ = $3->addQualifiers( $1 ); }
-	| type_declaring_list ',' type_declarator
-		{ $$ = $1->appendList( $3->copyStorageClasses( $1 ) ); }
-	;
-
-type_declarator:										// CFA
-	type_declarator_name assertion_list_opt
-		{ $$ = $1->addAssertions( $2 ); }
-	| type_declarator_name assertion_list_opt '=' type_name
-		{ $$ = $1->addAssertions( $2 )->addType( $4 ); }
-	;
-
-type_declarator_name:									// CFA
-	no_attr_identifier_or_type_name
-		{
-			typedefTable.addToEnclosingScope( *$1, TypedefTable::TD );
-			$$ = DeclarationNode::newTypeDecl( $1, 0 );
-		}
-	| no_01_identifier_or_type_name '(' push type_parameter_list pop ')'
-		{
-			typedefTable.addToEnclosingScope( *$1, TypedefTable::TG );
-			$$ = DeclarationNode::newTypeDecl( $1, $4 );
-		}
-	;
-
-trait_specifier:										// CFA
-	TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
-		{
-			typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
-			$$ = DeclarationNode::newTrait( $2, $5, 0 );
-		}
-	| TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
-		{
-			typedefTable.enterTrait( *$2 );
-			typedefTable.enterScope();
-		}
-	  trait_declaration_list '}'
-		{
-			typedefTable.leaveTrait();
-			typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
-			$$ = DeclarationNode::newTrait( $2, $5, $10 );
-		}
-	;
-
-trait_declaration_list:								// CFA
-	trait_declaration
-	| trait_declaration_list push trait_declaration
-		{ $$ = $1->appendList( $3 ); }
-	;
-
-trait_declaration:									// CFA
-	cfa_trait_declaring_list pop ';'
-	| trait_declaring_list pop ';'
-	;
-
-cfa_trait_declaring_list:								// CFA
-	cfa_variable_specifier
-		{
-			typedefTable.addToEnclosingScope2( TypedefTable::ID );
-			$$ = $1;
-		}
-	| cfa_function_specifier
-		{
-			typedefTable.addToEnclosingScope2( TypedefTable::ID );
-			$$ = $1;
-		}
-	| cfa_trait_declaring_list pop ',' push identifier_or_type_name
-		{
-			typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID );
-			$$ = $1->appendList( $1->cloneType( $5 ) );
-		}
-	;
-
-trait_declaring_list:									// CFA
-	type_specifier declarator
-		{
-			typedefTable.addToEnclosingScope2( TypedefTable::ID );
-			$$ = $2->addType( $1 );
-		}
-	| trait_declaring_list pop ',' push declarator
-		{
-			typedefTable.addToEnclosingScope2( TypedefTable::ID );
-			$$ = $1->appendList( $1->cloneBaseType( $5 ) );
-		}
-	;
-
-//***************************** EXTERNAL DEFINITIONS *****************************
-
-translation_unit:
-	// empty
-		{}												// empty input file
-	| external_definition_list
-		{ parseTree = parseTree ? parseTree->appendList( $1 ) : $1;	}
-	;
-
-external_definition_list:
-	external_definition
-	| external_definition_list push external_definition
-		{ $$ = $1 ? $1->appendList( $3 ) : $3; }
-	;
-
-external_definition_list_opt:
-	// empty
-		{ $$ = nullptr; }
-	| external_definition_list
-	;
-
-external_definition:
-	declaration
-	| external_function_definition
-	| asm_statement										// GCC, global assembler statement
-	| EXTERN STRINGliteral								// C++-style linkage specifier
-		{
-			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
-			linkage = LinkageSpec::linkageCheck( $2 );
-		}
-	  '{' external_definition_list_opt '}'
-		{
-			linkage = linkageStack.top();
-			linkageStack.pop();
-			$$ = $5;
-		}
-	| EXTENSION external_definition						// GCC, multiple __extension__ allowed, meaning unknown
-		{
-			distExt( $2 );								// mark all fields in list
-			$$ = $2;
-		}
-	;
-
-external_function_definition:
-	function_definition
-		// These rules are a concession to the "implicit int" type_specifier because there is a significant amount of
-		// legacy code with global functions missing the type-specifier for the return type, and assuming "int".
-		// Parsing is possible because function_definition does not appear in the context of an expression (nested
-		// functions preclude this concession, i.e., all nested function must have a return type). A function prototype
-		// declaration must still have a type_specifier.  OBSOLESCENT (see 1)
-	| function_declarator compound_statement
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $1->addFunctionBody( $2 );
-		}
-	| KR_function_declarator push KR_declaration_list_opt compound_statement
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $1->addOldDeclList( $3 )->addFunctionBody( $4 );
-		}
-	;
-
-function_definition:
-	cfa_function_declaration compound_statement			// CFA
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $1->addFunctionBody( $2 );
-		}
-	| declaration_specifier function_declarator compound_statement
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $2->addFunctionBody( $3 )->addType( $1 );
-		}
-	| type_qualifier_list function_declarator compound_statement
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $2->addFunctionBody( $3 )->addQualifiers( $1 );
-		}
-	| declaration_qualifier_list function_declarator compound_statement
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $2->addFunctionBody( $3 )->addQualifiers( $1 );
-		}
-	| declaration_qualifier_list type_qualifier_list function_declarator compound_statement
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $3->addFunctionBody( $4 )->addQualifiers( $2 )->addQualifiers( $1 );
-		}
-
-		// Old-style K&R function definition, OBSOLESCENT (see 4)
-	| declaration_specifier KR_function_declarator push KR_declaration_list_opt compound_statement
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addType( $1 );
-		}
-	| type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addQualifiers( $1 );
-		}
-
-		// Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4)
-	| declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addQualifiers( $1 );
-		}
-	| declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
-		{
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			$$ = $3->addOldDeclList( $5 )->addFunctionBody( $6 )->addQualifiers( $2 )->addQualifiers( $1 );
-		}
-	;
-
-declarator:
-	variable_declarator
-	| variable_type_redeclarator
-	| function_declarator
-	;
-
-subrange:
-	constant_expression '~' constant_expression			// CFA, integer subrange
-		{ $$ = new ExpressionNode( build_range( $1, $3 ) ); }
-	;
-
-asm_name_opt:											// GCC
-	// empty
-		{ $$ = nullptr; }
-	| ASM '(' string_literal ')' attribute_list_opt
-		{
-			DeclarationNode * name = new DeclarationNode();
-			name->asmName = $3;
-			$$ = name->addQualifiers( $5 );
-		}
-	;
-
-attribute_list_opt:										// GCC
-	// empty
-		{ $$ = nullptr; }
-	| attribute_list
-	;
-
-attribute_list:											// GCC
-	attribute
-	| attribute_list attribute
-		{ $$ = $2->addQualifiers( $1 ); }
-	;
-
-attribute:												// GCC
-	ATTRIBUTE '(' '(' attribute_name_list ')' ')'
-		{ $$ = $4; }
-	;
-
-attribute_name_list:									// GCC
-	attribute_name
-	| attribute_name_list ',' attribute_name
-		{ $$ = $3->addQualifiers( $1 ); }
-	;
-
-attribute_name:											// GCC
-	// empty
-		{ $$ = nullptr; }
-	| attr_name
-		{ $$ = DeclarationNode::newAttribute( $1 ); }
-	| attr_name '(' argument_expression_list ')'
-		{ $$ = DeclarationNode::newAttribute( $1, $3 ); }
-	;
-
-attr_name:												// GCC
-	IDENTIFIER
-	| TYPEDEFname
-	| TYPEGENname
-	| CONST
-		{ $$ = Token{ new string( "__const__" ) }; }
-	;
-
-// ============================================================================
-// The following sections are a series of grammar patterns used to parse declarators. Multiple patterns are necessary
-// because the type of an identifier in wrapped around the identifier in the same form as its usage in an expression, as
-// in:
-//
-//		int (*f())[10] { ... };
-//		... (*f())[3] += 1;		// definition mimics usage
-//
-// Because these patterns are highly recursive, changes at a lower level in the recursion require copying some or all of
-// the pattern. Each of these patterns has some subtle variation to ensure correct syntax in a particular context.
-// ============================================================================
-
-// ----------------------------------------------------------------------------
-// The set of valid declarators before a compound statement for defining a function is less than the set of declarators
-// to define a variable or function prototype, e.g.:
-//
-//		valid declaration		invalid definition
-//		-----------------		------------------
-//		int f;					int f {}
-//		int *f;					int *f {}
-//		int f[10];				int f[10] {}
-//		int (*f)(int);			int (*f)(int) {}
-//
-// To preclude this syntactic anomaly requires separating the grammar rules for variable and function declarators, hence
-// variable_declarator and function_declarator.
-// ----------------------------------------------------------------------------
-
-// This pattern parses a declaration of a variable that is not redefining a typedef name. The pattern precludes
-// declaring an array of functions versus a pointer to an array of functions.
-
-variable_declarator:
-	paren_identifier attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| variable_ptr
-	| variable_array attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| variable_function attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-paren_identifier:
-	identifier
-		{
-			typedefTable.setNextIdentifier( *$1 );
-			$$ = DeclarationNode::newName( $1 );
-		}
-	| '(' paren_identifier ')'							// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-variable_ptr:
-	ptrref_operator variable_declarator
-		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
-	| ptrref_operator type_qualifier_list variable_declarator
-		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' variable_ptr ')' attribute_list_opt
-		{ $$ = $2->addQualifiers( $4 ); }				// redundant parenthesis
-	;
-
-variable_array:
-	paren_identifier array_dimension
-		{ $$ = $1->addArray( $2 ); }
-	| '(' variable_ptr ')' array_dimension
-		{ $$ = $2->addArray( $4 ); }
-	| '(' variable_array ')' multi_array_dimension		// redundant parenthesis
-		{ $$ = $2->addArray( $4 ); }
-	| '(' variable_array ')'							// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-variable_function:
-	'(' variable_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $2->addParamList( $6 ); }
-	| '(' variable_function ')'							// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-// This pattern parses a function declarator that is not redefining a typedef name. For non-nested functions, there is
-// no context where a function definition can redefine a typedef name, i.e., the typedef and function name cannot exist
-// is the same scope.  The pattern precludes returning arrays and functions versus pointers to arrays and functions.
-
-function_declarator:
-	function_no_ptr attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| function_ptr
-	| function_array attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-function_no_ptr:
-	paren_identifier '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $1->addParamList( $4 ); }
-	| '(' function_ptr ')' '(' push parameter_type_list_opt pop ')'
-		{ $$ = $2->addParamList( $6 ); }
-	| '(' function_no_ptr ')'							// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-function_ptr:
-	ptrref_operator function_declarator
-		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
-	| ptrref_operator type_qualifier_list function_declarator
-		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' function_ptr ')'
-		{ $$ = $2; }
-	;
-
-function_array:
-	'(' function_ptr ')' array_dimension
-		{ $$ = $2->addArray( $4 ); }
-	| '(' function_array ')' multi_array_dimension		// redundant parenthesis
-		{ $$ = $2->addArray( $4 ); }
-	| '(' function_array ')'							// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-// This pattern parses an old-style K&R function declarator (OBSOLESCENT, see 4)
-//
-//   f( a, b, c ) int a, *b, c[]; {}
-//
-// that is not redefining a typedef name (see function_declarator for additional comments). The pattern precludes
-// returning arrays and functions versus pointers to arrays and functions.
-
-KR_function_declarator:
-	KR_function_no_ptr
-	| KR_function_ptr
-	| KR_function_array
-	;
-
-KR_function_no_ptr:
-	paren_identifier '(' identifier_list ')'			// function_declarator handles empty parameter
-		{ $$ = $1->addIdList( $3 ); }
-	| '(' KR_function_ptr ')' '(' push parameter_type_list_opt pop ')'
-		{ $$ = $2->addParamList( $6 ); }
-	| '(' KR_function_no_ptr ')'						// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-KR_function_ptr:
-	ptrref_operator KR_function_declarator
-		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
-	| ptrref_operator type_qualifier_list KR_function_declarator
-		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' KR_function_ptr ')'
-		{ $$ = $2; }
-	;
-
-KR_function_array:
-	'(' KR_function_ptr ')' array_dimension
-		{ $$ = $2->addArray( $4 ); }
-	| '(' KR_function_array ')' multi_array_dimension	// redundant parenthesis
-		{ $$ = $2->addArray( $4 ); }
-	| '(' KR_function_array ')'							// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-// This pattern parses a declaration for a variable or function prototype that redefines a type name, e.g.:
-//
-//		typedef int foo;
-//		{
-//		   int foo; // redefine typedef name in new scope
-//		}
-//
-// The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays
-// and functions versus pointers to arrays and functions.
-
-variable_type_redeclarator:
-	paren_type attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| type_ptr
-	| type_array attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| type_function attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-paren_type:
-	typedef
-	| '(' paren_type ')'
-		{ $$ = $2; }
-	;
-
-type_ptr:
-	ptrref_operator variable_type_redeclarator
-		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
-	| ptrref_operator type_qualifier_list variable_type_redeclarator
-		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' type_ptr ')' attribute_list_opt
-		{ $$ = $2->addQualifiers( $4 ); }
-	;
-
-type_array:
-	paren_type array_dimension
-		{ $$ = $1->addArray( $2 ); }
-	| '(' type_ptr ')' array_dimension
-		{ $$ = $2->addArray( $4 ); }
-	| '(' type_array ')' multi_array_dimension			// redundant parenthesis
-		{ $$ = $2->addArray( $4 ); }
-	| '(' type_array ')'								// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-type_function:
-	paren_type '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $1->addParamList( $4 ); }
-	| '(' type_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $2->addParamList( $6 ); }
-	| '(' type_function ')'								// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-// This pattern parses a declaration for a parameter variable of a function prototype or actual that is not redefining a
-// typedef name and allows the C99 array options, which can only appear in a parameter list.  The pattern precludes
-// declaring an array of functions versus a pointer to an array of functions, and returning arrays and functions versus
-// pointers to arrays and functions.
-
-identifier_parameter_declarator:
-	paren_identifier attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| identifier_parameter_ptr
-	| identifier_parameter_array attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| identifier_parameter_function attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-identifier_parameter_ptr:
-	ptrref_operator identifier_parameter_declarator
-		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
-	| ptrref_operator type_qualifier_list identifier_parameter_declarator
-		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' identifier_parameter_ptr ')' attribute_list_opt
-		{ $$ = $2->addQualifiers( $4 ); }
-	;
-
-identifier_parameter_array:
-	paren_identifier array_parameter_dimension
-		{ $$ = $1->addArray( $2 ); }
-	| '(' identifier_parameter_ptr ')' array_dimension
-		{ $$ = $2->addArray( $4 ); }
-	| '(' identifier_parameter_array ')' multi_array_dimension // redundant parenthesis
-		{ $$ = $2->addArray( $4 ); }
-	| '(' identifier_parameter_array ')'				// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-identifier_parameter_function:
-	paren_identifier '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $1->addParamList( $4 ); }
-	| '(' identifier_parameter_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $2->addParamList( $6 ); }
-	| '(' identifier_parameter_function ')'				// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-// This pattern parses a declaration for a parameter variable or function prototype that is redefining a typedef name,
-// e.g.:
-//
-//		typedef int foo;
-//		int f( int foo ); // redefine typedef name in new scope
-//
-// and allows the C99 array options, which can only appear in a parameter list.
-
-type_parameter_redeclarator:
-	typedef attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| type_parameter_ptr
-	| type_parameter_array attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| type_parameter_function attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-typedef:
-	TYPEDEFname
-		{
-			typedefTable.setNextIdentifier( *$1 );
-			$$ = DeclarationNode::newName( $1 );
-		}
-	| TYPEGENname
-		{
-			typedefTable.setNextIdentifier( *$1 );
-			$$ = DeclarationNode::newName( $1 );
-		}
-	;
-
-type_parameter_ptr:
-	ptrref_operator type_parameter_redeclarator
-		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
-	| ptrref_operator type_qualifier_list type_parameter_redeclarator
-		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' type_parameter_ptr ')' attribute_list_opt
-		{ $$ = $2->addQualifiers( $4 ); }
-	;
-
-type_parameter_array:
-	typedef array_parameter_dimension
-		{ $$ = $1->addArray( $2 ); }
-	| '(' type_parameter_ptr ')' array_parameter_dimension
-		{ $$ = $2->addArray( $4 ); }
-	;
-
-type_parameter_function:
-	typedef '(' push parameter_type_list_opt pop ')'	// empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $1->addParamList( $4 ); }
-	| '(' type_parameter_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $2->addParamList( $6 ); }
-	;
-
-// This pattern parses a declaration of an abstract variable or function prototype, i.e., there is no identifier to
-// which the type applies, e.g.:
-//
-//		sizeof( int );
-//		sizeof( int * );
-//		sizeof( int [10] );
-//		sizeof( int (*)() );
-//		sizeof( int () );
-//
-// The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays
-// and functions versus pointers to arrays and functions.
-
-abstract_declarator:
-	abstract_ptr
-	| abstract_array attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| abstract_function attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-abstract_ptr:
-	ptrref_operator
-		{ $$ = DeclarationNode::newPointer( 0 ); }
-	| ptrref_operator type_qualifier_list
-		{ $$ = DeclarationNode::newPointer( $2 ); }
-	| ptrref_operator abstract_declarator
-		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
-	| ptrref_operator type_qualifier_list abstract_declarator
-		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' abstract_ptr ')' attribute_list_opt
-		{ $$ = $2->addQualifiers( $4 ); }
-	;
-
-abstract_array:
-	array_dimension
-	| '(' abstract_ptr ')' array_dimension
-		{ $$ = $2->addArray( $4 ); }
-	| '(' abstract_array ')' multi_array_dimension		// redundant parenthesis
-		{ $$ = $2->addArray( $4 ); }
-	| '(' abstract_array ')'							// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-abstract_function:
-	'(' push parameter_type_list_opt pop ')'			// empty parameter list OBSOLESCENT (see 3)
-		{ $$ = DeclarationNode::newFunction( nullptr, nullptr, $3, nullptr ); }
-	| '(' abstract_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $2->addParamList( $6 ); }
-	| '(' abstract_function ')'							// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-array_dimension:
-		// Only the first dimension can be empty.
-	'[' ']'
-		{ $$ = DeclarationNode::newArray( 0, 0, false ); }
-	| '[' ']' multi_array_dimension
-		{ $$ = DeclarationNode::newArray( 0, 0, false )->addArray( $3 ); }
-	| multi_array_dimension
-	;
-
-multi_array_dimension:
-	'[' push assignment_expression pop ']'
-		{ $$ = DeclarationNode::newArray( $3, 0, false ); }
-	| '[' push '*' pop ']'								// C99
-		{ $$ = DeclarationNode::newVarArray( 0 ); }
-	| multi_array_dimension '[' push assignment_expression pop ']'
-		{ $$ = $1->addArray( DeclarationNode::newArray( $4, 0, false ) ); }
-	| multi_array_dimension '[' push '*' pop ']'		// C99
-		{ $$ = $1->addArray( DeclarationNode::newVarArray( 0 ) ); }
-	;
-
-// This pattern parses a declaration of a parameter abstract variable or function prototype, i.e., there is no
-// identifier to which the type applies, e.g.:
-//
-//		int f( int );			// not handled here
-//		int f( int * );			// abstract function-prototype parameter; no parameter name specified
-//		int f( int (*)() );		// abstract function-prototype parameter; no parameter name specified
-//		int f( int (int) );		// abstract function-prototype parameter; no parameter name specified
-//
-// The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays
-// and functions versus pointers to arrays and functions. In addition, the pattern handles the
-// special meaning of parenthesis around a typedef name:
-//
-//		ISO/IEC 9899:1999 Section 6.7.5.3(11) : "In a parameter declaration, a single typedef name in
-//		parentheses is taken to be an abstract declarator that specifies a function with a single parameter,
-//		not as redundant parentheses around the identifier."
-//
-// For example:
-//
-//		typedef float T;
-//		int f( int ( T [5] ) );					// see abstract_parameter_declarator
-//		int g( int ( T ( int ) ) );				// see abstract_parameter_declarator
-//		int f( int f1( T a[5] ) );				// see identifier_parameter_declarator
-//		int g( int g1( T g2( int p ) ) );		// see identifier_parameter_declarator
-//
-// In essence, a '(' immediately to the left of typedef name, T, is interpreted as starting a parameter type list, and
-// not as redundant parentheses around a redeclaration of T. Finally, the pattern also precludes declaring an array of
-// functions versus a pointer to an array of functions, and returning arrays and functions versus pointers to arrays and
-// functions.
-
-abstract_parameter_declarator:
-	abstract_parameter_ptr
-	| abstract_parameter_array attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| abstract_parameter_function attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-abstract_parameter_ptr:
-	ptrref_operator
-		{ $$ = DeclarationNode::newPointer( nullptr ); }
-	| ptrref_operator type_qualifier_list
-		{ $$ = DeclarationNode::newPointer( $2 ); }
-	| ptrref_operator abstract_parameter_declarator
-		{ $$ = $2->addPointer( DeclarationNode::newPointer( nullptr ) ); }
-	| ptrref_operator type_qualifier_list abstract_parameter_declarator
-		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' abstract_parameter_ptr ')' attribute_list_opt
-		{ $$ = $2->addQualifiers( $4 ); }
-	;
-
-abstract_parameter_array:
-	array_parameter_dimension
-	| '(' abstract_parameter_ptr ')' array_parameter_dimension
-		{ $$ = $2->addArray( $4 ); }
-	| '(' abstract_parameter_array ')' multi_array_dimension // redundant parenthesis
-		{ $$ = $2->addArray( $4 ); }
-	| '(' abstract_parameter_array ')'					// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-abstract_parameter_function:
-	'(' push parameter_type_list_opt pop ')'			// empty parameter list OBSOLESCENT (see 3)
-		{ $$ = DeclarationNode::newFunction( nullptr, nullptr, $3, nullptr ); }
-	| '(' abstract_parameter_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $2->addParamList( $6 ); }
-	| '(' abstract_parameter_function ')'				// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-array_parameter_dimension:
-		// Only the first dimension can be empty or have qualifiers.
-	array_parameter_1st_dimension
-	| array_parameter_1st_dimension multi_array_dimension
-		{ $$ = $1->addArray( $2 ); }
-	| multi_array_dimension
-	;
-
-// The declaration of an array parameter has additional syntax over arrays in normal variable declarations:
-//
-//		ISO/IEC 9899:1999 Section 6.7.5.2(1) : "The optional type qualifiers and the keyword static shall appear only in
-//		a declaration of a function parameter with an array type, and then only in the outermost array type derivation."
-
-array_parameter_1st_dimension:
-	'[' ']'
-		{ $$ = DeclarationNode::newArray( 0, 0, false ); }
-	// multi_array_dimension handles the '[' '*' ']' case
-	| '[' push type_qualifier_list '*' pop ']'			// remaining C99
-		{ $$ = DeclarationNode::newVarArray( $3 ); }
-	| '[' push type_qualifier_list pop ']'
-		{ $$ = DeclarationNode::newArray( 0, $3, false ); }
-	// multi_array_dimension handles the '[' assignment_expression ']' case
-	| '[' push type_qualifier_list assignment_expression pop ']'
-		{ $$ = DeclarationNode::newArray( $4, $3, false ); }
-	| '[' push STATIC type_qualifier_list_opt assignment_expression pop ']'
-		{ $$ = DeclarationNode::newArray( $5, $4, true ); }
-	| '[' push type_qualifier_list STATIC assignment_expression pop ']'
-		{ $$ = DeclarationNode::newArray( $5, $3, true ); }
-	;
-
-// This pattern parses a declaration of an abstract variable, but does not allow "int ()" for a function pointer.
-//
-//		struct S {
-//          int;
-//          int *;
-//          int [10];
-//          int (*)();
-//      };
-
-variable_abstract_declarator:
-	variable_abstract_ptr
-	| variable_abstract_array attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	| variable_abstract_function attribute_list_opt
-		{ $$ = $1->addQualifiers( $2 ); }
-	;
-
-variable_abstract_ptr:
-	ptrref_operator
-		{ $$ = DeclarationNode::newPointer( 0 ); }
-	| ptrref_operator type_qualifier_list
-		{ $$ = DeclarationNode::newPointer( $2 ); }
-	| ptrref_operator variable_abstract_declarator
-		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
-	| ptrref_operator type_qualifier_list variable_abstract_declarator
-		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' variable_abstract_ptr ')' attribute_list_opt
-		{ $$ = $2->addQualifiers( $4 ); }
-	;
-
-variable_abstract_array:
-	array_dimension
-	| '(' variable_abstract_ptr ')' array_dimension
-		{ $$ = $2->addArray( $4 ); }
-	| '(' variable_abstract_array ')' multi_array_dimension // redundant parenthesis
-		{ $$ = $2->addArray( $4 ); }
-	| '(' variable_abstract_array ')'					// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-variable_abstract_function:
-	'(' variable_abstract_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
-		{ $$ = $2->addParamList( $6 ); }
-	| '(' variable_abstract_function ')'				// redundant parenthesis
-		{ $$ = $2; }
-	;
-
-// This pattern parses a new-style declaration for a parameter variable or function prototype that is either an
-// identifier or typedef name and allows the C99 array options, which can only appear in a parameter list.
-
-cfa_identifier_parameter_declarator_tuple:				// CFA
-	cfa_identifier_parameter_declarator_no_tuple
-	| cfa_abstract_tuple
-	| type_qualifier_list cfa_abstract_tuple
-		{ $$ = $2->addQualifiers( $1 ); }
-	;
-
-cfa_identifier_parameter_declarator_no_tuple:			// CFA
-	cfa_identifier_parameter_ptr
-	| cfa_identifier_parameter_array
-	;
-
-cfa_identifier_parameter_ptr:							// CFA
-	ptrref_operator type_specifier
-		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator type_specifier
-		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
-	| ptrref_operator cfa_abstract_function
-		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator cfa_abstract_function
-		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
-	| ptrref_operator cfa_identifier_parameter_declarator_tuple
-		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator cfa_identifier_parameter_declarator_tuple
-		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
-	;
-
-cfa_identifier_parameter_array:							// CFA
-		// Only the first dimension can be empty or have qualifiers. Empty dimension must be factored out due to
-		// shift/reduce conflict with new-style empty (void) function return type.
-	'[' ']' type_specifier
-		{ $$ = $3->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-	| cfa_array_parameter_1st_dimension type_specifier
-		{ $$ = $2->addNewArray( $1 ); }
-	| '[' ']' multi_array_dimension type_specifier
-		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-	| cfa_array_parameter_1st_dimension multi_array_dimension type_specifier
-		{ $$ = $3->addNewArray( $2 )->addNewArray( $1 ); }
-	| multi_array_dimension type_specifier
-		{ $$ = $2->addNewArray( $1 ); }
-
-	| '[' ']' cfa_identifier_parameter_ptr
-		{ $$ = $3->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-	| cfa_array_parameter_1st_dimension cfa_identifier_parameter_ptr
-		{ $$ = $2->addNewArray( $1 ); }
-	| '[' ']' multi_array_dimension cfa_identifier_parameter_ptr
-		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-	| cfa_array_parameter_1st_dimension multi_array_dimension cfa_identifier_parameter_ptr
-		{ $$ = $3->addNewArray( $2 )->addNewArray( $1 ); }
-	| multi_array_dimension cfa_identifier_parameter_ptr
-		{ $$ = $2->addNewArray( $1 ); }
-	;
-
-cfa_array_parameter_1st_dimension:
-	'[' push type_qualifier_list '*' pop ']'			// remaining C99
-		{ $$ = DeclarationNode::newVarArray( $3 ); }
-	| '[' push type_qualifier_list assignment_expression pop ']'
-		{ $$ = DeclarationNode::newArray( $4, $3, false ); }
-	| '[' push declaration_qualifier_list assignment_expression pop ']'
-		// declaration_qualifier_list must be used because of shift/reduce conflict with
-		// assignment_expression, so a semantic check is necessary to preclude them as a type_qualifier cannot
-		// appear in this context.
-		{ $$ = DeclarationNode::newArray( $4, $3, true ); }
-	| '[' push declaration_qualifier_list type_qualifier_list assignment_expression pop ']'
-		{ $$ = DeclarationNode::newArray( $5, $4->addQualifiers( $3 ), true ); }
-	;
-
-// This pattern parses a new-style declaration of an abstract variable or function prototype, i.e., there is no
-// identifier to which the type applies, e.g.:
-//
-//		[int] f( int );				// abstract variable parameter; no parameter name specified
-//		[int] f( [int] (int) );		// abstract function-prototype parameter; no parameter name specified
-//
-// These rules need LR(3):
-//
-//		cfa_abstract_tuple identifier_or_type_name
-//		'[' cfa_parameter_list ']' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
-//
-// since a function return type can be syntactically identical to a tuple type:
-//
-//		[int, int] t;
-//		[int, int] f( int );
-//
-// Therefore, it is necessary to look at the token after identifier_or_type_name to know when to reduce
-// cfa_abstract_tuple. To make this LR(1), several rules have to be flattened (lengthened) to allow the necessary
-// lookahead. To accomplish this, cfa_abstract_declarator has an entry point without tuple, and tuple declarations are
-// duplicated when appearing with cfa_function_specifier.
-
-cfa_abstract_declarator_tuple:							// CFA
-	cfa_abstract_tuple
-	| type_qualifier_list cfa_abstract_tuple
-		{ $$ = $2->addQualifiers( $1 ); }
-	| cfa_abstract_declarator_no_tuple
-	;
-
-cfa_abstract_declarator_no_tuple:						// CFA
-	cfa_abstract_ptr
-	| cfa_abstract_array
-	;
-
-cfa_abstract_ptr:										// CFA
-	ptrref_operator type_specifier
-		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator type_specifier
-		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
-	| ptrref_operator cfa_abstract_function
-		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator cfa_abstract_function
-		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
-	| ptrref_operator cfa_abstract_declarator_tuple
-		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator cfa_abstract_declarator_tuple
-		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
-	;
-
-cfa_abstract_array:										// CFA
-		// Only the first dimension can be empty. Empty dimension must be factored out due to shift/reduce conflict with
-		// empty (void) function return type.
-	'[' ']' type_specifier
-		{ $$ = $3->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
-	| '[' ']' multi_array_dimension type_specifier
-		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
-	| multi_array_dimension type_specifier
-		{ $$ = $2->addNewArray( $1 ); }
-	| '[' ']' cfa_abstract_ptr
-		{ $$ = $3->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
-	| '[' ']' multi_array_dimension cfa_abstract_ptr
-		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
-	| multi_array_dimension cfa_abstract_ptr
-		{ $$ = $2->addNewArray( $1 ); }
-	;
-
-cfa_abstract_tuple:										// CFA
-	'[' push cfa_abstract_parameter_list pop ']'
-		{ $$ = DeclarationNode::newTuple( $3 ); }
-	;
-
-cfa_abstract_function:									// CFA
-//	'[' ']' '(' cfa_parameter_type_list_opt ')'
-//		{ $$ = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), $4, nullptr ); }
-	cfa_abstract_tuple '(' push cfa_parameter_type_list_opt pop ')'
-		{ $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
-	| cfa_function_return '(' push cfa_parameter_type_list_opt pop ')'
-		{ $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
-	;
-
-// 1) ISO/IEC 9899:1999 Section 6.7.2(2) : "At least one type specifier shall be given in the declaration specifiers in
-//    each declaration, and in the specifier-qualifier list in each structure declaration and type name."
-//
-// 2) ISO/IEC 9899:1999 Section 6.11.5(1) : "The placement of a storage-class specifier other than at the beginning of
-//    the declaration specifiers in a declaration is an obsolescent feature."
-//
-// 3) ISO/IEC 9899:1999 Section 6.11.6(1) : "The use of function declarators with empty parentheses (not
-//    prototype-format parameter type declarators) is an obsolescent feature."
-//
-// 4) ISO/IEC 9899:1999 Section 6.11.7(1) : "The use of function definitions with separate parameter identifier and
-//    declaration lists (not prototype-format parameter type and identifier declarators) is an obsolescent feature.
-
-//************************* MISCELLANEOUS ********************************
-
-comma_opt:												// redundant comma
-	// empty
-	| ','
-	;
-
-assignment_opt:
-	// empty
-		{ $$ = nullptr; }
-	| '=' assignment_expression
-		{ $$ = $2; }
-	;
-
-extension_opt:
-	// empty
-		{ $$ = false; }
-	| EXTENSION											// GCC
-		{ $$ = true; }
-	;
-
-%%
-// ----end of grammar----
-
-extern char *yytext;
-
-void yyerror( const char * ) {
-	cout << "Error ";
-	if ( yyfilename ) {
-		cout << "in file " << yyfilename << " ";
-	} // if
-	cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << endl;
-}
-
-// Local Variables: //
-// mode: c++ //
-// tab-width: 4 //
-// compile-command: "make install" //
-// End: //
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/SymTab/Autogen.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Thu Mar 03 15:45:56 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 16 15:02:50 2017
-// Update Count     : 13
+// Last Modified On : Fri Mar  3 22:00:55 2017
+// Update Count     : 30
 //
 
@@ -163,5 +163,6 @@
 		DeclarationNode::StorageClass sc = functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static;
 		LinkageSpec::Spec spec = isIntrinsic ? LinkageSpec::Intrinsic : LinkageSpec::AutoGen;
-		FunctionDecl * decl = new FunctionDecl( fname, sc, spec, ftype, new CompoundStmt( noLabels ), true, false );
+		FunctionDecl * decl = new FunctionDecl( fname, sc, spec, ftype, new CompoundStmt( noLabels ),
+												std::list< Attribute * >(), DeclarationNode::FuncSpecifier( DeclarationNode::InlineSpec ) );
 		decl->fixUniqueId();
 		return decl;
@@ -717,8 +718,12 @@
 					TypeDecl * newDecl = new TypeDecl( ty->get_baseType()->get_name(), DeclarationNode::NoStorageClass, nullptr, TypeDecl::Any );
 					TypeInstType * inst = new TypeInstType( Type::Qualifiers(), newDecl->get_name(), newDecl );
-					newDecl->get_assertions().push_back( new FunctionDecl( "?=?", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, genAssignType( inst ), nullptr, true, false ) );
-					newDecl->get_assertions().push_back( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, genDefaultType( inst ), nullptr, true, false ) );
-					newDecl->get_assertions().push_back( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, genCopyType( inst ), nullptr, true, false ) );
-					newDecl->get_assertions().push_back( new FunctionDecl( "^?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, genDefaultType( inst ), nullptr, true, false ) );
+					newDecl->get_assertions().push_back( new FunctionDecl( "?=?", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, genAssignType( inst ), nullptr,
+																		   std::list< Attribute * >(), DeclarationNode::FuncSpec( DeclarationNode::InlineSpec ) ) );
+					newDecl->get_assertions().push_back( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, genDefaultType( inst ), nullptr,
+																		   std::list< Attribute * >(), DeclarationNode::FuncSpec( DeclarationNode::InlineSpec ) ) );
+					newDecl->get_assertions().push_back( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, genCopyType( inst ), nullptr,
+																		   std::list< Attribute * >(), DeclarationNode::FuncSpec( DeclarationNode::InlineSpec ) ) );
+					newDecl->get_assertions().push_back( new FunctionDecl( "^?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, genDefaultType( inst ), nullptr,
+																		   std::list< Attribute * >(), DeclarationNode::FuncSpec( DeclarationNode::InlineSpec ) ) );
 					typeParams.push_back( newDecl );
 					done.insert( ty->get_baseType() );
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/SymTab/Validate.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:50:04 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  2 17:47:54 2017
-// Update Count     : 312
+// Last Modified On : Fri Mar  3 21:02:23 2017
+// Update Count     : 332
 //
 
@@ -629,5 +629,5 @@
 		} else {
 			TypeDeclMap::const_iterator base = typedeclNames.find( typeInst->get_name() );
-			assertf( base != typedeclNames.end(), "Can't find name %s", typeInst->get_name().c_str() );
+			assertf( base != typedeclNames.end(), "Can't find typedecl name %s", typeInst->get_name().c_str() );
 			typeInst->set_baseType( base->second );
 		} // if
@@ -691,14 +691,12 @@
 		DeclarationWithType *ret = Mutator::mutate( objDecl );
 		typedefNames.endScope();
-		// is the type a function?
-		if ( FunctionType *funtype = dynamic_cast<FunctionType *>( ret->get_type() ) ) {
+
+		if ( FunctionType *funtype = dynamic_cast<FunctionType *>( ret->get_type() ) ) { // function type?
 			// replace the current object declaration with a function declaration
-			FunctionDecl * newDecl = new FunctionDecl( ret->get_name(), ret->get_storageClass(), ret->get_linkage(), funtype, 0, ret->get_isInline(), ret->get_isNoreturn(), objDecl->get_attributes() );
+			FunctionDecl * newDecl = new FunctionDecl( ret->get_name(), ret->get_storageClass(), ret->get_linkage(), funtype, 0, objDecl->get_attributes(), ret->get_funcSpec() );
 			objDecl->get_attributes().clear();
 			objDecl->set_type( nullptr );
 			delete objDecl;
 			return newDecl;
-		} else if ( objDecl->get_isInline() || objDecl->get_isNoreturn() ) {
-			throw SemanticError( "invalid inline or _Noreturn specification in declaration of ", objDecl );
 		} // if
 		return ret;
@@ -732,5 +730,5 @@
 	}
 
-	// there may be typedefs nested within aggregates in order for everything to work properly, these should be removed
+	// there may be typedefs nested within aggregates. in order for everything to work properly, these should be removed
 	// as well
 	template<typename AggDecl>
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/SynTree/Declaration.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  9 14:28:05 2017
-// Update Count     : 16
+// Last Modified On : Wed Mar  1 20:11:57 2017
+// Update Count     : 17
 //
 
@@ -28,9 +28,9 @@
 
 Declaration::Declaration( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage )
-		: name( name ), storageClass( sc ), linkage( linkage ), isInline( false ), isNoreturn( false ), uniqueId( 0 ) {
+		: name( name ), storageClass( sc ), linkage( linkage ), uniqueId( 0 ) {
 }
 
 Declaration::Declaration( const Declaration &other )
-	: name( other.name ), storageClass( other.storageClass ), linkage( other.linkage ), isInline( other.isInline ), isNoreturn( other.isNoreturn ), uniqueId( other.uniqueId ) {
+	: name( other.name ), storageClass( other.storageClass ), linkage( other.linkage ), uniqueId( other.uniqueId ) {
 }
 
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/SynTree/Declaration.h	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 16 14:53:35 2017
-// Update Count     : 57
+// Last Modified On : Fri Mar  3 20:59:27 2017
+// Update Count     : 96
 //
 
@@ -38,8 +38,4 @@
 	LinkageSpec::Spec get_linkage() const { return linkage; }
 	void set_linkage( LinkageSpec::Spec newValue ) { linkage = newValue; }
-	bool get_isInline() const { return isInline; }
-	void set_isInline( bool newValue ) { isInline = newValue; }
-	bool get_isNoreturn() const { return isNoreturn; }
-	void set_isNoreturn( bool newValue ) { isNoreturn = newValue; }
 	UniqueId get_uniqueId() const { return uniqueId; }
 	bool get_extension() const { return extension; }
@@ -59,5 +55,4 @@
 	DeclarationNode::StorageClass storageClass;
 	LinkageSpec::Spec linkage;
-	bool isInline, isNoreturn;
 	UniqueId uniqueId;
 	bool extension = false;
@@ -66,5 +61,5 @@
 class DeclarationWithType : public Declaration {
   public:
-	DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes );
+	DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, DeclarationNode::FuncSpec fs = DeclarationNode::FuncSpec() );
 	DeclarationWithType( const DeclarationWithType &other );
 	virtual ~DeclarationWithType();
@@ -83,4 +78,7 @@
 	std::list< Attribute * >& get_attributes() { return attributes; }
 	const std::list< Attribute * >& get_attributes() const { return attributes; }
+
+	DeclarationNode::FuncSpec get_funcSpec() const { return fs; }
+	void set_functionSpecifiers( DeclarationNode::FuncSpec newValue ) { fs = newValue; }
 
 	virtual DeclarationWithType *clone() const = 0;
@@ -97,4 +95,5 @@
 	ConstantExpr *asmName;
 	std::list< Attribute * > attributes;
+	DeclarationNode::FuncSpec fs;
 };
 
@@ -102,5 +101,6 @@
 	typedef DeclarationWithType Parent;
   public:
-	ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes = std::list< Attribute * >(), bool isInline = false, bool isNoreturn = false );
+	ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init,
+				const std::list< Attribute * > attributes = std::list< Attribute * >(), DeclarationNode::FuncSpec fs = DeclarationNode::FuncSpec() );
 	ObjectDecl( const ObjectDecl &other );
 	virtual ~ObjectDecl();
@@ -129,5 +129,6 @@
 	typedef DeclarationWithType Parent;
   public:
-	FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, const std::list< Attribute * > attributes = std::list< Attribute * >() );
+	FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements,
+				  const std::list< Attribute * > attributes = std::list< Attribute * >(), DeclarationNode::FuncSpec fs = DeclarationNode::FuncSpec() );
 	FunctionDecl( const FunctionDecl &other );
 	virtual ~FunctionDecl();
Index: src/SynTree/DeclarationWithType.cc
===================================================================
--- src/SynTree/DeclarationWithType.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/SynTree/DeclarationWithType.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Dec 13 14:49:43 2016
-// Update Count     : 7
+// Last Modified On : Fri Mar  3 20:59:28 2017
+// Update Count     : 19
 //
 
@@ -19,10 +19,10 @@
 #include "Common/utility.h"
 
-DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes )
-	: Declaration( name, sc, linkage ), asmName( nullptr ), attributes( attributes ) {
+DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, DeclarationNode::FuncSpec fs )
+	: Declaration( name, sc, linkage ), asmName( nullptr ), attributes( attributes ), fs( fs ) {
 }
 
 DeclarationWithType::DeclarationWithType( const DeclarationWithType &other )
-		: Declaration( other ), mangleName( other.mangleName ), scopeLevel( other.scopeLevel ) {
+	: Declaration( other ), mangleName( other.mangleName ), scopeLevel( other.scopeLevel ), fs( other.fs ) {
 	cloneAll( other.attributes, attributes );
 	asmName = maybeClone( other.asmName );
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/SynTree/FunctionDecl.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 16 15:01:52 2017
-// Update Count     : 23
+// Last Modified On : Fri Mar  3 21:29:41 2017
+// Update Count     : 55
 //
 
@@ -26,10 +26,9 @@
 extern bool translation_unit_nomain;
 
-FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, std::list< Attribute * > attributes )
-		: Parent( name, sc, linkage, attributes ), type( type ), statements( statements ) {
-	set_isInline( isInline );
-	set_isNoreturn( isNoreturn );
-	// this is a brazen hack to force the function "main" to have Cforall linkage
-	// because we want to replace the main even if it is inside an extern
+FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, std::list< Attribute * > attributes, DeclarationNode::FuncSpec fs )
+		: Parent( name, sc, linkage, attributes, fs ), type( type ), statements( statements ) {
+	set_functionSpecifiers( fs );
+
+	// hack forcing the function "main" to have Cforall linkage to replace main even if it is inside an extern
 	if ( name == "main" ) {
 		set_linkage( CodeGen::FixMain::mainLinkage() );
@@ -65,16 +64,12 @@
 		os << LinkageSpec::linkageName( get_linkage() ) << " ";
 	} // if
-	if ( get_isInline() ) {
-		os << "inline ";
-	} // if
-	if ( get_isNoreturn() ) {
-		os << "_Noreturn ";
-	} // if
 
 	printAll( get_attributes(), os, indent );
 
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
+		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
 	} // if
+	DeclarationNode::print_FuncSpec( os, get_funcSpec() );
+
 	if ( get_type() ) {
 		get_type()->print( os, indent );
@@ -97,16 +92,12 @@
 		os << get_name() << ": ";
 	} // if
-	if ( get_isInline() ) {
-		os << "inline ";
-	} // if
-	if ( get_isNoreturn() ) {
-		os << "_Noreturn ";
-	} // if
 
 	// xxx - should printShort print attributes?
 
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
+		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
 	} // if
+	DeclarationNode::print_FuncSpec( os, get_funcSpec() );
+
 	if ( get_type() ) {
 		get_type()->print( os, indent );
Index: src/SynTree/NamedTypeDecl.cc
===================================================================
--- src/SynTree/NamedTypeDecl.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/SynTree/NamedTypeDecl.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 13 08:13:55 2015
-// Update Count     : 3
+// Last Modified On : Tue Feb 28 16:13:24 2017
+// Update Count     : 4
 //
 
@@ -40,5 +40,5 @@
 	} // if
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
+		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
 	} // if
 	os << typeString();
@@ -64,5 +64,5 @@
 	} // if
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
+		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
 	} // if
 	os << typeString();
Index: src/SynTree/ObjectDecl.cc
===================================================================
--- src/SynTree/ObjectDecl.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/SynTree/ObjectDecl.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Oct  1 23:05:56 2016
-// Update Count     : 32
+// Last Modified On : Fri Mar  3 20:59:27 2017
+// Update Count     : 45
 //
 
@@ -22,8 +22,7 @@
 #include "Statement.h"
 
-ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec 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 );
+ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, DeclarationNode::FuncSpec fs )
+	: Parent( name, sc, linkage, attributes, fs ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {
+	set_functionSpecifiers( fs );
 }
 
@@ -50,5 +49,5 @@
 
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
+		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
 	} // if
 
@@ -86,5 +85,5 @@
 
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
+		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
 	} // if
 
Index: src/SynTree/ReferenceToType.cc
===================================================================
--- src/SynTree/ReferenceToType.cc	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/SynTree/ReferenceToType.cc	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  2 17:45:07 2017
-// Update Count     : 23
+// Last Modified On : Thu Feb 23 16:38:54 2017
+// Update Count     : 24
 //
 
@@ -23,8 +23,8 @@
 #include "Common/utility.h"
 
-ReferenceToType::ReferenceToType( const Type::Qualifiers &tq, const std::string &name, const std::list< Attribute * > & attributes ) : Type( tq, attributes ), name( name ) {
+ReferenceToType::ReferenceToType( const Type::Qualifiers &tq, const std::string &name, const std::list< Attribute * > & attributes ) : Type( tq, attributes ), name( name ), hoistType( false ) {
 }
 
-ReferenceToType::ReferenceToType( const ReferenceToType &other ) : Type( other ), name( other.name ) {
+ReferenceToType::ReferenceToType( const ReferenceToType &other ) : Type( other ), name( other.name ), hoistType( other.hoistType ) {
 	cloneAll( other.parameters, parameters );
 }
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/SynTree/Type.h	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  2 17:43:01 2017
-// Update Count     : 33
+// Last Modified On : Wed Mar  1 09:11:45 2017
+// Update Count     : 41
 //
 
@@ -21,5 +21,4 @@
 #include "SynTree.h"
 #include "Visitor.h"
-#include "Common/utility.h"
 
 class Type : public BaseSyntaxNode {
@@ -213,5 +212,4 @@
 	bool get_isVarArgs() const { return isVarArgs; }
 	void set_isVarArgs( bool newValue ) { isVarArgs = newValue; }
-
 	bool isTtype() const;
 
@@ -240,4 +238,6 @@
 	void set_name( std::string newValue ) { name = newValue; }
 	std::list< Expression* >& get_parameters() { return parameters; }
+	bool get_hoistType() const { return hoistType; }
+	void set_hoistType( bool newValue ) { hoistType = newValue; }
 
 	virtual ReferenceToType *clone() const = 0;
@@ -250,4 +250,5 @@
 	std::string name;
   private:
+	bool hoistType;
 };
 
Index: src/examples/multicore.c
===================================================================
--- src/examples/multicore.c	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/examples/multicore.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -19,8 +19,5 @@
 		processor p;
 		{
-			scoped(MyThread) f1;
-			scoped(MyThread) f2;
-			scoped(MyThread) f3;
-			scoped(MyThread) f4;
+			scoped(MyThread) f[4];
 		}
 	}
Index: src/libcfa/Makefile.am
===================================================================
--- src/libcfa/Makefile.am	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/libcfa/Makefile.am	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -44,5 +44,5 @@
 # not all platforms support concurrency, add option do disable it
 if BUILD_CONCURRENCY
-headers += containers/vector concurrency/coroutines concurrency/threads concurrency/kernel
+headers += containers/vector concurrency/coroutines concurrency/threads concurrency/kernel concurrency/monitor
 endif
 
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/libcfa/Makefile.in	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -43,5 +43,5 @@
 
 # not all platforms support concurrency, add option do disable it
-@BUILD_CONCURRENCY_TRUE@am__append_3 = containers/vector concurrency/coroutines concurrency/threads concurrency/kernel
+@BUILD_CONCURRENCY_TRUE@am__append_3 = containers/vector concurrency/coroutines concurrency/threads concurrency/kernel concurrency/monitor
 
 # not all platforms support concurrency, add option do disable it
@@ -101,10 +101,12 @@
 	containers/vector.c concurrency/coroutines.c \
 	concurrency/threads.c concurrency/kernel.c \
-	concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/invoke.c
+	concurrency/monitor.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \
+	concurrency/invoke.c
 am__dirstamp = $(am__leading_dot)dirstamp
 @BUILD_CONCURRENCY_TRUE@am__objects_1 = containers/libcfa_d_a-vector.$(OBJEXT) \
 @BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_d_a-coroutines.$(OBJEXT) \
 @BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_d_a-threads.$(OBJEXT) \
-@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_d_a-kernel.$(OBJEXT)
+@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_d_a-kernel.$(OBJEXT) \
+@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_d_a-monitor.$(OBJEXT)
 am__objects_2 = libcfa_d_a-limits.$(OBJEXT) \
 	libcfa_d_a-stdlib.$(OBJEXT) libcfa_d_a-math.$(OBJEXT) \
@@ -124,10 +126,12 @@
 	containers/vector.c concurrency/coroutines.c \
 	concurrency/threads.c concurrency/kernel.c \
-	concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/invoke.c
+	concurrency/monitor.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \
+	concurrency/invoke.c
 @BUILD_CONCURRENCY_TRUE@am__objects_5 =  \
 @BUILD_CONCURRENCY_TRUE@	containers/libcfa_a-vector.$(OBJEXT) \
 @BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_a-coroutines.$(OBJEXT) \
 @BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_a-threads.$(OBJEXT) \
-@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_a-kernel.$(OBJEXT)
+@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_a-kernel.$(OBJEXT) \
+@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_a-monitor.$(OBJEXT)
 am__objects_6 = libcfa_a-limits.$(OBJEXT) libcfa_a-stdlib.$(OBJEXT) \
 	libcfa_a-math.$(OBJEXT) libcfa_a-iostream.$(OBJEXT) \
@@ -172,5 +176,6 @@
 	fstream iterator rational assert containers/vector \
 	concurrency/coroutines concurrency/threads concurrency/kernel \
-	${shell echo stdhdr/*} concurrency/invoke.h
+	concurrency/monitor ${shell echo stdhdr/*} \
+	concurrency/invoke.h
 HEADERS = $(nobase_cfa_include_HEADERS)
 ETAGS = etags
@@ -398,4 +403,6 @@
 concurrency/libcfa_d_a-kernel.$(OBJEXT): concurrency/$(am__dirstamp) \
 	concurrency/$(DEPDIR)/$(am__dirstamp)
+concurrency/libcfa_d_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \
+	concurrency/$(DEPDIR)/$(am__dirstamp)
 concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT):  \
 	concurrency/$(am__dirstamp) \
@@ -416,4 +423,6 @@
 concurrency/libcfa_a-kernel.$(OBJEXT): concurrency/$(am__dirstamp) \
 	concurrency/$(DEPDIR)/$(am__dirstamp)
+concurrency/libcfa_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \
+	concurrency/$(DEPDIR)/$(am__dirstamp)
 concurrency/libcfa_a-invoke.$(OBJEXT): concurrency/$(am__dirstamp) \
 	concurrency/$(DEPDIR)/$(am__dirstamp)
@@ -429,8 +438,10 @@
 	-rm -f concurrency/libcfa_a-invoke.$(OBJEXT)
 	-rm -f concurrency/libcfa_a-kernel.$(OBJEXT)
+	-rm -f concurrency/libcfa_a-monitor.$(OBJEXT)
 	-rm -f concurrency/libcfa_a-threads.$(OBJEXT)
 	-rm -f concurrency/libcfa_d_a-coroutines.$(OBJEXT)
 	-rm -f concurrency/libcfa_d_a-invoke.$(OBJEXT)
 	-rm -f concurrency/libcfa_d_a-kernel.$(OBJEXT)
+	-rm -f concurrency/libcfa_d_a-monitor.$(OBJEXT)
 	-rm -f concurrency/libcfa_d_a-threads.$(OBJEXT)
 	-rm -f containers/libcfa_a-vector.$(OBJEXT)
@@ -462,8 +473,10 @@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-invoke.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-kernel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-monitor.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-threads.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-coroutines.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-invoke.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-kernel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-threads.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_a-vector.Po@am__quote@
@@ -677,4 +690,18 @@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-kernel.obj `if test -f 'concurrency/kernel.c'; then $(CYGPATH_W) 'concurrency/kernel.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/kernel.c'; fi`
 
+concurrency/libcfa_d_a-monitor.o: concurrency/monitor.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-monitor.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-monitor.Tpo -c -o concurrency/libcfa_d_a-monitor.o `test -f 'concurrency/monitor.c' || echo '$(srcdir)/'`concurrency/monitor.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-monitor.Tpo concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/monitor.c' object='concurrency/libcfa_d_a-monitor.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-monitor.o `test -f 'concurrency/monitor.c' || echo '$(srcdir)/'`concurrency/monitor.c
+
+concurrency/libcfa_d_a-monitor.obj: concurrency/monitor.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-monitor.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-monitor.Tpo -c -o concurrency/libcfa_d_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-monitor.Tpo concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/monitor.c' object='concurrency/libcfa_d_a-monitor.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`
+
 concurrency/libcfa_d_a-invoke.obj: concurrency/invoke.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-invoke.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-invoke.Tpo -c -o concurrency/libcfa_d_a-invoke.obj `if test -f 'concurrency/invoke.c'; then $(CYGPATH_W) 'concurrency/invoke.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/invoke.c'; fi`
@@ -858,4 +885,18 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-kernel.obj `if test -f 'concurrency/kernel.c'; then $(CYGPATH_W) 'concurrency/kernel.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/kernel.c'; fi`
+
+concurrency/libcfa_a-monitor.o: concurrency/monitor.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-monitor.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-monitor.Tpo -c -o concurrency/libcfa_a-monitor.o `test -f 'concurrency/monitor.c' || echo '$(srcdir)/'`concurrency/monitor.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-monitor.Tpo concurrency/$(DEPDIR)/libcfa_a-monitor.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/monitor.c' object='concurrency/libcfa_a-monitor.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-monitor.o `test -f 'concurrency/monitor.c' || echo '$(srcdir)/'`concurrency/monitor.c
+
+concurrency/libcfa_a-monitor.obj: concurrency/monitor.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-monitor.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-monitor.Tpo -c -o concurrency/libcfa_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-monitor.Tpo concurrency/$(DEPDIR)/libcfa_a-monitor.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/monitor.c' object='concurrency/libcfa_a-monitor.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`
 
 concurrency/libcfa_a-invoke.obj: concurrency/invoke.c
Index: src/libcfa/concurrency/invoke.h
===================================================================
--- src/libcfa/concurrency/invoke.h	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/libcfa/concurrency/invoke.h	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -60,10 +60,10 @@
 
       struct coStack_t {
-            unsigned int size;		// size of stack
-            void *storage;			// pointer to stack
-            void *limit;			// stack grows towards stack limit
-            void *base;				// base of stack
-            void *context;			// address of cfa_context_t
-            void *top;				// address of top of storage
+            unsigned int size;		      // size of stack
+            void *storage;			      // pointer to stack
+            void *limit;			      // stack grows towards stack limit
+            void *base;				      // base of stack
+            void *context;			      // address of cfa_context_t
+            void *top;				      // address of top of storage
             bool userStack;	
       };
@@ -73,15 +73,15 @@
       struct coroutine {
             struct coStack_t stack;
-            const char *name;			// textual name for coroutine/task, initialized by uC++ generated code
-            int errno_;				// copy of global UNIX variable errno
-            enum coroutine_state state;	// current execution status for coroutine
-            struct coroutine *starter;	// first coroutine to resume this one
-            struct coroutine *last;		// last coroutine to resume this one
+            const char *name;			      // textual name for coroutine/task, initialized by uC++ generated code
+            int errno_;				      // copy of global UNIX variable errno
+            enum coroutine_state state;	      // current execution status for coroutine
+            struct coroutine *starter;	      // first coroutine to resume this one
+            struct coroutine *last;		      // last coroutine to resume this one
       };
 
       struct thread {
-            struct coroutine c;           // coroutine body used to store context
-            struct signal_once terminated;// indicate if execuation state is not halted
-            struct thread * next;         // instrusive link field for threads
+            struct coroutine c;                 // coroutine body used to store context
+            struct signal_once terminated;      // indicate if execuation state is not halted
+            struct thread * next;               // instrusive link field for threads
       };
 
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/libcfa/concurrency/kernel.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -456,5 +456,5 @@
 
 void append( simple_thread_list * this, thread * t ) {
-	assert( t->next == NULL );
+	assert(this->tail != NULL);
 	*this->tail = t;
 	this->tail = &t->next;
@@ -470,5 +470,4 @@
 		head->next = NULL;
 	}	
-	
 	return head;
 }
Index: src/libcfa/concurrency/monitor
===================================================================
--- src/libcfa/concurrency/monitor	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ src/libcfa/concurrency/monitor	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,71 @@
+//                              -*- Mode: CFA -*-
+//
+// 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.
+//
+// monitor --
+//
+// Author           : Thierry Delisle
+// Created On       : Thd Feb 23 12:27:26 2017
+// Last Modified By : Thierry Delisle
+// Last Modified On : --
+// Update Count     : 0
+//
+
+#ifndef MONITOR_H
+#define MONITOR_H
+
+#include "assert"
+#include "invoke.h"
+#include "stdlib"
+
+struct __monitor_t {
+	spinlock lock;
+	thread * owner;
+	simple_thread_list entry_queue;
+	unsigned int recursion;
+};
+
+static inline void ?{}(__monitor_t * this) {
+	this->owner = 0;
+	this->recursion = 0;
+}
+
+//Basic entering routine
+void enter(__monitor_t *);
+void leave(__monitor_t *);
+
+//Array entering routine
+void enter(__monitor_t **, int count);
+void leave(__monitor_t **, int count);
+
+struct monitor_guard_t {
+	__monitor_t ** m;
+	int count;
+};
+
+static inline int ?<?(__monitor_t* lhs, __monitor_t* rhs) {
+	return ((intptr_t)lhs) < ((intptr_t)rhs);
+}
+
+static inline void ?{}( monitor_guard_t * this, __monitor_t ** m ) {
+	this->m = m;
+	this->count = 1;
+	enter( *this->m );
+}
+
+static inline void ?{}( monitor_guard_t * this, __monitor_t ** m, int count ) {
+	this->m = m;
+	this->count = count;
+	qsort(this->m, count);
+	enter( this->m, this->count );
+}
+
+static inline void ^?{}( monitor_guard_t * this ) {
+	leave( this->m, this->count );
+}
+
+
+#endif //MONITOR_H
Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ src/libcfa/concurrency/monitor.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,86 @@
+//                              -*- Mode: CFA -*-
+//
+// 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.
+//
+// __monitor_t.c --
+//
+// Author           : Thierry Delisle
+// Created On       : Thd Feb 23 12:27:26 2017
+// Last Modified By : Thierry Delisle
+// Last Modified On : --
+// Update Count     : 0
+//
+
+#include "monitor"
+
+#include "kernel_private.h"
+
+void enter(__monitor_t * this) {
+	lock( &this->lock );
+	thread * thrd = this_thread();
+
+	if( !this->owner ) {
+		//No one has the monitor, just take it
+		this->owner = thrd;
+		this->recursion = 1;
+	}
+	else if( this->owner == thrd) {
+		//We already have the monitor, just not how many times we took it
+		assert( this->recursion > 0 );
+		this->recursion += 1;
+	}
+	else {
+		//Some one else has the monitor, wait in line for it
+		append( &this->entry_queue, thrd );
+		ScheduleInternal( &this->lock );
+
+		//ScheduleInternal will unlock spinlock, no need to unlock ourselves
+		return; 
+	}
+
+	unlock( &this->lock );
+}
+
+void leave(__monitor_t * this) {
+	lock( &this->lock );
+
+	thread * thrd = this_thread();
+	assert( thrd == this->owner );
+
+	//Leaving a recursion level, decrement the counter
+	this->recursion -= 1;
+
+	//If we left the last level of recursion it means we are changing who owns the monitor
+	thread * new_owner = 0;
+	if( this->recursion == 0) {
+		//Get the next thread in the list
+		new_owner = this->owner = pop_head( &this->entry_queue );
+
+		//We are passing the monitor to someone else, which means recursion level is not 0
+		this->recursion = new_owner ? 1 : 0;
+	}	
+
+	unlock( &this->lock );
+
+	//If we have a new owner, we need to wake-up the thread
+	if( new_owner ) {
+		ScheduleThread( new_owner );
+	}
+}
+
+void enter(__monitor_t ** monitors, int count) {
+	for(int i = 0; i < count; i++) {
+		// printf("%d\n", i);
+		enter( monitors[i] );
+	}
+}
+
+void leave(__monitor_t ** monitors, int count) {
+	for(int i = count - 1; i >= 0; i--) {
+		// printf("%d\n", i);
+		leave( monitors[i] );
+	}
+}
Index: src/libcfa/concurrency/threads
===================================================================
--- src/libcfa/concurrency/threads	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/libcfa/concurrency/threads	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -9,5 +9,5 @@
 //
 // Author           : Thierry Delisle
-// Created On       : Tue Jan 17 12:27:26 2016
+// Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Thierry Delisle
 // Last Modified On : --
Index: src/libcfa/concurrency/threads.c
===================================================================
--- src/libcfa/concurrency/threads.c	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/libcfa/concurrency/threads.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -9,5 +9,5 @@
 //
 // Author           : Thierry Delisle
-// Created On       : Tue Jan 17 12:27:26 2016
+// Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Thierry Delisle
 // Last Modified On : --
Index: src/libcfa/iostream
===================================================================
--- src/libcfa/iostream	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/libcfa/iostream	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 23 22:27:53 2017
-// Update Count     : 94
+// Last Modified On : Sat Mar  4 22:04:33 2017
+// Update Count     : 95
 //
 
Index: src/libcfa/iostream.c
===================================================================
--- src/libcfa/iostream.c	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/libcfa/iostream.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 23 22:49:37 2017
-// Update Count     : 309
+// Last Modified On : Sat Mar  4 22:04:16 2017
+// Update Count     : 308
 //
 
Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/libcfa/stdlib	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 23 23:27:04 2017
-// Update Count     : 101
+// Last Modified On : Sat Mar  4 22:03:54 2017
+// Update Count     : 102
 //
 
@@ -50,5 +50,5 @@
 forall( dtype T, ttype Params | sized(T) | { void ?{}(T *, Params); } ) T * new( Params p );
 forall( dtype T | { void ^?{}(T *); } ) void delete( T * ptr );
-
+forall( dtype T, ttype Params | { void ^?{}(T *); void delete(Params); } ) void delete( T * ptr, Params rest );
 
 //---------------------------------------
Index: src/libcfa/stdlib.c
===================================================================
--- src/libcfa/stdlib.c	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/libcfa/stdlib.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 23 23:27:02 2017
-// Update Count     : 171
+// Last Modified On : Sat Mar  4 22:02:22 2017
+// Update Count     : 172
 //
 
@@ -91,4 +91,13 @@
 }
 
+forall( dtype T, ttype Params | { void ^?{}(T *); void delete(Params); } )
+void delete( T * ptr, Params rest ) {
+	if ( ptr ) {
+		^ptr{};
+		free( ptr );
+	}
+	delete( rest );
+}
+
 //---------------------------------------
 
Index: src/prelude/prelude.cf
===================================================================
--- src/prelude/prelude.cf	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/prelude/prelude.cf	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -131,4 +131,7 @@
 		!?( float _Complex ),		!?( double _Complex ),		!?( long double _Complex );
 
+forall ( dtype DT ) int !?(                DT * );
+forall ( dtype DT ) int !?( const          DT * );
+forall ( dtype DT ) int !?(       volatile DT * );
 forall ( dtype DT ) int !?( const volatile DT * );
 forall ( ftype FT ) int !?( FT * );
@@ -235,7 +238,22 @@
 	   ?>?( long double, long double ),				?>=?( long double, long double );
 
+forall( dtype DT ) signed int ?<?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?<?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?<?(        volatile DT *,       volatile DT * );
 forall( dtype DT ) signed int ?<?(  const volatile DT *, const volatile DT * );
+
+forall( dtype DT ) signed int ?>?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?>?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?>?(        volatile DT *,       volatile DT * );
 forall( dtype DT ) signed int ?>?(  const volatile DT *, const volatile DT * );
+
+forall( dtype DT ) signed int ?<=?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?<=?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?<=?(        volatile DT *,       volatile DT * );
 forall( dtype DT ) signed int ?<=?( const volatile DT *, const volatile DT * );
+
+forall( dtype DT ) signed int ?>=?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?>=?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?>=?(        volatile DT *,       volatile DT * );
 forall( dtype DT ) signed int ?>=?( const volatile DT *, const volatile DT * );
 
Index: src/tests/.expect/concurrent/coroutine.txt
===================================================================
--- src/tests/.expect/concurrent/coroutine.txt	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ src/tests/.expect/concurrent/coroutine.txt	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,10 @@
+0 0
+1 1
+1 1
+2 2
+3 3
+5 5
+8 8
+13 13
+21 21
+34 34
Index: src/tests/.expect/concurrent/monitor.txt
===================================================================
--- src/tests/.expect/concurrent/monitor.txt	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ src/tests/.expect/concurrent/monitor.txt	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,1 @@
+4000000
Index: src/tests/.expect/concurrent/multi-monitor.txt
===================================================================
--- src/tests/.expect/concurrent/multi-monitor.txt	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ src/tests/.expect/concurrent/multi-monitor.txt	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,1 @@
+2000000 2000000 2000000
Index: src/tests/.expect/concurrent/thread.txt
===================================================================
--- src/tests/.expect/concurrent/thread.txt	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ src/tests/.expect/concurrent/thread.txt	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,22 @@
+User main begin
+First : Suspend No. 1
+First : Suspend No. 2
+First : Suspend No. 3
+First : Suspend No. 4
+First : Suspend No. 5
+First : Suspend No. 6
+First : Suspend No. 7
+First : Suspend No. 8
+First : Suspend No. 9
+First : Suspend No. 10
+Second : Suspend No. 1
+Second : Suspend No. 2
+Second : Suspend No. 3
+Second : Suspend No. 4
+Second : Suspend No. 5
+Second : Suspend No. 6
+Second : Suspend No. 7
+Second : Suspend No. 8
+Second : Suspend No. 9
+Second : Suspend No. 10
+User main end
Index: c/tests/.expect/coroutine.txt
===================================================================
--- src/tests/.expect/coroutine.txt	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ 	(revision )
@@ -1,10 +1,0 @@
-0 0
-1 1
-1 1
-2 2
-3 3
-5 5
-8 8
-13 13
-21 21
-34 34
Index: src/tests/.expect/globals.txt
===================================================================
--- src/tests/.expect/globals.txt	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ src/tests/.expect/globals.txt	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,9 @@
+static		inline		autogen		value
+no 		no 		no 		22
+no 		no 		yes		22
+no 		yes		no 		22
+no 		yes		yes		22
+yes		no 		no 		22
+yes		no 		yes		22
+yes		yes		no 		22
+yes		yes		yes		22
Index: c/tests/.expect/thread.txt
===================================================================
--- src/tests/.expect/thread.txt	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ 	(revision )
@@ -1,22 +1,0 @@
-User main begin
-First : Suspend No. 1
-First : Suspend No. 2
-First : Suspend No. 3
-First : Suspend No. 4
-First : Suspend No. 5
-First : Suspend No. 6
-First : Suspend No. 7
-First : Suspend No. 8
-First : Suspend No. 9
-First : Suspend No. 10
-Second : Suspend No. 1
-Second : Suspend No. 2
-Second : Suspend No. 3
-Second : Suspend No. 4
-Second : Suspend No. 5
-Second : Suspend No. 6
-Second : Suspend No. 7
-Second : Suspend No. 8
-Second : Suspend No. 9
-Second : Suspend No. 10
-User main end
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/tests/Makefile.am	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -17,4 +17,14 @@
 debug=yes
 
+quick_test=vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once
+
+if BUILD_CONCURRENCY
+concurrent=yes
+quick_test+= coroutine thread monitor
+else
+concurrent=no
+endif
+
+
 # applies to both programs
 EXTRA_FLAGS =
@@ -30,8 +40,8 @@
 
 all-local :
-	@+python test.py vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once coroutine thread
+	@+python test.py --debug=${debug} --concurrent=${concurrent} ${quick_test}
 
 all-tests :
-	@+python test.py --all --debug=${debug}		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
+	@+python test.py --all --debug=${debug} --concurrent=${concurrent}		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
 
 clean-local :
@@ -39,5 +49,5 @@
 
 list :
-	@+python test.py --list
+	@+python test.py --list --concurrent=${concurrent}
 
 constant0-1DP : constant0-1.c
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/tests/Makefile.in	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -37,4 +37,5 @@
 build_triplet = @build@
 host_triplet = @host@
+@BUILD_CONCURRENCY_TRUE@am__append_1 = coroutine thread monitor
 EXTRA_PROGRAMS = fstream_test$(EXEEXT) vector_test$(EXEEXT) \
 	avl_test$(EXEEXT) constant0-1DP$(EXEEXT) \
@@ -222,4 +223,9 @@
 top_srcdir = @top_srcdir@
 debug = yes
+quick_test = vector_test avl_test operators numericConstants \
+	expression enum array typeof cast dtor-early-exit init_once \
+	$(am__append_1)
+@BUILD_CONCURRENCY_FALSE@concurrent = no
+@BUILD_CONCURRENCY_TRUE@concurrent = yes
 
 # applies to both programs
@@ -651,8 +657,8 @@
 
 all-local :
-	@+python test.py vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once coroutine thread
+	@+python test.py --debug=${debug} --concurrent=${concurrent} ${quick_test}
 
 all-tests :
-	@+python test.py --all --debug=${debug}		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
+	@+python test.py --all --debug=${debug} --concurrent=${concurrent}		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
 
 clean-local :
@@ -660,5 +666,5 @@
 
 list :
-	@+python test.py --list
+	@+python test.py --list --concurrent=${concurrent}
 
 constant0-1DP : constant0-1.c
Index: src/tests/avltree/avl_test.c
===================================================================
--- src/tests/avltree/avl_test.c	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/tests/avltree/avl_test.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -36,15 +36,16 @@
 
   // char* -> char*
-  int ?<?(char *a, char *b) {
-    return strcmp(a,b) < 0;
+  struct c_str { char *str; };  // wraps a C string
+  int ?<?(c_str a, c_str b) {
+    return strcmp(a.str,b.str) < 0;
   }
-  tree(char *, char *) * ssmap = create("queso", "cheese");
-  insert(&ssmap, "foo", "bar");
-  insert(&ssmap, "hello", "world");
+  tree(c_str, char *) * ssmap = create((c_str){"queso"}, "cheese");
+  insert(&ssmap, (c_str){"foo"}, "bar");
+  insert(&ssmap, (c_str){"hello"}, "world");
   assert( height(ssmap) == 2 );
 
-  printf("%s %s %s\n", *find(ssmap, "hello"), *find(ssmap, "foo"), *find(ssmap, "queso"));
+  printf("%s %s %s\n", *find(ssmap, (c_str){"hello"}), *find(ssmap, (c_str){"foo"}), *find(ssmap, (c_str){"queso"}));
 
-  remove(&ssmap, "foo");
+  remove(&ssmap, (c_str){"foo"});
   delete(ssmap);
 }
Index: src/tests/globals.c
===================================================================
--- src/tests/globals.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ src/tests/globals.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,83 @@
+#include <fstream>
+
+struct value_t {
+	int value;
+};
+
+void ?{}( value_t * this ) { this->value = 22; }
+
+//Standard case
+struct g_t {
+	value_t val;
+};
+
+void ?{}( g_t * this ) { (&this->val){}; }
+
+g_t g;
+
+//Autogen case
+struct ga_t {
+	value_t val;
+};
+
+ga_t ga;
+
+//Inline case
+struct gi_t;
+void ?{}( gi_t * this );
+
+struct gi_t {
+	value_t val;
+} gi;
+
+void ?{}( gi_t * this ) { (&this->val){}; }
+
+//Inline autogen case
+struct gia_t {
+	value_t val;
+} gia;
+
+//Static case
+struct gs_t {
+	value_t val;
+};
+
+void ?{}( gs_t * this ) { (&this->val){}; }
+
+static gs_t gs;
+
+//Static autogen case
+struct gsa_t {
+	value_t val;
+};
+
+static gsa_t gsa;
+
+//Static inline case
+struct gsi_t;
+void ?{}( gsi_t * this );
+
+static struct gsi_t {
+	value_t val;
+} gsi;
+
+void ?{}( gsi_t * this ) { (&this->val){}; }
+
+//Static inline autogen case
+static struct gsia_t {
+	value_t val;
+} gsia;
+
+int main() {
+	sout | "static\t\tinline\t\tautogen\t\tvalue" | endl;
+
+	sout | "no \t\tno \t\tno \t\t" | g.val.value    | endl;
+	sout | "no \t\tno \t\tyes\t\t" | ga.val.value   | endl;
+	sout | "no \t\tyes\t\tno \t\t" | gi.val.value   | endl;
+	sout | "no \t\tyes\t\tyes\t\t" | gia.val.value  | endl;
+	sout | "yes\t\tno \t\tno \t\t" | gs.val.value   | endl;
+	sout | "yes\t\tno \t\tyes\t\t" | gsa.val.value  | endl;
+	sout | "yes\t\tyes\t\tno \t\t" | gsi.val.value  | endl;
+	sout | "yes\t\tyes\t\tyes\t\t" | gsia.val.value | endl;
+
+}
Index: src/tests/monitor.c
===================================================================
--- src/tests/monitor.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ src/tests/monitor.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,48 @@
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <threads>
+
+struct global_t {
+	int value;
+	__monitor_t m;
+};
+
+void ?{}(global_t * this) {
+	this->value = 0;
+}
+
+static global_t global;
+
+void increment( /*mutex*/ global_t * this ) {
+	__monitor_t * mon = &this->m;
+	monitor_guard_t g1 = { &mon };
+	{
+		monitor_guard_t g2 = { &mon };
+		{
+			monitor_guard_t g3 = { &mon };
+			this->value += 1;
+		}
+	}
+}
+
+struct MyThread { thread t; };
+
+DECL_THREAD(MyThread);
+
+void ?{}( MyThread * this ) {}
+
+void main( MyThread* this ) {
+	for(int i = 0; i < 1000000; i++) {
+		increment( &global );
+	}
+}
+
+int main(int argc, char* argv[]) {
+	assert( global.m.entry_queue.tail != NULL );
+	processor p;
+	{
+		scoped(MyThread) f[4];
+	}
+	sout | global.value | endl;
+}
Index: src/tests/multi-monitor.c
===================================================================
--- src/tests/multi-monitor.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
+++ src/tests/multi-monitor.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -0,0 +1,50 @@
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <threads>
+
+static int global12, global23, global13;
+
+static __monitor_t m1, m2, m3;
+
+void increment( /*mutex*/ __monitor_t * p1, /*mutex*/ __monitor_t * p2, int * value ) {
+	__monitor_t * mons[] = { p1, p2 };
+	monitor_guard_t g = { mons, 2 };
+	*value += 1;
+}
+
+struct MyThread { 
+	thread t; 
+	int target;
+};
+
+DECL_THREAD(MyThread);
+
+void ?{}( MyThread * this, int target ) {
+	this->target = target;
+}
+
+void main( MyThread* this ) {
+	for(int i = 0; i < 1000000; i++) {
+		choose(this->target) {
+			case 0: increment( &m1, &m2, &global12 );
+			case 1: increment( &m2, &m3, &global23 );
+			case 2: increment( &m1, &m3, &global13 );
+		}
+	}
+}
+
+int main(int argc, char* argv[]) {
+	processor p;
+	{
+		scoped(MyThread) * f[6];
+		for(int i = 0; i < 6; i++) {
+			f[i] = ((scoped(MyThread) *)malloc()){ i % 3 };
+		}
+
+		for(int i = 0; i < 6; i++) {
+			delete( f[i] );
+		}
+	}
+	sout | global12 | global23 | global13 | endl;
+}
Index: src/tests/simpleGenericTriple.c
===================================================================
--- src/tests/simpleGenericTriple.c	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/tests/simpleGenericTriple.c	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -28,5 +28,5 @@
   int x1 = 123, x3 = 456;
   double x2 = 999.123;
-  struct T3(int) Li = { x1, x2, x3 };
+  struct T3(int) Li = { x1, (int)x2, x3 };
   struct T3(int) Ri = { 9, 2, 3 };
   struct T3(int) reti = Li+Ri;
Index: src/tests/test.py
===================================================================
--- src/tests/test.py	(revision c3ebf37c145f74649af817e1dc7738d68ae60429)
+++ src/tests/test.py	(revision d10701090461365a7719ff12c9e719dbc9a35a20)
@@ -32,22 +32,29 @@
 	return re.search("ELF\s([0-9]+)-bit", out).group(1)
 
-# reads the directory ./.expect and indentifies the tests
-def listTests():
-	machineType = getMachineType()
+def listTestsFolder(folder) :
+	path = ('./.expect/%s/' % folder) if folder else './.expect/'
+	subpath = "%s/" % folder if folder else ""
 
 	# tests directly in the .expect folder will always be processed
-	generic_list = map(lambda fname: Test(fname, fname),
-		[splitext(f)[0] for f in listdir('./.expect')
+	return map(lambda fname: Test(fname, subpath + fname),
+		[splitext(f)[0] for f in listdir( path )
 		if not f.startswith('.') and f.endswith('.txt')
 		])
 
+# reads the directory ./.expect and indentifies the tests
+def listTests( concurrent ):
+	machineType = getMachineType()
+
+	# tests directly in the .expect folder will always be processed
+	generic_list = listTestsFolder( "" )
+
 	# tests in the machineType folder will be ran only for the corresponding compiler
-	typed_list = map(lambda fname: Test( fname, "%s/%s" % (machineType, fname) ),
-		[splitext(f)[0] for f in listdir("./.expect/%s" % machineType)
-		if not f.startswith('.') and f.endswith('.txt')
-		])
+	typed_list = listTestsFolder( machineType )
+
+	# tests in the concurrent folder will be ran only if concurrency is enabled
+	concurrent_list = listTestsFolder( "concurrent" ) if concurrent else []
 
 	# append both lists to get
-	return generic_list + typed_list
+	return generic_list + typed_list + concurrent_list;
 
 # helper functions to run terminal commands
@@ -194,5 +201,5 @@
 		sys.stderr.flush()
 		return test_failed
-	
+
 	except KeyboardInterrupt:
 		test_failed = True
@@ -243,4 +250,5 @@
 parser = argparse.ArgumentParser(description='Script which runs cforall tests')
 parser.add_argument('--debug', help='Run all tests in debug or release', type=yes_no, default='no')
+parser.add_argument('--concurrent', help='Run concurrent tests', type=yes_no, default='no')
 parser.add_argument('--dry-run', help='Don\'t run the tests, only output the commands', action='store_true')
 parser.add_argument('--list', help='List all test available', action='store_true')
@@ -261,5 +269,5 @@
 
 # fetch the liest of all valid tests
-allTests = listTests()
+allTests = listTests( options.concurrent )
 
 # if user wants all tests than no other treatement of the test list is required
